/srv/irclogs.ubuntu.com/2013/09/18/#juju-dev.txt

davecheneynatefinch, thumper: https://bugs.launchpad.net/juju-core/+bug/122684000:57
_mup_Bug #1226840: Windows client needs to make unix paths when working with the bootstrap node <juju-core:Fix Committed by natefinch> <https://launchpad.net/bugs/1226840>00:57
davecheneydoes this need to be backported to 1.15.0 (trunk series ?)00:57
axwdavecheney: disregard my email. I just checked the PPA myself01:13
axwI would like to know where go gets picked up from though01:13
davecheneyaxw: ok01:18
davecheneyaxw: are you saying, when we biuld into juju:ppa/stable, which version of Go does it use ?01:18
davecheney/s/saying/asking01:19
axwaye01:19
davecheneyok, that is level 11 magic01:20
davecheneyme finds link01:20
axw:) thanks01:20
davecheneyhttps://launchpad.net/~juju/+archive/stable/+edit-dependencies01:20
davecheneythis stable ppa has a dependencie on juju-golang01:21
davecheneyin effect, juju-golang is inserted into the apt sources01:21
davecheneybefore apt-get install golang-go01:21
davecheneyso that is how we build with a go that isn't in any of the series'01:21
thumperdavecheney: yes01:21
thumperdavecheney: I'll do it01:21
thumperdavecheney: I tried proposing just that change to lp:juju-core, but it had heaps of conflicts, so I left it until after the gym01:22
thumperback now01:22
davecheneythumper: cool, thanks for keeping on top of it01:22
davecheneyi love the smell of backports in the morning01:23
axwdavecheney: thanks01:24
davecheneyaxw: so that is how it works, i'm not sure if that answers all the questions01:25
axwdavecheney: yes, I was just curious how it works01:25
axwdavecheney: I didn't realise the PPAs built with CGO_ENABLED=001:25
davecheneyaxw: if they are, it's a massive bug01:25
axwdavecheney: well the dev PPA binaries are statically linked01:26
davecheneyaxw: say again01:26
davecheneythat should not be the case01:26
davecheneythe whole reason for this dependant ppa stuff was to accomodate the (now depricated) gwacl cgo dependency01:26
axwdavecheney: I just downloaded the raring 1.13.3 dev build01:26
axwand "juju" is statically linked01:27
axwdavecheney: I only care because net.LookupIP breaks if you feed it an IP in non-cgo01:28
axwhtus I01:28
axwerk01:28
davecheneyaxw: sudo apt-add-respository ppa:juju/juju-golang01:28
davecheneysudo apt-get install golang-go01:28
davecheneyplease check01:28
davecheneyand raise a bug01:28
axwok01:28
davecheneythere is so much shit breaking i cannot keep on top ofit01:28
axwdavecheney: no worries :)01:28
davecheneylucky(~/go/src) % file /usr/lib/juju-1.14.0/bin/juju01:29
davecheney/usr/lib/juju-1.14.0/bin/juju: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped01:29
davecheneydoes not appear to be the case01:29
davecheneyi am confused that you are seeing different results01:29
axwdavecheney: https://launchpad.net/~juju/+archive/devel/+files/juju-core_1.13.3-1~1737~ubuntu13.04.1_amd64.deb01:29
axwget that01:29
davecheneyquantal ?01:29
axwraring01:29
davecheneysorry01:29
davecheneyaxw: could you please raise an issue01:30
davecheneyotherwise i'm likely to get ... SQUIRREL!01:30
axwdavecheney: yep I will01:30
axw:)01:30
axwooh look at the dog with the fluffy tail01:30
davecheneyPONY!01:31
axwdavecheney: https://bugs.launchpad.net/juju-core/+bug/122690201:36
_mup_Bug #1226902: ppa builds are built without cgo <juju-core:New> <https://launchpad.net/bugs/1226902>01:36
davecheneyta01:37
thumperdavecheney:  https://codereview.appspot.com/1324105301:39
davecheneythumper: LGTM, tahnks01:41
axwdavecheney: golang-go has CGO_ENABLED=1, so nfi01:42
davecheneythat is batshit crazy01:43
davecheneyis it blocking you today ?01:43
axwdavecheney: I can work around it for now01:43
davecheneyok01:43
davecheneythumper: when you close this one https://bugs.launchpad.net/juju-core/+bug/122684001:44
_mup_Bug #1226840: Windows client needs to make unix paths when working with the bootstrap node <juju-core:In Progress by thumper> <https://launchpad.net/bugs/1226840>01:44
davecheneyplease mark it fixed agaist 1.14.1 and 1.15.001:44
davecheneyor something01:44
thumperdavecheney: cleaned up the bug showing 1.14 series target, with 1.14.1 milestone02:08
thumpertaking main task as trunk02:08
davecheneythumper: thank you, you are a very impressive man02:08
davecheneyhow do you do that02:09
davecheneyi usually say 'target to series, then choose trunk and 1.14'02:09
davecheneyhow do you do it ?02:09
davecheneyaxw: could I draw you attention to https://canonical.leankit.com/Boards/View/103148069/10684417002:09
thumperI just said "target to series" and selected 1.1402:09
davecheneyand ask that if it won't happen, you retarget the issue02:09
davecheneyand not trunk02:09
davecheneymaybe that is where I was ging wrong02:09
thumperthe set the milestone on that for 1.14.102:09
thumperno, didn't select trunk02:10
thumperthat way the main bug task stays there and active02:10
thumperand set the milestone for the main task to be 1.1502:10
axwdavecheney: if I fix this issue in time, I'll get onto that02:10
axwgood chance it won't happen, in which case I'll retarget02:10
thumperdavecheney: probably either is fine02:10
davecheneyaxw: i don't think this is critical for 1.15.002:10
* davecheney makes a 1.15.1 milestone02:10
davecheneythumper: wallyworld___ could you please put your heads together and reply to https://lists.ubuntu.com/archives/juju-dev/2013-September/001591.html02:13
wallyworld___ok02:14
wallyworld___if i can get my next 2 branches landed, we'll be good from my perspective02:14
wallyworld___i'll reply in a bit02:14
davecheneycool02:15
thumperdavecheney: ack02:17
thumperdavecheney: all my pending stuff is landed now02:17
thumperso a +1 from me,02:17
thumperjust reviewing wallyworld___'s branch now02:17
thumperI think wallyworld___ is trying to go for a record of trailing underscores02:17
wallyworld___i've had longer02:17
wallyworld___that's what she said02:17
davecheneywallyworld___: the door is over >>>>> there02:18
thumperheh02:18
wallyworld___i'm here till Wednesday02:18
davecheneywallyworld___: https://twitter.com/RikerTips/status/37201804178713804902:19
wallyworld___lol02:20
wallyworld___even though i *hate* twitter02:20
wallyworld___i hope the IPO fails02:20
wallyworld___i also hate facebook and anything else vaguely related02:20
bigjoolsshall we get off your lawn?02:21
wallyworld___yes!02:21
wallyworld___or i will hose you02:21
* bigjools tingles with excitement02:21
* wallyworld___ does too02:21
thumperwallyworld___ is going to eschew all technology made after 198602:37
wallyworld___noooo, just social media, which is pointless crap02:38
davecheneythumper: have you seen my 8 track player ?02:38
wallyworld___who cares if so and so took a huge dump this morning and then brushed his teeth. seriously02:38
wallyworld___mindless drivel02:38
davecheneyhttps://launchpad.net/juju-core/trunk02:41
davecheney^ is it possible to hide the old milestones02:41
davecheneythis list is longer than wallyworld___02:41
=== wallyworld___ is now known as wallyworld
thumperdavecheney: not sure, I'd ask SteveK or wgrant02:42
thumperhmm...02:43
* thumper wonders what wallyworld is going to say about this review02:43
wallyworldoh dear02:44
thumperwallyworld: done02:51
wallyworldthanks i think :-)02:51
wallyworldthumper: i *really* wanted to have a storage subpackage under environs, then we would say "storage.Get" etc02:52
wallyworldbut it was not possible02:52
thumperbecause?02:52
wallyworldbecause someone thought it a great idea to dump all the interfaces in environs02:52
wallyworld-> import loops02:53
wallyworldi tried to explain that in the cvering letter02:53
thumperok, as I see it you have two choices02:53
wallyworldi don't know if it's a Go thing or not02:53
thumperkeep in environs but with more descriptive names02:53
wallyworldbut it seems like people don't like packages02:53
thumperor make a package with the interface defined in storage02:53
thumperI talked with fwereade about this02:54
wallyworldi'll see what can be done02:54
thumperand we decided it would be better to move all the interfaces into a different package02:54
thumperto make it so we don't ahve loops02:54
wallyworldyes!02:54
thumperthe alternative is to have potentially diverging interface copies02:54
wallyworldi reckonif some people had their way, we would just have a single juju package02:55
thumperhaha02:55
wallyworldit's not funny02:55
wallyworldbut sad02:55
thumperyeah it is02:55
wallyworldsad, sad, sad02:55
thumperschool run02:56
wallyworldthanks for reviewing02:56
thumpernp02:56
axwthumper, wallyworld: are we on for a package review in half an hour?02:59
wallyworldaxw: thumper was supposed to reschedule - i have a school concert thing at the same time today03:00
axwok03:00
davecheneyhttps://codereview.appspot.com/1357704403:18
arosales_Anyone able/up for building  the juju msft client per nate's instructions @ https://docs.google.com/document/d/1WMm6lcUTDA4wZnmA8YzfSXyLnQRz6Fqrr5g2lDtZZes/edit?pli=1#heading=h.haqccf144cr703:36
arosales_or perhaps we should just wait for natefinch in the morning us time as he has the env set up.03:36
thumperaxw: there are a few ways to link your branch https://code.launchpad.net/~axwalk/juju-core/lp1225825-netlookupip-ip/+merge/186229 to bug 122582503:42
_mup_Bug #1225825: add-machine fails when using IP in ssh: target <juju-core:In Progress by axwalk> <https://launchpad.net/bugs/1225825>03:42
axwthumper: yeah sorry, just forgot03:42
thumperaxw: when you are making a commit, you can go "--fixes lp:1225825"03:42
thumperand then the branch scanner will pick that up03:43
thumperor you can do it from the bug or branch page03:43
axwah cool03:43
axwI usually -bug in lbox03:43
* thumper hopes to stab lbox in the heart03:43
axw:)03:43
thumperaxw: if you do it from the branch page, and you have something that looks like a number in the branch name03:44
thumperlp takes a guess an suggests that for the bug number03:44
axwyup, quite handy03:44
axwlinked now03:44
axwthanks03:44
thumperta03:44
thumperaxw: what do you most urgently need reviewed?03:45
thumperI'm on a roll03:45
axwthumper: that one would be good to get into 1.15.003:45
thumperok03:45
* thumper looks now03:45
axwthumper: after that, everything is to do with null provider/manual bootstrap03:46
thumperaxw: what about manual bootstrap ?03:46
axwprobably best if all the storage stuff gets sorted first03:46
axwthumper: I mean, all my remaining MPs03:46
axware to do with that03:46
thumperaxw: give me a queue to work through03:46
axwsure, just a moment03:46
axwhttps://code.launchpad.net/~axwalk/juju-core/localstorage-to-httpstorage/+merge/18595803:49
axwhttps://code.launchpad.net/~axwalk/juju-core/filestorage-write-tmpdir/+merge/18571503:49
axwhttps://code.launchpad.net/~axwalk/juju-core/sshstorage-tmpdir/+merge/18571703:49
axwhttps://code.launchpad.net/~axwalk/juju-core/sanity-check-constraints/+merge/18501503:49
axwthumper ^^03:49
thumperkk03:49
axwthank you03:49
thumperaxw: wasn't there a branch that moved local/storage out to another location?03:53
thumperjust double checking that this queue is the order they'd be landed03:54
axwthumper: https://code.launchpad.net/~axwalk/juju-core/manual-bootstrap/+merge/18471403:55
axwthat's LGTM'd, just waiting on the sshstorage changes03:55
axwit's not quite in order03:55
axwI'll have to do some merging03:55
thumperaxw: for the local -> http storage branch03:56
thumperthe first file imports provider/local/storage as httpstorage03:56
thumperbut the very next file uses environs/httpstorage03:56
thumperwhy the difference?03:56
axwhang on, gotta refresh my memory03:56
thumperah..03:57
thumperlocal/storage is the worker03:57
thumperffs, why did I do that03:57
axwthumper: yeah that one is changing in the manual-bootstrap MP03:57
* thumper confused himself03:57
axwit will become worker/localstorage03:57
axwwait...03:57
axw*looking*03:57
axwwtf03:58
axwthat is an error :)03:58
axwI probably did an overzealous sed03:58
axwthumper: cmd/jujud/machine.go should not have changed in this MP03:59
thumperaxw: how about you do a quick sanity check on that diff, and push any changes and repropose03:59
thumperI'll look at the next one03:59
axwyep will do03:59
axwsorry about that04:00
axwthumper: updated04:08
* thumper looks04:09
thumperaxw: re fileStorageReader, my first cut at it used filepath.Walk :-)04:13
thumperwas told to use Glob04:13
* thumper prefers walk04:13
thumperas reviewer, I approve04:13
axwthumper: Glob doesn't actually work properly there, that's the main reason for the change04:16
axwGlob only works for one level of the hierarchy04:16
thumperwhere does it fail?04:16
thumperI didn't see a test added that demontrates that04:17
thumperor is it later in the branch?04:17
axw/tmp/* matches /tmp/blah, but not /tmp/blah/blah04:17
* axw looks04:17
axwI think it's probably in httpstorage04:17
* thumper wonders04:17
thumpershould /tmp/* match /tmp/blah/blah04:17
axwnot in shell globbing04:17
axwor deos it...04:18
thumpershould it with our one?04:18
* axw doesn't understand the question04:18
axwthumper: according to the docs for filepath: '*'  matches any sequence of non-Separator characters04:19
axwfilepath.Match even04:19
axwwhich is what Glob's syntax conforms to04:19
thumperI'm wondering what the expectation is with our interface04:20
thumperis the expectation that we recurse or not?04:20
thumperif not, then we don't really need to walk the entire structure04:20
axwthumper: oh yeah, List is meant to return everytrhin04:21
=== tasdomas_afk is now known as tasdomas
axweverything04:21
axwit considers the namespace flat04:21
axwthumper: there's no test for this directly in filestorage, only in httpstorage (which uses filestorage in the test). I can add one.04:22
thumperthat would be appreciated04:22
thumperdon't repropose until I've finsihed the review though04:23
thumpernearly there04:23
axwokey dokey04:23
thumperreview done04:26
* thumper moves to the third04:26
axwthumper: good call on the test, I found a bug in the existing code04:36
axwfor instance.HostAddresses; an IPv4 net.IP may be represented as 16 bytes04:37
axwthere's no check for that04:37
thumper:)04:40
thumperaxw: https://code.launchpad.net/~axwalk/juju-core/sanity-check-constraints/+merge/185015 has conflicts04:42
axwok04:44
axwI'll add the filestorage test and then get onto that04:44
thumperaxw: I'm heading off shortly05:22
thumperaxw: got anything you want a re-review on before I go?05:22
wallyworldthumper: i'll push some changes to my branch in a bit if you happen to be on later05:24
thumperI'm being taken out for a birthday dinner05:24
thumperso not really likely to be on later05:24
thumperbut can do it tomorrow morning05:24
wallyworldok. whose birthday?05:25
thumperprobably around for another 20 min or so05:25
axwthumper: I'm about to repropose the local-to-httpstorage05:25
thumperwallyworld: mine05:25
thumperwallyworld: and Rachel's05:25
wallyworldthumper: oh? happy birthday old man :-)05:25
wallyworldand to rachel too05:25
thumperwallyworld: last week dude05:25
thumpergeez05:25
* wallyworld didn't know05:26
wallyworldyou never mentioned it :-)05:26
thumperwallyworld: it is why I was off for a long weekend with no kids05:27
wallyworldi thought that was wedding anniversary05:27
thumperit was05:28
thumperwedding anniversary 9th, my birthday 10th, Rachel's 11th05:29
thumperall together for ease of remembering05:29
wallyworldyou sure do know how to organise things05:29
* thumper bows05:29
wallyworldthumper: i'm moving StorageReader and friends interfaces to environs.storage. a lot of places to change05:30
* thumper nods05:30
thumperok05:30
thumperI still think you should have "Get" and "GetWithRetry"05:30
thumperor "GetWithStrategy"05:30
thumperinstead of "DefaultGet" and "Get"05:30
wallyworldsure. separate issue which i'll also look at :-)05:30
* thumper nods05:30
wallyworldthumper: there will be controvery i'm sure with the interface move05:31
wallyworldbut i just can't agree it is right as is05:31
wallyworldand this is a good excuse05:31
thumperhow are you doing the interface?05:31
wallyworldsame interface names - StorageReader, StorageWriter etc, but moved to environs.storage05:31
thumperseems fine to me05:32
thumperwe may have an interface package later to remove the dependency loops05:32
thumperbut that can happen later05:32
wallyworldme too. but i'm sure i recall people wanting *all* the interfaces lumped together05:32
thumperand I may suggest we get technical architect approval and review05:32
axwthumper: I've reproposed, but haven't done the  test helper changes yet. will do that now.05:33
* thumper nods05:33
thumperaxw: I see the comment but not a diff change05:35
thumperdid the propose work?05:35
axwthumper: sorry, I think lbox was still working05:35
axwshould be there now05:35
thumperkk05:38
thumperaxw: that one is good to go (preferably after the test helper is added)05:43
* thumper has to go clean for a bit05:43
thumperciao05:43
axwthanks thumper05:43
jamwallyworld: poke about DataSource stuff06:36
wallyworldyeees?06:36
jamI'm trying to figure out whether tools DataSources have '/tools' in them or not.06:36
jamI might just have an out-of-date  goose, though.06:37
jambut the old keystone entry was just putting "" in the entry06:37
jamwallyworld: still true in goose trunk if I'm reading it correctly.06:37
wallyworldjam: the keystone entry has been updates to add the /tools06:38
jam"Service{"juju", "juju-tools", ... PublicURL: url") where that URL is the root of the Swift bucket06:38
jamwallyworld: not in testservices/openstack/New() if I'm reading it correctly.06:38
wallyworldi can;t quite recall if goose needed updating06:38
wallyworldah, you mean the test doubl06:38
jamwallyworld: I'm testing that I can actually *fetch* something from each DataSource and some of them are failing06:38
jamand I'm trying to figure out whether it is a mistaken understanding of where the stuff needs to get uploaded to06:39
wallyworldhmmm. i know the real canonistack puts out a url with /tools are the end. goose may not. but i don't think it matters. but i could be wrong06:39
wallyworldi think it matters for the legacy fallback to work06:39
wallyworldso, if simplestreams it set up right, you don't need any /tools at the end06:40
wallyworldit's just a url06:40
wallyworldbut, if you want the legacy fallback stuff to work, you need to stick stuck in /tools06:40
wallyworldlet me take a quick look at the code06:41
jamwallyworld: GetToolsSources puts environs.BaseToolsPath into the NewStorageSimpleStreamsDataSource06:41
jambut uses 'juju-tools' output directly06:41
jamI think it uses "ToolsURL" from config directly06:41
jamand DefaultBaseURL directly06:42
wallyworldthe base url can be anything06:42
wallyworldthe default url is for getting stuff from the official repository06:42
jamwallyworld: I was a bit confused because of different places where you end up mangling the search path for tools06:42
jambut you don't touch all the possible paths06:42
wallyworldthere's only one place - in tools/urls.go06:42
jamso I thought "tools" got tacked on after the fact06:42
wallyworldbut each provider gets to add in some search places if it wants06:43
jamwallyworld: I'm quite aware of that, which are the bits I'm working on for Openstack. I'm trying to make sure that if you have data in all places "correctly" that you can fetch them.06:43
jamand I'm still just trying to sort of what "correctly" is.06:43
jamA couple of times now my expectations of consistency across them didn't quite match.06:44
wallyworldso - you need to have a base url, under which is 1) a releases dir with the tarballs, and 2) a streams/v1 dir with the metadata06:44
wallyworldno "tools" anywhere06:44
wallyworldbut, it's convention/tradition that we tend to make the base url end in "tools"06:45
jamwallyworld: and clearly you haven't fetched from the "juju-tools" keystone entry, because you can't write data to the '/' container06:45
jamAFAICT06:45
wallyworldi have fetched them from there06:45
wallyworldi can write to juju-tools url/tools06:46
wallyworldthe keystone entry points to blahblah/tools06:46
jamwallyworld: not in the goose double06:46
jamwhich is my point06:46
jamyou can't have a test case that is actually doing this06:46
jamyou might have tested on Canonistack06:46
wallyworldbut it doesn't need to end in tools06:46
wallyworldi don't think06:47
jamwallyworld: I think you're missing *my* point.06:47
wallyworldsorry, this is hard ober irc06:47
jamwallyworld: the URL probably can be whatever it wants to be06:47
jamwallyworld: but you can't have tested that the keystone entry works with the double, because you can't write data to the location that goose's keystone entry points to06:47
jamthus you probably can't have a test case that the keystone entry works06:48
jamif you have one, point me to it, and I'll follow how it sets up the data06:48
wallyworldwhere does the goose test double keystone entry point to?06:48
jamwallyworld: you *do* have a test case that we see the base URL06:48
jambut no test that Fetch on that URL works06:48
wallyworldthere's test cases that the urls are as expected06:48
jamwallyworld: it points directly to the Swift base URL06:48
wallyworldand can't we set up one of those http proxies to return data releative to that url?06:49
jamwallyworld: you're pointing at where Swift returns its data, and you can't upload data to swift without a container to put it in06:50
jamso I could create the container named "releases" and one named "streams" and put stuff in the subdirectories (probably)06:51
wallyworldso, there are tests to ensure the urls that are used to construct the data sources are correct. but there's no need to put data in each as that's done in different tests06:51
jamwallyworld: I'm testing that both URL() and Fetch() works for each of the datasources we see06:51
jamI currently can't set up Fetch in a sane way to ensure that it gets data back properly06:51
wallyworldwell, you can using tools-url06:51
jamI can hack around it, but it feels like we missed some test coverage06:51
jamwallyworld: that is a *different* data source06:52
wallyworldsure, but it's just a http data source06:52
jamI'm testing tools-url, private storage, and the keystone entry06:52
wallyworldand we test http data sources work06:52
wallyworldand we test that the correct http data soruces are returned06:52
wallyworldi guess we can add extra tests but it seems over kill given we test all the moving parts06:53
jamwallyworld: so in what I'm working on each one needs to be properly configured for ssl/no-ssl, so they aren't "just simple URLs"06:53
wallyworldso get the data sources back and poke their config?06:53
wallyworldso instead of testing MxN, test M+N06:53
jamwallyworld: well I'm just testing that I can fetch any data06:54
jamso I don't have to test that simplestream layout works there.06:54
wallyworldyou can test separately if you can fetch data using a data source set up as no ssl06:54
wallyworldand separately test that the data sources that come back from simplestreams all have no ssl activates06:54
jamwallyworld: except the one that points to the canonical location, etc. It isn't very hard to just do a "can i actually fetch data from this source".06:57
jamwallyworld: especially given the privacy layering means you can't "just check the bit is set"06:57
wallyworldsure, but you don't need to06:57
wallyworldyou just need check that the url is correct and the ssl thing is correct06:57
wallyworldand there are separate tests for if url based data sources work06:57
wallyworldthere's only 2 data sources - a url based one and a environs storage one06:58
wallyworldthey can be tested separately with the ssl thng06:58
wallyworldso to me it's still a M+N vs MxN strategy06:58
jamwallyworld: it is the same number of asserts to test the SSL bits as to do an actual Fetch, it is slightly more setup to actually put a file in the location to test that you can fetch it back.07:02
wallyworldso if you want to do that then i guess the url returned by the goose test double needs to have a container at the end07:03
wallyworldthat you can put stuff in07:04
jamwallyworld: well, I have to cheat elsewhere because we put 'tools' into the URL, so I can just try to fetch "acontainer/foo" from that URL07:04
wallyworldwe put tools in there for legacy things - the tools file name is "releases/tools/juju-" for simplestreams07:04
wallyworldusing the existing tools StorageName method07:05
wallyworldmany tests set up the new simplestreams prefix and reset it after wards07:05
wallyworldand soon the legacy prefix will go away07:05
dimitern_hey guys, william texted me he's expecting his internet connection at the new place to be fixed some time this morning07:32
wallyworld_jam: i'm going to miss the stand up tonight. i have 2 branches in review. tim is doing the first. the second builds on that to add sensible retries to tools fetching07:43
hazmatumm.. just a found  a serious security issue in 1.14 for openstack08:29
hazmatalthough it might extend longer08:30
jamhazmat: what's up?08:30
hazmatswitch to canonical #juju pls08:30
dimitern_rogpeppe, morning08:48
rogpeppedimitern: hiysa08:48
rogpeppedimitern_: hiya, even08:48
dimitern_rogpeppe, updated https://codereview.appspot.com/13720045/ :)08:48
rogpeppedimitern_: you didn't like my "lxc:34/kvm/5" idea?08:53
rogpeppedimitern_: aw, i thought that was quite nice08:53
dimitern_rogpeppe, that's non-standard08:55
dimitern_rogpeppe, it's only used in add-machine and deploy08:55
dimitern_rogpeppe, in all other cases it's just a type, no prefix08:55
rogpeppedimitern_: i have a bit of a problem with the ContainerTypes argument to WatchContainers08:56
dimitern_rogpeppe, yes?08:56
rogpeppedimitern_: the problem is that the ContainerType type doesn't really represent a container type - it's really a kind of pattern for matching containers of a particular type within a given machine08:56
rogpeppedimitern_: a container *type* is really just a string08:57
dimitern_rogpeppe, the structure is right for args, but I'm open to suggestions about a better name08:57
rogpeppedimitern_: yeah, it's just the name i'm not keen on08:57
dimitern_rogpeppe, how about MachineContainerPairs ?08:58
rogpeppedimitern_: one possibility might be to make the container type a separate (non bulk) arg08:58
rogpeppedimitern_: so that a given WatchContainers call could watch many machines, but only one type of container08:58
dimitern_rogpeppe, that's not good - we might need to create several different containers in a single bulk call08:58
rogpeppedimitern_: s/create/watch/ ?08:59
dimitern_rogpeppe, yep08:59
rogpeppedimitern_: well, you never *need* to issue a single bulk call for something08:59
dimitern_rogpeppe, so how about MachineContainerPairs{Pairs: []MachineContainerPair{Tag, ContainerType}} ?09:00
rogpeppedimitern_: it's really Machine-ContainerType-Pair but that doesn't make for a great name09:03
dimitern_rogpeppe, why doesn't it?09:03
rogpeppedimitern_: because MachineContainerTypePair could read as "Machine-container type pair"09:04
dimitern_rogpeppe, c'mon09:04
dimitern_rogpeppe, that's what doc comments are for09:04
rogpeppedimitern_: i think these names are actually quite important, and not easy to get right09:04
dimitern_rogpeppe, I really want to start landing stuff so I can continue09:05
dimitern_rogpeppe, we can always go with WatchContainersParams{Params: WatchContainersParam{MachineTag, ContainerType}}}09:06
rogpeppedimitern_: i'm wondering about params.WatchContainers09:06
rogpeppedimitern_: yeah09:06
dimitern_rogpeppe, ok, will change it and repropose09:07
rogpeppedimitern_: i think that perhaps makes more sense that trying to make it into some kind of generally applicable type09:07
rogpeppedimitern_: params.WatchContainers and params.WatchContainer, i think09:08
rogpeppedimitern_: thanks for bearing with me09:08
dimitern_rogpeppe, ok, np09:08
dimitern_rogpeppe, updated09:14
rogpeppedimitern_: does a provisioner really need to be able to access its own machine?09:25
rogpeppedimitern_: (other than for Watch, of course)09:26
dimitern_rogpeppe,  for WatchContainers yes09:26
rogpeppedimitern_: but not for all the other methods, right?09:27
dimitern_rogpeppe, Life() as well09:27
dimitern_rogpeppe, that's how we do st.Machine(tag)09:27
rogpeppedimitern_: so perhaps those two methods should use a slightly different auth function?09:29
dimitern_rogpeppe, acutally all of the others need it as well09:29
rogpeppedimitern_: really?09:29
dimitern_rogpeppe, we need InstanceId(), EnsureDead()09:29
dimitern_rogpeppe, Remove()09:29
dimitern_rogpeppe, definitely SetStatus09:30
dimitern_rogpeppe, and SetProvisioned09:30
rogpeppedimitern_: um, aren't most of those operations done on the child machines?09:31
rogpeppedimitern_: not the provisioner's machine itself?09:31
dimitern_rogpeppe, well, I don't think this is a big issue anyway, because the machine agent, which runs the machiner and the provisioner have access to the same stuff on the same account09:31
rogpeppedimitern_: i was thinking of it more as a way of catching errors in the provisioner code as anything else09:32
rogpeppedimitern_: (and also possibly as a way of making the code more obvious)09:33
dimitern_rogpeppe, and more complicated :)09:34
dimitern_rogpeppe, but it makes sense yeah09:34
rogpeppedimitern_: leave it for now; as you say it doesn't really matter09:34
dimitern_rogpeppe, ok then09:36
rogpeppedimitern_: reviewed09:37
dimitern_rogpeppe, thanks09:38
dimitern_rogpeppe, responded09:42
rogpeppedimitern_: i'm not sure why you need to make sure that the machine exists in the auth method09:43
dimitern_rogpeppe, to return ErrPerm if it doesn't09:43
rogpeppedimitern_: istm that a lexical test should be just fine09:43
rogpeppedimitern_: i really don't think it matters actually09:45
rogpeppedimitern_: as it is, we're going to fetch the machine *three times* on every API call09:45
dimitern_rogpeppe, it matters so long as we're keeping consistency with other api facades09:45
dimitern_rogpeppe, not 3 times - just 2 times09:46
rogpeppedimitern_: three times, i think09:46
dimitern_rogpeppe, once in lifegetter, once in auth func, right?09:47
dimitern_rogpeppe, the same applies to the other mixins09:47
rogpeppedimitern_: ah, perhaps - i was thinking we did it when creating the API facade itself, but that will have been done at login time09:48
dimitern_rogpeppe, and we're running on the same node as the state server, so shouldn't slow us down09:48
rogpeppedimitern_: BTW lots of existing API calls might not return ErrPerm if the entity has been removed09:49
dimitern_rogpeppe, only if you're authorized to see it09:50
rogpeppedimitern_: sure - but we can test that lexically, right?09:50
dimitern_rogpeppe, i.e. you're trying to access your own machine, which was removed09:50
rogpeppedimitern_: e.g. if you're trying to access a child machine, which was removed09:50
rogpeppedimitern_: i think it's reasonable that the environment-global provisioner can ask whether a top level machine exists or not09:51
dimitern_rogpeppe, how do you know it was removed, without fetching it?09:51
rogpeppedimitern_: it doesn't matter - you can get a NotFound error without any security problems ensuing09:51
dimitern_rogpeppe, if it comes to that, I'll change the logic, but so far it seems it'll work just fine09:51
rogpeppedimitern_: i think that it's fine that a provisioner is able to access all machines in its domain, whether they exist or not09:52
rogpeppedimitern_: the ErrPerm thing is more about accessing one's *own* machine that's been removed, I think (and even then we don't check in most cases)09:53
rogpeppedimitern_: are there any other examples where the auth func does a db lookup?09:55
rogpeppedimitern_: (i'm also wary of the fact that we're potentially dropping mongo errors on the ground here)09:56
dimitern_rogpeppe, deployer does it09:57
rogpeppedimitern_: not afaics09:57
rogpeppedimitern_: getAuthFunc does, but not the auth func itself09:57
dimitern_rogpeppe, well, take a look at getAllUnits09:57
dimitern_rogpeppe, ah, yes09:57
rogpeppedimitern_: and note the fact that getAuthFunc returns an error, so we don't drop it on the floor there09:58
dimitern_rogpeppe, well, we don't have the tag inside getAuthFunc yet09:59
rogpeppedimitern_: that's true. honestly though - why is a lexical test bad here? if the name we're trying to access is logically ok for us to access, why not allow it, regardless of the status of the entity in question?10:00
rogpeppedimitern_: is there a security issue here that i'm not seeing?10:01
dimitern_rogpeppe, let me check something10:01
dimitern_rogpeppe, ok, changed the getAuthFunc to use state.ParentId() instead10:10
rogpeppedimitern_: cool, thanks10:10
dimitern_rogpeppe, and did slightly differently the suggestion about simplifying it10:11
dimitern_rogpeppe, reproposing10:12
dimitern_rogpeppe, LGTM?10:14
rogpeppedimitern_: just having a last look10:14
rogpeppedimitern_: reviewed10:20
dimitern_rogpeppe, thanks10:22
jamdimitern, mgz, rogpeppe, TheMue: standup ? https://plus.google.com/hangouts/_/7bee5998ed9eebebcff8169fb6394538499bdf74?authuser=210:45
jamwell, leave off that last bit: https://plus.google.com/hangouts/_/7bee5998ed9eebebcff8169fb6394538499bdf7410:45
mgzgslowload10:45
mgzjam, hm, you're not in the one from c.. right10:46
jamwe lost you rogpeppe10:47
rogpeppejam: yeah, just reconnecting10:48
dimitern_bug 122707411:19
_mup_Bug #1227074: runtime panic when running any juju command in a deleted directory <juju-core:Confirmed> <https://launchpad.net/bugs/1227074>11:19
jamespagehazmat, did 'peers before herd' get into juju-core?11:28
jamespage(where peer relations are formed prior to any other remote relations)11:28
rogpeppereview anyone? https://codereview.appspot.com/1325105212:37
rogpeppedimitern_, jam, TheMue, mgz, axw: ^12:38
mgzlooking12:38
rogpeppemgz: thanks12:38
dimitern_I have one as well https://codereview.appspot.com/1355204612:40
mgzokay, so the var stuff is the idiom for bits that need overriding in tests, right?12:40
mgzxcept the logger, which is just a logger12:41
dimitern_rogpeppe, will you take a look?12:41
rogpeppemgz: yeah12:42
dimitern_mgz, I haven't heard of such practice - if it's for the tests there's usually a comment12:42
rogpeppemgz: maybe that's a reason to keep them separate i suppose12:42
jammgz: the export_test stuff isn't because it is being overridden12:42
jamit is because it is being exposed12:42
rogpeppejam: i think he was referring to the var block at the start of https://codereview.appspot.com/13251052/diff/1015/juju/api.go12:43
mgzjam: the main code has a few aliases at the top for some functions12:43
mgzright12:43
TheMuedimitern: LGTM12:44
dimitern_TheMue, thanks12:45
rogpeppejust rebooting to try to speed up this sluggish machinre12:48
mgzokay, this basically makese sense to me rog, but is pretty complex12:55
jamrogpeppe: I do have to wonder why doing the "in parallel connect to the provider" is better (especially for maintenance purposes) than try to connect with a short timeout, and then fall back to something els13:04
jammgz, rogpeppe: I guess the idea is that we have a 10min wait because we might be waiting for a node to start? I don't think we need to do that in the case that we have seen an endpoint13:05
fwereadeevening all13:07
jamhey fwereade, good to see you online :)13:08
mgzhey fwereade13:08
dimitern_fwereade, hey! you're online at last13:08
fwereadedimitern_, yeah, I strolled off and had a peaceful lunchand now it's actually here at last13:08
fwereadehow have the last couple of days been?13:09
dimitern_provisioner is half way done :)13:09
fwereadedimitern_,<313:09
dimitern_well, i'm finishing the server-side at first13:09
fwereadeany reviews I should be looking at in particular, anyone?13:09
rogpeppefwereade: i'd appreciate a look at https://codereview.appspot.com/1325105213:11
fwereaderogpeppe, ack13:11
mgzyeah, that's a good idea13:11
TheMuefwereade: heya, I would like you to take a look at https://codereview.appspot.com/13430044/ to see if the direction is right13:32
fwereaderogpeppe, looking at the format I'm very much unkeen on the nested fields in what we read in/write out13:33
rogpeppefwereade: so you don't like the endpoint/creds separation?13:34
fwereaderogpeppe, was there some compelling consideration leading away from flatness?13:34
fwereaderogpeppe, in my mind, if we end up with enough top-level fields in there for the separation to help, the purpose of the file will have changed beyond belief13:35
fwereadeTheMue, ack13:35
rogpeppefwereade: the reason was mainly because i've come around to the idea that location and credentials are two separate concerns, and should be treated separately.13:36
fwereaderogpeppe, I am +100 on doing that internally13:36
rogpeppefwereade: i don't really see a downside from nesting them13:36
fwereaderogpeppe, I don't think it's a benefit in the context of content you might paste into an email to someone :)13:37
rogpeppefwereade: it means that the configstore code can be blissfully ignorant of the contents of APICredentials and APIEndpoint13:37
rogpeppefwereade: i think it reads ok actually13:38
rogpeppefwereade: insofar as yaml ever reads ok :-\13:39
fwereaderogpeppe, isn't the purpose of the configstore code to be able to produce a creds and an endpoint on demand?13:40
fwereaderogpeppe, based on what's on disk?13:40
fwereaderogpeppe, it's not some super-generic data store13:40
fwereaderogpeppe, it is concerned precisely with their format on disk and in memory and it's its job to adapt between them ;)13:41
rogpeppefwereade: it will also store other info13:42
rogpeppefwereade: e.g. PushedSecrets13:42
rogpeppefwereade: extra config attributes13:42
fwereaderogpeppe, extra config wants to be nested, sure13:42
fwereaderogpeppe, PushedSecrets has to be LacksSecrets, doesn't it?13:43
rogpeppefwereade: so we can flatten creds and endpoint if you really feel it makes a difference, but we've got nesting going on anyway. this isn't a hard format for people to parse.13:43
rogpeppefwereade: why so?13:43
rogpeppefwereade: ha, yes, i think you're right13:44
fwereaderogpeppe, because otherwise it'll sit there clogging up every file forever, won't it? otherwise we'll read the missing field and go "oh, false"13:44
rogpeppefwereade: yeah13:44
rogpeppefwereade: good point13:44
rogpeppefwereade: maybe NeedsSecrets13:44
fwereaderogpeppe, as you wish:)13:45
fwereaderogpeppe, but I haven't really heard anything that makes me think it's better to nest the format than not to nest, which is how it was originally specified13:45
fwereaderogpeppe, and I'm wondering what the deal is with the string for cacert?13:46
rogpeppefwereade: it means it can just be serialised with no extra hassle13:46
rogpeppefwereade: there's no point in double-base64 encoding13:46
fwereaderogpeppe, didn't we say base64-encoded []byte?13:46
fwereaderogpeppe, don't we always use CACerts as []byte?13:47
rogpeppefwereade: well it can't be []byte if it's to be serialised as a yaml string13:47
rogpeppefwereade: yeah, and i think that was a mistake on balance13:47
fwereaderogpeppe, do those []byte~s actually only hold bytes from the base64 set? )13:47
rogpeppefwereade: yes, they're all ASCII13:47
rogpeppefwereade: perhaps not from base64 per se, but all ASCII anyway, which is fine for encoding as a yaml string13:48
rogpeppefwereade: the only reason we use []byte is because the crypto package functions use []byte13:48
rogpeppefwereade: but it's all PEM encoded13:48
rogpeppefwereade: (and documented as such)13:49
fwereaderogpeppe, urrgh13:49
rogpeppefwereade: it also means that the certificate is actually obviously a certificate when it's in the config file.13:49
rogpeppefwereade: BTW the environ config code already stores and uses the certificates as string13:51
fwereaderogpeppe, ok, I'm convinced there, thanks :)13:53
fwereaderogpeppe, but I'd really appreciate it if we could remove the nesting13:53
rogpeppefwereade: ok, will do13:53
rogpeppefwereade: BTW i did start off trying to implement a "type YAMLBase64Bytes []byte" with a custom YAML encoding method to encode and decode as base6413:54
rogpeppefwereade: ... or maybe as string, anyway13:54
fwereaderogpeppe, cheers13:55
fwereaderogpeppe, ah, nice13:55
rogpeppefwereade: there are goyaml bugs that meant it couldn't work, sadly13:55
fwereaderogpeppe, aww13:56
fwereaderogpeppe, well, moot now I guess :)13:57
fwereadeTheMue, wondering what the motivation is for the []StatusValue conversion14:02
fwereadeTheMue, StatusData seems nice and clear14:03
fwereadeTheMue, but I don't see what problem the change to array solves14:04
fwereadebrb14:04
rogpeppefwereade: re-proposed with those on-disk changes as discussed14:07
TheMuefwereade: It's helping to keep the usage of SetStatus() the same (the values are optional) instead of always pass a third argument nil if not needed14:07
TheMuefwereade: but can change it if preferred14:07
TheMuefwereade: would only touch many places in code ;)14:07
fwereadeTheMue, I do see the nastiness14:15
TheMuefwereade: just convenience14:16
jcastromgz: have you seen this yet? https://bugs.launchpad.net/juju-core/+bug/122714514:18
_mup_Bug #1227145: Juju isn't cleaning up destroyed LXC containers <juju-core:Confirmed> <https://launchpad.net/bugs/1227145>14:18
fwereadeTheMue, I think I'd prefer to use the nilsexplicitly on balance14:18
fwereadeTheMue, I don't think it'll clutter the diff much, and it'll make SetStatus calls similar across the board14:19
TheMuefwereade: that's the best argument for, that usage is not typical14:19
TheMuefwereade: I'll change it14:20
mgzjcastro: not yet, looking14:20
fwereadeTheMue, tyvm14:20
TheMuefwereade: what I also need is a bridge to the AllWatcher. the megawatcher is getting the change, but I currently cannot see how this play together with the AllWatcher14:25
fwereadeTheMue, find what's already being done with status14:27
fwereadeTheMue, it's all in the same document, right?14:27
TheMuefwereade: pardon?14:28
TheMuefwereade: ah, you mean document == statusDoc14:28
TheMuefwereade: wondered about a document14:28
fwereadeTheMue, the allwatcher already reports status changes per-entity anyway AIUI (rogpeppe, confirm?)14:29
rogpeppefwereade: yeah14:29
rogpeppeTheMue: what's the issue exactly?14:29
fwereadeTheMue, so wherever it is it's picking up those changes, you can bung an extra field in whereappropriate and you're good, Ithink14:29
TheMuefwereade: I added it to UnitInfo and MachineInfo already, which are delivered EntityInfos. so it should be done14:31
fwereadeTheMue, sorry,meeting14:32
TheMuerogpeppe: just getting a better understanding how the megawatcher and AllWatcher work together14:32
TheMuerogpeppe: had been unsure14:32
rogpeppeTheMue: they're the same thing14:32
rogpeppeTheMue: or do you mean the multiwatcher?14:33
TheMuerogpeppe: simplifies it for me :)14:33
TheMuerogpeppe: no, the megawatcher14:33
rogpeppeTheMue: there's no code that mentions the term "megawatcher"14:34
rogpeppeTheMue: it's just the name of the file that the AllWatcher implementation sits in14:34
rogpeppeTheMue: which is really just left there as an in-joke tbh14:34
TheMuerogpeppe: yes, and I referred to that file not knowing that it is the AllWatcher impl. I found it checking where UnitInfo and MachineInfo changes are reported14:35
TheMuerogpeppe: that is very helpful information for me, thx14:36
rogpeppeTheMue: your best bet is to read the multiwatcher docs thoroughly14:39
rogpeppeTheMue: all the changes you need to make will be in the allWatcherStateBacking methods, which implement multiwatcher.Backing14:40
TheMuerogpeppe: I had only to change updated() in backingStatus14:43
rogpeppeTheMue: that sounds about right14:43
TheMuerogpeppe: here now only one information more has to be copied for units and machines14:43
TheMuerogpeppe: but as I said, I have been sure I had to change it there but I didn't know the direct connection to AllWatcher *sigh* some kind of blindness14:44
TheMuerogpeppe: solving by accident14:45
rogpeppeTheMue: the14:45
rogpeppe% grep -i allwatcher megawatcher.go | wc14:46
rogpeppe    17      91     99214:46
rogpeppe:-)14:46
rogpeppeTheMue: bit of a clue there :-)14:46
TheMuerogpeppe: I'm used to used an old fashioned environment of the 80s: smalltalk, with absolute simple code navigation by clicking ;)14:47
rogpeppeTheMue: your editor doesn't do that?14:47
TheMuerogpeppe: not the command you've done above, but references and implementors14:48
TheMuerogpeppe: but still not as convenient and in a good visual way as smalltalk does it since more than 30 years14:48
TheMuerogpeppe: today i started pharo again, because i once developed a product descriptor similar to our reviewed version stuff14:49
rogpeppeTheMue: pharo?14:50
TheMuerogpeppe: has been fascinating how fast you can navigate in the code14:50
TheMuerogpeppe: pharo is an oss smalltalk14:50
rogpeppeTheMue: it's not hard to make it easy to navigate around go programs. there are plugins for vi and emacs that do that.14:51
TheMuerogpeppe: and for sublime too :)14:51
TheMuerogpeppe: but it is still not the same14:51
rogpeppeTheMue: the go oracle will raise that to whole other level too14:51
TheMuerogpeppe: go oracle?14:52
rogpeppeTheMue: does sublime do the "go to definition of identifier" thing?14:52
TheMuerogpeppe: yep14:52
rogpeppeTheMue: interesting. so you can click on the "X" in an expression like y.foo().bar.X and it'll work reliably?14:52
TheMuerogpeppe: also nice is "go to any symbol in your project"14:53
rogpeppeTheMue: (to take you to the definition of the symbol X)14:53
rogpeppeTheMue: that's much easier14:53
rogpeppeTheMue: because it doesn't need to do the type inference14:53
rogpeppeTheMue: https://docs.google.com/document/d/1WmMHBUjQiuy15JfEnT8YBROQmEv-7K6bV-Y_K53oi5Y/edit#14:53
TheMuerogpeppe: oh, that doc looks interesting, will read it later14:54
TheMuerogpeppe: have to check your question before14:55
TheMuerogpeppe: so you mean a y of type Y, having a method foo(), returning something with a field bar containing a field X?14:56
TheMuerogpeppe: never tried, will check14:56
rogpeppeTheMue: yes (including the fact that X might be embedded several levels deep in anonymous structs)14:56
rogpeppeTheMue: as may foo and bar14:57
TheMuerogpeppe: no, I don't think that this is possible with GoSublime (the name of the plugin)14:57
rogpeppeTheMue: and y itself might be a variable in a range expression over the result of a function return, etc etc14:57
rogpeppeTheMue: ah, so that's what i meant - that capability is incredibly useful14:57
rogpeppeTheMue: it means that any time i see a symbol, i can find out all about it14:58
rogpeppeTheMue: in 0.01s approx14:58
TheMuerogpeppe: that really would be great14:58
rogpeppeTheMue: you could maybe do a plugin for sublime to support that (assuming you can make arbitrary plugins in sublime)14:59
TheMuerogpeppe: what I can do is if I find something like x := xdef.X{} I can simply jump directly to the definition of X in xdef15:00
rogpeppeTheMue: you just need to find out the address in the current file, invoke an external program, and parse the resulting file address15:00
rogpeppeTheMue: only if xdef is a package identifier, right?15:00
TheMuerogpeppe: yes, will check if it discovers an alias too15:01
rogpeppeTheMue: it should do - that's really easy to do15:01
TheMuerogpeppe: it does15:03
rogpeppe fwereade: i'm still hoping for a review of https://codereview.appspot.com/13251052, if poss15:04
fwereaderogpeppe, sorry, just finishing meeting15:04
rogpeppefwereade: ack, np15:04
dimitern_fwereade, https://codereview.appspot.com/13501051/15:10
dimitern_fwereade, last bit of provisioner server-side api15:10
TheMuesimple part done, eliminated status value. but now the consequences ...15:15
yolandahi, i'm receiving this error after a juju bootstrap, when trying to deploy a service, or even with juju status: error: cannot log in to admin database: auth fails15:30
fwereadeyolanda, can you ssh to the machine and see if there's anything in var/log/cloud-init-output.log (I think that's the one)15:34
fwereadeyolanda, if it didn't manage to set up admin creds it will probably say why in there15:35
fwereadeyolanda, sorry, what I mean is, please pastebin me the contents of that file and I'll take a look15:36
fwereadeyolanda, is there any possibility that you've got mismatched tools?15:36
yolandahttp://paste.ubuntu.com/6124396/15:36
yolandafwereade, i executed a juju sync-tools before bootstrap15:36
fwereadeyolanda, that is an interesting thing to see though15:37
fwereadeyolanda, is there any more context? and cloud-init.log mightalso be handy15:37
yolandafwereade, and it happens repeateadly since this afternoon, i tried at least 3 times15:37
fwereadeyolanda, sorry, I have been moving house, but... rogpeppe, did we release anything this afternoon..?15:38
yolandalet me paste a bit from cloud-init15:38
rogpeppefwereade: not as far as i've seen15:38
yolandahttp://paste.ubuntu.com/6124407/15:39
yolandafwereade, is that useful?15:42
fwereadeyolanda, it may be, it's consistently surprising :)15:43
fwereadeyolanda, is there anything in /var/log/juju at all?15:44
yolandafwereade, only all-machines.log, and it's empty15:44
fwereaderogpeppe, is there anywhere else you can think of that might have some context there?15:49
rogpeppefwereade: reading back15:49
rogpeppeyolanda: could you paste the contents of cloud-init-output.log ?15:51
rogpeppeyolanda: (there's also cloud-init.log, i think, but that's has different stuff in)15:52
rogpeppes/that's/that/15:52
yolandarogpeppe, full log?15:52
yolandaa bit is on http://paste.ubuntu.com/6124396/15:52
rogpeppeyolanda: yes please15:52
yolandahttp://paste.ubuntu.com/6124464/15:53
rogpeppeyolanda: thanks!15:54
rogpeppeyolanda: can you ssh to the machine that happened on?15:55
yolandayes15:55
rogpeppeyolanda: what happens if you try to run /var/lib/juju/tools/1.14.0-precise-amd64/jujud on that machine?>15:56
yolandarogpeppe, it runs ok, shows a help message15:57
rogpeppeyolanda: hmm15:57
rogpeppeyolanda: running as root? or ubuntu?15:57
yolandaubuntu15:58
rogpeppeyolanda: what environment is this in?16:00
rogpeppeyolanda: it looks like a mmap syscall has failed when initialising the go runtime16:00
yolandarogpeppe, i'm on canonistack16:01
rogpeppeyolanda: just to check: what does uname -a print on that machine?16:03
yolandaLinux juju-openstack-machine-0 3.2.0-53-virtual #81-Ubuntu SMP Thu Aug 22 21:21:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux16:03
rogpeppeyolanda: hrmph :)16:04
rogpeppemgz, yolanda: do you know what kind of virtualisation canonistack uses?16:05
rogpeppe(if any)16:05
mgzkvm16:05
rogpeppemgz: any idea why a mmap call may be failing sometimes?16:05
mgzflakey disk?16:06
rogpeppemgz: there's nothing disk-related about this mmap call16:06
mgzI've not had issues with the instance disk on canonistack though, only attached volumes16:07
rogpeppemgz: (the fd argument to mmap is -1 in this case)16:07
mgzer,,, bad overcommit on memory then perhaps?16:07
mgzor a juju bug that just looks like the syscall is failing :)16:08
rogpeppemgz: i can't think how that could happen - the go runtime is printing out the messages i'd expect to see in that case16:08
rogpeppemgz: and the juju binary works ok when called later, so it doesn't appear to be binary corruption16:09
rogpeppes/in that case/if the syscall fails/16:09
yolandarogpeppe, mgz, problem is happening in every bootstrap, so it's not a random problem16:10
rogpeppeyolanda: yes, this is really weird! (but actually good that you can reproduce the problem)16:10
yolandabut bad because i cannot deploy my services :(16:11
mgzyolanda: have you tried both regions?16:11
yolandamgz, no, only zone 116:11
yolandait was working fine until this afternoon16:12
mgzmaybe try lcy02 if that's not too much hassle16:12
yolandaok, let me try16:12
mgzthe other thing to elliminate would be by using 1.13 tools rather than the new 1.14 if you're not certain you had a working 1.14 run16:13
yolandatrying zone 216:18
rogpeppeyolanda: did you use --upload-tools? (i.e. did you build the binaries yourself, and if so, what version of Go are you running?)16:22
yolandajuju sync-tools16:22
rogpeppeyolanda: thanks16:22
rogpeppemgz: do you know what Go version we're using to build the tools in the public bucket?16:23
mgzrogpeppe: whatever dave used, I'd expect what we have in saucy16:23
rogpeppemgz: hmm, any way i can easily find out? i'm just putting together an email to the golang list16:24
rogpeppemgz: in case someone there has a better clue16:24
mgzsec16:24
mgzoo, I'm not sure for 1.14, wasn't built out of his recipe16:25
mgzrogpeppe: pretty sure it's the saucy package, 1.1.216:28
rogpeppemgz: ok, thanks16:29
mgzarosales_: any corrections?16:29
TheMuefwereade: have to step out, but updated proposal is in. any feedback is appreciated so that i can continue tomorrow morning16:32
rogpeppemgz: what's the likelihood that yolanda is getting the same physical instance each time?16:33
yolandarogpeppe, i'm getting same instance every time16:33
mgzthe same underlying machine? high-ish within the same region, we have pretty limited hardware16:33
rogpeppemgz, yolanda: i wonder if it might be something odd about that instance16:34
arosales_mgz, sorry reading backscroll now ..  .16:36
mgzarosales_: short recap, what version of golang did the 1.14 release get built with?16:36
yolandamgz, bad news, same happens with zone 216:36
arosales_mgz, not sure on the golang version16:37
mgzyolanda: good news probably, means it unlikely to be canonistack hardware related16:38
mgzso, much more tractable problem :)16:38
yolandamgz, but i was hoping that zone 2 worked and i could deploy everything :)16:38
arosales_fwereade, do you know what version of golang releases are currently being built with?16:38
mgzI think the short version is no one has any clue how we do the release... I understoon Dave's old procedure, but he did something different this time around16:39
arosales_mgz, https://code.launchpad.net/~dave-cheney/+recipe/juju-core is the build recipe that was used.16:40
mgzarosales_: the buildlog for that ppa disagrees16:41
arosales_mgz, ah but I see what you are saying16:41
arosales_mgz, so davecheney built the tar ball and delivered that to jamespage16:41
arosales_jamespage then updated the saucy packaging and uploaded to the saucy archive16:41
arosales_which was built by the lp builders, I assume saucy based16:42
arosales_davecheney, then dput the packages from saucy into the ppa16:42
=== arosales_ is now known as arosales
yolandais there anything i can do to help to catch the bug?16:43
mgzarosales: I'm wondering if we didn't use the saucy binaries direct for the past ubuntu versions, but instead rebuilt with their golang copies... but I'd expect things to break much more dramatically if that happened16:44
arosalesmgz, so we have done initial testing on aws, hp, and azure with 1.1416:44
arosalesare were able to bootstrap there16:44
arosales1.14.0 that is16:45
mgzand using precise images I presume16:46
arosalesmgz, correct16:46
arosalesprecise on the server16:46
arosalesmgz, saucy failing here?16:46
mgznope, precise16:46
arosalesok16:46
mgzyolanda: give me your exact steps, in as miniaml form as possible, and I'll try to reproduce16:47
* arosales not sure how simplestreams work in canonistack16:47
yolandamgz, let me pass you my environments file16:47
yolandawithout keys, of course16:47
arosalesThere were some cloud-init issues but we thought there were specific to Azure16:49
arosalesyolanda, may want to have smoser take a look at the cloud-init log16:49
yolandaarosales, smoser, link to logfile is pasted in this conversation16:50
yolandamgz, environments file is like that: http://paste.ubuntu.com/6124684/16:51
yolandathen i just do a juju sync-tools, juju bootstrap16:51
mgzyolanda: ta16:51
mgzhm, there's some pyjuju junk in there but I assume that should just get ignored16:53
arosalessmoser, I think yolanda  is referencing http://paste.ubuntu.com/6124464/16:53
mgzyolanda: what's your local juju binary version?16:55
yolanda1.1216:55
smoserk.16:55
smoserreading.16:55
yolandai can try updating juju16:58
mgzlet my try here first16:58
mgzokay, so I can reproduce that17:20
mgzmanifests as a hang in status, which is joyous17:20
mgzrogpeppe, yolanda: also fails with the old 1.12 binaries, so not 1.14 related17:32
rogpeppemgz: v glad you can reproduce17:32
yolandamgz, and do you have any clue on what happens?17:32
rogpeppemgz: i wonder if you can reproduce it by getting the cloudinit to run some other non-juju executable17:33
rogpeppemgz: (go executable)17:33
rogpeppemgz: the weird thing is that the same binary works later.17:33
mgzyup, manually running the command that fails (and fixing up the --constraints arg), gets the machine in a usable state, and status works17:37
mgzso, something at that point during boot is borked17:38
mgzthis is definately a poke-IS moment17:38
mgzyolanda: can you file a bug or rt?17:39
yolandamgz, sure, maybe an RT can be faster?17:39
rogpeppefwereade, mgz: PTAL17:39
rogpeppefwereade: i've addressed your points, i think, except that i couldn't work out what the Default remark was about17:40
mgzokay, that acroymn has me stumped :)17:40
rogpeppemgz: sorry, "please take another look"17:40
rogpeppemgz: (common in golang core dev, not here, i guess)17:41
rogpeppemgz: i added a test for the "abort stops without closing" logic, but it proved really hard to make it fail17:41
rogpeppemgz: so i left it untested (it's just an optimisation after all)17:41
rogpepperight, that's me for the day17:42
rogpeppeg'night all17:43
mgzchanges lgmt17:43
rogpeppemgz: thanks17:43
yolandamgz, is that an issue of juju-core, cloud init?17:45
mgzreally hard to tell, but I suspect not juju-core, as it only started today, and the 1.12 binaries from a while back are also failing17:46
natefinchjam, fwereade, mgz, rvba: any of you guys know how to connect to Garage Maas?  These instructions no longer appear to work: https://wiki.canonical.com/CDO/UbuntuServer/IOM-Lab17:48
jamrvba: allenap, bigjools ^^17:48
yolandai just file an RT with the situation and logs then17:48
mgzyolanda: thanks!17:48
sinzuinatefinch, are you satisfied with with windows client? Do you want to block the releases of 1.14.1?17:50
natefinchsinzui: the windows client is fine, though currently it is marked as 1.14.0.  If we want one for 1.14.1 I'll need to rebuild the installer.17:52
yolandamgz https://eu1.salesforce.com/500D000000Uksl417:53
sinzuinatefinch, understood. I think we want to start the release of 1.14.1, though the building of it would happen tomorrow by jamespage. I think you build the client at the time we extract the tools?17:54
natefinchsinzui: I can build the client any time we decide that what is on the branch is what we want to release.... it's 100% orthogonal to the rest of the release process17:56
sinzuinatefinch, fab. The lp:juju-core/1.14 branch is NOT ready, but I will start on it.17:57
marcoceppiwtf, why is juju putting .empty files in directories?18:34
natefinchmarcoceppi: do you have more detail?18:52
smosershoot. / me rememers19:05
smoseram istill needed here?19:05
smosermgz, i suspect jugju core.19:07
smosercloud-init ran juju's stuff happily.19:07
smoseri'm not really sure why jjuju decided to print 7000 numbers.19:07
smoserpresumably each charater in cacert as ascii19:08
natefinchsmoser: yeah, I've seen it do that19:11
marcoceppinatefinch: install hook creates a "volumes" directory in the charm, next hook fails because it checks that directories for files, and in it is a .empty file19:49
marcoceppiWasn't created by the charm, shows up in all directories my charms create that are empty19:50
natefinchmarcoceppi: the code says that has something to do with using git with the charms19:53
marcoceppinatefinch: ugh, this sucks and breaks a few charms in the store19:53
natefinchmarcoceppi: I don't know that area of the code at all... but it looks like that's not new code... though it's certainly possible it's being used in a new way19:53
marcoceppithere are other ways to register empty directories in git other than putting a dang file in there19:54
=== BradCrittenden is now known as bac
natefinchmarcoceppi: yeah, not really the best way to do it.  should be easy enough to fix so that we don't do that.19:55
* marcoceppi files a bug19:55
ahasenackguys, I just bootstrapped with juju trunk from earlier today, and I'm getting authorization errors in juju status19:56
ahasenackanything known about that?19:56
ahasenacklemme paste19:57
natefinchmarcoceppi: actually, it looks like you can't add empty directories in git... though honestly, it doesn't seem very useful anyway19:57
marcoceppinatefinch: you can19:57
ahasenackhttp://pastebin.ubuntu.com/6125398/19:58
natefinchmarcoceppi: ok. I was just going off a quick google search.  But if there's a way, then certainly it must be better than empty ugly files everywhere19:58
marcoceppinatefinch: but either way, theres no need to track an empty directory19:58
marcoceppiif it's empty, it's empty19:58
ahasenackr183419:58
natefinchmarcoceppi: yeah, it seems like you could just ignore it19:59
marcoceppinatefinch: well, there was a way19:59
natefinchahasenack: let me try it here20:01
ahasenacknatefinch: I bootstrapped with --upload-tools20:01
ahasenackif that matters20:02
natefinchshouldn't... but you never know20:03
ahasenacknatefinch: I see a traceback in cloud-init.log, digging20:07
ahasenacknatefinch:20:07
ahasenackruntime: panic before malloc heap initialized20:07
ahasenackfatal error: runtime: cannot allocate heap metadata20:07
natefinchwell that sounds bad20:08
ahasenackso the bootstrap node doesn't run on an instance with 512Mb of RAM anymore20:08
natefinchthat is pretty tight, but I don't know... I wouldn't have expected that to change20:09
ahasenackcan I set default constraints in environments.yaml?20:09
ahasenackcanonistack's default is 512Mb20:09
natefinchhmm... I'm actually getting similar behavior on EC220:10
natefinchlemme check the cloud init log there20:10
natefinchdefinitely wouldn't be a ram issue if it happens on EC220:11
ahasenackcorrect20:11
ahasenackunless you are using a tiny instance, then maybe20:11
natefinchit defaults to a small20:12
natefinchwhich is what I used20:12
natefinchI'm getting a different error, but still an error from cloud init20:13
ahasenackcloud init backtraced, I had to check cloud-init-output.log20:13
natefinchYeah, I looked at both... possibly the memory issue you hit was during error handling, I don't know20:14
natefinchI'll write up a bug. I don't know this part of the code, so there's not much I can do, but others who do know will be on soon20:14
ahasenackso bootstrap failed for you in the end?20:15
natefinchahasenack: yeah20:15
ahasenackthat sucks20:15
natefinchahasenack: well, bootstrap appeared to complete, but then juju status got into the same loop yours got in20:16
natefinch2013-09-18 20:09:33 INFO juju.state open.go:106 connection established20:16
natefinch2013-09-18 20:09:33 INFO juju.state open.go:68 opening state; mongo addresses: ["ec2-54-221-155-244.compute-1.amazonaws.com:37017"]; entity ""20:16
natefinchover and over20:16
ahasenackno authorization errors?20:16
natefinchyeah, one at the beginning, like in your paste20:17
ahasenacknatefinch: mine worked now20:17
ahasenackused a bigger instance20:17
natefinchhmm weird20:17
natefinchso why is mine failing? :/20:17
ahasenacknatefinch: did you wait long enough? Mine failed for a while with auth errors, but then worked, I'm guessing stuff was still happening over at the bootstrap node20:19
natefinchall this time and it's still not working. Weird. I'll kill it and retry20:22
ahasenackk20:22
natefinchahasenack: same problem20:31
ahasenacknatefinch: what's the error in both cloud-init log files?20:32
natefinch2013-09-18 20:27:43 ERROR juju supercommand.go:235 command failed: state info or API info not found in configuration20:33
ahasenacknatefinch: only that?20:36
ahasenacknatefinch: what about mongo messages in /var/log/syslog?20:36
natefinchahasenack: well, that's the meat of the error, the rest is the python traceback20:37
natefinchahasenack:  yeah, a bunch of these:20:40
natefinchSep 18 20:28:20 ip-10-139-4-163 mongod.37017[6957]: Wed Sep 18 20:28:20 [initandlisten] connection accepted from 71.174.89.21:55993 #1 (1 connection now open)20:40
natefinchSep 18 20:28:23 ip-10-139-4-163 mongod.37017[6957]: Wed Sep 18 20:28:23 [conn1]  authenticate db: admin { authenticate: 1, nonce: "ec93b95260b929d0", user: "a20:40
natefinchdmin", key: "b386a7e0cf28af1a46eca891235e2cc2" }20:40
natefinchSep 18 20:28:23 ip-10-139-4-163 mongod.37017[6957]: Wed Sep 18 20:28:23 [conn1] auth: couldn't find user admin, admin.system.users20:40
ahasenackthat sounds like an interrupted cloud-init script20:40
ahasenackyou can check in /var/lib/cloud/tabtab somewhere about the cloud-init files that juju gave this instance20:40
natefinchso, I see this in my cloud-init.log, which sounds suspicious  - Sep 18 20:27:43 ip-10-139-4-163 [CLOUDINIT] cc_scripts_user.py[WARNING]: failed to run-parts in /var/lib/cloud/instance/scripts20:49
thumpermorning20:58
natefinchafternoon20:58
natefinchthumper:  windows installer is deployed to the website (again). This time with code that actually works.  So, high five for that.20:59
* thumper high fives natefinch20:59
natefinchthumper: unrelated... I can't seem to bootstrap an ec2 instance using trunk.  was just going to write an email about it20:59
thumperwhat error are you seeing?21:00
natefinchthumper: error during cloud init - 2013-09-18 20:27:43 ERROR juju supercommand.go:235 command failed: state info or API info not found in configuration21:01
thumperhmm...21:01
natefinchand some errors from mongo in syslog- Sep 18 20:30:30 ip-10-139-4-163 mongod.37017[6957]: Wed Sep 18 20:30:30 [conn350] auth: couldn't find user admin, admin.system.users21:01
thumperinteresting21:02
thumpernot sure what happened there21:02
thumperI disconnected myself21:02
natefinchheh21:02
natefinchthumper: you missed this - and some errors from mongo in syslog- Sep 18 20:30:30 ip-10-139-4-163 mongod.37017[6957]: Wed Sep 18 20:30:30 [conn350] auth: couldn't find user admin, admin.system.users21:03
thumperhuh21:03
* natefinch shrugs21:03
thumperyes, send the email21:03
ahasenacknatefinch: the run-parts bit, what are the scripts in /var/lib/cloud/instance/scripts ? I think it means one script in there failed21:06
ahasenackit's the bootstrap-state command that failed21:09
thumpernatefinch: did you upload tools?21:12
natefinchthumper: yep21:12
* thumper goes back to thinking21:12
=== tasdomas is now known as tasdomas_afk
natefinchthumper: http://pastebin.ubuntu.com/6125667/21:15
natefinchoutput from bootstrap21:15
thumpernatefinch: yeah, reading through the email21:16
natefinchthumper: it says it found existing jujud... sorta surprised it found jujud, actually21:16
thumpernatefinch: ah, could be in issue with the jujud you have built locally21:17
natefinchthumper: yeah I was just thinking that21:17
natefinchthumper: if it's an old version21:17
thumpernatefinch: can you do an install21:17
natefinchthumper: yep21:18
natefinchthumper: retrying, but I need to get going... stuff to do before dinner. I'll see if this works better.21:19
thumperok21:19
thumpernp21:19
natefinchthumper: worked fine with the correct jujud.... false alarm :)21:25
thumperok, cool21:25
natefinchg'night21:26
Berett21:29
thumpermorning wallyworld23:14
* thumper has been busy reviewing23:14
bigjoolshello23:20
thumpero/23:22
thumpergym time23:48
=== thumper is now known as thumper-gym

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