[01:44] * thumper watches the tumbleweed roll past [01:49] it is rather quiet [01:49] wallyworld_: LP just crapped out on an email notification; I've LGTM'd your two simplestreams branches [01:49] axw: awsome thanks :-) [01:50] i'm finishing another soon then i'll poke the landing bot [02:04] axw: with the location of the interfaces in interfaces.go - I prefer them to be in separate files like you suggest, but others on the project want all the interfaces declared in one big file :-( [02:04] wallyworld_: my comment is more about the package location than the file [02:05] if something other than an Environ is to implement HasConfig, then it probably shouldn't be in environs [02:05] same thing in a way - i would want to define the HasConfig interface in environs.config, but other times got pushback from stuff like that [02:06] HasConfig returns a environs.config.Config [02:06] yeah, that's why I thought it would be better there [02:06] me too [02:07] your call - just letting you know what I think :) [02:07] but for some reason, people don't like cohesion and loose coupling :-( [02:07] lol [02:07] i agree with you fwiw, i just knew the pushback i'd get [02:08] i figured i'd have enough to argue about wrt the interface names :-) [02:08] hehe [02:09] why'd the standup change time? [02:15] axw: cause if conflicted with breakfast time for nate [02:15] ah [03:10] I have a juju debug log writing to my terminal, yet I have no actual debug-log running in it ... [03:10] wtf [03:12] wallyworld_: Path isn't meant to be relative? [03:12] axw: it is in the metadata, but when used, a full url is required [03:13] cause the tools can then be retrieved via wget [03:13] mmk. just slightly confusing that ToolsMetadata.Path has different forms based on whether it's input/output [03:13] if you are looking at a mp i just posted, i'm fixing a few other things [03:14] yeah I am [03:14] i can add a new attr [03:14] Path is only used internally [03:14] outside of simplestreams, the Tools struct is used [03:15] I'll keep looking, it's probably okay if it doesn't escape [03:17] i probably should add an absolute path for clarity, even if it is internal only [03:20] wallyworld_: yeah, I think I'd prefer adding either a BaseURL or URL field [03:21] can do if it aids clarity [04:12] is the only was to pass config to a charm initial deployment via the --config directive? [04:12] s/was/way/ [04:20] nfi [04:21] bigjools: where does maas and azure keep a copy of the tool tarballs? or are they just downloaded from the shared s3 bucket? [04:21] haha [04:22] there's a public storage account for azure that only I know how to upload to [04:22] which wget works with? [04:22] yes [04:22] maas doesn't have public tools AFAIK [04:22] so s3? [04:22] since it's not a public cloud [04:22] or --upload-tools [04:22] NFI whatever juju does [04:23] s3 then, unless upload-tools is used [04:23] I normally use --upload-tools [04:24] bigjools: does maas provider support unuathenticated access to files in its storage using the Storage.URL() method? [04:24] it used to but not any more [04:24] yes, looks like it [04:24] oh? [04:24] code seems to be there [04:24] it's a security hole [04:25] I think we still need to fix it :) [04:25] hmmm. amazon supports it [04:25] maas is not amazon [04:26] maas has a backward compatibility mode for unauth access IIRC [04:26] jtv1: can you remember the details for this? [04:26] * wallyworld_ is sad that our key interfaces that all providers are supposed to implement are not universally supported [04:26] which means interface design is wrong [04:27] yeah [04:27] very hard to get right though [04:27] bigjools: for storage? Do you mean the anon URLs? [04:27] jtv1: yes [04:28] Oh, and we had the weirdness with the transition between single-tenant and multi-tenant storage, didn't we? [04:28] jtv1: I recall that rvb stuffed in some egregious hack [04:28] yes exactly that === jtv1 is now known as jtv [04:28] * jtv looks [04:30] There's FileStorage.anon_resource_uri... it evaluates to a URL where the file can be retrieved anonymously. To keep the file secret, keep the URL secret. [04:30] but that is deprecated? [04:31] Doesn't say so in the source... [04:31] bigjools seemed to think it may be going away? [04:31] Key-based access. That was the way we dealt with this. You pass the file's key to get its anonymous URL. [04:32] There were two related issues. One was legacy files from the single-tenant era, which have no owner. The other is anonymous access. [04:32] Ownerless files should go away. I don't know if we'll ever fully be rid of the code, but we should at least keep up the pretense. [04:33] sounds like i shouldn't count on anon access [04:33] Key-based anonymous access was meant to last, as I remember it. [04:35] ok [04:36] I think this hack was put in to make juju work [04:36] if memory serves (which it doesn't much these days) [04:37] thumper: if I want to pass a chunk of data to a charm, what's the best way? [04:37] a huge ugly piece of yaml? [04:37] * thumper shrugs [04:37] how about base64 encoded bson? [04:38] * thumper ducks [04:38] well it's an ssh private key so it's already encoded [04:38] in all honesty though, NFI [04:38] but it's just unwieldy in a charm config [04:38] I was hoping there might be a config that says "throw the contents of this file at the charm" [04:39] sometimes I'm amazed at peoples ability to accept so much boilerplate and copy and paste in tests [04:39] * thumper refactors [04:39] :( [04:40] * thumper headdesks [04:40] it is worse than I thought [04:40] * thumper umms [04:40] to fix it all now, or to make others do it... [04:41] fuck it [04:41] * thumper fixes [04:41] * thumper chooses appropriate music [04:41] Ugly Kid Joe? :) [04:41] Device will do [04:41] heh first track is "You Think You Know" [04:41] second is "Penance" followed by "Vilify" [04:44] * bigjools discovers multiline config in yaml [04:47] thumper: it's not just tests - the !#^^!@! boilerplate is everywhere. it seems to be the Go way :-( [04:48] Not just Go. We used to do it in Launchpad as well. I think cultural isolation has also been contributing to the repetition of mistakes. [04:49] Although Go _is_ the first language where I've seen "we'd rather repeat code to minimize dependencies" stated as policy. [04:52] yep :-( [04:54] so thumper, I can't ctrl-c out of juju debug-log [04:54] nor, worryingly, ctrl-z [04:54] vartdafark? [04:55] Isn't that the "suspend" signal? [04:55] yes [04:55] I very rarely see it fail to suspend a shell job [04:55] Quite. [04:56] only special things like ssh catch it and redirect [04:56] * bigjools files a bug [04:59] * thumper sighs [04:59] bigjools: I ctrl-C'ed out of debug-log before [05:00] it's consistent for me [05:00] each new env [05:02] I've got a brain dead review for someone [05:02] I'll take it. [05:02] Appropriately., [05:02] * thumper is waiting on damn lbox [05:02] It's already on Launchpad. [05:02] so many of these songs are appropriate for hacking/refactoring [05:02] War of Lies [05:02] Opinion [05:03] Haze [05:03] Through it all [05:03] Out of Line [05:03] ah fark... still waiting [05:03] * thumper twiddles thumbs [05:04] * thumper hands jtv the lp review [05:04] https://code.launchpad.net/~thumper/juju-core/open-api-as-new-machine/+merge/184012 [05:04] \ [05:04] lbox still isn't done [05:05] Argh. Somebody has to stop this "while we're here, let's change the gocheck import" insanity. [05:05] sorry [05:05] eventually it'll all be done [05:06] Not at this rate. Birthday paradox. [05:06] we aren't adding more [05:06] so eventually we'll fix it [05:06] oh reitveld is finally done [05:06] A new change will come along before it's done. [05:06] * thumper ignores it [05:08] jtv: I was busy copying tests, as you do, and I saw this setup step. I thought "hey I'd like to use that, I'll factor it out" [05:08] then I saw the function in the ConnTestSuite [05:08] and thought who is using that [05:08] low and behold, lots of duplicate code [05:08] thumper: what does "creates a new machine in state" mean? [05:08] so create a function that does what you actually care about [05:09] state is the "state of the system" duh, obvious isn't it? [05:09] that was the answer I got when I first asked [05:09] and since the package and main variable is called state [05:09] I see the duplication in the diff... awesome. You get the coveted Negative Lines Of Code productivity rating. [05:09] I'm passing it on [05:10] 10 files changed, 58 insertions(+), 134 deletions(-) [05:10] So... we don't know what it means and nobody will explain? [05:10] I can explain [05:10] adding a machine to state is like adding a machine row in a db table [05:10] except we don't have tables [05:10] or a row in the machine table [05:11] but we aren't using a relational database for our relational data [05:11] because mongo has legs [05:11] So "create a machine in state" is not the same as "create a machine that lies in state"? [05:11] * thumper leaves off the sarcasterisc [05:11] the whole codebase lies [05:11] but that isn't what you mean [05:11] I don't know what I mean any more. :) [05:12] I'd rather say "lives in state" [05:12] you ok with that? [05:12] But if "state" is the global, general, universal state of everything, why bother saying it in the first place? [05:12] / OpenAPIAsNewMachine creates a new machine entry that lives in system state, and [05:12] / then uses that to open the API. [05:13] could just say "create a new machine and use that..." [05:13] Definitely clearer. [05:13] Either is fine by me. [05:13] do you perfer more verbose [05:13] I'll leave it with what I have [05:14] new revision pushed [05:14] jtv: and the diff will update automagically \o/ [05:14] "s.st"... the thing about cratily si ahtt si't leasiy ostl. [05:14] * thumper agrees [05:14] I HATE it [05:14] and if I could you bold, 24 point, I would [05:15] using psychologically damaging RED [05:15] * jtv starts looking for the Health & Safety manual [05:15] * thumper waits for jtv to click approve [05:16] Mind if I just review the Launchpad proposal? [05:16] not at all [05:18] Done. [05:18] thanks [05:18] * thumper ducks out for a while [05:18] For the maas & azure providers, I just went in and applied the new import rules throughout. Not a lot of work, and then it's over with. === thumper is now known as thumper-afk === tasdomas_afk is now known as tasdomas [05:35] is there any way I can force a service to re-install so I can debug its install hook? [05:39] bigjools: juju resolved --retry service [05:40] aha [05:40] thanks [05:40] jpds: error: unit "tarmac/0" is not in an error state [05:41] bigjools: Ah, so; destroy-service and redeploy ? [05:41] jpds: won't the debug hook disconnect? [05:42] I would debug-log at that point. [05:42] it's a bit of a race getting that in place before the install hook runs and I lose [05:42] yes, I am going to have to debug-log :( [05:42] or perhaps force an error so I can use resolved [05:42] bigjools: juju ssh into the box, and look at the log in /var/log/juju/ ? [05:43] yeah I am doing that but I need to work out why a command isn't doing what I expect [05:44] One thing I can think of its juju add-machine; wait for the agent to come up then deploy --to=machine. [05:44] could work [05:44] but debug-hooks needs a service unit which is not there yet [05:52] jpds: ah that worked! [06:02] bigjools: Brilliant. [06:20] is it a bad idea to try opening and closing ports in a juju charm by calling /usr/bin/close-port or /usr/bin/open-port ? that means you need juju installed on the units, right? === ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: dimitern | Bugs: 7 Critical, 94 High - https://bugs.launchpad.net/juju-core/ [06:39] bradm: i don't know, but i'll ask later when some more people come online and find out [06:41] wallyworld_: pretty sure the problem is that squid-reverseproxy is hard coded to call /usr/bin/close-port, when its moved into /var/lib/juju/tools somewhere [06:41] yeah i thought close-port was py-juju, but not sure [06:42] /var/lib/juju/tools/1.13.3-precise-amd64/close-port exists on the node [06:42] so I'm guessing removing the path might help [06:42] on the units, jujud is installed automatically, via the tools tarball [06:42] that path above indicates it's symlinked to jujud [06:42] and comes from the tools tarball [06:43] oh, interesting [07:11] ok, I submitted a fix for the squid-reverseproxy thing, its a really trivial patch [07:11] damn, this juju stuff works! [07:54] fwereade: i'd love a design chat, maybe in an hour or so after dinner? [07:56] wallyworld_, sgtm [07:56] wallyworld_, I'm actually doing your review now fwiw [07:56] wallyworld_, sorry for the delay [08:01] fwereade: np. i want to move the new interfaces. the HasConfig one to environ.config. The other oe elsewhere [08:02] i only put them in environs/interfaces.go because that was a stated preference but one i do't agree with [09:06] is someone able to anwer a quick api question? When I send the json to deploy a service with CharmURL: cs:precise/wordpress I get the error "charm url must include revision". What's the correct way of getting it to deploy the latest version of a charm? I thought you used to be able to do that? [09:08] mattyw: this sounds like a bug in the api deploy command [09:09] dimitern, there's code in client/client.go:135 to do it [09:09] * dimitern is looking [09:11] mattyw: well, by definition rev == -1 means "latest" [09:11] mattyw: and it's the default if not set I think [09:12] dimitern, looking at parseURL it looks like the default is -1 yeah [09:12] dimitern, shall I file a bug? [09:14] mattyw: actually looking at the commit log, this changed in rev 1262 by fwereade [09:15] damn, what did I do? [09:15] mattyw: there's an explicit test for "cs:precise/wordpress" -> "must include revision" [09:15] dimitern, mattyw: ah right [09:15] dimitern, mattyw: the GUI already has access to the charm store, and the charm store will tell you the latest revision of a given charm [09:16] fwereade: I knew there was more to it :) [09:16] dimitern, mattyw: and in fact the gui is necessarily using a particular version, with a specific readme, and specific config settings and metadata [09:17] dimitern, mattyw: so my position is that the gui should be knowably deploying exactly that version, rather than opening ourselves up to rare and surprising confusion in which you deploy charm X with config Y and are told that it doesn't actually work [09:17] mattyw, does this break something you need? [09:18] fwereade, dimitern ok understood, but doesn't make the api harder to use if you aren't the gui? [09:18] fwereade, nothing important, I'm just playing with a few side projects [09:18] fwereade, I was playing with writing a client in elixir [09:18] fwereade: are you free for a quick chat? [09:20] mattyw, sorry for the inconvenience -- hopefully the charm store api is itself not too painful to use, though? [09:20] fwereade, it's no problem at all! :). where can I find the charm store api? [09:21] fwereade: there it is https://codereview.appspot.com/13559043 - RUW completed [09:21] wallyworld_, yeah, sgtm, but I may eat at you for some of it [09:21] dimitern, sweet, I'll look as soon as I can [09:21] mattyw, er, let me look around a mo [09:21] np. https://plus.google.com/hangouts/_/ff292c4c07ae7359f6cd87925661e2868636a3bd [09:23] fwereade: ^^^^^ if you are busy we cs\n do it [09:23] betweem the meetings [09:32] fwereade: btw I tested with debug hooks and the steps you suggested - it all works fine [09:37] dimitern, <3 [09:38] mattyw, it looks pretty weak, but there's this: https://juju-docs.readthedocs.org/en/latest/internals/charm-store.html#upgrades [09:38] mattyw, I'm not actually sure what the original source of that was [09:39] mattyw, presumably the internals/ docs in pyjuju [09:39] mattyw, but it should still be accurate, because it's talking about the exact same charm store [09:39] mattyw, it's pretty narrow but it *will* tell you the latest versions :) [09:40] fwereade, ok thanks, I'll have a play around and see what I can come up with, thanks a lot for your help [09:41] mattyw, cheers, always a pleasure [09:41] mmm, leftover pistachio pizza [09:49] :) === thumper-afk is now known as thumper [10:02] mgz: meeting ping [10:13] fwereade: so how about that review? [10:14] dimitern, better finish ian's first [10:14] fwereade: ah, ok [10:14] so, is manual provider available in trunk now? I thought I saw something about that [10:18] it's on trunk, but needs some more work, see the thread in response to the last release announcement [10:35] hi, i need to send static contents like images on a charm, is that possible in some way? [10:36] yolanda: yes, more details on exactly what? base64 and yaml into config or a relation works fine, for instance [10:37] mgz, i have a gerrit charm and i'd like to have some way to configure look&feel [10:37] it includes sending html and css files, but also some images if needed [10:37] such as a canonical logo or whatever [10:45] mgz, i used that to send some contents but not sure if that will work for a list of images, we need to upload image content and image name [10:49] yolanda: it could work, but may be rather ugly (eg, list of key-value path/base64 contents would be fine) [10:50] I wonder if other charms have similar use cases, and what they've done? for instance I know jenkins and horizon allow of front end customisation [10:50] mgz, i'll take a look at those then [10:51] yolanda: maybe look at one of those, or poke james or adam for suggestions? [10:51] mgz, i'm sending some values to charm with base64 encoding, but for a defined field, not a list, so looked ugly to me [11:03] yolanda, mgz: sending a readable reference to a place to get the files would be rather nicer, really [11:04] yolanda, mgz: ideally humans looking at how you've configured your charm ought to be able to derive some sort of meaning from it directly [11:05] fwereade: so i saw ian's review's done :) [11:05] dimitern, yeah, a meeting is happening... I will try to multitask it :) [11:06] fwereade, so what do you suggest, maybe point to some directory where to upload all the images? [11:06] fwereade: where though? we don't really give charms access points into filestore, or provide tools to stick stuff in there [11:07] yolanda, mgz: IIRC wordpress lets you set a repo url for that sort of thing [11:07] yolanda, mgz: it is true we don't provide tools to help directly [11:07] fwereade: thanks, no rush, just poking [11:07] hm, I guess a seperate versioned branch does make some sense [11:30] mgz, fwereade, i really like the wordpress approach, but what do you do in case of deployments that don't allow to get content from external sources? you just first copy it locally? [11:31] yolanda: you'd need a branch that your cloud could access, yeah [11:31] mgz, so setting that on a launchpad branch sounds good [11:31] it's a clean approach [11:33] all, are we doing standup today, or just going on to the new time tomorrow? [11:33] mgz: as i understood jam we'll continue tomorrow with the new time [11:34] mgz: yeah, my understanding as well [11:34] mgz: the calendar shows no more standups on thursday with the change of the meeting time [11:35] okay, shall code onwardst then [13:02] fwereade: still meeting? [13:02] nah, I'm actually doing your review :) [13:02] cheers :) [13:06] dimitern, LGTM [13:07] fwereade: thanks! === tasdomas is now known as tasdomas_afk [13:16] uhm, anyone interested in upgrade bugs? im trying to do upgrade-juju from ~1.15.0.1 to ~1.15.0.2 and it's stuck in a restart loop === tasdomas_afk is now known as tasdomas [13:18] * TheMue => late lunch [13:20] sidnei, I'm interested [13:20] sidnei: are you upgrading from a release to a trunk version? [13:21] sidnei, are these just your own changes between, or did you merge in as well? [13:21] dimitern: both are from source, not from release, but the version number differs [13:22] sidnei: you did go install . in cmd/juju and cmd/jujud before trying --upload-tools, right? [13:22] dimitern: nope, only go install launchpad.net/juju-core/... [13:23] sidnei: well, there's that thing - if you use --upload-tools from source, you should always do these two install steps, otherwise you'll get older binaries [13:23] sidnei: pretending to be newer version [13:24] dimitern: ok. still didn't solve the issue anyway. === deej` is now known as deej [13:25] sidnei: np, just wanted to make sure that's out of the way [13:25] sidnei: then it seems there's a bug [13:26] dimitern, fwereade: http://paste.ubuntu.com/6066470/ [13:30] sidnei, ah, hell, that looks like https://bugs.launchpad.net/juju-core/+bug/1214676 [13:30] <_mup_> Bug #1214676: upgrade-juju in local environment causes bootstrap machine agent to restart continuously [13:35] indeed [13:43] jam, fwereade, etc: You guys have anything they think I should be working on? I'm kinda out of stuff. I could look at bugs, but not sure if there's something more appropriate [13:43] natefinch, oddly enough, that upgrade that sidnei just pointed out above is a pretty big deal [13:43] fwereade: I'd be happy to look at it [13:43] natefinch, I was just thinking "gaah who will look at that" [13:43] natefinch, <3 [13:45] :) [13:48] fwereade: if I have a suite A that embeds another suite B, do I need to define A.SetUpTest, just so it will call B.SetUpTest ? [13:49] fwereade: provided that's the only thing A.SetUpTest has to do? [13:56] dimitern, it *will* but it's prone to accidental screwing-up so we prefer to be explicit [13:56] gah, editor lag meant my change didn't get in that file? why did I not look at the diff again before landing... [13:57] fwereade: ah, ok - it seems to work both ways, but I too prefer to be explicit [13:58] fwereade: https://bugs.launchpad.net/juju-core/+bug/1190985 is another one I'd love if you could prioritize [13:58] <_mup_> Bug #1190985: Confusing upgrade-charm and deploy -u behavior [14:03] sidnei, ha, yes, that is an ugly one [14:12] a quick, trivial review anyone? https://codereview.appspot.com/13561043 [14:12] dimitern: can I have a rubber stamp on cl 13562043 [14:12] swap you :) [14:12] mgz: sure [14:12] was typing before you asked :) [14:13] mgz: stamped! :) [14:16] hm, same // Note in both new files, and some other dup still, but not a bad +484/-434 considering it's much clearer overall [14:16] lgtmed. [14:19] thanks [14:19] will fix the note [14:19] what other dup? [14:20] I think the note is correct, it's just... odd having the same long comment in two different tests in different files [14:22] ah, the watcher note, yeah [14:23] the dup is mostly just that every action takes three lines [14:24] create something; assert err is nil, assert actual assertion... and several tests have three or more actions before they get to what they actually are about [14:25] mgz: sounds like we need a checker that takes err, realValue and does that for us [14:25] hm, actually, some of these later tests just create a unit then check the error, and don't also assert Life() is alive [14:26] well, the unit is alive [14:26] it's created every time [14:26] only in refresh and life tests it's explicity asserted over [14:26] right, so maybe that check is actually redundant in the earlier tests (if we get there and the thing isn't alive, we have bigger problems other tests would break on) [14:29] oh, hell, I have to look at houses again in a few minutes, and it's the cross-team call imminently [14:29] there doesn't seem to be much easy reduction to do though, the tests are just verbose [14:29] can I deputise someone to attend and let them know what we're up to please? [14:29] fwereade: I could cross-team is there anything particular you wanted to saY? [14:29] mgz, not really [14:30] have fun looking at houses :) [14:30] mgz, oh, I am [14:30] mgz, this week is so much better than normal weeks ;p [14:31] * fwereade shouldn't grumble [14:32] fwereade: if we didn't grumble, how would anyone know we're programmers? :) [14:34] haha :) [14:38] am I supposed to be able to SSH into the lxc container with juju ssh 0? I get connection refused [14:41] natefinch: with lxc, you ssh into the units, not the machines [14:41] mgz: ahh, ok [14:42] mgz: I'm guessing this is probably bad: agent-state-info: '(error: container "nate-local-machine-1" is already created)' [14:43] that does seem bad, but you may be able to straight resolve it [14:43] mgz: I had been diddling with local provider a while back... maybe some cruft left over [15:12] * natefinch is ramping up his lxc-fu [15:14] all the way to lxc-fuuuuu [15:14] rofl.... exactly [15:14] I think that's a short ramp [15:16] natefinch: tell me about your installation experiences so that i can possibly change the docs (if i have) [15:17] natefinch: here it worked, but we today already have seen troubles with the firewall, so i changed the doc (it's proposed) [15:17] TheMue: the biggest problem I had was that my go installation was local to my normal account, so when I do sudo juju bootstrap, it couldn't find the go executable [15:19] (so it could build jujud) === tasdomas is now known as tasdomas_afk [15:46] natefinch: so, back again, had a talk with robbiew [15:48] natefinch: yep, doing it as a juju developer is different, the docs are for users on a clean system. but i'll talk to the others about adding a kind of box "local provider for juju contributors" [16:01] TheMue: did robbiew poke you, or did you just join the call? [16:02] mgz: I'll join..running late [16:02] robbiew: no problem, just wanted to make sure I was in the right place :) [16:03] * mgz proposes merge in the meantime [16:19] mgz: had my 1:1