[00:57] natefinch, thumper: https://bugs.launchpad.net/juju-core/+bug/1226840 [00:57] <_mup_> Bug #1226840: Windows client needs to make unix paths when working with the bootstrap node [00:57] does this need to be backported to 1.15.0 (trunk series ?) [01:13] davecheney: disregard my email. I just checked the PPA myself [01:13] I would like to know where go gets picked up from though [01:18] axw: ok [01:18] axw: are you saying, when we biuld into juju:ppa/stable, which version of Go does it use ? [01:19] /s/saying/asking [01:19] aye [01:20] ok, that is level 11 magic [01:20] me finds link [01:20] :) thanks [01:20] https://launchpad.net/~juju/+archive/stable/+edit-dependencies [01:21] this stable ppa has a dependencie on juju-golang [01:21] in effect, juju-golang is inserted into the apt sources [01:21] before apt-get install golang-go [01:21] so that is how we build with a go that isn't in any of the series' [01:21] davecheney: yes [01:21] davecheney: I'll do it [01:22] davecheney: I tried proposing just that change to lp:juju-core, but it had heaps of conflicts, so I left it until after the gym [01:22] back now [01:22] thumper: cool, thanks for keeping on top of it [01:23] i love the smell of backports in the morning [01:24] davecheney: thanks [01:25] axw: so that is how it works, i'm not sure if that answers all the questions [01:25] davecheney: yes, I was just curious how it works [01:25] davecheney: I didn't realise the PPAs built with CGO_ENABLED=0 [01:25] axw: if they are, it's a massive bug [01:26] davecheney: well the dev PPA binaries are statically linked [01:26] axw: say again [01:26] that should not be the case [01:26] the whole reason for this dependant ppa stuff was to accomodate the (now depricated) gwacl cgo dependency [01:26] davecheney: I just downloaded the raring 1.13.3 dev build [01:27] and "juju" is statically linked [01:28] davecheney: I only care because net.LookupIP breaks if you feed it an IP in non-cgo [01:28] htus I [01:28] erk [01:28] axw: sudo apt-add-respository ppa:juju/juju-golang [01:28] sudo apt-get install golang-go [01:28] please check [01:28] and raise a bug [01:28] ok [01:28] there is so much shit breaking i cannot keep on top ofit [01:28] davecheney: no worries :) [01:29] lucky(~/go/src) % file /usr/lib/juju-1.14.0/bin/juju [01:29] /usr/lib/juju-1.14.0/bin/juju: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped [01:29] does not appear to be the case [01:29] i am confused that you are seeing different results [01:29] davecheney: https://launchpad.net/~juju/+archive/devel/+files/juju-core_1.13.3-1~1737~ubuntu13.04.1_amd64.deb [01:29] get that [01:29] quantal ? [01:29] raring [01:29] sorry [01:30] axw: could you please raise an issue [01:30] otherwise i'm likely to get ... SQUIRREL! [01:30] davecheney: yep I will [01:30] :) [01:30] ooh look at the dog with the fluffy tail [01:31] PONY! [01:36] davecheney: https://bugs.launchpad.net/juju-core/+bug/1226902 [01:36] <_mup_> Bug #1226902: ppa builds are built without cgo [01:37] ta [01:39] davecheney: https://codereview.appspot.com/13241053 [01:41] thumper: LGTM, tahnks [01:42] davecheney: golang-go has CGO_ENABLED=1, so nfi [01:43] that is batshit crazy [01:43] is it blocking you today ? [01:43] davecheney: I can work around it for now [01:43] ok [01:44] thumper: when you close this one https://bugs.launchpad.net/juju-core/+bug/1226840 [01:44] <_mup_> Bug #1226840: Windows client needs to make unix paths when working with the bootstrap node [01:44] please mark it fixed agaist 1.14.1 and 1.15.0 [01:44] or something [02:08] davecheney: cleaned up the bug showing 1.14 series target, with 1.14.1 milestone [02:08] taking main task as trunk [02:08] thumper: thank you, you are a very impressive man [02:09] how do you do that [02:09] i usually say 'target to series, then choose trunk and 1.14' [02:09] how do you do it ? [02:09] axw: could I draw you attention to https://canonical.leankit.com/Boards/View/103148069/106844170 [02:09] I just said "target to series" and selected 1.14 [02:09] and ask that if it won't happen, you retarget the issue [02:09] and not trunk [02:09] maybe that is where I was ging wrong [02:09] the set the milestone on that for 1.14.1 [02:10] no, didn't select trunk [02:10] that way the main bug task stays there and active [02:10] and set the milestone for the main task to be 1.15 [02:10] davecheney: if I fix this issue in time, I'll get onto that [02:10] good chance it won't happen, in which case I'll retarget [02:10] davecheney: probably either is fine [02:10] axw: i don't think this is critical for 1.15.0 [02:10] * davecheney makes a 1.15.1 milestone [02:13] thumper: wallyworld___ could you please put your heads together and reply to https://lists.ubuntu.com/archives/juju-dev/2013-September/001591.html [02:14] ok [02:14] if i can get my next 2 branches landed, we'll be good from my perspective [02:14] i'll reply in a bit [02:15] cool [02:17] davecheney: ack [02:17] davecheney: all my pending stuff is landed now [02:17] so a +1 from me, [02:17] just reviewing wallyworld___'s branch now [02:17] I think wallyworld___ is trying to go for a record of trailing underscores [02:17] i've had longer [02:17] that's what she said [02:18] wallyworld___: the door is over >>>>> there [02:18] heh [02:18] i'm here till Wednesday [02:19] wallyworld___: https://twitter.com/RikerTips/status/372018041787138049 [02:20] lol [02:20] even though i *hate* twitter [02:20] i hope the IPO fails [02:20] i also hate facebook and anything else vaguely related [02:21] shall we get off your lawn? [02:21] yes! [02:21] or i will hose you [02:21] * bigjools tingles with excitement [02:21] * wallyworld___ does too [02:37] wallyworld___ is going to eschew all technology made after 1986 [02:38] noooo, just social media, which is pointless crap [02:38] thumper: have you seen my 8 track player ? [02:38] who cares if so and so took a huge dump this morning and then brushed his teeth. seriously [02:38] mindless drivel [02:41] https://launchpad.net/juju-core/trunk [02:41] ^ is it possible to hide the old milestones [02:41] this list is longer than wallyworld___ === wallyworld___ is now known as wallyworld [02:42] davecheney: not sure, I'd ask SteveK or wgrant [02:43] hmm... [02:43] * thumper wonders what wallyworld is going to say about this review [02:44] oh dear [02:51] wallyworld: done [02:51] thanks i think :-) [02:52] thumper: i *really* wanted to have a storage subpackage under environs, then we would say "storage.Get" etc [02:52] but it was not possible [02:52] because? [02:52] because someone thought it a great idea to dump all the interfaces in environs [02:53] -> import loops [02:53] i tried to explain that in the cvering letter [02:53] ok, as I see it you have two choices [02:53] i don't know if it's a Go thing or not [02:53] keep in environs but with more descriptive names [02:53] but it seems like people don't like packages [02:53] or make a package with the interface defined in storage [02:54] I talked with fwereade about this [02:54] i'll see what can be done [02:54] and we decided it would be better to move all the interfaces into a different package [02:54] to make it so we don't ahve loops [02:54] yes! [02:54] the alternative is to have potentially diverging interface copies [02:55] i reckonif some people had their way, we would just have a single juju package [02:55] haha [02:55] it's not funny [02:55] but sad [02:55] yeah it is [02:55] sad, sad, sad [02:56] school run [02:56] thanks for reviewing [02:56] np [02:59] thumper, wallyworld: are we on for a package review in half an hour? [03:00] axw: thumper was supposed to reschedule - i have a school concert thing at the same time today [03:00] ok [03:18] https://codereview.appspot.com/13577044 [03:36] 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.haqccf144cr7 [03:36] or perhaps we should just wait for natefinch in the morning us time as he has the env set up. [03:42] axw: there are a few ways to link your branch https://code.launchpad.net/~axwalk/juju-core/lp1225825-netlookupip-ip/+merge/186229 to bug 1225825 [03:42] <_mup_> Bug #1225825: add-machine fails when using IP in ssh: target [03:42] thumper: yeah sorry, just forgot [03:42] axw: when you are making a commit, you can go "--fixes lp:1225825" [03:43] and then the branch scanner will pick that up [03:43] or you can do it from the bug or branch page [03:43] ah cool [03:43] I usually -bug in lbox [03:43] * thumper hopes to stab lbox in the heart [03:43] :) [03:44] axw: if you do it from the branch page, and you have something that looks like a number in the branch name [03:44] lp takes a guess an suggests that for the bug number [03:44] yup, quite handy [03:44] linked now [03:44] thanks [03:44] ta [03:45] axw: what do you most urgently need reviewed? [03:45] I'm on a roll [03:45] thumper: that one would be good to get into 1.15.0 [03:45] ok [03:45] * thumper looks now [03:46] thumper: after that, everything is to do with null provider/manual bootstrap [03:46] axw: what about manual bootstrap ? [03:46] probably best if all the storage stuff gets sorted first [03:46] thumper: I mean, all my remaining MPs [03:46] are to do with that [03:46] axw: give me a queue to work through [03:46] sure, just a moment [03:49] https://code.launchpad.net/~axwalk/juju-core/localstorage-to-httpstorage/+merge/185958 [03:49] https://code.launchpad.net/~axwalk/juju-core/filestorage-write-tmpdir/+merge/185715 [03:49] https://code.launchpad.net/~axwalk/juju-core/sshstorage-tmpdir/+merge/185717 [03:49] https://code.launchpad.net/~axwalk/juju-core/sanity-check-constraints/+merge/185015 [03:49] thumper ^^ [03:49] kk [03:49] thank you [03:53] axw: wasn't there a branch that moved local/storage out to another location? [03:54] just double checking that this queue is the order they'd be landed [03:55] thumper: https://code.launchpad.net/~axwalk/juju-core/manual-bootstrap/+merge/184714 [03:55] that's LGTM'd, just waiting on the sshstorage changes [03:55] it's not quite in order [03:55] I'll have to do some merging [03:56] axw: for the local -> http storage branch [03:56] the first file imports provider/local/storage as httpstorage [03:56] but the very next file uses environs/httpstorage [03:56] why the difference? [03:56] hang on, gotta refresh my memory [03:57] ah.. [03:57] local/storage is the worker [03:57] ffs, why did I do that [03:57] thumper: yeah that one is changing in the manual-bootstrap MP [03:57] * thumper confused himself [03:57] it will become worker/localstorage [03:57] wait... [03:57] *looking* [03:58] wtf [03:58] that is an error :) [03:58] I probably did an overzealous sed [03:59] thumper: cmd/jujud/machine.go should not have changed in this MP [03:59] axw: how about you do a quick sanity check on that diff, and push any changes and repropose [03:59] I'll look at the next one [03:59] yep will do [04:00] sorry about that [04:08] thumper: updated [04:09] * thumper looks [04:13] axw: re fileStorageReader, my first cut at it used filepath.Walk :-) [04:13] was told to use Glob [04:13] * thumper prefers walk [04:13] as reviewer, I approve [04:16] thumper: Glob doesn't actually work properly there, that's the main reason for the change [04:16] Glob only works for one level of the hierarchy [04:16] where does it fail? [04:17] I didn't see a test added that demontrates that [04:17] or is it later in the branch? [04:17] /tmp/* matches /tmp/blah, but not /tmp/blah/blah [04:17] * axw looks [04:17] I think it's probably in httpstorage [04:17] * thumper wonders [04:17] should /tmp/* match /tmp/blah/blah [04:17] not in shell globbing [04:18] or deos it... [04:18] should it with our one? [04:18] * axw doesn't understand the question [04:19] thumper: according to the docs for filepath: '*' matches any sequence of non-Separator characters [04:19] filepath.Match even [04:19] which is what Glob's syntax conforms to [04:20] I'm wondering what the expectation is with our interface [04:20] is the expectation that we recurse or not? [04:20] if not, then we don't really need to walk the entire structure [04:21] thumper: oh yeah, List is meant to return everytrhin === tasdomas_afk is now known as tasdomas [04:21] everything [04:21] it considers the namespace flat [04:22] thumper: there's no test for this directly in filestorage, only in httpstorage (which uses filestorage in the test). I can add one. [04:22] that would be appreciated [04:23] don't repropose until I've finsihed the review though [04:23] nearly there [04:23] okey dokey [04:26] review done [04:26] * thumper moves to the third [04:36] thumper: good call on the test, I found a bug in the existing code [04:37] for instance.HostAddresses; an IPv4 net.IP may be represented as 16 bytes [04:37] there's no check for that [04:40] :) [04:42] axw: https://code.launchpad.net/~axwalk/juju-core/sanity-check-constraints/+merge/185015 has conflicts [04:44] ok [04:44] I'll add the filestorage test and then get onto that [05:22] axw: I'm heading off shortly [05:22] axw: got anything you want a re-review on before I go? [05:24] thumper: i'll push some changes to my branch in a bit if you happen to be on later [05:24] I'm being taken out for a birthday dinner [05:24] so not really likely to be on later [05:24] but can do it tomorrow morning [05:25] ok. whose birthday? [05:25] probably around for another 20 min or so [05:25] thumper: I'm about to repropose the local-to-httpstorage [05:25] wallyworld: mine [05:25] wallyworld: and Rachel's [05:25] thumper: oh? happy birthday old man :-) [05:25] and to rachel too [05:25] wallyworld: last week dude [05:25] geez [05:26] * wallyworld didn't know [05:26] you never mentioned it :-) [05:27] wallyworld: it is why I was off for a long weekend with no kids [05:27] i thought that was wedding anniversary [05:28] it was [05:29] wedding anniversary 9th, my birthday 10th, Rachel's 11th [05:29] all together for ease of remembering [05:29] you sure do know how to organise things [05:29] * thumper bows [05:30] thumper: i'm moving StorageReader and friends interfaces to environs.storage. a lot of places to change [05:30] * thumper nods [05:30] ok [05:30] I still think you should have "Get" and "GetWithRetry" [05:30] or "GetWithStrategy" [05:30] instead of "DefaultGet" and "Get" [05:30] sure. separate issue which i'll also look at :-) [05:30] * thumper nods [05:31] thumper: there will be controvery i'm sure with the interface move [05:31] but i just can't agree it is right as is [05:31] and this is a good excuse [05:31] how are you doing the interface? [05:31] same interface names - StorageReader, StorageWriter etc, but moved to environs.storage [05:32] seems fine to me [05:32] we may have an interface package later to remove the dependency loops [05:32] but that can happen later [05:32] me too. but i'm sure i recall people wanting *all* the interfaces lumped together [05:32] and I may suggest we get technical architect approval and review [05:33] thumper: I've reproposed, but haven't done the test helper changes yet. will do that now. [05:33] * thumper nods [05:35] axw: I see the comment but not a diff change [05:35] did the propose work? [05:35] thumper: sorry, I think lbox was still working [05:35] should be there now [05:38] kk [05:43] axw: that one is good to go (preferably after the test helper is added) [05:43] * thumper has to go clean for a bit [05:43] ciao [05:43] thanks thumper [06:36] wallyworld: poke about DataSource stuff [06:36] yeees? [06:36] I'm trying to figure out whether tools DataSources have '/tools' in them or not. [06:37] I might just have an out-of-date goose, though. [06:37] but the old keystone entry was just putting "" in the entry [06:37] wallyworld: still true in goose trunk if I'm reading it correctly. [06:38] jam: the keystone entry has been updates to add the /tools [06:38] "Service{"juju", "juju-tools", ... PublicURL: url") where that URL is the root of the Swift bucket [06:38] wallyworld: not in testservices/openstack/New() if I'm reading it correctly. [06:38] i can;t quite recall if goose needed updating [06:38] ah, you mean the test doubl [06:38] wallyworld: I'm testing that I can actually *fetch* something from each DataSource and some of them are failing [06:39] and I'm trying to figure out whether it is a mistaken understanding of where the stuff needs to get uploaded to [06:39] hmmm. 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 wrong [06:39] i think it matters for the legacy fallback to work [06:40] so, if simplestreams it set up right, you don't need any /tools at the end [06:40] it's just a url [06:40] but, if you want the legacy fallback stuff to work, you need to stick stuck in /tools [06:41] let me take a quick look at the code [06:41] wallyworld: GetToolsSources puts environs.BaseToolsPath into the NewStorageSimpleStreamsDataSource [06:41] but uses 'juju-tools' output directly [06:41] I think it uses "ToolsURL" from config directly [06:42] and DefaultBaseURL directly [06:42] the base url can be anything [06:42] the default url is for getting stuff from the official repository [06:42] wallyworld: I was a bit confused because of different places where you end up mangling the search path for tools [06:42] but you don't touch all the possible paths [06:42] there's only one place - in tools/urls.go [06:42] so I thought "tools" got tacked on after the fact [06:43] but each provider gets to add in some search places if it wants [06:43] wallyworld: 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] and I'm still just trying to sort of what "correctly" is. [06:44] A couple of times now my expectations of consistency across them didn't quite match. [06:44] so - 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 metadata [06:44] no "tools" anywhere [06:45] but, it's convention/tradition that we tend to make the base url end in "tools" [06:45] wallyworld: and clearly you haven't fetched from the "juju-tools" keystone entry, because you can't write data to the '/' container [06:45] AFAICT [06:45] i have fetched them from there [06:46] i can write to juju-tools url/tools [06:46] the keystone entry points to blahblah/tools [06:46] wallyworld: not in the goose double [06:46] which is my point [06:46] you can't have a test case that is actually doing this [06:46] you might have tested on Canonistack [06:46] but it doesn't need to end in tools [06:47] i don't think [06:47] wallyworld: I think you're missing *my* point. [06:47] sorry, this is hard ober irc [06:47] wallyworld: the URL probably can be whatever it wants to be [06:47] wallyworld: 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 to [06:48] thus you probably can't have a test case that the keystone entry works [06:48] if you have one, point me to it, and I'll follow how it sets up the data [06:48] where does the goose test double keystone entry point to? [06:48] wallyworld: you *do* have a test case that we see the base URL [06:48] but no test that Fetch on that URL works [06:48] there's test cases that the urls are as expected [06:48] wallyworld: it points directly to the Swift base URL [06:49] and can't we set up one of those http proxies to return data releative to that url? [06:50] wallyworld: you're pointing at where Swift returns its data, and you can't upload data to swift without a container to put it in [06:51] so I could create the container named "releases" and one named "streams" and put stuff in the subdirectories (probably) [06:51] so, 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 tests [06:51] wallyworld: I'm testing that both URL() and Fetch() works for each of the datasources we see [06:51] I currently can't set up Fetch in a sane way to ensure that it gets data back properly [06:51] well, you can using tools-url [06:51] I can hack around it, but it feels like we missed some test coverage [06:52] wallyworld: that is a *different* data source [06:52] sure, but it's just a http data source [06:52] I'm testing tools-url, private storage, and the keystone entry [06:52] and we test http data sources work [06:52] and we test that the correct http data soruces are returned [06:53] i guess we can add extra tests but it seems over kill given we test all the moving parts [06:53] wallyworld: 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] so get the data sources back and poke their config? [06:53] so instead of testing MxN, test M+N [06:54] wallyworld: well I'm just testing that I can fetch any data [06:54] so I don't have to test that simplestream layout works there. [06:54] you can test separately if you can fetch data using a data source set up as no ssl [06:54] and separately test that the data sources that come back from simplestreams all have no ssl activates [06:57] wallyworld: 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] wallyworld: especially given the privacy layering means you can't "just check the bit is set" [06:57] sure, but you don't need to [06:57] you just need check that the url is correct and the ssl thing is correct [06:57] and there are separate tests for if url based data sources work [06:58] there's only 2 data sources - a url based one and a environs storage one [06:58] they can be tested separately with the ssl thng [06:58] so to me it's still a M+N vs MxN strategy [07:02] wallyworld: 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:03] so if you want to do that then i guess the url returned by the goose test double needs to have a container at the end [07:04] that you can put stuff in [07:04] wallyworld: well, I have to cheat elsewhere because we put 'tools' into the URL, so I can just try to fetch "acontainer/foo" from that URL [07:04] we put tools in there for legacy things - the tools file name is "releases/tools/juju-" for simplestreams [07:05] using the existing tools StorageName method [07:05] many tests set up the new simplestreams prefix and reset it after wards [07:05] and soon the legacy prefix will go away [07:32] hey guys, william texted me he's expecting his internet connection at the new place to be fixed some time this morning [07:43] 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 fetching [08:29] umm.. just a found a serious security issue in 1.14 for openstack [08:30] although it might extend longer [08:30] hazmat: what's up? [08:30] switch to canonical #juju pls [08:48] rogpeppe, morning [08:48] dimitern: hiysa [08:48] dimitern_: hiya, even [08:48] rogpeppe, updated https://codereview.appspot.com/13720045/ :) [08:53] dimitern_: you didn't like my "lxc:34/kvm/5" idea? [08:53] dimitern_: aw, i thought that was quite nice [08:55] rogpeppe, that's non-standard [08:55] rogpeppe, it's only used in add-machine and deploy [08:55] rogpeppe, in all other cases it's just a type, no prefix [08:56] dimitern_: i have a bit of a problem with the ContainerTypes argument to WatchContainers [08:56] rogpeppe, yes? [08:56] dimitern_: 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 machine [08:57] dimitern_: a container *type* is really just a string [08:57] rogpeppe, the structure is right for args, but I'm open to suggestions about a better name [08:57] dimitern_: yeah, it's just the name i'm not keen on [08:58] rogpeppe, how about MachineContainerPairs ? [08:58] dimitern_: one possibility might be to make the container type a separate (non bulk) arg [08:58] dimitern_: so that a given WatchContainers call could watch many machines, but only one type of container [08:58] rogpeppe, that's not good - we might need to create several different containers in a single bulk call [08:59] dimitern_: s/create/watch/ ? [08:59] rogpeppe, yep [08:59] dimitern_: well, you never *need* to issue a single bulk call for something [09:00] rogpeppe, so how about MachineContainerPairs{Pairs: []MachineContainerPair{Tag, ContainerType}} ? [09:03] dimitern_: it's really Machine-ContainerType-Pair but that doesn't make for a great name [09:03] rogpeppe, why doesn't it? [09:04] dimitern_: because MachineContainerTypePair could read as "Machine-container type pair" [09:04] rogpeppe, c'mon [09:04] rogpeppe, that's what doc comments are for [09:04] dimitern_: i think these names are actually quite important, and not easy to get right [09:05] rogpeppe, I really want to start landing stuff so I can continue [09:06] rogpeppe, we can always go with WatchContainersParams{Params: WatchContainersParam{MachineTag, ContainerType}}} [09:06] dimitern_: i'm wondering about params.WatchContainers [09:06] dimitern_: yeah [09:07] rogpeppe, ok, will change it and repropose [09:07] dimitern_: i think that perhaps makes more sense that trying to make it into some kind of generally applicable type [09:08] dimitern_: params.WatchContainers and params.WatchContainer, i think [09:08] dimitern_: thanks for bearing with me [09:08] rogpeppe, ok, np [09:14] rogpeppe, updated [09:25] dimitern_: does a provisioner really need to be able to access its own machine? [09:26] dimitern_: (other than for Watch, of course) [09:26] rogpeppe, for WatchContainers yes [09:27] dimitern_: but not for all the other methods, right? [09:27] rogpeppe, Life() as well [09:27] rogpeppe, that's how we do st.Machine(tag) [09:29] dimitern_: so perhaps those two methods should use a slightly different auth function? [09:29] rogpeppe, acutally all of the others need it as well [09:29] dimitern_: really? [09:29] rogpeppe, we need InstanceId(), EnsureDead() [09:29] rogpeppe, Remove() [09:30] rogpeppe, definitely SetStatus [09:30] rogpeppe, and SetProvisioned [09:31] dimitern_: um, aren't most of those operations done on the child machines? [09:31] dimitern_: not the provisioner's machine itself? [09:31] 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 account [09:32] dimitern_: i was thinking of it more as a way of catching errors in the provisioner code as anything else [09:33] dimitern_: (and also possibly as a way of making the code more obvious) [09:34] rogpeppe, and more complicated :) [09:34] rogpeppe, but it makes sense yeah [09:34] dimitern_: leave it for now; as you say it doesn't really matter [09:36] rogpeppe, ok then [09:37] dimitern_: reviewed [09:38] rogpeppe, thanks [09:42] rogpeppe, responded [09:43] dimitern_: i'm not sure why you need to make sure that the machine exists in the auth method [09:43] rogpeppe, to return ErrPerm if it doesn't [09:43] dimitern_: istm that a lexical test should be just fine [09:45] dimitern_: i really don't think it matters actually [09:45] dimitern_: as it is, we're going to fetch the machine *three times* on every API call [09:45] rogpeppe, it matters so long as we're keeping consistency with other api facades [09:46] rogpeppe, not 3 times - just 2 times [09:46] dimitern_: three times, i think [09:47] rogpeppe, once in lifegetter, once in auth func, right? [09:47] rogpeppe, the same applies to the other mixins [09:48] dimitern_: ah, perhaps - i was thinking we did it when creating the API facade itself, but that will have been done at login time [09:48] rogpeppe, and we're running on the same node as the state server, so shouldn't slow us down [09:49] dimitern_: BTW lots of existing API calls might not return ErrPerm if the entity has been removed [09:50] rogpeppe, only if you're authorized to see it [09:50] dimitern_: sure - but we can test that lexically, right? [09:50] rogpeppe, i.e. you're trying to access your own machine, which was removed [09:50] dimitern_: e.g. if you're trying to access a child machine, which was removed [09:51] dimitern_: i think it's reasonable that the environment-global provisioner can ask whether a top level machine exists or not [09:51] rogpeppe, how do you know it was removed, without fetching it? [09:51] dimitern_: it doesn't matter - you can get a NotFound error without any security problems ensuing [09:51] rogpeppe, if it comes to that, I'll change the logic, but so far it seems it'll work just fine [09:52] dimitern_: i think that it's fine that a provisioner is able to access all machines in its domain, whether they exist or not [09:53] dimitern_: 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:55] dimitern_: are there any other examples where the auth func does a db lookup? [09:56] dimitern_: (i'm also wary of the fact that we're potentially dropping mongo errors on the ground here) [09:57] rogpeppe, deployer does it [09:57] dimitern_: not afaics [09:57] dimitern_: getAuthFunc does, but not the auth func itself [09:57] rogpeppe, well, take a look at getAllUnits [09:57] rogpeppe, ah, yes [09:58] dimitern_: and note the fact that getAuthFunc returns an error, so we don't drop it on the floor there [09:59] rogpeppe, well, we don't have the tag inside getAuthFunc yet [10:00] dimitern_: 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:01] dimitern_: is there a security issue here that i'm not seeing? [10:01] rogpeppe, let me check something [10:10] rogpeppe, ok, changed the getAuthFunc to use state.ParentId() instead [10:10] dimitern_: cool, thanks [10:11] rogpeppe, and did slightly differently the suggestion about simplifying it [10:12] rogpeppe, reproposing [10:14] rogpeppe, LGTM? [10:14] dimitern_: just having a last look [10:20] dimitern_: reviewed [10:22] rogpeppe, thanks [10:45] dimitern, mgz, rogpeppe, TheMue: standup ? https://plus.google.com/hangouts/_/7bee5998ed9eebebcff8169fb6394538499bdf74?authuser=2 [10:45] well, leave off that last bit: https://plus.google.com/hangouts/_/7bee5998ed9eebebcff8169fb6394538499bdf74 [10:45] gslowload [10:46] jam, hm, you're not in the one from c.. right [10:47] we lost you rogpeppe [10:48] jam: yeah, just reconnecting [11:19] bug 1227074 [11:19] <_mup_> Bug #1227074: runtime panic when running any juju command in a deleted directory [11:28] hazmat, did 'peers before herd' get into juju-core? [11:28] (where peer relations are formed prior to any other remote relations) [12:37] review anyone? https://codereview.appspot.com/13251052 [12:38] dimitern_, jam, TheMue, mgz, axw: ^ [12:38] looking [12:38] mgz: thanks [12:40] I have one as well https://codereview.appspot.com/13552046 [12:40] okay, so the var stuff is the idiom for bits that need overriding in tests, right? [12:41] xcept the logger, which is just a logger [12:41] rogpeppe, will you take a look? [12:42] mgz: yeah [12:42] mgz, I haven't heard of such practice - if it's for the tests there's usually a comment [12:42] mgz: maybe that's a reason to keep them separate i suppose [12:42] mgz: the export_test stuff isn't because it is being overridden [12:42] it is because it is being exposed [12:43] jam: i think he was referring to the var block at the start of https://codereview.appspot.com/13251052/diff/1015/juju/api.go [12:43] jam: the main code has a few aliases at the top for some functions [12:43] right [12:44] dimitern: LGTM [12:45] TheMue, thanks [12:48] just rebooting to try to speed up this sluggish machinre [12:55] okay, this basically makese sense to me rog, but is pretty complex [13:04] rogpeppe: 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 els [13:05] mgz, 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 endpoint [13:07] evening all [13:08] hey fwereade, good to see you online :) [13:08] hey fwereade [13:08] fwereade, hey! you're online at last [13:08] dimitern_, yeah, I strolled off and had a peaceful lunchand now it's actually here at last [13:09] how have the last couple of days been? [13:09] provisioner is half way done :) [13:09] dimitern_,<3 [13:09] well, i'm finishing the server-side at first [13:09] any reviews I should be looking at in particular, anyone? [13:11] fwereade: i'd appreciate a look at https://codereview.appspot.com/13251052 [13:11] rogpeppe, ack [13:11] yeah, that's a good idea [13:32] fwereade: heya, I would like you to take a look at https://codereview.appspot.com/13430044/ to see if the direction is right [13:33] rogpeppe, looking at the format I'm very much unkeen on the nested fields in what we read in/write out [13:34] fwereade: so you don't like the endpoint/creds separation? [13:34] rogpeppe, was there some compelling consideration leading away from flatness? [13:35] rogpeppe, 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 belief [13:35] TheMue, ack [13:36] fwereade: 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] rogpeppe, I am +100 on doing that internally [13:36] fwereade: i don't really see a downside from nesting them [13:37] rogpeppe, I don't think it's a benefit in the context of content you might paste into an email to someone :) [13:37] fwereade: it means that the configstore code can be blissfully ignorant of the contents of APICredentials and APIEndpoint [13:38] fwereade: i think it reads ok actually [13:39] fwereade: insofar as yaml ever reads ok :-\ [13:40] rogpeppe, isn't the purpose of the configstore code to be able to produce a creds and an endpoint on demand? [13:40] rogpeppe, based on what's on disk? [13:40] rogpeppe, it's not some super-generic data store [13:41] rogpeppe, it is concerned precisely with their format on disk and in memory and it's its job to adapt between them ;) [13:42] fwereade: it will also store other info [13:42] fwereade: e.g. PushedSecrets [13:42] fwereade: extra config attributes [13:42] rogpeppe, extra config wants to be nested, sure [13:43] rogpeppe, PushedSecrets has to be LacksSecrets, doesn't it? [13:43] fwereade: 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] fwereade: why so? [13:44] fwereade: ha, yes, i think you're right [13:44] rogpeppe, 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] fwereade: yeah [13:44] fwereade: good point [13:44] fwereade: maybe NeedsSecrets [13:45] rogpeppe, as you wish:) [13:45] rogpeppe, 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 specified [13:46] rogpeppe, and I'm wondering what the deal is with the string for cacert? [13:46] fwereade: it means it can just be serialised with no extra hassle [13:46] fwereade: there's no point in double-base64 encoding [13:46] rogpeppe, didn't we say base64-encoded []byte? [13:47] rogpeppe, don't we always use CACerts as []byte? [13:47] fwereade: well it can't be []byte if it's to be serialised as a yaml string [13:47] fwereade: yeah, and i think that was a mistake on balance [13:47] rogpeppe, do those []byte~s actually only hold bytes from the base64 set? ) [13:47] fwereade: yes, they're all ASCII [13:48] fwereade: perhaps not from base64 per se, but all ASCII anyway, which is fine for encoding as a yaml string [13:48] fwereade: the only reason we use []byte is because the crypto package functions use []byte [13:48] fwereade: but it's all PEM encoded [13:49] fwereade: (and documented as such) [13:49] rogpeppe, urrgh [13:49] fwereade: it also means that the certificate is actually obviously a certificate when it's in the config file. [13:51] fwereade: BTW the environ config code already stores and uses the certificates as string [13:53] rogpeppe, ok, I'm convinced there, thanks :) [13:53] rogpeppe, but I'd really appreciate it if we could remove the nesting [13:53] fwereade: ok, will do [13:54] fwereade: BTW i did start off trying to implement a "type YAMLBase64Bytes []byte" with a custom YAML encoding method to encode and decode as base64 [13:54] fwereade: ... or maybe as string, anyway [13:55] rogpeppe, cheers [13:55] rogpeppe, ah, nice [13:55] fwereade: there are goyaml bugs that meant it couldn't work, sadly [13:56] rogpeppe, aww [13:57] rogpeppe, well, moot now I guess :) [14:02] TheMue, wondering what the motivation is for the []StatusValue conversion [14:03] TheMue, StatusData seems nice and clear [14:04] TheMue, but I don't see what problem the change to array solves [14:04] brb [14:07] fwereade: re-proposed with those on-disk changes as discussed [14:07] fwereade: 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 needed [14:07] fwereade: but can change it if preferred [14:07] fwereade: would only touch many places in code ;) [14:15] TheMue, I do see the nastiness [14:16] fwereade: just convenience [14:18] mgz: have you seen this yet? https://bugs.launchpad.net/juju-core/+bug/1227145 [14:18] <_mup_> Bug #1227145: Juju isn't cleaning up destroyed LXC containers [14:18] TheMue, I think I'd prefer to use the nilsexplicitly on balance [14:19] TheMue, I don't think it'll clutter the diff much, and it'll make SetStatus calls similar across the board [14:19] fwereade: that's the best argument for, that usage is not typical [14:20] fwereade: I'll change it [14:20] jcastro: not yet, looking [14:20] TheMue, tyvm [14:25] fwereade: 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 AllWatcher [14:27] TheMue, find what's already being done with status [14:27] TheMue, it's all in the same document, right? [14:28] fwereade: pardon? [14:28] fwereade: ah, you mean document == statusDoc [14:28] fwereade: wondered about a document [14:29] TheMue, the allwatcher already reports status changes per-entity anyway AIUI (rogpeppe, confirm?) [14:29] fwereade: yeah [14:29] TheMue: what's the issue exactly? [14:29] TheMue, so wherever it is it's picking up those changes, you can bung an extra field in whereappropriate and you're good, Ithink [14:31] fwereade: I added it to UnitInfo and MachineInfo already, which are delivered EntityInfos. so it should be done [14:32] TheMue, sorry,meeting [14:32] rogpeppe: just getting a better understanding how the megawatcher and AllWatcher work together [14:32] rogpeppe: had been unsure [14:32] TheMue: they're the same thing [14:33] TheMue: or do you mean the multiwatcher? [14:33] rogpeppe: simplifies it for me :) [14:33] rogpeppe: no, the megawatcher [14:34] TheMue: there's no code that mentions the term "megawatcher" [14:34] TheMue: it's just the name of the file that the AllWatcher implementation sits in [14:34] TheMue: which is really just left there as an in-joke tbh [14:35] rogpeppe: 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 reported [14:36] rogpeppe: that is very helpful information for me, thx [14:39] TheMue: your best bet is to read the multiwatcher docs thoroughly [14:40] TheMue: all the changes you need to make will be in the allWatcherStateBacking methods, which implement multiwatcher.Backing [14:43] rogpeppe: I had only to change updated() in backingStatus [14:43] TheMue: that sounds about right [14:43] rogpeppe: here now only one information more has to be copied for units and machines [14:44] rogpeppe: 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 blindness [14:45] rogpeppe: solving by accident [14:45] TheMue: the [14:46] % grep -i allwatcher megawatcher.go | wc [14:46] 17 91 992 [14:46] :-) [14:46] TheMue: bit of a clue there :-) [14:47] rogpeppe: I'm used to used an old fashioned environment of the 80s: smalltalk, with absolute simple code navigation by clicking ;) [14:47] TheMue: your editor doesn't do that? [14:48] rogpeppe: not the command you've done above, but references and implementors [14:48] rogpeppe: but still not as convenient and in a good visual way as smalltalk does it since more than 30 years [14:49] rogpeppe: today i started pharo again, because i once developed a product descriptor similar to our reviewed version stuff [14:50] TheMue: pharo? [14:50] rogpeppe: has been fascinating how fast you can navigate in the code [14:50] rogpeppe: pharo is an oss smalltalk [14:51] TheMue: 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] rogpeppe: and for sublime too :) [14:51] rogpeppe: but it is still not the same [14:51] TheMue: the go oracle will raise that to whole other level too [14:52] rogpeppe: go oracle? [14:52] TheMue: does sublime do the "go to definition of identifier" thing? [14:52] rogpeppe: yep [14:52] TheMue: interesting. so you can click on the "X" in an expression like y.foo().bar.X and it'll work reliably? [14:53] rogpeppe: also nice is "go to any symbol in your project" [14:53] TheMue: (to take you to the definition of the symbol X) [14:53] TheMue: that's much easier [14:53] TheMue: because it doesn't need to do the type inference [14:53] TheMue: https://docs.google.com/document/d/1WmMHBUjQiuy15JfEnT8YBROQmEv-7K6bV-Y_K53oi5Y/edit# [14:54] rogpeppe: oh, that doc looks interesting, will read it later [14:55] rogpeppe: have to check your question before [14:56] rogpeppe: so you mean a y of type Y, having a method foo(), returning something with a field bar containing a field X? [14:56] rogpeppe: never tried, will check [14:56] TheMue: yes (including the fact that X might be embedded several levels deep in anonymous structs) [14:57] TheMue: as may foo and bar [14:57] rogpeppe: no, I don't think that this is possible with GoSublime (the name of the plugin) [14:57] TheMue: and y itself might be a variable in a range expression over the result of a function return, etc etc [14:57] TheMue: ah, so that's what i meant - that capability is incredibly useful [14:58] TheMue: it means that any time i see a symbol, i can find out all about it [14:58] TheMue: in 0.01s approx [14:58] rogpeppe: that really would be great [14:59] TheMue: you could maybe do a plugin for sublime to support that (assuming you can make arbitrary plugins in sublime) [15:00] rogpeppe: what I can do is if I find something like x := xdef.X{} I can simply jump directly to the definition of X in xdef [15:00] TheMue: you just need to find out the address in the current file, invoke an external program, and parse the resulting file address [15:00] TheMue: only if xdef is a package identifier, right? [15:01] rogpeppe: yes, will check if it discovers an alias too [15:01] TheMue: it should do - that's really easy to do [15:03] rogpeppe: it does [15:04] fwereade: i'm still hoping for a review of https://codereview.appspot.com/13251052, if poss [15:04] rogpeppe, sorry, just finishing meeting [15:04] fwereade: ack, np [15:10] fwereade, https://codereview.appspot.com/13501051/ [15:10] fwereade, last bit of provisioner server-side api [15:15] simple part done, eliminated status value. but now the consequences ... [15:30] hi, 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 fails [15:34] yolanda, 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:35] yolanda, if it didn't manage to set up admin creds it will probably say why in there [15:36] yolanda, sorry, what I mean is, please pastebin me the contents of that file and I'll take a look [15:36] yolanda, is there any possibility that you've got mismatched tools? [15:36] http://paste.ubuntu.com/6124396/ [15:36] fwereade, i executed a juju sync-tools before bootstrap [15:37] yolanda, that is an interesting thing to see though [15:37] yolanda, is there any more context? and cloud-init.log mightalso be handy [15:37] fwereade, and it happens repeateadly since this afternoon, i tried at least 3 times [15:38] yolanda, sorry, I have been moving house, but... rogpeppe, did we release anything this afternoon..? [15:38] let me paste a bit from cloud-init [15:38] fwereade: not as far as i've seen [15:39] http://paste.ubuntu.com/6124407/ [15:42] fwereade, is that useful? [15:43] yolanda, it may be, it's consistently surprising :) [15:44] yolanda, is there anything in /var/log/juju at all? [15:44] fwereade, only all-machines.log, and it's empty [15:49] rogpeppe, is there anywhere else you can think of that might have some context there? [15:49] fwereade: reading back [15:51] yolanda: could you paste the contents of cloud-init-output.log ? [15:52] yolanda: (there's also cloud-init.log, i think, but that's has different stuff in) [15:52] s/that's/that/ [15:52] rogpeppe, full log? [15:52] a bit is on http://paste.ubuntu.com/6124396/ [15:52] yolanda: yes please [15:53] http://paste.ubuntu.com/6124464/ [15:54] yolanda: thanks! [15:55] yolanda: can you ssh to the machine that happened on? [15:55] yes [15:56] yolanda: what happens if you try to run /var/lib/juju/tools/1.14.0-precise-amd64/jujud on that machine?> [15:57] rogpeppe, it runs ok, shows a help message [15:57] yolanda: hmm [15:57] yolanda: running as root? or ubuntu? [15:58] ubuntu [16:00] yolanda: what environment is this in? [16:00] yolanda: it looks like a mmap syscall has failed when initialising the go runtime [16:01] rogpeppe, i'm on canonistack [16:03] yolanda: just to check: what does uname -a print on that machine? [16:03] Linux 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/Linux [16:04] yolanda: hrmph :) [16:05] mgz, yolanda: do you know what kind of virtualisation canonistack uses? [16:05] (if any) [16:05] kvm [16:05] mgz: any idea why a mmap call may be failing sometimes? [16:06] flakey disk? [16:06] mgz: there's nothing disk-related about this mmap call [16:07] I've not had issues with the instance disk on canonistack though, only attached volumes [16:07] mgz: (the fd argument to mmap is -1 in this case) [16:07] er,,, bad overcommit on memory then perhaps? [16:08] or a juju bug that just looks like the syscall is failing :) [16:08] mgz: i can't think how that could happen - the go runtime is printing out the messages i'd expect to see in that case [16:09] mgz: and the juju binary works ok when called later, so it doesn't appear to be binary corruption [16:09] s/in that case/if the syscall fails/ [16:10] rogpeppe, mgz, problem is happening in every bootstrap, so it's not a random problem [16:10] yolanda: yes, this is really weird! (but actually good that you can reproduce the problem) [16:11] but bad because i cannot deploy my services :( [16:11] yolanda: have you tried both regions? [16:11] mgz, no, only zone 1 [16:12] it was working fine until this afternoon [16:12] maybe try lcy02 if that's not too much hassle [16:12] ok, let me try [16:13] the 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 run [16:18] trying zone 2 [16:22] yolanda: 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] juju sync-tools [16:22] yolanda: thanks [16:23] mgz: do you know what Go version we're using to build the tools in the public bucket? [16:23] rogpeppe: whatever dave used, I'd expect what we have in saucy [16:24] mgz: hmm, any way i can easily find out? i'm just putting together an email to the golang list [16:24] mgz: in case someone there has a better clue [16:24] sec [16:25] oo, I'm not sure for 1.14, wasn't built out of his recipe [16:28] rogpeppe: pretty sure it's the saucy package, 1.1.2 [16:29] mgz: ok, thanks [16:29] arosales_: any corrections? [16:32] fwereade: have to step out, but updated proposal is in. any feedback is appreciated so that i can continue tomorrow morning [16:33] mgz: what's the likelihood that yolanda is getting the same physical instance each time? [16:33] rogpeppe, i'm getting same instance every time [16:33] the same underlying machine? high-ish within the same region, we have pretty limited hardware [16:34] mgz, yolanda: i wonder if it might be something odd about that instance [16:36] mgz, sorry reading backscroll now .. . [16:36] arosales_: short recap, what version of golang did the 1.14 release get built with? [16:36] mgz, bad news, same happens with zone 2 [16:37] mgz, not sure on the golang version [16:38] yolanda: good news probably, means it unlikely to be canonistack hardware related [16:38] so, much more tractable problem :) [16:38] mgz, but i was hoping that zone 2 worked and i could deploy everything :) [16:38] fwereade, do you know what version of golang releases are currently being built with? [16:39] I 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 around [16:40] mgz, https://code.launchpad.net/~dave-cheney/+recipe/juju-core is the build recipe that was used. [16:41] arosales_: the buildlog for that ppa disagrees [16:41] mgz, ah but I see what you are saying [16:41] mgz, so davecheney built the tar ball and delivered that to jamespage [16:41] jamespage then updated the saucy packaging and uploaded to the saucy archive [16:42] which was built by the lp builders, I assume saucy based [16:42] davecheney, then dput the packages from saucy into the ppa === arosales_ is now known as arosales [16:43] is there anything i can do to help to catch the bug? [16:44] arosales: 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 happened [16:44] mgz, so we have done initial testing on aws, hp, and azure with 1.14 [16:44] are were able to bootstrap there [16:45] 1.14.0 that is [16:46] and using precise images I presume [16:46] mgz, correct [16:46] precise on the server [16:46] mgz, saucy failing here? [16:46] nope, precise [16:46] ok [16:47] yolanda: give me your exact steps, in as miniaml form as possible, and I'll try to reproduce [16:47] * arosales not sure how simplestreams work in canonistack [16:47] mgz, let me pass you my environments file [16:47] without keys, of course [16:49] There were some cloud-init issues but we thought there were specific to Azure [16:49] yolanda, may want to have smoser take a look at the cloud-init log [16:50] arosales, smoser, link to logfile is pasted in this conversation [16:51] mgz, environments file is like that: http://paste.ubuntu.com/6124684/ [16:51] then i just do a juju sync-tools, juju bootstrap [16:51] yolanda: ta [16:53] hm, there's some pyjuju junk in there but I assume that should just get ignored [16:53] smoser, I think yolanda is referencing http://paste.ubuntu.com/6124464/ [16:55] yolanda: what's your local juju binary version? [16:55] 1.12 [16:55] k. [16:55] reading. [16:58] i can try updating juju [16:58] let my try here first [17:20] okay, so I can reproduce that [17:20] manifests as a hang in status, which is joyous [17:32] rogpeppe, yolanda: also fails with the old 1.12 binaries, so not 1.14 related [17:32] mgz: v glad you can reproduce [17:32] mgz, and do you have any clue on what happens? [17:33] mgz: i wonder if you can reproduce it by getting the cloudinit to run some other non-juju executable [17:33] mgz: (go executable) [17:33] mgz: the weird thing is that the same binary works later. [17:37] yup, manually running the command that fails (and fixing up the --constraints arg), gets the machine in a usable state, and status works [17:38] so, something at that point during boot is borked [17:38] this is definately a poke-IS moment [17:39] yolanda: can you file a bug or rt? [17:39] mgz, sure, maybe an RT can be faster? [17:39] fwereade, mgz: PTAL [17:40] fwereade: i've addressed your points, i think, except that i couldn't work out what the Default remark was about [17:40] okay, that acroymn has me stumped :) [17:40] mgz: sorry, "please take another look" [17:41] mgz: (common in golang core dev, not here, i guess) [17:41] mgz: i added a test for the "abort stops without closing" logic, but it proved really hard to make it fail [17:41] mgz: so i left it untested (it's just an optimisation after all) [17:42] right, that's me for the day [17:43] g'night all [17:43] changes lgmt [17:43] mgz: thanks [17:45] mgz, is that an issue of juju-core, cloud init? [17:46] really 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 failing [17:48] jam, 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-Lab [17:48] rvba: allenap, bigjools ^^ [17:48] i just file an RT with the situation and logs then [17:48] yolanda: thanks! [17:50] natefinch, are you satisfied with with windows client? Do you want to block the releases of 1.14.1? [17:52] sinzui: 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:53] mgz https://eu1.salesforce.com/500D000000Uksl4 [17:54] natefinch, 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:56] sinzui: 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 process [17:57] natefinch, fab. The lp:juju-core/1.14 branch is NOT ready, but I will start on it. [18:34] wtf, why is juju putting .empty files in directories? [18:52] marcoceppi: do you have more detail? [19:05] shoot. / me rememers [19:05] am istill needed here? [19:07] mgz, i suspect jugju core. [19:07] cloud-init ran juju's stuff happily. [19:07] i'm not really sure why jjuju decided to print 7000 numbers. [19:08] presumably each charater in cacert as ascii [19:11] smoser: yeah, I've seen it do that [19:49] natefinch: 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 file [19:50] Wasn't created by the charm, shows up in all directories my charms create that are empty [19:53] marcoceppi: the code says that has something to do with using git with the charms [19:53] natefinch: ugh, this sucks and breaks a few charms in the store [19:53] marcoceppi: 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 way [19:54] there are other ways to register empty directories in git other than putting a dang file in there === BradCrittenden is now known as bac [19:55] marcoceppi: 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 bug [19:56] guys, I just bootstrapped with juju trunk from earlier today, and I'm getting authorization errors in juju status [19:56] anything known about that? [19:57] lemme paste [19:57] marcoceppi: actually, it looks like you can't add empty directories in git... though honestly, it doesn't seem very useful anyway [19:57] natefinch: you can [19:58] http://pastebin.ubuntu.com/6125398/ [19:58] marcoceppi: 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 everywhere [19:58] natefinch: but either way, theres no need to track an empty directory [19:58] if it's empty, it's empty [19:58] r1834 [19:59] marcoceppi: yeah, it seems like you could just ignore it [19:59] natefinch: well, there was a way [20:01] ahasenack: let me try it here [20:01] natefinch: I bootstrapped with --upload-tools [20:02] if that matters [20:03] shouldn't... but you never know [20:07] natefinch: I see a traceback in cloud-init.log, digging [20:07] natefinch: [20:07] runtime: panic before malloc heap initialized [20:07] fatal error: runtime: cannot allocate heap metadata [20:08] well that sounds bad [20:08] so the bootstrap node doesn't run on an instance with 512Mb of RAM anymore [20:09] that is pretty tight, but I don't know... I wouldn't have expected that to change [20:09] can I set default constraints in environments.yaml? [20:09] canonistack's default is 512Mb [20:10] hmm... I'm actually getting similar behavior on EC2 [20:10] lemme check the cloud init log there [20:11] definitely wouldn't be a ram issue if it happens on EC2 [20:11] correct [20:11] unless you are using a tiny instance, then maybe [20:12] it defaults to a small [20:12] which is what I used [20:13] I'm getting a different error, but still an error from cloud init [20:13] cloud init backtraced, I had to check cloud-init-output.log [20:14] Yeah, I looked at both... possibly the memory issue you hit was during error handling, I don't know [20:14] I'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 soon [20:15] so bootstrap failed for you in the end? [20:15] ahasenack: yeah [20:15] that sucks [20:16] ahasenack: well, bootstrap appeared to complete, but then juju status got into the same loop yours got in [20:16] 2013-09-18 20:09:33 INFO juju.state open.go:106 connection established [20:16] 2013-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] over and over [20:16] no authorization errors? [20:17] yeah, one at the beginning, like in your paste [20:17] natefinch: mine worked now [20:17] used a bigger instance [20:17] hmm weird [20:17] so why is mine failing? :/ [20:19] natefinch: 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 node [20:22] all this time and it's still not working. Weird. I'll kill it and retry [20:22] k [20:31] ahasenack: same problem [20:32] natefinch: what's the error in both cloud-init log files? [20:33] 2013-09-18 20:27:43 ERROR juju supercommand.go:235 command failed: state info or API info not found in configuration [20:36] natefinch: only that? [20:36] natefinch: what about mongo messages in /var/log/syslog? [20:37] ahasenack: well, that's the meat of the error, the rest is the python traceback [20:40] ahasenack: yeah, a bunch of these: [20:40] Sep 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] Sep 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: "a [20:40] dmin", key: "b386a7e0cf28af1a46eca891235e2cc2" } [20:40] Sep 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.users [20:40] that sounds like an interrupted cloud-init script [20:40] you can check in /var/lib/cloud/tabtab somewhere about the cloud-init files that juju gave this instance [20:49] so, 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/scripts [20:58] morning [20:58] afternoon [20:59] thumper: 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 natefinch [20:59] thumper: unrelated... I can't seem to bootstrap an ec2 instance using trunk. was just going to write an email about it [21:00] what error are you seeing? [21:01] thumper: 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 configuration [21:01] hmm... [21:01] 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.users [21:02] interesting [21:02] not sure what happened there [21:02] I disconnected myself [21:02] heh [21:03] thumper: 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.users [21:03] huh [21:03] * natefinch shrugs [21:03] yes, send the email [21:06] natefinch: the run-parts bit, what are the scripts in /var/lib/cloud/instance/scripts ? I think it means one script in there failed [21:09] it's the bootstrap-state command that failed [21:12] natefinch: did you upload tools? [21:12] thumper: yep [21:12] * thumper goes back to thinking === tasdomas is now known as tasdomas_afk [21:15] thumper: http://pastebin.ubuntu.com/6125667/ [21:15] output from bootstrap [21:16] natefinch: yeah, reading through the email [21:16] thumper: it says it found existing jujud... sorta surprised it found jujud, actually [21:17] natefinch: ah, could be in issue with the jujud you have built locally [21:17] thumper: yeah I was just thinking that [21:17] thumper: if it's an old version [21:17] natefinch: can you do an install [21:18] thumper: yep [21:19] thumper: retrying, but I need to get going... stuff to do before dinner. I'll see if this works better. [21:19] ok [21:19] np [21:25] thumper: worked fine with the correct jujud.... false alarm :) [21:25] ok, cool [21:26] g'night [21:29] t [23:14] morning wallyworld [23:14] * thumper has been busy reviewing [23:20] hello [23:22] o/ [23:48] gym time === thumper is now known as thumper-gym