[14:26] <niemeyer> Good morning!
[15:45] <niemeyer> bcsaller: ping
[16:42] <SpamapS> goooood morning ensemblers!
[16:42]  * SpamapS finally has some time to update principia to trunk
[16:51] <jimbaker> SpamapS, good morning. good to hear about your time for prinicipia!
[16:54] <SpamapS> hmm.. is trunk broken right now?
[16:54] <SpamapS> 2011-04-18 15:53:19,044 Machine:3: ensemble.agents.machine ERROR: Error starting unit: wiki-cache/0
[16:54] <SpamapS>   File "/usr/lib/ensemble/ensemble/ensemble/state/service.py", line 487, in get_formula_id
[16:54] <SpamapS>     returnValue(data["formula"])
[16:54] <SpamapS> TypeError: 'NoneType' object is unsubscriptable
[16:55] <SpamapS> http://paste.ubuntu.com/595562/
[16:55] <SpamapS> full traceback
[16:58] <SpamapS> hmmmmmmm
[16:58] <SpamapS> since ensemble doesn't use a .deb to install itself, it really shouldn't be putting its agent in /usr/lib
[17:00] <niemeyer> SpamapS: Glad to hear you're back!
[17:02]  * SpamapS smacks forehead.. PYTHONPATH not PYTHON_PATH
[17:02] <SpamapS> please ignore backtrace
[17:03] <niemeyer> SpamapS: Aha, ok.. i was just pondering about what could be wrong there
[17:03] <niemeyer> SpamapS: I've done something worse before, setting PYTHONPATH to the wrong branch
[17:03] <niemeyer> SpamapS: Too me ages to figure why it was behaving like crazy
[17:03] <niemeyer> Took
[17:04] <SpamapS> niemeyer: I've done this like 3 times with 3 different python projects.. not sure why it always seems to happen
[17:04] <SpamapS> is it because they don't add '.' to the path automatically where others do?
[17:07] <niemeyer> SpamapS: Yeah, some also put the binary into "."
[17:07] <niemeyer> SpamapS: We should do the magic within the tools
[17:13] <_mup_> ensemble/status-workflow-client r209 committed by jim.baker@canonical.com
[17:13] <_mup_> More fixed tests for test_status
[17:23] <bcsaller> gustavo: sorry, missed that
[17:23] <niemeyer> bcsaller: No worries
[17:34] <SpamapS> still no --force on deploy?
[17:42] <SpamapS> so is there no way to get all of the settings for a specific unit anymroe? I see that settings_name is before remote unit name in the positional arguments of relation-get
[17:42] <SpamapS> (another backward-incompatible change btw)
[17:42] <SpamapS> one that bcsaller warned me about like 3 weeks ago but I forgot :P
[17:43] <bcsaller> SpamapS: the order of args in relation-get changed to match the spec
[17:43] <niemeyer> SpamapS: Yeah, it still works pretty much the same way, just the implementation reflects the spec now
[17:44] <SpamapS> You guys are such devs.
[17:44] <SpamapS> ;)
[17:45] <_mup_> ensemble/yaml-state-node r189 committed by bcsaller@gmail.com
[17:45] <_mup_> YAMLState(dict) -> YAMLState(UserDict) as requested
[17:45] <SpamapS> Like.. "what you didn't read all 40 pages of spec before using our tool?" ;-) I am not making fun of you guys, rather just enjoying the irony that what makes ensemble so high quality may not make it easy to use for impatient people like me. ;)
[17:46] <SpamapS> so is there a special meaning setting name, like '*' to get them all?
[17:46] <bcsaller> yeah, I think the default was '-'
[17:48] <SpamapS> I need to read up on the debug hook stuff so I can really get good at formula dev :)
[17:48] <_mup_> ensemble/status-workflow-client r210 committed by jim.baker@canonical.com
[17:48] <_mup_> Fixed remaining tests
[17:50] <SpamapS> this broke almost every formula. Glad I didn't read the spec or I'd have never gotten to play w/ ensemble. ;-)
[17:53] <bcsaller> its a small change at the cli level 
[17:55] <SpamapS> I'm not complaining. Don't get me wrong. Its a MASSIVE change across every formula I've written thus far
[17:55] <SpamapS> seeing as they all silently did the wrong thing
[17:55] <SpamapS> only one broke because I tried to subscript an empty string
[17:55] <SpamapS> err, a None rather
[17:55] <jimbaker> SpamapS, it does make the usage simpler for the common case, but i agree it was a change. it puzzled me the first time when i actually read the docs and was trying to write formulas. and when it was changed :)
[17:55] <SpamapS> the others just said "no settings, moving on"
[17:56] <SpamapS> because there was no setting named "wiki-db/0" for the non existant unit "hostname"
[17:57] <jimbaker> SpamapS, and this despite annotating each usage in my bashified version with an XXX about the bug and its expected change, simply because of the silent quality of how relation-get works
[17:58] <SpamapS> Is there any reason relation-get should silently fail if a non-existant unit is passed?
[17:59] <niemeyer> bcsaller: Please actually check the UserDict module and ponder a bit about how to properly to a dict-like class
[18:00] <niemeyer> s/to a/do a
[18:00] <bcsaller> gustavo: it passed the cases I needed so far in testing and usage, but I'll look at rounding it out
[18:00] <niemeyer> bcsaller: It's buggy, as I said in the review
[18:00] <bcsaller> the version I just reposed with UserDict?
[18:01] <_mup_> ensemble/status-workflow-client r211 committed by jim.baker@canonical.com
[18:01] <_mup_> PEP8
[18:01] <niemeyer> bcsaller: The tests pass because they are incomplete as far as a dictionary interface is concerned
[18:01] <niemeyer> bcsaller: You simply did s/dict/UserDict
[18:01] <niemeyer> bcsaller: I believe that, given the current interface of your type, using DictMixin would be a better choice
[18:02] <niemeyer> bcsaller: Then, you might likely be able to get rid of update, for instance
[18:02] <niemeyer> bcsaller: It's not hard, but a little bit of attention is needed
[18:02] <bcsaller> happy to look at it again 
[18:02] <niemeyer> bcsaller: The current implementation breaks if a user does foo.pop(...), for instance
[18:03] <bcsaller> yeah, I realized that was possible, but I didn't realize we needed a functional dict proxy at that level. I'll try to make it pass the normal interface a little better
[18:03] <niemeyer> bcsaller: We certainly don't want a type which looks like a dict and then loses operations randomly
[18:04] <niemeyer> bcsaller: Then, again, it's trivial to do it right with the UserDict module.. just need to look at it and see what the interface is asking for.
[18:04] <bcsaller> will do
[18:05] <niemeyer> bcsaller: Thanks
[18:06] <_mup_> ensemble/status-workflow-client r212 committed by jim.baker@canonical.com
[18:06] <_mup_> Removed unused import
[18:06] <niemeyer> bcsaller: Check DictMixin there.. I believe it matches better what you're doing already
[18:06] <niemeyer> (better than UserDict.UserDict)
[18:07] <bcsaller> looking at that now
[18:19] <niemeyer> hazmat: FWIW, still on your branch since the morning
[18:19] <niemeyer> hazmat: Looks very good overall, but there's a lot there
[18:28] <_mup_> ensemble/yaml-state-node r190 committed by bcsaller@gmail.com
[18:28] <_mup_> make use of dictmixin and verify more basic dict operations
[18:31] <niemeyer> hazmat: That's delivered now
[18:33] <niemeyer> bcsaller: Is it ready for another look already, or should I move it to WIP?
[18:33] <bcsaller> I moved it back to needs review, should be ready
[18:33] <niemeyer> bcsaller: Cool, checking
[18:34] <bcsaller> added an additional test of some of the methods we talked about 
[18:34] <niemeyer> bcsaller: Nice, thanks
[18:37] <_mup_> ensemble/config-state-manager r194 committed by bcsaller@gmail.com
[18:37] <_mup_> cover the delete case here (though this is captured in a prereq branch now)
[18:48] <_mup_> Bug #764938 was filed: Convert example formulas to using augeas <Ensemble:New for jimbaker> < https://launchpad.net/bugs/764938 >
[19:01] <_mup_> ensemble/yaml-state-node r191 committed by bcsaller@gmail.com
[19:01] <_mup_> remove update method
[19:04] <jimbaker> bcsaller, hazmat, niemeyer - standup?
[19:04] <niemeyer> jimbaker: Yep, let's do it
[19:05] <bcsaller> ok, on skype now
[19:06] <niemeyer> hazmat seems to be out-of-action today
[19:06] <niemeyer> jimbaker can you start the call
[19:06] <niemeyer> ?
[19:07] <jimbaker> niemeyer, i will do that
[19:11] <niemeyer> bcsaller: if foo in dict and gotval == None: del dict[foo]
[19:13] <hazmat> niemeyer, i'm done out
[19:13] <hazmat> going to take a sick day today
[19:13] <niemeyer> hazmat: Aw, sorry to hear that
[19:15] <bcsaller> hazmat: feel better
[19:21] <jimbaker> hazmat, take care of yourself and stay hydrated!
[19:28] <_mup_> ensemble/bashified-wordpress-mysql-examples r186 committed by jim.baker@canonical.com
[19:28] <_mup_> Merged trunk
[19:29] <SpamapS> Ok I have an interesting question..
[19:29] <SpamapS> haproxy has a 'forwardedfor' option ..
[19:29] <SpamapS> which you definitely want to use if haproxy is the connection point for end users..
[19:30] <SpamapS> but you definitely don't want to use if it is just a link in a chain of reverse proxies..
[19:30] <SpamapS> So I need to know if I am related upstream to any other proxy..
[19:31] <SpamapS> I suppose I can just touch a file .. "/etc/haproxy/upstream.is.proxy" ...
[19:31] <SpamapS> but I'm more wondering if there is a way to just look at all of my relationships and pull it right out of 'relation-get'
[19:35] <SpamapS> in thinkign more about it, what I really want to do is identify the relationship between two services that I've been related to..
[19:36] <hazmat> to find if your endpoint or a middlepoint
[19:37] <SpamapS> well and I guess more importantly, to route the appropriate upstream to the appropriate downstream...
[19:37] <SpamapS> this isn't just about load balancers.. there will be plenty of times where middleware is done better with a single service unit
[19:37] <SpamapS> I think the way to do it is just with settings.
[19:38] <SpamapS> have the upstream go "I am for X"
[19:40]  * SpamapS is once again brain dumping into IRC rather than actually doing useful things. ;)
[19:40] <niemeyer> bcsaller: Review properly delivered now
[19:40] <bcsaller> gustavo: great, thanks
[19:42] <niemeyer> SpamapS: If the haproxy is in the middle, it will mean there's a relation established upstream
[19:42] <niemeyer> SpamapS: Should be easy to just set forwardedfor when that's the case
[19:42] <niemeyer> bcsaller: np
[19:43] <niemeyer> """
[19:43] <niemeyer> This will yield two different states depending on the state of
[19:43] <niemeyer> things, even though: self[name] is None, or self[name] is non-existent.
[19:43] <niemeyer> """
[19:43] <niemeyer> bcsaller: I meant to say "even though it's a deleted entry in both"
[19:43] <niemeyer> bcsaller: But there was a brain hiccup there
[19:44] <bcsaller> got it
[19:44] <SpamapS> niemeyer: its my understanding that you would not want to set forwardedfor if haproxy is a middle-proxy .. only if it is the one that users are actually connecting to
[19:44] <SpamapS> niemeyer: otherwise you will set the header to the upstream reverse proxy's IP
[19:44] <niemeyer> SpamapS: Right, so that's what I mean.. should be easy to tell if that's the case or not
[19:45] <SpamapS> niemeyer: right, so this gives rise to the second part of my babbling above.. which is that there will be times where the proxy is providing services to two unrelated upstream proxies and two unrelated downstream proxies..
[19:46] <niemeyer> SpamapS: and what's the issue there?
[19:46] <SpamapS> at the moment the only way to do this is just to have two haproxies
[19:46] <niemeyer> SpamapS: Why?
[19:46] <SpamapS> niemeyer: the issue is how to specify routing data. I think I have it solved actually.. the downstreams need to say a bit more about what they're doing, and the upstreams a bit more about what they want.
[19:47] <SpamapS> niemeyer: because /foo needs to go to   foo-app service, and /bar needs to go to bar-app service
[19:47] <niemeyer> SpamapS: Ah, yeah
[19:47] <SpamapS> and /anything-else to foo-app service
[19:48] <_mup_> ensemble/bashified-wordpress-mysql-examples r187 committed by jim.baker@canonical.com
[19:48] <_mup_> Removed snarky descriptions from metadata.yaml and replaced it with descriptions of what the example formulas do and how they interact
[19:48] <SpamapS> and haproxy is *really* good at routing lots of different stuff to different places, so it would be a shame if we can't figure this one out elegantly
[19:49] <SpamapS> But, I think we can.. just need the "website" relations to specify what URL they prefer to be accessed on.
[19:50] <niemeyer> SpamapS: Indeed
[19:51] <niemeyer> SpamapS: We'll need to put some thinking into it indeed
[19:51] <niemeyer> I'll be right back
[19:51] <niemeyer> just relocating
[19:51] <SpamapS> Yeah I think ensemble already handles the case well its just a matter of finding a simple way to make it happen. :)
[20:56] <niemeyer> bcsaller: Is config-state-manager depending upon YAMLState?
[20:56] <niemeyer> bcsaller: Just wondering how to properly review it
[20:56] <bcsaller> gustavo: yes
[20:56] <_mup_> ensemble/bashified-wordpress-mysql-examples r188 committed by jim.baker@canonical.com
[20:56] <_mup_> Changed db-relation-changed to db-relation-joined for mysql example formula
[20:57] <bcsaller> it will change a bit to reflect the last review, we can put it back into WIP
[20:57] <niemeyer> bcsaller: Ok, can you please put it back in review when that's done?
[20:57] <bcsaller> the last review means I'll have to revise quite a few tests (if only a little) so its better to wait for those changes to YAMLState
[20:57] <bcsaller> gustavo: will do
[20:58] <bcsaller> alright, going to head to lunch now
[21:05] <niemeyer> bcsaller: Enjoy
[21:06] <jimbaker> niemeyer, do you want to review my updated summaries/descriptions for the example formulas, or should i merge it in?
[21:06] <jimbaker> this removes the snarky text in favor of what the formulas actually do
[21:07] <jimbaker> i was noting this as i was bumping the version numbers in the metadata.yaml files
[21:09] <niemeyer> jimbaker: No, fine to merge them, thanks
[21:09] <jimbaker> niemeyer, sounds good
[21:20] <_mup_> ensemble/trunk r197 committed by jim.baker@canonical.com
[21:20] <_mup_> merge bashified-wordpress-mysql-examples [r=niemeyer][f=726561]
[21:20] <_mup_> Converted mysql and wordpress example formulas to use shell scripting,
[21:20] <_mup_> so as to demonstrate the language neutrality of Ensemble.
[21:23] <_mup_> ensemble/status-workflow-client r213 committed by jim.baker@canonical.com
[21:23] <_mup_> Merged trunk
[21:29] <_mup_> ensemble/trunk r198 committed by jim.baker@canonical.com
[21:29] <_mup_> merge status-workflow-client [r=niemeyer][f=737949]
[21:29] <_mup_> Adds to the status output the current relation and unit workflow states.
[21:29] <_mup_> Uses the new StateWorkflowClient support.