/srv/irclogs.ubuntu.com/2013/07/24/#juju-dev.txt

davecheneyarosales: ping00:04
davecheneywallyworld: ping00:04
bigjoolsmorning00:06
davecheneyjamespage: ping,00:10
davecheneythank you for uploading 1.11.4 into saucy00:10
davecheneyany issues ?00:10
* thumper waves00:36
davecheneythumper: if we branch 1.1200:39
davecheneyis the bot going to be able to cope with this ?00:39
thumperNFI00:39
davecheneysurvey says: fuckup00:40
davecheneythumper: do I need to wait for william on branching 1.1200:44
davecheneyor do you speak for him ?00:44
davecheneyor in fact does he speak for you ?00:44
thumper:)00:44
davecheneyit is hard to make him out, from his exhaultedly high architects chair00:44
thumperwilliam is on holiday00:44
thumperif we need it done now00:44
thumperdo it00:44
thumperI'll take any heat - although I expect only the good kind00:45
davecheneywe don't need to do it _RIGHT_NOW_00:45
davecheneybut it feels like the right time00:45
thumperdo it00:45
davecheneyand that way we can have a stable release in backports when you go to Isle of Man00:45
davecheneythis bit was imporant to Mramm00:45
* thumper nods00:45
davecheneyimportant either00:45
davecheneysodding, shit00:53
davecheneythe bot will have to own the series branch right ?00:54
thumperdavecheney: why do we want a bot controlled series branch?01:06
davecheneyso the bot owns juju-core/trunk01:07
davecheneyis it ok for ~gopher/juju-core/1.12 to be a thing ?01:08
thumpersure is01:09
davecheney/s/gopher/gophers or whatever our team is called01:10
davecheneyok, let me see if I can figure out how to do that01:10
davecheneywhere can I list the series for a project ?01:11
davecheneyapart from the graphy thing on the front page ?01:11
davecheneyah, ok, i think i have it now01:12
axwhey folks. does whatever bot that does the merging not also update bug status to "fix committed"?01:21
axwis that a manual step?01:21
axwalso, is there an up-to-date doc describing merge procedures? cos CONTRIBUTING talks about lbox submit, which apparently isn't used anymore01:22
bigjoolsaxw: the bot should mark linked bugs as committed, yes01:23
bigjoolsbut they have to be linked to the branch01:23
bigjoolserrr not the bot sorry, Launchpad's branch scanner will do it01:24
bigjoolswhen it sees the branch merged01:24
bigjoolsCONTRIBUTING needs fixing, as you noticed :)01:24
axwI assume that would've run in the last 12 hours01:25
axwhttps://code.launchpad.net/~axwalk/juju-core/lp1203935-ec2-octal-prices/+merge/17631501:25
axwis merged01:25
bigjoolsyes01:25
axwbut the bug is still in progress01:25
* bigjools looks01:25
axwbut... the mp says pending?01:25
bigjoolshuh what's up here01:26
bigjoolsoh the pending is because reviews are done on shiteveld not LP, so there's no approvals on the MP itself01:26
bigjoolslbox should do that really01:27
bigjoolswhat am I saying, lbox should die01:28
thumper:)01:28
* thumper tries to focus01:28
axwis the pending status stopping the scanner from updating the bug?01:29
axwor something else is wrong?01:29
bigjoolsaxw: not entirely sure, thumper might know?01:30
bigjools(he wrote most of that code)01:30
* thumper looks up01:30
axwbigjools: nps, thank you01:30
axwah01:30
axwthumper: my MP is merged, but the bug wasn't automatically updated01:30
bigjoolsthumper: branch scanner has not set fix committed on a linked bug where the branch is merged01:30
axwcurious what I did wrong, or missed01:30
thumperLP has never done that AFAIK01:30
thumperbut people wrote scripts01:31
bigjoolsreally?01:31
thumperreally01:31
bigjoolsdoes tarmac do it?01:31
thumperI think so01:31
bigjoolsI've seen it done01:31
bigjoolsah01:31
axwtarmac?01:32
bigjoolsaxw: was the bug linked before marking the MP approved?01:32
bigjoolsTarmac is the landing bot code01:32
axwbigjools: yes01:32
bigjoolsok so either it's a bug in Tarmac or something else is wrong, but no idea what!01:33
axwmkay01:33
bigjoolsI've definitely had this working on other projects01:33
axwnever mind, not a big deal for now01:33
bigjoolsyeah, you can manually mark it01:33
davecheneybigjools: how do I branch from a tag ? bzr branch -r ... lp:... ?01:44
bigjoolsdavecheney: bzr help revisionspec01:45
bigjoolsbzr branch -r tag:BLAH lp:thing01:45
davecheneythank you01:45
davecheneyi would grumble that every dvcs has a different convetion for rev specs01:46
davecheneybut actally i'm just a dumpass01:46
davecheneydumbass01:46
bigjoolsheh, np01:46
bigjoolsbzr's help is actually very good, I reckon01:46
davecheneythumper: would you think it is safe to say to #eco that 1.12 won't have the worlds best local provider, and they should follow 1.13 ?01:48
thumperwho is #eco?01:49
thumperum... world's best?  it is likely to get continual improvements01:49
thumperhopefully we won't be too long between non-dev releases01:49
davecheney#eco is m_3 marcoceppi etc, who lurk elsewhere01:49
thumperso 1.14 should be soon enough (I hope)01:49
marcoceppio/01:50
davecheneyto be more specific, 1.12 (stable) won't see a lot of lxc fixes01:50
davecheneywe'll deliver a better version in 1.1401:50
thumpercorrect01:50
davecheneythumper: cool, thanks for clarifying01:50
thumperI don't see us spending much time fixing things in 1.1201:50
* davecheney has given up trying to branch locally01:50
davecheneytoo slow on this tiny internet01:50
davecheneyhttps://launchpad.net/juju-core/1.1202:00
bigjoolsdavecheney: add a trunk series and you'll get a prettier graph02:35
bigjoolsoh wait there is one, ignore me02:36
davecheneybigjools: pretty isn't the word i'd use for it :)02:37
davecheneyelongated springs to mind02:37
bigjoolsI did say "prettier".... it's all relative :)02:37
bigjoolsit reflects your lack of release branches though02:38
davecheneybigjools: if you squint, the shape looks like a cowboy hat02:38
axwso.. I might be full of crap, but it seems that one of the cmd/juju tests is a bit wrong/broken02:39
axwUpgradeJujuSuite.TestUpgradeJujuWithRealUpload always builds tools from the trunk02:39
bigjoolsdavecheney: seems appropriate02:39
davecheneyaxw: wouldn't surprise me02:39
axwis this intended?02:39
davecheneyaxw: probably not02:41
axwactually02:43
axwI am full of crap02:43
axwignore me02:43
davecheneyaxw: glad you figured it you :P02:53
* thumper might do some more clean up of code03:05
thumperbeen writing documents03:05
davecheneyurgh, lunch coffee tastes like armpit03:20
wallyworld_thumper: pingy ping03:39
thumperwallyworld_: hey03:39
wallyworld_so, i've finally done some work in my validation branch to satisy rogr hopefully. to do it as a plugin.... i was thinking i'd make a plugin dir, add the cmd in there, and update the release scripts03:40
thumperwallyworld_: hmm... sounds interesting...03:41
thumperhowever03:41
wallyworld_so the juju-foo binary is put in the deb03:41
thumperthe point I raised about doing it as a plugin is to keep it out of the tree03:41
thumperand out of band03:41
thumperif you are just going to put it into the tree and build a binary and ship it03:41
wallyworld_i think it belongs in the tree03:41
thumperjust keep it in the freaking tree as a command03:41
wallyworld_ok03:42
thumperit makes zero point to have a plugin in the tree03:42
wallyworld_it belongs in the tree because the validation is tied to the version of juju03:42
thumpercommand is best IMO then03:42
wallyworld_ok03:42
thumperanother trivial gc prefix branch https://codereview.appspot.com/1175404303:43
wallyworld_when i say tied to..... it's not right now but there may well be thinsg we build into the metadata that only later version of juju can rad03:43
wallyworld_read03:43
thumperwallyworld_: that's good enough for me03:44
wallyworld_ok, ta. will re-propose03:44
bigjoolsI have a failing test locally, what is wrong here folks? http://pastebin.ubuntu.com/5906306/03:48
davecheneybigjools: "-":"0"03:49
davecheney^ weird key in the map03:49
bigjoolsyeah - nothing I changed either03:49
davecheneybigjools: o_O, where does the "-" leak in from status ...03:51
bigjoolsI dunno, I know very little about this stuff03:53
* davecheney runs tests03:54
bigjoolsI suspect a local setup problem but I've no idea how to work out what03:56
bigjoolsthe test looks fragile03:56
davecheneybigjools: it is03:59
davecheneyi tried to use the same test harness to validate both json and yaml outputs04:00
wallyworld_thumper: you free for a hangout sometime?04:01
m_3hey gang, anyone have a quick pointer to syntax for 'relation-get' from within a hook?   I'm looking for args04:01
davecheneym_3: shoot04:01
davecheneywhat have you tried ?04:01
* davecheney goes to look at the source04:01
thumperwallyworld_: sure, if you don't mind getting interrupted by me being a manual gps service04:03
m_3getting breakage from... popen("relation-get --format json - $node", 'r');04:03
wallyworld_thumper: it can wait till you're free04:03
m_3davecheney: I'm guessing that I can't pass in the unit-id04:03
davecheneym_3: - $node looks suspect04:04
m_3yeah04:04
davecheneydid you mean -- $node ?04:04
thumperwallyworld_: ok04:04
davecheneyahh, this is interesting04:05
davecheney                if c.Key = args[0]; c.Key == "-" {04:05
davecheney                        c.Key = ""04:05
davecheney                }04:05
m_3davecheney: nope, the syntax was a single '-' apparently04:05
davecheneylooks like we consume it and remove it04:05
thumperm_3: do you have more context04:05
thumperone line isn't helping with language either04:05
m_3thumper: from within a hook, you'll typically call `relation-list`04:06
m_3thumper: then loop on the results of that and do a `relation-get --format json - $remote_unit` to get info for each of the related units04:06
thumperm_3: right, so I'm assuming bash?04:07
m_3actually python04:07
thumperin which case the $ looks wrong04:07
m_3popen("relation-get --format json - $node", 'r');04:07
thumperm_3: can you pastebin the whole thing?04:08
m_3sure04:08
m_3hahaha04:08
m_3ok, sorry... php04:08
m_3fuck my life04:08
m_3mediawiki charm... lemme find the link04:08
davecheneym_3: that's going on the quotes page04:08
m_3but really, I'm guessing something changed between py and go wrt this '-'?04:09
m_3do we expect the current relation get to accept a unit-id?04:09
davecheneypls hold, bootstrapping04:10
davecheneyactually, don't need to do that04:10
m_3thumper: context... http://bazaar.launchpad.net/~charmers/charms/precise/mediawiki/trunk/view/head:/hooks/slave-relation-changed04:11
bigjoolsdo you guys have any details for the Brisbane induction sprint?04:11
davecheneybigjools: no, i was going to ask you04:12
bigjoolsheh04:12
davecheneyi'd good to see we're sticking to the code04:12
bigjoolsthe first rule of induction club ...04:13
davecheneyindeed, arrive at unknown destination, begin a linear search for your hotel04:13
* bigjools emails persons04:14
thumperm_3: dude, that is PHP!04:15
thumpernot python04:15
m_3right04:15
bigjoolslulz04:15
m_3was only looking at the system call to relation-get, not the surrounding code04:15
* thumper vomits a little into his mouth04:16
* m_3 cries04:16
thumper$node now makes sense04:16
thumperbut I can't help you04:16
m_3but really, the same thing is done in bash and python in other charms04:16
m_3relation-list... relation-get - unit-id04:17
thumpersure...04:17
thumpermy lack of ability to help is more around NFI what the actual commands do04:17
thumperor return04:17
thumperetc04:17
m_3:)04:17
m_3yeah, I'll start grepping through core04:18
thumperI do think it is funny that one uses exec04:18
thumperthe other popen04:18
thumperto do the same shit04:18
m_3I'm not even going to start on that04:18
thumperheh04:18
thumperwallyworld_: https://plus.google.com/hangouts/_/2e05ac3602809a0997b9970e5bf785f4c607e745?hl=en04:19
davecheneysame from the old code04:22
davecheney        if self.options.settings_name == "-":04:22
davecheney            self.options.settings_name = ""04:22
davecheneythis - thing is a noop04:22
davecheneybuuuuuut, i wonder if gnuflags parses it correctly ...04:23
m_3I think I'm just gonna punt on this one.  I'll find some other stack that's working and pretty to look at in the gui04:35
m_3thanks for the help04:35
davecheneym_3: shit04:51
davecheneythat sucks04:51
davecheneyplease log a bug04:51
bigjoolsdavecheney: is there a place we can store environment bootstrap data? we need the same data at env teardown time06:33
davecheneybigjools: i'm thinking JUJU_HOME06:33
davecheneywe put a lot of other crap in there06:33
davecheneyssl certs06:33
davecheneycaches06:33
bigjoolsdirectory?06:33
davecheneyyup06:34
bigjoolson the client?06:34
davecheneyyes06:34
davecheneymaybe I misunderstood your question06:34
bigjoolsI mean user's machine06:34
bigjoolswhat happens if they do stuff from a different machine later06:34
jtv2What we need to store is information about resources on the cloud that we've allocated as part of setting up the environment.06:34
jtv2So it has to be centralized.06:34
bigjoolswhat he saud06:34
=== jtv2 is now known as jtv
bigjoolssaid06:35
bigjoolsdavecheney: nowhere centralised then?06:40
jtvdavecheney: can the provider update its own config for this sort of thing?  (It happens to be a configurable resource — provided by the user or allocated by the provider)06:40
davecheneybigjools: the two options are06:46
davecheney~/.juju and the state06:46
davecheneyjtv: yes, in theory06:46
davecheneyin practice no, it porbably doesn't have access to the state06:46
bigjools~/.juju is a non-starter really06:47
davecheneyoh sorry06:47
davecheneyone more place06:47
* davecheney smacks head06:47
davecheneythe private bucket06:47
bigjoolsotherwise destroy-environment would not work except on your original client06:47
davecheneybigjools: it is unlikely anything will work except on the original client06:48
bigjoolsprivate bucket dear liza06:48
bigjoolssrsly?06:48
davecheneyif the user does not have a whole copy of ~/.juju06:48
jtvThe private bucket...  I guess that's the EC2 equivalent of our storage account & container.06:48
davecheneyno certs baby06:48
bigjoolsso if you local machine loses its HD .... ?06:48
bigjoolsyour*06:48
davecheneyyou are royally fucked06:48
bigjools!!!06:48
bigjoolsdafuq06:48
bigjoolsprivate bucket means you'd need to know the data to get the data ...06:52
davecheneybigjools:  i can tell that you and I are going to get on like a house on fire in BNE07:06
davecheneyme telling you things07:06
davecheneyyou trying not to hit me07:06
bigjoolsthat wasn't me cutting his internets, honest07:13
=== tasdomas_afk is now known as tasdomas
rogpeppebigjools: what environment bootstrap data do you want to store?07:35
bigjoolsrogpeppe: otp, back in a while07:39
rogpeppebigjools: okeydoke07:42
bigjoolsrogpeppe: right07:51
bigjoolsrogpeppe: when we bootstrap, we have to create some storage account objects that need naming07:52
bigjoolswe're configuring that to use existing storage accounts at the moment but there's also no reason why they can't get created by bootstrap code07:53
bigjoolsbut if we do that we also need to delete them when destroy-env runs07:53
rogpeppebigjools: i think the private bucket is exactly what you need here. it's where (for instance) the id of the bootstrap instance is stored.07:54
rogpeppebigjools: so the bootstrap code already writes there07:54
bigjoolsrogpeppe: I was worried we had a chicken and egg situation07:54
rogpeppebigjools: i don't *think* so...07:54
bigjoolsis the private bucket creds/details cached somewhere?07:55
rogpeppebigjools: you name the private bucket in your environments.yaml07:55
rvbabigjools: what about creating the storage with a fixed name, derived from the environment name?  This way we won't need to store the name anywhere, because it can be derived from the env name.07:55
bigjoolsrogpeppe: can't do that, it has to be globally unique07:55
rogpeppervba: that's exactly how the private bucket works07:55
bigjoolserr rvba sorruy07:56
rogpeppebigjools: that's the same as the ec2 private bucket07:56
rogpeppebigjools: you need to choose something globally unique07:56
rogpeppebigjools: is that a problem?07:56
bigjoolsazure creates a DNS entry out of your account name07:56
bigjoolsstorage account I mean07:56
bigjoolswould you like to guess how many people are going to call their environment "azure"07:57
bigjoolsso yes it's a problem :)07:57
rvbaI see :)07:57
rogpeppebigjools: how about adding a config entry to the azure environments.yaml: global-environment-name, or something07:57
bigjoolsrogpeppe: could make it a {{rand}}07:58
rogpeppebigjools: yeah, that would probably be a good default07:58
bigjoolswe did consider this earlier, but there is a snag07:58
bigjoolsif someone wants to re-use an existing storage account instead of having juju create one on the  fly, how do we know whether to delete it or not later?07:59
rogpeppebigjools: two possibilities there07:59
rogpeppebigjools: 1) if we create the account at bootstrap time, mark the private data with "this needs cleaning up", and clean up the account at destroy-environment time only if that flag is set08:00
rogpeppebigjools: 2) just delete it regardless and document that juju always requires its own storage account08:01
rogpeppebigjools: for 2) you could probably do some sanity checking to make sure there's nothing in the account that you wouldn't expect to be created by juju08:01
bigjoolsrogpeppe: if the former, where can we store a flag?08:01
rogpeppebigjools: in the private bucket? (which presumably is in the storage account)08:02
bigjoolsinside storage accounts, you have another layer of indirection called a container, BTW.  These are separately public and private.08:02
rogpeppebigjools: hmm08:03
bigjoolsfun isn't it :)08:03
bigjoolsthere's a pricing implication as well I think, which is why I am being careful08:03
rogpeppebigjools: the container name space is within a storage account, or global?08:04
bigjoolswe took the cheap way out at the moment and made configuration of an existing account/container mandatory08:04
bigjoolswithin the account08:04
rogpeppebigjools: ah, you pay for a storage account?08:04
bigjoolsI'm not sure but I expect so08:04
rogpeppebigjools: can you delete a storage account if it has containers?08:05
bigjoolsno08:05
bigjoolsanyway I think we can write a file to the private storage for now08:06
bigjoolsit will suffice08:06
bigjoolsthanks for the advice08:07
rogpeppebigjools: hmm, this might work: at destroy-environment time, you destroy the private bucket(container) and try to delete the storage account. if it fails because there are containers, ignore the error.08:07
rogpeppebigjools: this assumes that there's no other useful stuff attached to an account, i guess08:08
bigjoolswell if someone created a storage account and didn't put any containers in it yet, they would get a surprise08:08
rogpeppebigjools: yeah, but they'll have named the account in their juju environments.yaml, and hopefully this behaviour is documented.08:08
bigjoolsrvba: I was thinking - we might *have* to create a container on the fly to ensure it's private08:08
rogpeppebigjools: or...08:09
rvbabigjools: maybe there is a way to check if a container is private and issue a warning or even an error if it's not.08:09
bigjoolsrogpeppe: well I personally dislike surprises like that, it ought to be simpler.  I think we can make it simple.08:09
rogpeppebigjools: add a "do-not-delete-storage-account" attribute to environments.yaml, i guess08:09
bigjoolsrogpeppe: jtv came up with that one too, I accused him of coming up with a developer solution and not a user solution :)08:10
rogpeppebigjools: the wrinkle that i see is that several juju environments might use the same storage account, presumably08:10
bigjoolsrogpeppe: correct08:10
rogpeppebigjools: so i guess the question is: what semantics do we want? do we want the storage acct to be destroyed after the last environment is destroyed in the acct?08:12
rogpeppebigjools: but only if the account was created automatically08:12
bigjoolsrvba: rogpeppe: my ideal scenario is to delete only if created automatically.08:13
bigjoolsand that is decided by whether you configure it or not08:13
rvbaSounds like the best story from a user pov.08:13
bigjoolsindeed08:13
rogpeppebigjools: don't you have to configure it, otherwise you won't know how to find the private bucket?08:13
rogpeppebigjools: assuming the private bucket is addressed relative to the storage account08:14
bigjoolsright08:14
bigjoolsso.... seems like we can't do this then08:14
=== racedo` is now known as racedo
bigjoolsprivacy is defined at the container level, not the account08:14
bigjoolsso if a private "bucket" is required in the config up front, we can't auto-generate anything can we?08:15
bigjoolsthis is my chicken and egg question from earlier08:15
rogpeppebigjools: how about this: you must specify the storage account name. within that, the private bucket is named after the environment name. if the storage account does not exist, it's created, but we never remove a storage account.08:17
bigjoolscould work08:18
rogpeppebigjools: i think that's a clear story to the user with minimal magic08:18
bigjoolsindeed08:18
thumpermgz: ping08:19
bigjoolsrvba: what do you think?08:20
bigjoolsrvba is too busy deploying juju-gui on azure :)08:30
=== vorpalbunny is now known as thumper
* thumper wanders off for a bit08:30
=== thumper is now known as thumper-afk
rvbarogpeppe: I /think/ it is… and that's why leaving an account after auto-creating it is a bit nasty.08:30
rvbaheh08:30
rogpeppervba: on the other hand, perhaps it's nice for a user to still have around the account that incurred the billing08:31
rogpeppervba: the user is explicitly naming it after all.08:32
rogpeppervba: we should find out definitively the cost implications of having a storage account08:33
* rvba otp08:35
rvbarogpeppe: you're right, that's really the deciding factor.09:03
rvbabigjools: ^09:03
bigjoolsrvba: let's go half way for now and auto-generate the containers09:04
bigjoolsnamed after the environment09:04
bigjoolsauto generating storage accounts is fraught with problems09:04
=== allenap` is now known as allenap
rogpeppebigjools: that seems reasonable to me. a decent error message ('Juju storage account "foo" not found - please create it and try again') could help, and make things less obscure to the user09:32
thumper-afkmgz ping09:36
=== thumper-afk is now known as thumper
jtvwallyworld_: got  a moment to introduce me to the wonders of simplestreams?09:37
mgzthumper: pong09:41
thumpermgz: hey there09:41
thumpermgz: got any voip capabilities?09:41
mgzeither hangout or mumble09:41
mgzyour pick09:42
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: thumper | Bugs: 5 Critical, 76 High - https://bugs.launchpad.net/juju-core/
dimiternrogpeppe: ping10:12
rogpeppedimitern: pong10:12
dimiternrogpeppe: hey, so the deployer needs to know state/API addresses for the simple context10:13
dimiternrogpeppe: I missed that before, do you think we should have both in the deployer facade?10:13
rogpeppedimitern: yes, i think so10:14
dimiternrogpeppe: and just return whatever's there in state10:14
rogpeppedimitern: yeah10:14
dimiternrogpeppe: ok10:14
dimiternrogpeppe: and CACert as well10:14
rogpeppedimitern: yes10:15
dimiternrogpeppe: isn't this a security issue?10:15
dimiternrogpeppe: maybe not, because it's the public cert10:15
rogpeppedimitern: exactly10:15
dimiternrogpeppe: ok then10:15
rogpeppedimitern: we'll also need to provide the private key too, but only to nodes which are configured to run the state server.10:16
dimiternrogpeppe: and there's no deployer there usually, right?10:16
rogpeppedimitern: there might be. i don't think we mind too much at this level.10:17
dimiternrogpeppe: but it's not part of the deployer api10:17
rogpeppedimitern: the deployer wouldn't need the private key. i think that would probably be something for the machineagent API10:18
dimiternrogpeppe: right10:18
wallyworld_jtv: sorry, i was at soccer training and am about to go out again. tomorrow10:22
jtvAh.10:22
wallyworld_dimitern: i'm going out for a late dinner and a movie so will miss the meeting10:22
axwgnight10:23
dimiternwallyworld_: ok10:35
dimiternwallyworld_: is there a rising trend there? :) kidding10:35
rogpeppei'm looking for a review on https://codereview.appspot.com/11723043/ if anyone cares to take a look10:38
dimiternrogpeppe: looking10:47
davecheneywhat ?10:51
davecheneyi can have a ubuntu edge phone for $62510:51
davecheneyor iu can have the same phone for $67510:51
davecheneyor $60010:51
davecheneyor 80010:51
davecheneyor 83010:51
davecheneyor 700 in packs of two10:51
davecheneyWHAT THE FUCK10:51
dimiternrogpeppe: reviewed10:52
rogpeppedavecheney: weird, ain't it10:52
rogpeppedavecheney: so much for the "for 24 hours only" thing10:52
rogpeppedimitern: ta10:52
dimiterndavecheney: you can't for less than 700, no longer10:52
dimiterndavecheney: ha!10:53
dimiterndavecheney: they updated it again :)10:53
dimiterndavecheney: it seems the campaign started skidding and they refreshed it to up the flattening curve :)10:53
davecheneyif I had pledged $800 I would feel fucking ripped off10:54
* davecheney writes to Jane10:54
rogpeppedavecheney: the 825 payers will be refunded10:55
rogpeppedavecheney: apparently10:55
rogpeppedimitern: is there really a point in a blank separation line when there are only two imports?10:55
rogpeppedavecheney: the only point of the blank line is so that each section is sorted, which is unnecessary there10:56
rogpeppeoops10:56
rogpeppes/davecheney/dimitern/10:56
rogpeppedimitern: ignore me, sorry, i'll just make the change as requested10:56
dimiternrogpeppe: the idea is to format imports as agreed10:57
davecheneydimitern: what rogpeppe said10:58
dimiterndavecheney: uh?10:58
davecheneygah11:00
* davecheney gets another beer11:00
* rogpeppe hands davecheney a few beers11:00
davecheneyemail sent11:01
davecheneythis is not quality11:01
davecheneywe are a quality organisiation selling a top shelf (and top price) product11:02
davecheneybut someone is acting like they are running a fire sale11:02
dimiternrogpeppe: how about having a NetworkInfo call in DeployerAPI which returns Addresses, APIAddresses and CACert?11:02
dimiterndavecheney: +111:02
rogpeppedimitern: thinking11:03
dimiternrogpeppe: and at client-side it will be cached11:03
davecheneyand with that career limiting move, i leave you in the grace and favor of the lord11:04
rogpeppedimitern: yeah, i think that's reasonable; we'll probably want to watch all those things later.11:04
rogpeppedimitern: not entirely sure about the NetworkInfo name though11:04
dimiternrogpeppe: i was sure about that :) let's bikeshed it11:05
rogpeppedimitern: if you're happy with it, gfi11:05
dimiternrogpeppe: i'm open to suggestings11:05
dimiternsuggestions11:05
rogpeppedimitern: i haven't thought of anything better yet. my reservation is it isn't really information about the network - it's information about how to connect to the state servers.11:07
rogpeppedimitern: maybe ServerInfo ?11:07
dimiternrogpeppe: good point11:07
dimiternrogpeppe: I like ServerInfo11:07
dimiternrogpeppe: will do and propose it shortly11:08
dimiternrogpeppe: that's obviously a non-bulk call11:08
rogpeppedimitern: oooh noooo!11:08
dimiternrogpeppe: :D11:08
rogpeppedimitern: no, but it must be a bulk call!11:08
dimiternrogpeppe: well I can pretend to make it bulk11:08
rogpeppedimitern: params []struct{} :-)11:08
dimiternrogpeppe: like give me this number of the same struct as results :)11:09
rogpeppedimitern: yup11:09
dimiternrogpeppe: it can be without args, right?11:09
dimiternrogpeppe: at server-side11:09
* rogpeppe still finds the bulk call thing very hard to deal with11:10
rogpeppedimitern: yes11:10
dimiternrogpeppe: cool11:10
dimiternrogpeppe: but wait.. maybe at least a machineTag, so I can call AuthOwner on it?11:11
rogpeppedimitern: wat?11:11
dimiternrogpeppe: no authorization at all? free for all?11:11
rogpeppedimitern: the machine agent has already authorized11:12
dimiternrogpeppe: so any agent11:12
rogpeppedimitern: well, any agent which can create a deployer API, yes11:12
dimiternrogpeppe: how do we guarantee this?11:13
rogpeppedimitern: guarantee what?11:13
dimiternrogpeppe: the only thing we check is AuthMachineAgent in NewDeployerAPI11:14
rogpeppedimitern: isn't that enough?11:15
dimiternrogpeppe: so any MA can call it11:15
rogpeppedimitern: definitely11:15
rogpeppedimitern: any MA can run a deployer, right?11:15
dimiternrogpeppe: but arguably the info ServerInfo returns you probably already know11:16
dimiternrogpeppe: except the state addresses11:16
rogpeppedimitern: yes11:16
dimiternrogpeppe: which is a huge security hole I think11:16
rogpeppedimitern: really?11:16
dimiternrogpeppe: maybe not return state addresses11:16
rogpeppedimitern: why is knowing the state addresses a security hole?11:17
dimiternrogpeppe: well, if any rouge MA can connect directly to state, then why we need the API?11:17
rogpeppedimitern: just having the address doesn't allow you to connect11:17
rogpeppedimitern: you need an identity and password too11:17
rogpeppedimitern: the address is not secret11:17
dimiternrogpeppe: well, if you were able to connect to the API to call ServerInfo, you probably can connect to state with the same creds, no?11:17
rogpeppedimitern: no11:18
rogpeppedimitern: the two sets of credentials are separate11:18
dimiternrogpeppe: ah, ok11:18
dimiternrogpeppe: but setpassword sets them both, right?11:18
rogpeppedimitern: currently, yes (because everything connects directly to mongo)11:18
dimiternrogpeppe: so it is a security leak then11:19
rogpeppedimitern: but in the future, SetPassword will only set the mongo password for agents that are allowed to connect to mongo11:19
rogpeppedimitern: it's not a security leak currently because the state server addresses are identical to the API server addresses11:20
rogpeppedimitern: and machine addresses are not private11:20
dimiternrogpeppe: which is the api worker in the MA on 011:20
rogpeppedimitern: yup11:20
dimiternrogpeppe: so if that gets compromised we're as good as wide open11:20
rogpeppedimitern: we should never rely on machine addresses being secret - they are easily enumerable and findable by other means11:20
dimiternrogpeppe: but other MAs rouge or not won't be able to access state11:20
rogpeppedimitern: when we've moved to API-only, that's right11:21
dimiternrogpeppe: that considerably diminishes the risk, but it's still there, we need to think about it later11:21
rogpeppedimitern: i don't see that there's a risk from publishing machine addresses11:22
dimiternrogpeppe: no, provided the creds are not the same ;)11:22
rogpeppedimitern: if something can compromise the system just from having a machine address, then our system is broken11:22
dimiternrogpeppe: for now, i agree we're no better of with publishing addresses or not11:22
dimiternrogpeppe: standup11:31
mgzwhat the hell google11:34
rogpeppemgz: we've lost you11:34
mgzgoogle logged me out of everything... for no apparent reason11:34
dimiternrogpeppe: https://codereview.appspot.com/11765043/12:25
dimiternrogpeppe: the ServerInfo stuff12:26
rogpeppedimitern: i'm sure that having three separate calls in the client API is right12:27
rogpeppedimitern: that seems to me to miss part of the point of putting them together in the first place12:27
rogpeppedimitern: if you want all the info, you're going to make three API calls, all of which return exactly the same info12:28
rogpeppedimitern: if we're going to have separate client entry points, i think we should have separate API calls12:28
rogpeppedimitern: (which i'd be just fine with - i almost suggested that)12:28
dimiternrogpeppe: I prefer to limit the number of calls at the server, if possible12:31
dimiternrogpeppe: I was thinking of making a single serverInfo call at construction time12:31
rogpeppedimitern: construction of what?12:31
dimiternrogpeppe: and cache them, but that seemed wrong - could they change?12:31
dimiternrogpeppe: client deployer facade12:31
rogpeppedimitern: yes, they could and will change12:31
dimiternrogpeppe: so caching is not a good idea, hence this12:32
rogpeppedimitern: we'll want a watcher too12:32
rogpeppedimitern: eventually12:32
dimiternrogpeppe: but not for the deployer12:32
dimiternrogpeppe: yeah12:32
rogpeppedimitern: when you say "limit the number of calls", do you mean the number of entry points, or the overall number of API calls at runtime?12:32
rogpeppes/at runtime/made at runtime/12:33
dimiternrogpeppe: entry points12:33
dimiternrogpeppe: because this call is special12:33
rogpeppedimitern: i think our API is vast anyway - 2 extra entry points aren't going to make any difference12:33
dimiternrogpeppe: you're probably right12:34
dimiternrogpeppe: ok, will do them separately then12:34
rogpeppedimitern: thanks.12:34
rogpeppedimitern: i think that makes sense12:34
rogpeppedimitern: and means we can use a conventional StringsWatcher for watching the addresses in the future12:35
dimiternrogpeppe: do I have to have an error result in an apiserver method, even though CACert doesn't return an error?12:36
rogpeppedimitern: no you don't12:36
dimiternrogpeppe: cool12:36
rogpeppedimitern: read the rpc docs for details12:36
dimiternrogpeppe: :) sorry, too lazy12:37
dimiternrogpeppe: I did some time ago, but forgot12:37
rogpeppedimitern: the most important bit is in the Conn.Serve documentation - the list of allowed method signatures: http://paste.ubuntu.com/5907455/12:38
dimiternrogpeppe: yeah, just revisited that12:39
dimiternrogpeppe: updated https://codereview.appspot.com/11765043/12:51
dimiternTheMue, mgz: can one of you take a look as well please? ^^12:53
rogpeppedimitern: i think i'd probably send the CA cert as a string - it's already ascii AFAIR12:54
dimiternrogpeppe: if it's []byte why pretend it's a string?12:54
dimiternrogpeppe: how about if some unicode char gets there?12:55
rogpeppedimitern: it's a PEM-encoded certificate12:55
rogpeppedimitern: which is defined to be ascii12:55
dimiternrogpeppe: so why are we not using string for it in other places?12:56
rogpeppedimitern: and is already base64-encoded12:56
rogpeppedimitern: so we'll be base-64 encoding twice12:56
rogpeppedimitern: we're not using string for it because the crypto entry points use []byte12:56
dimiternrogpeppe: we can keep it as a string and convert it to []byte before passing it to crypto calls12:57
rogpeppedimitern: i played around with quite a few permutations. it's nicer to keep it as []byte most of the time, i think12:57
dimiternrogpeppe: double encoding as base64 is not such a bad thing12:58
rogpeppedimitern: anyway, i don't mind much; if some js client wants to interpret it, i'm sure it's easy for them to b64 decode12:58
rogpeppedimitern: yeah, it's not *too* much bigger12:58
dimiternrogpeppe: the size grows only marginally12:58
rogpeppedimitern: well, a third bigger, but that's probably of no particular import here12:59
rogpeppedimitern: reviewed13:01
dimiternrogpeppe: thanks13:02
dimiternrogpeppe: MongoAddresses only server-side or both?13:03
rogpeppedimitern: both13:04
rogpeppedimitern: "Addresses" made sense as a method on the mongo-based state13:04
rogpeppedimitern: but not as an API call13:04
dimiternrogpeppe: that'll require changing Addresser interface in the deployer and several other places13:04
rogpeppedimitern: yeah, i think that's worth doing13:04
dimiternrogpeppe: why not StateAddresses then?13:05
rogpeppedimitern: because i think that's ambiguous... then again, we have "StateWorker" vs "APIWorker".13:05
rogpeppedimitern: yeah, go with StateAddresses13:05
dimiternrogpeppe: ok13:06
dimiternrogpeppe: oops13:07
dimiternrogpeppe: I think I forgot to do common.ServerError(err) when I'm returning it13:07
rogpeppedimitern: sigh13:07
rogpeppedimitern: actually, that doesn't matter here13:08
rogpeppedimitern: it's not a bulk call13:08
dimiternrogpeppe: hmm13:08
dimiternrogpeppe: sure about that?13:08
rogpeppedimitern: the usual error return always gets translated through ServerError13:08
dimiternrogpeppe: ah, right13:08
rogpeppedimitern: that's one of the things we lost by moving to bulk calls for everything13:08
dimiternrogpeppe: it was a good thing, you'll see at one point - definitely in the provisioner13:10
* rogpeppe might be more convinced if there was a single bulk call implementation that didn't just do everything serially.13:11
dimiternrogpeppe: having a bulk interface for the calls allows us to change the implementation later13:11
rogpeppedimitern: i have a feeling we standardised on a bulk call interface that's hard to implement in practice13:12
dimiternrogpeppe: to be bulk, rather than serial like now13:12
TheMuedimitern: seen your review demand, do it now13:13
dimiternTheMue: thanks13:13
rogpeppedimitern: sure there are places where a bulk interface is appropriate, but for 95% of calls it's not and never will be IMHO13:13
rogpeppedimitern: and having a bulk call interface for calls that can only ever allow one thing is just farcical.13:15
rogpeppedimitern: sorry, you got me started.13:16
* rogpeppe shuts up about bulk calls13:16
dimiternrogpeppe: :)13:17
dimiternrogpeppe: my bad13:17
TheMuedimitern: you've got a review13:18
dimiternTheMue: cheers13:18
TheMueinteresting13:42
TheMuedimitern, rogpeppe : anyone an idea? on several places tests if err == tools.ErrNoTools work, but not where I use it in bootstrap command13:43
TheMuedimitern, rogpeppe : printing the error shows, that it is that error13:43
rogpeppeTheMue: could you expand more on the context please?13:43
TheMuerogpeppe: bootstrap calls environs.Bootstrap()13:44
TheMuerogpeppe: and there Bootstrap() of the current environment is called13:44
TheMuerogpeppe: in there it is environs.FindBootstrapTools()13:45
rogpeppes/it is/it calls/ ?13:45
TheMuerogpeppe: "it is" in the sense of "it is what's called" ;)13:46
=== tasdomas is now known as tasdomas_afk
TheMuerogpeppe: and here it reads the list of the storage and then the public storage, but both are empty (what I want, that's correct)13:47
TheMuerogpeppe: so ErrNoFiles is returned upwards until my bootstrap command, where I can evaluate it/print it13:47
TheMuerogpeppe: tools.ReadList() is the one who returns it13:50
TheMuehmm, will try something13:51
TheMuestrange13:53
TheMuei'll add a print chain to see where the error is "lost" ;)13:56
TheMuewow, that's really interesting14:04
TheMuerogpeppe: in FindAvailableTools() == is true, but in FindBootstrapTools(), which calls FAT(), == is false *shrug*14:05
TheMuedimitern: btw, you asked for a link: https://codereview.appspot.com/11588043/14:07
dimiternTheMue: cheers, will take a look14:07
TheMuerogpeppe: please take a look at http://paste.ubuntu.com/5907706/14:11
TheMuerogpeppe: that's the most interesting part14:11
TheMuehmmpf, disconnected by the German Telekom14:17
rogpeppeTheMue: looking; sorry, was at lunch14:30
TheMuerogpeppe: np14:30
rogpeppeTheMue: what do you see if you print the type of the error (with %T) in each place?14:31
TheMuerogpeppe: oh, good idea, will try14:32
rogpeppeTheMue: print the error message too (with %q)14:32
TheMuerogpeppe: TYPE *errors.NotFoundError MSG "no tools available"14:36
TheMuerogpeppe: it mutates to a reference14:36
rogpeppeTheMue: you've missed the call to convertToolsError14:38
rogpeppeTheMue: you need to use errors.IsNotFoundError, i think14:39
TheMuerogpeppe: ah, cool14:40
TheMuerogpeppe: I'll tell you about the success14:40
TheMuerogpeppe: you're fucking amazing ;) thx14:42
rogpeppeTheMue: yw14:42
rogpeppetype Removerer interface {14:43
rogpeppeha ha!14:43
TheMue:D14:43
rogpeppedimitern: ping14:44
dimiternrogpeppe: pong14:47
rogpeppedimitern: i'm thinking of changing the definition of params.ErrorResults14:48
dimiternrogpeppe: oh?14:48
rogpeppedimitern: so that it's potentially forward compatible if we want to change a method to return a value in the future14:48
dimiternrogpeppe: expand please14:48
rogpeppedimitern: currently it's defined as type ErrorResults {Errors []*Error}14:48
rogpeppedimitern: i propose defining it as http://paste.ubuntu.com/5907815/14:48
rogpeppedimitern: then if a call that previously just returned an error decides to return a value, they can just create a new structure with some data in the result struct as well as the error.14:49
dimiternrogpeppe: I don't see how anything stops us from changing the methods now to do that14:50
rogpeppedimitern: you couldn't do that in a backwardly compatible way14:50
rogpeppedimitern: you'd have to change the function result to look like: type MyResults {Errors []*Error; DataResults []MyDataResult}14:51
rogpeppedimitern: whereas really we'd like to have (following the rest of the API) type MyResults {Results []MyResult} where MyResult contains the error as well as the data14:51
dimiternTheMue: reviewed14:52
rogpeppedimitern: does that make sense?14:52
dimiternrogpeppe: wait14:52
dimiternrogpeppe: we don't currently have that14:52
dimiternrogpeppe: we have func f() -> results, error, where results contain both a result and an error14:53
rogpeppedimitern: exactly14:53
rogpeppedimitern: but if you're changing an API call that used to return ErrorResults, and want to return some data, you can't get that14:53
rogpeppedimitern: because the error is directly in each result element, rather than under an Error field which it would be in the result+error case14:54
dimiternrogpeppe: I hear you14:54
dimiternrogpeppe: but still can't see why we need to change ErrorResults-returning methods to return something else14:55
dimiternrogpeppe: I need some examples14:55
rogpeppedimitern: well, as a particular example, i'm just changing the UpgraderAPI.SetTools signature. it did return extra data (the tag) but now i'm changing14:57
rogpeppe...14:57
rogpeppedimitern: it to return just an error14:57
rogpeppedimitern: it would be good if that kind of change could be done backwardly compatibly14:57
rogpeppedimitern: in all other places we give our API calls the freedom to add extra data14:58
rogpeppedimitern: i think we should do that for calls that currently just return an error too14:58
dimiternrogpeppe: how can changing a method signature ever be backwards compatible?14:58
rogpeppedimitern: easily14:58
rogpeppedimitern: if you call a method and it returns more fields than you expect, the extra fields are ignored14:59
rogpeppedimitern: if you call a method with more fields than the method expects, the extra fields are ignored too14:59
rogpeppedimitern: that's all by virtue of the json unmarshal semantics15:00
dimiternrogpeppe: can you paste your proposed changes to that method, I still can't see it, sorry15:00
rogpeppedimitern: to which method?15:00
dimiternrogpeppe: UpgraderAPI.SetTools15:02
rogpeppedimitern: basically this change just regularises our call conventions so that errors are always in result.Results[i].Error15:02
rogpeppedimitern: ok, i want to change UpgraderAPI.SetTools to look like this:15:02
rogpeppefunc (u *UpgraderAPI) SetTools(args params.SetAgentsTools) (params.ErrorResults, error) {15:02
dimiternrogpeppe: and now it looks like this15:03
rogpeppedimitern: it currently looks like this:15:03
rogpeppefunc (u *UpgraderAPI) SetTools(args params.SetAgentTools) (params.SetAgentToolsResults, error) {15:03
dimiternrogpeppe: yeah15:03
dimiternrogpeppe: so how will ErrorResults look like?15:04
rogpeppedimitern: as i pasted before http://paste.ubuntu.com/5907815/15:04
dimiternrogpeppe: but SetAgentTools returns a tag15:05
dimiternrogpeppe: as well as an error15:05
rogpeppedimitern: it did - i'm changing it so it doesn't15:05
rogpeppedimitern: there's no need for it to return a tag15:05
dimiternrogpeppe: so the question is between ErrorResults{Errors []*Error} and ErrorResults{Results []ErrorResult{Error *Error}} ?15:07
rogpeppedimitern: yup15:07
dimiternrogpeppe: and having an extra nested struct helps us how? we can add stuff to ErrorResult later?15:08
rogpeppedimitern: it's compatible with SomeOtherType{Results []SomeOtherResult{Error *Error; Data SomeOtherData}}15:09
rogpeppedimitern: that is, we can make a method return some extra data without compromising the backwards-compatibility of the API15:09
dimiternrogpeppe: but should we do that?15:10
dimiternrogpeppe: ISTM this is exactly a type of change that needs versioning15:10
dimiternrogpeppe: of the api15:10
rogpeppedimitern: not necessarily15:10
dimiternrogpeppe: speaking from software development best practices, if you will15:11
rogpeppedimitern: if a client doesn't care about the new data returned from the call, then it can happily ignore it15:11
dimiternrogpeppe: "thou shall not break the contract"15:11
dimitern:)15:11
rogpeppedimitern: i disagree. see https://developers.google.com/protocol-buffers/docs/overview under "A bit of history" for some justification.15:12
dimiternrogpeppe: these are different things15:13
rogpeppedimitern: the whole API is designed explicitly so we can get this kind of backward compatibility without having many different (fragile) versions15:13
dimiternrogpeppe: interface and its over-the-wire format15:13
rogpeppedimitern: sorry, i don't understand15:15
dimiternrogpeppe: the API defines the interface -> F(x, y) (a, b)15:15
rogpeppedimitern: ok15:16
dimiternrogpeppe: the RPC layer defines the serialization mechanism15:16
rogpeppedimitern: ok15:16
dimiternrogpeppe: you say these two don't have to match 1-115:16
dimiternrogpeppe: from the client's POV15:16
rogpeppedimitern: i'm saying that there are defines ways of changing the API so as to preserve backward compatibility15:17
rogpeppes/defines/defined/15:17
dimiternrogpeppe: and you still oppose versioning in general15:17
rogpeppedimitern: so we can change the API to F to, say F(x, y) (a, b, c)15:17
rogpeppedimitern: and clients that expected the old version will continue to work15:18
dimiternrogpeppe: so changing it to F(a, b, c) (x, y) is also ok?15:18
rogpeppedimitern: yes (assuming that F is implemented with the knowledge that c might be unset from old clients.15:19
rogpeppe)15:19
rogpeppedimitern: assuming you actually means F(x, y, z) (a, b)15:19
rogpeppes/means/meant/15:19
dimiternrogpeppe: yup15:19
dimiternrogpeppe: and if z is required then what?15:19
rogpeppedimitern: then it's not backwardly compatible15:19
dimiternrogpeppe: exactly15:20
rogpeppedimitern: but the point is that it's *possible* to change things in a backwardly compatible way15:20
dimiternrogpeppe: the same applies to the client I think15:20
dimiternrogpeppe: we cannot assume all clients will be as lenient in parsing the response as go is15:20
rogpeppedimitern: i think we can15:21
dimiternrogpeppe: it *is* possible, but fragile15:21
rogpeppedimitern: in fact, we should probably write a set of API usage guidelines that specify that15:21
rogpeppedimitern: i think versions are more fragile in some ways15:21
rogpeppedimitern: if you get the wrong version you can't speak at all15:21
rogpeppedimitern: and that applies particular to our API where we have many different kinds of client15:22
dimiternrogpeppe: and that's probably fine, because your behavior will be undefined then15:22
rogpeppedimitern: it doesn't have to be15:22
rogpeppedimitern: i'd prefer to do versioning by renaming entry points and/or facades (only) when necessary15:23
dimiternrogpeppe: could there be possible security issues with that approach?15:23
dimiternrogpeppe: buffer overruns, etc?15:24
rogpeppedimitern: how so?15:24
dimiternrogpeppe: at client-side15:24
rogpeppedimitern: then we still have the freedom to change things in a backwardly compatible way, but we can change things in a safe backwardly incompatible and fine-grained way too15:24
dimiternrogpeppe: well, i'm attempting to deserialize 2 fields and I get 515:24
rogpeppedimitern: the json package discards extra fields15:25
rogpeppedimitern: other clients will almost certainly just unmarshal to a map15:25
dimiternrogpeppe: client-side you cannot guarantee that15:25
rogpeppedimitern: and then if there are extra fields in the map, that's unlikely to be a problem15:25
rogpeppedimitern: and particularly if we document that new fields may be added, which we should15:26
dimiternrogpeppe: but not removed15:26
rogpeppedimitern: yup15:26
rogpeppedimitern: similar to the protobuf approach15:27
dimiternrogpeppe: ok, seems sane, at least I can't see obvious holes, although I'm trying15:27
dimiternrogpeppe: but please, as a separate CL15:28
rogpeppedimitern: please keep trying. i also try to find flaws in the approach15:28
rogpeppedimitern: which as a separate CL?15:28
dimiternrogpeppe: if you're going to change ErrorResults, do it everywhere in one go, separately15:28
rogpeppedimitern: that's what i'm proposing, yes15:28
dimiternrogpeppe: but please document what we discuseed about policies15:29
dimiternrogpeppe: adding fields is ok, changing or removing - not15:29
dimiterns/policies/guidelines/15:30
rogpeppedimitern: yeah. i should spend some time updating doc/api.txt15:30
dimiternrogpeppe: +10015:31
rogpeppedimitern: i've added a kanban card15:31
dimiternrogpeppe: incl. stuff mentioned in the huge doc comment about method signatures15:31
rogpeppedimitern: i'm not sure that implementation-specific stuff is appropriate for that document15:32
=== tasdomas_afk is now known as tasdomas
rogpeppedimitern: but there could easily be another document talking about that stuff15:32
dimiternrogpeppe: api_hacking.txt ?15:32
=== tasdomas is now known as tasdomas_afk
rogpeppedimitern: yeah, probably15:33
rogpeppedimitern: the doc comment is only 36 lines though. it's not *that* huge :-)15:33
dimiternrogpeppe: :)15:34
dimiternrogpeppe: the point is, it's not easy to find, once you forgot where to look15:35
dimiternrogpeppe: it's better to have docs in one place15:35
dimiternrogpeppe: possibly even moving most of it in a txt file and referring to it in the comment itself15:35
rogpeppedimitern: i'd prefer to go the other way15:35
rogpeppedimitern: the package documentation is complete and kept up to date15:36
rogpeppedimitern: it says exactly how to use the rpc package15:36
dimiternrogpeppe: either way, there has to be a link from the doc to it15:36
rogpeppedimitern: yeah15:36
rogpeppedimitern: definitely15:36
rogpeppehttp://godoc.org/launchpad.net/juju-core/rpc#Conn.Serve :-)15:36
dimiternrogpeppe: nice!15:37
mrammhey, hey16:08
mrammOSCON is going very well16:08
mrammjuju charm school went well16:08
mgzace16:10
mrammI definitely feel like we've hit an inflection point -- people are starting to get it -- and the pace of user adoption/corp interest is definitely accelerating16:11
mrammthere will be a bit of juju in mark's OSCON keynote16:12
mrammthough also quite a bit of phone16:12
mrammkeynote will be in half an hour, and will be live-streamed here: http://www.oscon.com/oscon2013/public/content/video16:12
rogpeppemramm: cool16:16
rogpeppedimitern, TheMue, mgz: any chance of a review on this: a large CL but entirely mechanical in nature: https://codereview.appspot.com/11760045/16:17
mgzlooking16:18
mrammrogpeppe: dimitern: how are things going with the API work?16:19
TheMuerogpeppe: will take a look16:19
rogpeppemramm: coming along ok, i think. the machiner now actually talks to the API. deployer and upgrader in the works.16:19
mgzrogpeppe: so, the relevent change is - version.Binary + Version version.Binary?16:19
mrammrogpeppe: that's cool16:20
rogpeppemgz: yes16:20
mgzlgtmed. I trust to bot to catch any missed bits :)16:20
rogpeppemgz: ta!16:21
mrammrogpeppe: so the uniter is the big bit that hasn't been started yet...?16:21
rogpeppemramm: yes16:21
mrammwhen do you think deployer and upgraded will land?16:21
mrammhaha -- conversation killing question... ;)16:25
TheMuemramm: ya' know, estimation is always a bad topic16:30
TheMuemramm: :D16:30
rogpeppemramm: oh sorry, didn't see your question16:36
rogpeppemramm: i'm quite hopeful for upgrader this week, assuming i don't get too bogged down with reviews16:36
TheMuerogpeppe: you've got another revie16:37
TheMuereview16:37
rogpeppeTheMue: thanks!16:37
TheMuerogpeppe: yw16:41
rogpeppeweird, my machine is running like a dog, the load average is 8, the system monitor shows all cpus pegged around 100%, but then adding up the all the processes' cpu percentages comes to about 20%17:11
rogpeppewhere's my power going?!17:11
rogpeppei guess it can only be something in the kernel17:12
dimiternrogpeppe: try powertop17:12
dimiternrogpeppe: in these cases I usually blame either compiz or Xorg17:13
mrammjuju section of mark's talk starting now17:17
rogpeppedimitern: here's ErrorResults changed as we talked about: https://codereview.appspot.com/11674045/17:22
dimiternrogpeppe: LGTM17:25
rogpeppedimitern: thanks. anyone else still around for a review?17:25
dimiternTheMue: ?17:28
* rogpeppe has to go17:37
rogpeppedimitern: see ya tomorrow17:37
rogpeppedimitern: thanks as always for the prompt reviews :-)17:38
rogpeppeg'night all17:38
dimiternrogpeppe: 'night!17:38
benjigary_poster: heh, I forgot about the presentation and was at lunch; I'm glad it worked ;)18:03
TheMuerogpeppe: if you're looking: lgtm18:41
thumpermorning20:49
thumperwho knows MAAS?21:05
* thumper looks for bigjools21:05
hallyno/21:54
thumperhey21:54
thumperso, right now I have a package that wraps lxc as juju cares about it21:54
thumperalso right now there is one and only one network config21:54
thumperthat uses veth21:55
thumperthis works fine for the local provider21:55
thumperwhat I'm thinking is having a way *waves hands* for the container manager to ask for network config21:55
thumperand will get one of three responses21:55
thumperuse host - which means we don't configure any network bits21:55
thumperuse device - and pass in the device name21:55
thumperso uses the phys setting21:56
hallynjust to be clear - you do not want to be in the business of juju creating an openvswitch GRE based network right?21:56
thumperor use default21:56
thumperis that related to SDN?21:56
hallynyes21:56
thumpernot just yet21:56
hallynk21:56
thumperI'm deferring any SDN discussions to IOM21:56
thumperthe idea of using the host networking will mean we can have semi-functional containers on hosts that won't give us extra IP addresses21:57
thumperlike openstack21:57
thumperthe default veth stuff is how we'll use local provider21:57
thumperbut the ideal is to have a new device created and passed through21:57
thumperwhich means the networking *should* be set up automagically21:57
thumperso we can default all the providers to use the host networking initially21:57
thumperand implement the physical nic creation as we can21:58
thumperwith the physical bits meaning we won't have port clashes in the containers21:58
thumperso two containers could have the same ports open21:58
thumperwhich obviously we wouldn't be able to with the host network option21:58
thumperdoes that sound reasonable to you?21:59
hallyni think it'd be worth having smoser in on this conversation (or zul) as they would know more about what openstack and maas can provide21:59
thumperhallyn: well I have talked with lifeless about openstack21:59
hallynwhat is 'use default'  for case 3?21:59
thumperand openstack isn't going to give us extra IPs21:59
thumpercase 3 is the veth that works for local provider22:00
thumperbridge over lxcbr022:00
thumpercase 1 and 2 are for cloud providers22:00
hallynok22:00
hallyni understand what maas will do.  i'm still not clear on what you plan to get from openstack22:01
thumperI'm actually feeling like this might acctually work L)22:01
thumperthe plan for openstack at this stage is to use the host network22:01
thumperand deal with the limitations of port clashes22:01
thumperuntil we have a possible SDN22:01
thumperI think SDN is the only way we'll get proper network isolation for openstack22:01
thumpergiven what I have been told about openstack networking22:02
hallynwhat is lifeless' relation to openstack?22:02
thumperlifeless now works for HP on their openstack on openstack22:02
hallyni see no reason to take it for granted that we *can't* support multiple ip's per instance22:02
thumperhallyn: neutron as it is now won't allocate multiple ip's for a cloud instance22:03
thumperand also aparently the NAT is done prior to getting to the host22:03
thumperso if you did have multiple IPs, you wouldn't know anyway22:03
thumperso I'm deferring caring about containers inside openstack for now22:03
hallynthumper: the 'right now' matters to your demo, but should not limit our long-term planing22:03
thumperbut containers to deploy openstack is important22:04
hallynthat's good :)  (deferring caring on openstack)22:04
thumperright22:04
thumperI think the "correct" approach in the future is to have SDN for the containers22:04
thumperso we have a "cloud" of containers inside our cloud22:04
hallynthumper: I'm not 100% sure, but seem to recall that was rejected at last sprint22:04
thumperwhich is getting a little meta22:04
thumperrejected because we thought we wouldn't need it22:04
thumperso either22:05
thumperwe need to fix openstack to support our use case (like AWS)22:05
thumperor have another solution22:05
thumperalso22:05
hallynI thought it was rejected bc we didn't want to complicate things on behalf of cloud providers which dont' fully do their job22:05
thumperazure only gives one IP address22:05
hallyn(that's my own phrasing :)22:05
thumperyeah, kinda22:05
hallynok.22:05
thumperbut I guess it matters to how much we want to support containers on clouds that don't do their job properly22:06
thumperfrom what I've seen, EC2 will work fine22:06
thumperand MAAS should work22:06
hallyni don't mean to beat this to death - my only point is: openstack is OSS, so we should not let current limitations limit our long term planning22:06
thumpersure22:06
thumperwe could have openstack updated to support our use case22:06
thumperwhich could mean we don't need SDN at all22:06
thumperit may well be the easier approach22:06
thumperin fact,22:07
thumperif we get containers working nicely on MAAS, and EC222:07
thumperthen we can point at openstack and say "you need to work better"22:07
thumperand provide concrete use cases22:07
hallyni was thinking more of working with zul to push patches to do what we need :)22:07
thumperI've found that concrete problems are the best way to get new features \22:07
thumperaye22:07
* thumper tries to remember who zul is22:07
hallynbut yeah we would still use the 'look there' to help push the patches22:07
hallynChuck Short22:08
thumperah Chuck22:08
thumperyeah, just poked mup22:08
hallynTHE22:08
hallyn:)22:08
hallynhttp://whereschuck.org/22:08
hallynon that note, it's roundabout dinner time - ttyl22:09
thumperok22:09
thumperthanks for your help22:09
hallynnp - i'll check backlog later if you have more questions, but sounds like you have a plan22:09
thumperI do22:11
thumpernow to see if the plan works22:11
* thumper goes to the gym while amazon spins things up23:55

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