/srv/irclogs.ubuntu.com/2011/08/19/#ubuntu-ensemble.txt

hazmathmm.. it looks like trunk is broken00:00
hazmatoh.. i had ensemble set to use a different branch00:02
niemeyerhazmat: Sounds right re. the catch up00:10
adam_gactually pythoon-software-properties changed00:14
hazmatjimbaker, is unexpose not implemented?00:15
adam_gand needs to be fixed, and so will cloud-init00:15
niemeyeradam_g: What happened?00:19
adam_gniemeyer: add-apt-repository now requires user confirmation when adding a PPA00:20
adam_gjust submitted a patch to software-properties to have a '-y' option similar to apt-get00:20
niemeyeradam_g: Oh no00:20
adam_geither way it breaks lots of formulas. :\00:20
niemeyerMan..00:20
niemeyerhazmat: I understood it was ready as well00:22
niemeyeradam_g: Sent a note about the conceptual problem there00:30
niemeyeradam_g: We can fix with -y.. but we need to increase awareness about the importance of not introducing interactivity randomly00:31
adam_gniemeyer: agreed00:34
jimbakerhazmat, unexpose is implemented02:53
jimbakerhazmat, i would be very curious if you have found any issues of course02:57
niemeyerhazmat: The full diff on the gozk update: http://paste.ubuntu.com/669664/03:09
hazmatjimbaker, i unexposed a service (current trunk) and was still able to access it03:12
jimbakerhazmat,did you delete the environment security group first?03:13
hazmatjimbaker, ah03:13
hazmatjimbaker, probably not03:13
jimbakersorry, in the release notes :)03:13
jimbakermy expose-cleanup branch will take care of that cleanup03:13
jimbakerbut i considered it a helpful feature in the transition ;)03:14
hazmatjimbaker, cool, thanks for clarifying03:15
jimbakerhazmat, no worries03:15
SpamapShazmat: on plane.. inflight wifi is .. amazing. :)03:16
hazmatSpamapS, nice03:18
SpamapShazmat: anyway re the traceback... I am trying to find where the 404 is coming from03:19
jimbakerSpamapS, i remember flying back from europe with internet service a few years back. too bad that program was scrapped because of expense03:20
SpamapSjimbaker: lufthansa is rolling it out on 100% of flights now03:21
jimbakerbut ground stations are cheaper than satellites, so domestic only for the immediate future03:21
hazmatSpamapS, where you heading?03:21
SpamapSSeattle.. just showing my boy something different than the SW US03:21
jimbakerSpamapS, really, there's another satellite player now? iirc, it was boeing that scrapped it. maybe someone did pick it up03:21
SpamapSHe's only ever been to CA, NM, and TX ... WA is *quite* a different place. :)03:22
jimbakerand mid aug is the best time of year to visit WA03:22
SpamapSjimbaker: Not sure, they've been squawking about it that they're rolling it out.03:22
SpamapSjimbaker: yeah, nice and green.. mid 70's :)03:22
jimbakersounds like our mountains03:22
jimbakerreally, we should not have any more sprints in central tx in august03:23
SpamapShaha03:24
SpamapSI thought it was nice.. for keeping us in our rooms working03:24
jimbakerSpamapS, that's one theory, butts in seats and all. i find my brain works better if the body has moved however03:26
SpamapSoh I see the problem with the tracebacks. :-/03:33
hazmatSpamapS, i'm curious.. sometimes we get tracebacks in twisted and sometimes not.. 03:36
hazmatmostly depends on if the code has yielded to the reactor but its not always clear03:37
SpamapSThis seems to be because the error isn't raised until inside the select loop03:37
hazmatyeah03:37
SpamapSI'm guessing its coming from txaws.. I can't seem to find where its raised in the provider03:38
SpamapSIts really not clear at all where the 404 from Amazon is made "ok" .. 03:45
SpamapSYeah this twisted error handling is *maddening*03:52
SpamapSthe error that is happening is not an S3Error, but a twisted.web.error.Error ...03:53
hazmatSpamapS, it should be that line  i pointed out earlier03:53
SpamapShazmat: that line doesn't seem to be reached03:53
hazmathmm03:53
hazmati guess i should byte the bullet and do a nova install03:54
SpamapSjust get on canonistack03:54
SpamapSits company wide03:54
SpamapSand dead dumb ass simple03:54
hazmatrequires something i don't have... though i should get one03:54
hazmatactually swift is much easier to setup03:54
SpamapSerr.. what? a SSO login?03:54
SpamapSthats all you need03:55
hazmatSpamapS, i need to setup a shell account i thought?03:56
SpamapSnope03:57
SpamapSmaybe if you don't want to use public IPs to ssh into the instances03:57
SpamapShazmat: good luck.. time to shut down electronics04:00
hazmatSpamapS, thanks.. i'll see if i can get this running04:04
hazmatgetting set up with canonistack was really easy04:04
hazmathmm.. so after fixing up the error trapping.. it still looks like a 404 on creating a bucket04:27
hazmatgot it05:38
hazmatSpamapS, so getting past the error trapping code, it looks like the problem is a missing trailing slash05:38
hazmaton bucket names in txaws05:38
hazmatat least that's the only delta between boto and txaws when i try to do bucket ops with them05:38
hazmatwoot! 05:40
hazmathmm.. not quite05:46
hazmatwell at least past all the s3 errors05:46
hazmatnow onto the ec2 errors05:46
SpamapShazmat: :)05:50
SpamapShazmat: so txaws needs some testing against openstack. :)05:50
hazmatSpamapS, definitely, the delta was tiny.. finding the delta ;-)05:51
hazmatbut clearly some additional testing.. 05:51
hazmatits rather funny.. boto has such minimal testing.. but lots of prod use.. txaws lots of testing.. little prod use..05:51
hazmathmm.. that's a little questionable05:56
hazmati didn't have my access key/secret key setup correctly, but i could still create buckets..05:57
hazmati don't think there's any validation in nova-objectstore05:57
hazmatwoot! bootstrap sucess05:57
hazmatugh.. 12 roundtrips for bootstrap...05:58
hazmatSpamapS, so i can't actually test this, since i need shell access for the ssh tunnel to zk06:00
hazmatbut it bootstraps at least06:00
hazmatand shutsdown ;-)06:04
* hazmat heads to bed06:04
_mup_ensemble/stack-crack r322 committed by kapil.thangavelu@canonical.com06:06
_mup_openstack compatibility fixes for ec2 provider.06:06
SpamapShazmat: you shouldn't need shell access to talk to nova06:10
SpamapShazmat: and you can allocate/attach public ips to ssh in06:10
* SpamapS tries out branch06:12
SpamapShazmat: argh! where is your branch?06:14
kim0huh .. ensemble upgraded causes syntax errors ? http://paste.ubuntu.com/669870/08:59
TeTeTkim0: agreed, see the same09:33
kim0Any idea if the CF formula has been made to work09:44
=== daker_ is now known as daker
_mup_Bug #829397 was filed: Link a service to a type of hardware <Ensemble:New> < https://launchpad.net/bugs/829397 >12:48
_mup_Bug #829402 was filed: Deploy 2 services on the same hardware <Ensemble:New> < https://launchpad.net/bugs/829402 >12:53
_mup_Bug #829412 was filed: Deploy a service on a service <Ensemble:New> < https://launchpad.net/bugs/829412 >12:57
_mup_Bug #829414 was filed: Fail over services <Ensemble:New> < https://launchpad.net/bugs/829414 >13:00
_mup_Bug #829420 was filed: Declare and consume external services <Ensemble:New> < https://launchpad.net/bugs/829420 >13:04
m_3kim0: CF unknown still... looking at it now13:49
kim0m_3: thanks :)13:50
kim0I'm doing hpcc instead 13:50
kim0horribly complex language13:50
m_3kim0: ok, I'll go back to adding/testing nfs mounts into our standard formulas... fun fun :)13:55
kim0yeah all fun :)13:56
botchagalupeNewbee questions… Can formulas be written in Ruby?14:21
hazmatbotchagalupe, definitely14:22
botchagalupevery cool… 14:22
hazmatbotchagalupe, formulas can be written in any language, from c, shell, haskell, ruby, etc.14:23
botchagalupeSo far it looks pretty cool… Weird coming from a chef background though.  Just looked at it over the last hour.  Need to learn more… 14:24
hazmatbotchagalupe, ensemble will call the hooks at the right time.. which are just executables to ensemble, and the hooks can interact with ensemble via some command line tools (relation-set, open-port, etc) that are provided.14:25
botchagalupeAre there any good examples of running it outside of EC2?  e.g., openstack…. 14:27
hazmatbotchagalupe, not at the moment, we're still working on openstack compatiblity ( i was just working on it late last night.), and cobbler/orchestra (physical machine) integration, but that likely won't be finished till the end of the month.14:28
hazmatwell.. sooner.. but at as far as having blog posts, and docs.14:29
botchagalupeI look forward to it :) 14:31
hazmatkim0, that upgrade error looks like some python 2.7isms that fwereade introduced while refactoring the provider storage... previously it was 2.6 compatible... its probably worth a bug report.14:31
kim0hazmat: ok filing it14:32
_mup_Bug #829531 was filed: broken python 2.6 compatbility <Ensemble:Confirmed> < https://launchpad.net/bugs/829531 >14:35
hazmatSpamapS, open stack compatible branches..  lp:~hazmat/ensemble/stack-crack  and lp:~hazmat/txaws/fix-s3-port-and-bucket-op14:41
niemeyerHey all!14:43
niemeyerbotchagalupe: Hey!  Good to have you here..14:43
niemeyerhazmat: Thanks for pushing that man14:46
highvoltagehello niemeyer 14:46
niemeyerhazmat: Have you checked if openstack returned anything at all in that put?14:47
niemeyerhazmat: Was mostly curious if it was a bit off, or entirely off14:47
niemeyerhighvoltage: Hey!14:47
hazmatniemeyer, well bootstrap works, i need to see if assigning the elastic ip address will change the address as reported by describe instances, if so than i should be able to actually use ensemble against the instance, else it will need an ssh account into this particular private openstack installation14:48
hazmatniemeyer, it was just a few bits off.. the error capture in ensemble needed to be more generic, and the bucket operations needed a trailing slash14:49
niemeyerhazmat: Hmm.. how's EIP involved there?14:49
hazmatniemeyer, the actuall diff was only like 10 lines14:49
hazmatniemeyer, only against this private installation of openstack14:49
niemeyerhazmat: I meant openstack itself.. was it returning anything at all, or just 404ing14:49
niemeyerhazmat: Yeah, but I don't get how's it involved even then14:50
hazmatniemeyer, so two different topics.. openstack was returning 404s without ec2 error information, which means the error transformation in txaws  wasn't working, and the error capture in ensemble wasn't working either, updating the error capture in ensemble to catch twisted.web.error.Error and checking status against 404 solved that.. there was an additional compatibility issue which required bucket operations to have a trailing slash14:52
niemeyerhazmat: I got that yesterday.. the question is:14:52
niemeyerhazmat: OpenStack is obviously not returning the same message than AWS.. what is it returning instead?14:53
hazmatniemeyer, empty contents on a 40414:53
niemeyerhazmat: Ok.. :(14:53
hazmatNicke, on the the EIP topic.. the problem is that this particular openstack installation is private, so we launch a bootstrap instance of ensemble, and then we can't actually use the ensemble commands against that, because we use an ssh tunnel to the public ip addrs of the node.. which isn't routable14:54
hazmatniemeyer, the openstack implementation, both switch and nova-objectstore are very simple if we want to send patches upstream re this14:55
niemeyerhazmat: Sure, I totally get that we can fix it ourselves.. ;-)14:56
hazmatfinite time sucks :-)14:56
botchagalupeniemeyer: Good looking tool… Gonna give it some kicks this weekend to podcast about Monday… 14:56
niemeyerbotchagalupe: Neat!14:56
niemeyerbotchagalupe: We have a lot happening right now.. if you want to include details about what else is going on, just let us know14:57
niemeyerhazmat: Re. the EIP.. I see.. so our setup does not actually expose the machines unless an EIP is assigned14:57
hazmatniemeyer, exactly14:58
niemeyerhazmat: Can we proxy the client itself through SSH?14:58
hazmatniemeyer, yes. that requires a shell account that i don't have.. i'm curious if openstack maintains compatibility to the point of readjusting describe instance output when an eip is assigned to an instance, that will obviate the need for shell credentials to this private openstack instance.14:59
niemeyerhazmat: Are you sure?  Have you tried to route through people or chinstrap, for instance?15:00
hazmatniemeyer, i haven't setup that shell account15:00
hazmatniemeyer, just finding some new errors as well with the ec2 group stuff on subsequent bootstraps15:01
niemeyerhazmat: Hmm, good stuff15:01
* hazmat grabs some caffiene.. bbiam15:06
botchagalupeniemeyer Please send me what you have  john at dtosolutions com 15:13
niemeyerbotchagalupe: I don't have anything readily packed to mail you..15:14
niemeyerbotchagalupe: Right _now_ we're working on the formula store, physical deployments, and local development.. have just deployed EC2 firewall management for formulas and dynamic service configuration.15:16
jimbakerfwereade, i took more of a look at the cobbler-zk-connect branch15:23
fwereadejimbaker: heyhey15:23
jimbaker1. test_wait_for_initialize lacks an inlineCallbacks decorator, so it's not testing what it say it's testing :)15:23
niemeyerNice catch15:24
jimbaker2. the poke i mentioned is TestCase.poke_zk15:24
jimbakernote that to use it, you need to follow the convention of setting self.client15:24
jimbakerfwereade, in general, you don't want to be using sleeps in tests. they have a nasty habit of eventually failing15:25
fwereadejimbaker: cool, tyvm for the pointers :)15:26
jimbakerfwereade, in this particular case, poke_zk will definitely work, and make the test deterministic. which is what we want15:26
fwereadejimbaker: I'll look up poke_zk15:26
fwereadejimbaker: sweet15:26
=== otubo is now known as otubo[AFK]
* niemeyer => lunch15:33
hazmathmm.. it looks like  openstack has a compatibility issue here regarding describe group for the environment group15:44
hazmatniemeyer, i'm starting to realize compatibility for openstack might be a larger task, but its also unclear as their are lots of bugs fixed that are marked fix committed, but not released.15:50
=== daker is now known as daker_
adam_ghazmat: i believe those bugs aren't marked as fixed released until the next milestone is released, but packages in ppa:nova-core/trunk are built on every commit16:06
_mup_Bug #829609 was filed: EC2 compatibility describe security group returns erroneous value for group ip permissions <Ensemble:New> <OpenStack Compute (nova):New> < https://launchpad.net/bugs/829609 >16:07
hazmatadam_g, understood, its just not clear what version canonistack is running16:11
kim0woohoo just pushed a lexisnexis vid → http://cloud.ubuntu.com/2011/08/crunching-bigdata-with-hpcc-and-ensemble/16:13
* kim0 prepares to start the weekend 16:13
hazmatsmoser, just to verify.. cloud-init is running on the canonistack images?16:14
* hazmat lunches16:22
niemeyerhazmat: What was the other issue you found? (sry, just back from lunch now)16:27
hazmatniemeyer, see the bug report16:54
hazmatniemeyer, i committed a work around to the txzookeeper branch16:54
hazmater. txaws that is16:54
hazmatnow i have a new error to decipher.. it doesn't appear my keys on the machine from cloud init for ssh access16:54
hazmathttp://pastebin.ubuntu.com/670216/16:55
hazmatlooking at the console-output it looks like cloud-init runs though .. http://pastebin.ubuntu.com/670217/16:56
niemeyerhazmat: Hmm.. the metadata service must be hosed16:58
hazmatniemeyer, true, that likely is hosed.. i think that's only recently been done, and perhaps differently, that was an issue i had early looking at rackspace support16:58
hazmatthere wasn't anyway to identify the machine api identifier from within the machine16:59
fwereadeniemeyer: quick confirm17:11
niemeyerfwereade: Sure17:11
fwereadeniemeyer: if a foolish developer had ended up with a 3000-line diff, it would be appreciated to reconstruct the end result as a pipeline, even if the indivdual steps themselves each ended up seeming a bit forced/redundant17:12
fwereadeniemeyer: a lot of the problem is decent-sized chunks of code moving from one file to another, but sadly the structure isn't really apparent from the diff17:13
fwereadeniemeyer: however, I think it could be clearer if it were broken up into steps like17:13
fwereade1) add new way to do X17:13
fwereade2) remove old way to do X, use new way17:14
fwereadeetc...17:14
_mup_Bug #829642 was filed: expose relation lifecycle state to 'ensemble status' <Ensemble:New> < https://launchpad.net/bugs/829642 >17:14
niemeyerfwereade: Yeah, that sounds a lot more reasonable, and less painful for both sides17:14
fwereadeniemeyer: cool, they'll land sometime one monday then17:15
niemeyerfwereade: Sounds good.. even though there's some work involved, I'm willing to bet that the overall time for the changes to land will be reduced17:15
fwereadeniemeyer: I swear it was a 1kline diff, and then I went and made everything neat and consistent :/17:16
fwereadeniemeyer: anyway, thanks :)17:16
fwereadehappy weekends everyone :)17:16
niemeyerfwereade: I can believe that17:16
niemeyerfwereade: Have a great one!17:16
fwereadeniemeyer: and you :)17:16
niemeyerfwereade: Thanks17:17
hazmatfwereade, cheers17:18
hazmathmm.. afaics its working the console output diff between ec2 and openstack looks sensible, except cloud-init waiting on the metadata service17:27
hazmatmachine and provisioning agents running normally17:30
hazmatwoot it works17:31
hazmatdoh17:31
niemeyerhazmat: Woah!17:31
* niemeyer dances around the chair17:32
hazmatniemeyer, well i got status output and agents are running17:32
hazmatniemeyer, new error on deploy, but getting closer i think17:32
* niemeyer sits down17:32
* hazmat grabs some more caffiene17:32
=== otubo[AFK] is now known as otubo
RoAkSoAxfwereade: \o/17:47
RoAkSoAxfwereade: any updates on the merges in trunk?17:47
_mup_ensemble/fix-pyflakes r322 committed by jim.baker@canonical.com17:50
_mup_Remove dict comprehension, pyflakes doesn't understand it yet17:50
_mup_ensemble/fix-pyflakes r323 committed by jim.baker@canonical.com17:54
_mup_Remove remaining dict comprehension17:54
hazmatjimbaker, later version of pyflakes seems to understand it for me.. if your pyflakes is using a 2.6 python.. then it could be an issue17:59
hazmatjimbaker, definitely valid to do.. but the fix is really python 2.6 compatiblity 17:59
hazmatjimbaker, nevermind.. i hadn't realized but the latest pyflakes package seems to be broken18:02
niemeyerjimbaker: ping18:11
niemeyerbcsaller: ping18:15
bcsallerniemeyer: whats up?18:15
niemeyerbcsaller: You, looking for a vict^Wcandidate for a review18:15
niemeyerbcsaller: s/You/Yo/18:15
bcsallersure18:15
niemeyerbcsaller: https://code.launchpad.net/~hazmat/ensemble/formula-state-with-url/+merge/7129118:15
bcsalleron it18:16
niemeyerbcsaller: Cheers!18:16
niemeyerbcsaller: https://code.launchpad.net/~hazmat/ensemble/machine-agent-uses-formula-url/+merge/7192318:28
niemeyerbcsaller: Oh, sorry, nm18:28
niemeyerbcsaller: William has already looked at that latter one18:28
hazmatniemeyer, so with dynamic port opening, one question i had is how do we go about solving placement onto multiple machines when reusing machines18:28
hazmatwe need static analysis to determine port conflicts for placement afaics18:29
hazmats/analysis/metadata18:29
hazmatsomething along the lines of describing a security group, port-ranges, protocols, etc18:29
hazmatdirectly in a formula18:30
heckjI have a sort of random ensemble question: when you create a relation, is that a bidirectional concept, or unidirectional? i.e. do both pieces know about each other when you make the relationship for purposes of setting up configs, etc?18:31
hazmatheckj, bi-directional18:31
niemeyerhazmat: ROTFL18:31
hazmatheckj, each side is informed when units of the other side join, depart or change their relation settings18:31
niemeyerhazmat: Didn't we cover that issue at least 3 times? :-)18:31
heckjhazmat: thanks!18:32
hazmatniemeyer, yeah.. we probably did, but i'm looking at doing a more flexible placement alg to respect max, min machines.. and i don't recall what solution we came up with18:32
hazmatactually i know we did several times18:32
niemeyerhazmat: I don't understand how that changes the outcome we reached in Austin18:33
hazmatniemeyer, i don't recall we discussed this in austin, we discussed network setups in austin18:33
hazmatfor lxc bridging18:34
niemeyerhazmat: We certainly discussed port conflicts and how we'd deal with them in the short term and in the long term18:34
hazmatniemeyer, in the short term we  said we wouldn't, and the long term?18:34
niemeyerhazmat: We have all the data we need to do anything we please..18:35
hazmatniemeyer, okay.. so i'm deploying a new formula, i can inspect which ports are open/used on a machine, but i can't tell which ones the new formula needs.. so i lack knowledge of what its going to be using in advance of deploying it.18:36
hazmatif i knew advance i could select a machine with non-conflicting port usage18:36
niemeyerhazmat: open-port communicates to Ensemble what port that is.. we don't need to tell in advnace18:37
niemeyerhazmat: Ensemble will happily take the open port and move on with it18:37
niemeyerWoohay18:38
hazmatniemeyer, and in the case of a port usage conflict between two formulas?18:38
hazmats/formulas/service units18:39
niemeyerhazmat: Yes, as we debated the same port can't be put in the same address.. it's a limit of IP18:40
niemeyerhazmat: If people try to force two services on the same machine to be *exposed*, it wil fail18:41
niemeyerhazmat: If they have the same port..18:41
niemeyerhazmat: If they're not exposed, that's fine..18:41
hazmatniemeyer, yes.. but if i knew in advance i could avoid conflicts when doing machine placement, with dynamic in the short term  we just allow conflicts in the short term.. but what's the long term solution here?18:41
hazmatniemeyer, doesn't matter if their exposed or not18:41
niemeyerhazmat: Of course it matters18:42
bcsaller1hazmat: you mean they bind it even if its not addressable outside the firewall, right?18:42
=== bcsaller1 is now known as bcsaller
hazmatniemeyer, if i have two unexposed services trying to use port 80.. its a conflict regardless of the expose18:42
niemeyerhazmat: It's not.. each service has its own network spae18:42
niemeyerspace18:42
hazmatbcsaller1 exactly.. i have my web apps behind a load balancer for example18:42
hazmatniemeyer, ah assuming lxc  and bridges18:43
niemeyerhazmat: Yes, assuming the feature we've been talking about :-)18:43
hazmatah.. right so this is where we get to ipv6, ic18:43
hazmateach service gets it own ipv6 address,  we route ip4v6 internally, and expose still can't deal with port conflicts, which we can't detect/avoid18:46
bcsallerhazmat: prove it ;)18:46
RoAkSoAxnijaba: ping?18:47
niemeyerhazmat: Yes..18:47
hazmatbcsaller, its runtime dynamic, placement is prior to instantiation.. what's to prove18:47
bcsallerI just haven't seen the ipv6-> ipv4 routing work this way yet18:48
niemeyerhazmat: In practice, that's a lot of ifs..18:48
bcsallernot saying it can't, just haven't seen how it plays out yet18:48
hazmatbcsaller, yeah.. there's a pile of magic dust somewhere18:48
bcsallerand I think of IBM all of a sudden18:48
niemeyerbcsaller: Why?18:49
hazmati think of nasa.. millions for a space pen that works.. russians use a pencil 18:49
bcsallerniemeyer: they did commercials with self healing servers and magic pixie dust you sprinkle around the machine room18:49
niemeyerNice :)18:50
niemeyerhazmat: Exactly.. let's design a pencil18:50
hazmatniemeyer, a pencil is static metadata imo18:50
bcsallerniemeyer: http://www.youtube.com/watch?v=3nbEeU2dRBg18:51
niemeyerhazmat: A pencil to me is something that is already working fine today18:51
niemeyerhazmat: Rather than going after a different fancy pen18:51
hazmatniemeyer, we can rip out significant parts of code base and simplify them. its development either way.. the point is a pencil is simple18:52
niemeyerhazmat: You're trying to design the pen that works without gravity..18:52
niemeyerhazmat: Very easy to write once you have it18:52
niemeyerhazmat: The pencil is ready18:52
hazmatniemeyer, so i think we've got the analogies as far as they go.. the question is what's the problem with static metadata? besides the fact we've already implemented something with known problems18:53
niemeyerhazmat: I thought the analogy was clear.. static metadata doesn't exist18:53
niemeyerhazmat: How do you allow a service to offer another port to a different service?18:54
niemeyerhazmat: How many ports do we put in the static metadata?18:54
niemeyerhazmat: What if another port is to be opened?18:54
hazmatniemeyer, the formula declares what it enables via metadata.. allowing for port ranges etc, perhaps associated to a name18:54
niemeyerhazmat: Yeah.. what if the range is too small for the number of services someone wants to connect to?18:55
niemeyerhazmat: What if the service could actually work dynamically?18:55
niemeyerhazmat: And pick a port that is actually open in the current machine rather than forcing a given one?18:55
hazmatniemeyer, the metadata is only for listen ports a formula offers18:56
niemeyerhazmat: Since it doesn't really care18:56
niemeyerhazmat: That's what I'm talking about too18:56
hazmatit can reserve a range, if it wants.. like less than 1% of services are truly dyanmic that way18:56
niemeyerhazmat: All services are dynamic that way.. a single formula can manage multiple services for multiple clients18:57
hazmati'd rather design for the rule than the exception, if i get a pencil ;-)18:57
niemeyerhazmat: Multiple processes18:57
niemeyerhazmat: We have the pencil.. services are dynamic by nature.. open-port is dynamic by nature18:57
niemeyerhazmat: it works, today..18:58
hazmatniemeyer, right.. i can have a formula managing wsgi-app servers, but i can also pick a range of 100, and reserve that block for the processes i'll create18:58
niemeyerhazmat: Until botchagalupe1 wants to use it for 101 services in his data center18:58
niemeyerhazmat: Then, even the static allocation doesn't solve the problem you mentioned..18:59
niemeyerhazmat: Which is interesting18:59
niemeyerhazmat: Scenario:19:00
hazmatniemeyer, so your saying if its a service has a port per relation19:00
niemeyerhazmat: 1) User deploys frontend nginx and backend app server in the same machine19:00
niemeyerhazmat: 2) Both use port 8019:00
niemeyerhazmat: 3) nginx is the only one exposed..19:00
niemeyerThat's a prefectly valid scenario19:01
niemeyerhazmat: 4) User decides to expose the app server for part of the traffic19:01
niemeyerhazmat: Boom..19:01
niemeyerhazmat: Static allocation didn't help19:01
hazmatin one case static metadata, we prevent the units from co-existing on the same machine19:01
niemeyerhazmat: Why?19:02
hazmatwhen placing them.. to avoid conflicts19:02
niemeyerhazmat: The scenario above works..19:02
niemeyerhazmat: 1-3 is perfectly fine19:02
hazmatsay i end up with varnish or haproxy on the same instance for a different service and i want to expose it.. 19:03
hazmatsame problem19:04
niemeyerhazmat: Yep.. that's my point.. it's an inherent problem.. it exists with open-port or with dynamic allocation19:04
hazmatin the static scenario we prevent by not placing it on a machine with conflicting port metadata19:04
niemeyerhazmat: We need to solve it in a different way19:04
niemeyerhazmat: Again, 1-3 is perfectly fine19:04
hazmat1) is not the case, they won't be deployed on the same machine with static metadata19:04
niemeyerhazmat: There's no reason to prevent people from doing it19:04
hazmathmm19:05
hazmatit is rather limiting to get true density19:06
hazmatwith static metadata19:06
niemeyerhazmat: My suggestion is that we address this problem within the realm of placement semantics19:07
niemeyerhazmat: In more realistic stacks (!) admins will be fine-tunning aggregation 19:07
hazmatniemeyer, that's the problem/pov that i'm looking at this from.. placement has no data about the thing its about to deploy.. just about the current ports of each machine.19:08
hazmatniemeyer, you mean moving units?19:08
niemeyerhazmat: No, I mean more fine-tunned aggregation19:09
hazmator just doing manual machine selection placement19:09
niemeyerhazmat: Not manual machine selection per se19:09
niemeyerhazmat: Machines have no names.. don't develop love for them.. ;)19:09
hazmatniemeyer, absolutely.. their so unreliable ;-)19:10
niemeyerLOL19:10
_mup_Bug #829734 was filed: PyFlakes cannot check Ensemble source <Ensemble:New> < https://launchpad.net/bugs/829734 >19:37
_mup_ensemble/fix-pyflakes r322 committed by jim.baker@canonical.com19:43
_mup_Remove dict comprehension usage to support PyFlakes19:43
jimbaker`bcsaller, hazmat - i have a trivial in lp:~jimbaker/ensemble/fix-pyflakes that allows pyflakes to work again for the entire source tree19:49
hazmatjimbaker`, awesome, there's a bug for py 2.6 compatibility that it can link to as well19:50
hazmatafaics19:50
jimbaker`hazmat, yeah, that's probably the source of the 2.6 bug19:50
hazmatdict comprehensions where the only 2.7 feature we where using19:50
hazmats/where/were19:50
jimbaker`hazmat, they're nice, but just not yet unfortunately19:50
jimbaker`i'll mention this to fwreade so we can avoid it for the time being19:51
_mup_ensemble/stack-crack r323 committed by kapil.thangavelu@canonical.com19:55
_mup_allow config of an ec2 keypair used for launching machines19:55
jimbaker`hazmat, so if that trivial looks good, i will commit and mark those bugs as fix released19:58
jimbaker`(to trunk)19:58
jcastro_negronjl: about how long does it take the mongo formula to deploy?19:59
jcastro_like, if I ssh in and I type mongo and it doesn't find it, then I've obviously ssh'ed in too early? :)19:59
jcastro_also, rs.status() returns "{ "errmsg" : "not running with --replSet", "ok" : 0 }"20:02
hazmatjcastro_, if ensemble status says running it should be running20:02
hazmater. started20:03
jcastro_aha, it takes about a minute20:04
=== highvolt1ge is now known as highvoltage
negronjljcastro:  you got it .... about a minute or so20:05
jcastro_negronjl: ok, the second db.ubuntu.find() shows the same results as the first one, how do I know that's on other nodes?20:07
jcastro_or do you just know because that's what rs.status() already showed?20:07
negronjljcastro:  you don't really know ( without a bunch of digging ) what's on which node 20:08
jcastro_right, I see, that's the point. :)20:08
hazmatjimbaker`, also this has a fix for the cli help.. ignoring the plugin implementation http://pastebin.ubuntu.com/670338/20:08
hazmatjimbaker`, sans it, the default help is bloated out by config-set20:08
hazmaton ./bin/ensemble -h20:08
jimbaker`hazmat, you mean lines 46-50 of the paste?20:12
jimbaker`sure, we should pull that in20:12
jimbaker`can also use the docstring cleanup too20:13
hazmatjimbaker`, well pretty much all the changes to commands in that diff are docstring cleanup20:13
hazmatthe stuff in __init__ and tests can be ignored20:13
hazmatjimbaker`, fix-pyflakes looks good +120:17
jimbaker`hazmat, thanks!20:17
hazmathmm.. looks like the nova objectstore namespace is flat20:21
hazmatodd the code looks like it should work, its doing storing against the hexdigest of the name20:23
_mup_ensemble/trunk r322 committed by jim.baker@canonical.com20:24
_mup_merge fix-pyflakes [r=hazmat][f=829531,829734]20:24
_mup_[trivial] Remove use of dict comprehensions to preserve Python 2.620:24
_mup_compatibility and enable PyFlakes to work with Ensemble source.20:24
niemeyerhazmat: Any chance of a second review here: https://code.launchpad.net/~fwereade/ensemble/cobbler-shutdown/+merge/7139121:03
niemeyerWith that one handled, we'll have a clean Friday! :-)21:03
niemeyersidnei: People are begging for your Ensemble talk at Python Brasil :)21:04
_mup_Bug #828885 was filed: 'relation-departed' hook not firing when relation is set to 'error' state <Ensemble:New> < https://launchpad.net/bugs/828885 >21:16
hazmatniemeyer, sure21:21
hazmatugh.. its big21:21
niemeyerhazmat: Why was this reopened ^?21:21
hazmatniemeyer, just had a talk with mark about it .. its not really about relation-broken being invoked, its more than if a service unit is an error state should the other side know about it21:22
hazmattake a broken service out of a rotation21:22
hazmati guess we try not to associate relation state to overall service status21:22
niemeyerhazmat: That's what I understood from the original description21:23
niemeyerhazmat: As I've mentioned in the bug, I don't think killing a service like this is the right thing to do21:23
niemeyerhazmat: A _hook_ has failed, not a connection21:23
niemeyerhazmat: In other words, we take a slightly bad situation, and make the worst out of it by actually killing the service21:23
hazmatniemeyer, yeah.. fair enough, i forget if resolved handles that21:24
hazmatniemeyer, its not about killing the service though21:24
hazmatniemeyer, its about informing the other end of the relation that something is wrong21:24
hazmatother relations of the service continue to operate normally21:24
niemeyerhazmat: It definitely is.. that's what relation-departed does21:24
niemeyerhazmat: The relation wasn't departed21:24
niemeyerhazmat: There's an erroneous situation due to a human bug21:25
hazmatniemeyer, relation-depart is just saying a unit has been removed..21:25
hazmatit can re-appear latter with a join21:25
niemeyerhazmat: Exactly, and it has not21:25
niemeyerhazmat: Imagine the situation.. blog up.. small bug in relation-changed21:25
niemeyerhazmat: "Oh, hey! There's a typo in your script! BOOM! Kill database connection."21:26
hazmatniemeyer, but conversly do we allow for the other scenario to be true.. a web app server and proxy, the web app server is dead, its rel hook errors, and the proxy continues to serve traffic to it21:26
niemeyerhazmat: Yes, that sounds like the most likely way to have things working21:27
hazmatm_3, anything to add?21:27
niemeyerhazmat: We can't assume it's fine to take services down at will without user consent21:27
niemeyerhazmat: The user desire was to have that relation up..21:28
m_3the web app <-> proxy relationship you described is a good example21:28
niemeyerhazmat: There was an error because of an improper handling of state that can't be implied as "impossible to serve"21:28
m_3the one I was seeing was at spinup21:28
hazmatniemeyer, indeed, i remember know why it was done this way21:28
niemeyerm_3, hazmat: Note that this is different from a machine going off21:29
niemeyerm_3, hazmat: Or network connectivity being disrupted, etc21:29
m_3spin up 20 units of a related service21:29
m_3third of them failed, but the primary service still had configured state for the failed units21:29
m_3that cleanup is what I'm targeting21:29
niemeyerm_3: Define "failed"21:30
m_3test case was a relation-changed hook that just "exit 1"21:30
m_3the one where a third were failing was NFS clients trying to mount21:30
niemeyerm_3: We can try to be smart about this in the future, and take down relations if there is more than one unit in it, for instance21:31
niemeyerm_3: That situation is not a good default, though21:31
niemeyerm_3: Note how your exit 1 does not imply in any way that the software running the service was broken21:32
m_3understand... we can choose to not implement... just wanted to surface the issue21:32
m_3so bringing clients up slowly works fine21:32
niemeyerm_3: It implies relation-changed was unable to run correctly for whatever reason21:32
m_3rewriting clients to retry a couple of time works21:32
niemeyerm_3: Right, but do you understand where I'm coming from?21:32
m_3yes, totally21:32
m_3turning a machine off in a physical infrastructure is a good example21:33
m_3haproxy and varnish are written to be tolerant against this eventuality21:33
m_3would be nice if we could provide this though21:33
niemeyerm_3: Hmm.. it sounds like we're still talking about different things21:34
niemeyerm_3: Ensemble _will_ handle disconnections, and _will_ take the relation down21:34
m_3sorry if I'm not explaining this well21:34
niemeyerm_3: you're explaining it well, but I feel like we're making disjoint points21:34
m_3it leaves the relation in an "error" state for the units where relation-changed hook exited poorly21:34
m_3that's not taking the relation down21:35
m_3there's no way for the "server" to know that anything wrong has happened21:35
niemeyerm_3: This is not a disconnection.. an error in a relation-changed script doesn't imply in any way that the service is down21:35
m_3it could do a relation-list and check on things... if something got fired21:35
m_3hmmm... yes, I've been focusing on relation-changed during startup21:36
niemeyerm_3: But if you turn the network down on the service, or if say, the kernel wedges.. Ensemble will take the relation down.21:36
m_3for services that often don't start until relation-changed (not in start)21:36
niemeyerm_3: Even in those cases, we can't tell whether the service is necessarily down or not21:37
_mup_ensemble/stack-crack r324 committed by kapil.thangavelu@canonical.com21:37
_mup_don't use namespaced storage keys, use a flat namespace21:37
niemeyerm_3: Since we don't know what happened21:37
niemeyerm_3: In a situation where that was a critical service, the most likely scenario to have it working is to allow the relation to stay up while the admin sorts it out21:38
* m_3 wheels turning21:39
m_3how does ensemble respond to a kernel wedge (your example above)21:39
niemeyerm_3: That situation puts the machine agent and the unit agent unresponsive, which will eventually cause a timeout that will force all of its relations down21:40
hazmatm_3, it will get disconnected from zookeeper and then the opposite end of the relation will see a 'relation-depart' hook exec21:40
m_3right... so "framework" or "infrastructure"-wise... that change is registere21:40
m_3d21:40
hazmatm_3, more than framework.. the opposite relation endpoints see the disconnection21:41
m_3but it tries to stay ignorant of service semantics21:41
niemeyerm_3: For now..21:41
m_3right, I can clean up when that happens21:41
niemeyerm_3: We want to go there, eventually21:41
m_3ok, this really goes to all of the bugs about relation-status21:42
m_3thanks for the discussion guys!21:42
m_3s/bugs/feature requests/21:42
niemeyerm_3: np!21:47
niemeyerm_3: I think there's more we need to talk about in this area21:47
_mup_ensemble/stack-crack r325 committed by kapil.thangavelu@canonical.com21:47
_mup_allow txaws branch usage from an ensemble env21:47
niemeyerm_3, hazmat: I'm personally concerned about even that scenario, for instance, when the unit agent goes off21:48
m_3niemeyer: I'll write up my use cases that need relation state info21:48
hazmatniemeyer, how so?21:48
niemeyerhazmat: We need to find a way to restart the unit agent without killing relations21:48
hazmatniemeyer, we can do that now, we just need to reconnect to the same session21:48
niemeyerhazmat: In the next incarnation, the logic that puts the ephemeral nodes in place must take into account they might already be there21:48
niemeyerhazmat: Kind of21:49
niemeyerhazmat: We don't expect to find previous state, I believe21:49
hazmatniemeyer, let's be clear its  not killing a relation, its a transient depart and join for the same unit21:49
hazmatniemeyer, we do find the same relation state21:49
hazmatthe unit's relation state is the same across a depart/join... even if the client is disconnected, the relation settings are persistent21:50
hazmatthere's a separate ephmeral node for active presence21:50
m_31.) formula tests need to know when hooks execute, 2.) relations that depend on another relation's state, and 3.) varous kinds of relation fails21:50
niemeyerhazmat: That's how a relation is killed!21:50
niemeyerhazmat: Formulas take state down on depart21:51
hazmatniemeyer, that's how a service unit's participation in a relation is killed and resurrected21:51
niemeyerhazmat: Yes.. and correct formulas will clean state/block firewall/etc on depart!21:51
hazmatthe relation itself is a semantic notion between services, its only killed when the user removes the relation21:51
hazmatniemeyer, and they will open it back up when it comes back21:52
niemeyerhazmat: The way that the formula knows a relation has been removed is through the relation-joined/departed! :-)21:52
niemeyerhazmat: A bit shocked to be stating this :)21:52
hazmat:-)21:52
hazmatniemeyer, a relation has been removed to a formula upon execution of relation-broken21:52
hazmatand created upon first execution of any join21:53
niemeyerhazmat: No, relation-broken means it has been taken down by itself21:53
niemeyerhazmat: relation-departed means "The remote end left.. clean up after yourself."21:53
hazmatright, but if i have 5 other units in a relation, and one goes away, i don't say the relation is removed21:53
niemeyerhazmat: The relation between the two units has been _dropped_...21:53
m_3I'm confused about difference between relation taken down and related unit taken down21:53
niemeyerhazmat: State may be removed.. etc21:54
hazmatniemeyer, the state is service level typically, unit level state about remote ends is access, and that can be granted/restored21:54
niemeyerm_3: A relation is established between services.. that's the ideal model the admin has stated he wanted21:54
hazmatin general though it should be possible that a unit transiently departs a relation and comes back to find things working with the same access and state21:55
niemeyerm_3: Service units join and depart the relation based on realistic behavior21:55
m_3right, but all of my examples above retain the relation and just drop units21:55
niemeyerhazmat: Agreed on the first point, disagreed strongly on the second one.21:55
hazmatniemeyer, for example consider a network split.. its a transient disconnect and reconnect.. the relation isn't dead, that's between the services, the disconnect unit's participation in the relation is temporarily removed21:55
niemeyerhazmat: """21:56
niemeyer<relation name>-relation-departed - Runs upon each time a remote service unit leaves a relation. This could happen because the service unit has been removed, its service has been destroyed, or the relation between this service and the remote service has been removed.21:56
niemeyerAn example usage is that HAProxy needs to be aware of web servers when they are no longer available. It can remove each web server its configuration as the corresponding service unit departs the relation.21:56
niemeyer"""21:56
niemeyerhazmat: This is our documentation.21:56
niemeyerhazmat: It's been designed that way.. relation-departed runs, connection should be _down_..21:56
hazmathmm.. that's unfortunate, if a service has been destroyed should be under relation-broken21:57
niemeyerhazmat: Nope21:57
niemeyerhazmat: """21:57
niemeyer<relation name>-relation-broken - Runs when a relation which had at least one other relation hook run for it (successfully or not) is now unavailable. The service unit can then clean up any established state.21:57
niemeyerAn example might be cleaning up the configuration changes which were performed when HAProxy was asked to load-balance for another service unit.21:57
niemeyer"""21:57
niemeyerhazmat: That's how it's been designed21:57
niemeyerWhich is why I bring my original point back: we need to ensure that restarts keep the relation up21:58
hazmatwell i have some doubts that its implemented that way ... broken is always the final step of cleanup when destroying a relation21:58
niemeyerhazmat: If it's not that way, it's a serious bug we should fix.. I certainly reviewed it against that assumption21:59
niemeyerhazmat: We wrote that document jointly as well21:59
hazmatniemeyer, i think that doc needs changing... depart is called when a unit is removed21:59
hazmatniemeyer, i think  some editing and updating got done on it post implementation22:00
niemeyerhazmat: "This could happen because the service unit has been removed"22:00
niemeyerhazmat: ?22:00
hazmatit can happen for any number of reasons22:00
niemeyerhazmat: Yes, they seem listed there.. what's wrong specifically?22:00
hazmatnetwork split, explict removal of unit, etc.. the only significance is that the remote end isn't there22:00
hazmatone of them that is22:01
hazmatrelation level cleanup.. removing a database, etc. should happen in relation-broken22:01
hazmatonly unit level cleanup should happen in depart22:01
niemeyerhazmat: We'll have to talk on monday about this..22:01
m_3is there any difference between the events fired for timeouts -vs- those fired for remove-relation calls?22:01
niemeyerhazmat: That's not how it's been designed, and is certainly not what we talked about when we planned it22:01
hazmatniemeyer, if i do a remove-unit, the remote end will get a depart22:02
hazmatthat doesn't mean blow up the database22:02
niemeyerhazmat: It means remove the access from the other end22:02
niemeyerhazmat: Nothing should mean "blow up the database", ever22:02
hazmatniemeyer, write but not the five other units that are still in the relation22:02
hazmats/write/right22:02
niemeyerhazmat: Yes.. remove the access from the unit that has departed22:03
hazmatbut if i see broken, the relation is finished.. it won't ever come back22:03
niemeyerhazmat: Not at all22:03
hazmatand i can do service level relation cleanup22:03
hazmatniemeyer, it will be a new relation if it does22:03
niemeyerhazmat: If network connectivity terminates, it should get relation-broken22:03
hazmatniemeyer, who get its and why?22:04
niemeyerhazmat: Again, the docs explain22:04
hazmatniemeyer, if they see a network split from a single related unit, they get a depart22:04
* hazmat goes to read22:04
hazmatniemeyer, don't see it22:06
hazmata relation is never broken till the user severs it22:07
niemeyerhazmat: Who gets it:22:07
niemeyer"""22:07
niemeyerRuns when a relation which had at least one other relation hook run for it (successfully or not) is now unavailable. The service unit can then clean up any established state.22:07
niemeyer"""22:07
niemeyerand why too, in fact..22:07
hazmatlike i said the docs need cleanup.. we can discuss design considerations on monday if need be.. but afaics the semantics are correct22:08
hazmatrelation-broken is effectively a relation-destroyed hook22:09
hazmatm_3, no there isn't22:10
niemeyerhazmat: Regardless, the original point remains..22:10
niemeyerhazmat: relation-joined should be sustained across restarts22:11
hazmatniemeyer, you mean it shouldnt' be executed across an agent restart?22:11
niemeyerhazmat: Right.. the relation should remain up22:11
hazmatniemeyer, like i said originally if we can reattach the session that's trivial as is22:11
niemeyerhazmat: I didn't say otherwise.. I pointed out the behavior of relation-joined, pointed out it doesn't work, and pointed out we should watch out next22:12
niemeyerhazmat: You seem to agree now, so that's a good base to move on22:12
hazmatniemeyer, indeed we do need to check for the ephmeral nodes before blindly recreating them22:14
hazmatwhich would fail currently22:14
niemeyerhazmat: Phew.. woohay agreement22:14
hazmatniemeyer, i never disagreed with that, the conversation went sideways to something different22:14
niemeyerExactly22:14
niemeyerhazmat: You disagreed with the behavior of joined, but it doesn't really matter now.22:15
niemeyerhazmat: re. broken.. reading the code.. it sounds like the behavior you described is actually more useful indeed22:15
hazmatniemeyer, agreed22:16
niemeyerDouble agreement! Score! :-)22:16
hazmat:-) the docs need updating22:16
hazmatjust in time for the weekend, i should head out on that note ;-)22:17
m_3later man... thanks for the help22:17
hazmatmore openstack to do.. needed to adjust to deploy a txaws branch for esnemble22:17
hazmatm_3, cheers22:17
* hazmat grabs some caffiene22:18
niemeyerhazmat: Not entirely surprised about that debate on broken22:18
niemeyerhazmat: Looking through my mail, we've had very little debate on it22:19
hazmatniemeyer, i think we discussed it in brazil sprint and voice meetings22:19
niemeyerhazmat: Hmm22:20
niemeyerhazmat: I'm still not sure about it22:20
hazmatniemeyer, looks like we had  a long discussion on list oct 2010 re22:20
niemeyerhazmat: relation-broken seems to be called on stop()22:20
hazmathmm22:21
niemeyerhazmat: Which would put its behavior closer to the documented22:21
hazmatniemeyer, where do you see that?22:22
hazmati'm looking at unit/lifecycle22:22
niemeyerMe too22:22
niemeyer                yield workflow.transition_state("down")22:22
hazmaton stop we do a rel down transition22:22
hazmatniemeyer, right that doesn't execute broken22:23
hazmatniemeyer, it actually doesn't execute anything on a relation22:23
niemeyerhazmat: Ah, there's down_departed22:23
hazmatah. your looking at the workflow22:23
hazmatniemeyer, those are for when the relation is broken while the relation was down22:24
hazmatwe still execute the relation-broken hook to give a final chance of cleanup 22:24
m_3sorry... relation broken while down?22:25
hazmatm_3, if the relation is an down/error state, we still execute the relation-broken hook on a unit if the relation between the services is removed22:25
m_3ah, gotcha22:26
niemeyerhazmat: There's some name clashing in the code.. we call depart when we mean break in a few cases22:31
hazmatniemeyer, depart is always break22:32
niemeyerhazmat: Except when it's not.. :-)22:32
niemeyerhazmat: relation-departed22:32
hazmatniemeyer, ah.. right.. yeah. there's a name indirection there22:32
hazmatniemeyer, yeah.. ic what you mean22:33
niemeyerhazmat: It's all good, though.. you are right, we need to fix docs for broken22:33
niemeyerhazmat: I wonder if we can simplify the logic around that workflow significantly in the future, with a more direct state machine22:35
niemeyerhazmat: self._current_state.. self.relation_joined().. self.relation_changed().. etc22:36
hazmatniemeyer, you mean fold the lifecycle and workflows together?22:36
niemeyerhazmat: Yeah22:36
hazmatyeah.. possibly it was useful for some contexts like resolved where having the separate decisions points was very useful22:36
hazmatto distinguish things like with hooks retry vs. not but that could be encapsulated differently22:37
niemeyerhazmat: Still.. we could probably come up with a way to encode the changes into functions themselves22:37
hazmator when we decided to execute change after join always22:38
nijabaRoAkSoAx: pong (late)22:38
niemeyerhazmat: Anyway.. random wish to make it simpler really.. maybe not possible, don't know..22:38
hazmatniemeyer, yeah.. it does feel like a redundant layer through most of the workflow22:39
hazmatworkflow.py that is22:39
niemeyerRight22:39
hazmatniemeyer, yeah.. i thought about just having functions attached as transition actions directly on the state machine22:39
hazmatthat was actually one of the original designs, but per discussion we wanted to keep things to as pure of a state machine as possible22:40
hazmati just went with something as static and simple as possible in the workflow def 22:40
hazmatbut the extra layer there hasn't really proved useful.. 22:40
hazmatits always effectively a one liner to the lifecycle method from the workflow22:41
niemeyerhazmat: Yeah.. I mean really having two layers.. e.g.22:41
niemeyerdef relation_joined():22:41
niemeyer    ... do stuff22:41
niemeyerdef start():22:42
niemeyer    ... call start hook ...22:42
niemeyer    self._state = "started"22:42
niemeyeretc22:42
hazmatthere's global state to manage on some of these though22:42
niemeyerThen, another class22:42
niemeyererr = hooks.install()22:42
niemeyerif err == nil:22:42
niemeyer    hooks.start()22:42
niemeyeretc22:42
niemeyerThis feels easier to grasp/manipulate somehow22:43
hazmatthe lifecycle methods should correspond directly to those hooks.*22:43
hazmatwe could hook them up directly to the workflow def22:43
niemeyerhazmat: Yeah, I know it's not too far.. we just have a few "padding layers" there22:43
niemeyerhazmat: But I think we also need some separation in a few cases.. we don't have that external driver that says what to do22:44
hazmatyeah.. it should be easy to drop all the action methods on workflow, and have the transition action directly invoke the lifecycle method22:44
niemeyerhazmat: Feels a bit like inverting responsibility22:44
niemeyerhazmat: Right, that's what I'm trying to get to if I see what you mean22:44
hazmatanyways.. i should get back to openstack.. i need to sign off soon22:44
hazmatniemeyer, i do22:44
niemeyerhazmat: Awesome, have a good weekend.. I should be off in a bit too22:44
hazmatniemeyer, have good weekend22:45
hazmat^a22:45
niemeyerCheers!22:45
m_3great weekend guys... thanks22:46
hazmatnice.. txaws running from branch.. 22:57
* hazmat crosses fingers on openstack deploy22:57
hazmatsweet, deploy working!22:57
* hazmat does a dance22:57
niemeyerhazmat: WOOT!23:30
niemeyerhazmat: Man.. that requires beer23:30
niemeyerI'll step out immediately to get some :-)23:31
niemeyerA good weekend to all!23:31
_mup_Bug #829829 was filed: test_service_unit_removed eventually fails <Ensemble:New> < https://launchpad.net/bugs/829829 >23:51

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!