/srv/irclogs.ubuntu.com/2013/08/05/#juju-dev.txt

bigjools_it's so much quieter here without thumper around01:54
davecheneytoo quiet ...01:55
=== bigjools_ is now known as bigjools
bigjoolsdavecheney: I am putting some logger.Infof() calls to debug stuff but they are not appearing, do I need to initialise anything first?03:36
davecheneybigjools: shouldn't03:41
bigjoolsoh ffs03:41
davecheneybut from memory unless you pass -v, then you get nothing03:42
bigjoolsI just saw that I need a -v03:42
davecheneyaxw will know03:42
bigjoolsworks with -v03:42
davecheneyyeah, this is fucked03:42
davecheneyhe's fixing it03:42
bigjoolsgood man03:42
davecheneyin our defense, we inhertied this madness from pyjuju03:42
davecheneyi don't know if that is the kind of defence that will stand up in court03:42
axwyeah just waiting for thumper to ready his changes03:43
axwit's a bit messy03:43
davecheney'yes your honor, I saw someone else brutally murdered, so I figured it was ok '03:43
bigjoolsone day, juju will evolve the perfect provider interface03:45
=== tasdomas_afk is now known as tasdomas
* bigjools juju bootstraps an azure environment and deploys juju-gui on it05:48
axwbigjools: I'm looking into adding instance-specific state to juju status. Do you know if MAAS provides a way of getting the current state of a machine?06:21
bigjoolsaxw: one  sec06:22
bigjoolsaxw: the nearest thing is that api lets you query all allocated nodes which returns quite detailed info for each node.06:26
bigjoolsso depends on what state you want?06:26
axwI don't know :)  I guess I'd like to see what's available and work from there06:26
axwcan you point me to some docs/code?06:26
axwbigjools: I'm after something comparable to gwacl.HostedServiceDescriptor.Status for Azure06:29
bigjoolsjtv1: can you remember if the maas api will return json for a single node if we GET its URL?06:30
jtv1bigjools: IIRC it does.06:31
=== jtv1 is now known as jtv
bigjoolsaxw: ok so there's a status on the json that gets returned06:32
bigjoolsif you look in the maas source tree at the file src/maasserver/enum.py check out the NODE_STATUS enum06:32
axwbigjools: cool, thanks06:32
bigjoolsaxw: if juju knows about it, it'll never see anything other than "reserved" though06:33
axwah06:33
bigjoolserrr allocated I mean06:33
bigjoolsmaas does not track the status of anything after the node gets given to a user06:34
axwbigjools: okey dokey. sounds like it mightn't be useful to add at all then06:34
bigjoolsso there's no way of knowing whether it's installing, powering up etc06:34
bigjoolsyeah06:35
=== tasdomas is now known as tasdomas_afk
rogpeppemornin' all07:39
axwrogpeppe: morning07:43
rogpeppeaxw: hiya07:43
* axw wonders how much lxc testing his laptop can take before carking it07:54
=== tasdomas_afk is now known as tasdomas
dimiternrogpeppe: ping08:55
rogpeppedimitern: pong08:55
dimiternrogpeppe: hey, morning!08:56
dimiternrogpeppe: did you merge the agent entity stuff already?08:56
rogpeppedimitern: yeah08:56
dimiternrogpeppe: cool, i'll take a look then08:56
dimiternrogpeppe: so AgentEntity will now need StatusSetter and Watcher(?)08:59
rogpeppedimitern: seems reasonable09:00
dimiternrogpeppe: how should I call the interface that has Entiy.Watch() ?09:00
dimiternrogpeppe: and I also need EnsureDeader09:01
rogpeppedimitern: ha, you can't have EntityWatcher.09:03
dimiternrogpeppe: exactly09:04
dimiternrogpeppe: Watchable?09:04
* rogpeppe thinks09:04
dimiternrogpeppe: WatchEntiter ?:)09:05
rogpeppedimitern: i've already mentally rejected that :-)09:06
dimiternrogpeppe: yeah09:06
rogpeppedimitern: EWatcher?09:07
rogpeppedimitern: EntityWatcherInterface?09:07
dimiternrogpeppe: AgentEntityWatcher ?09:08
rogpeppedimitern: thing is, it's not specific to agent entities09:08
dimiternrogpeppe: why? i think it is09:08
rogpeppedimitern: it applies to anything that has Watch() *NotifyWatcher09:08
rogpeppedimitern: e.g. Service09:08
rogpeppedimitern: but... maybe that's ok09:09
dimiternrogpeppe: but a service is also managed by some agent after all09:09
rogpeppedimitern: really? i don't think so.09:10
dimiternrogpeppe: well the uniter for example manages services inside the unit agent09:10
rogpeppedimitern: it manages units *of* a service09:10
rogpeppedimitern: well, one unit of a service09:10
rogpeppedimitern: the service itself has no agent09:11
dimiternrogpeppe: yeah, true09:11
dimiternrogpeppe: but I don't think we'll need an interface for that09:11
dimiternrogpeppe: it's about reusing common code for agents09:11
rogpeppedimitern: but still, the reason we're defining the interface is for AgentEntity, so i'm ok with calling it AgentEntityWatcher09:11
dimiternrogpeppe: there'll be a WatchService API call in the uniter09:12
dimiternrogpeppe: ok, AgentEntityWatcher then09:12
rogpeppedimitern: +09:12
rogpeppe109:12
sidneihere's my attempt at fixing https://bugs.launchpad.net/juju-core/+bug/1203816 https://codereview.appspot.com/1214304309:27
_mup_Bug #1203816: local provider should support use of local proxy <juju-core:Triaged> <https://launchpad.net/bugs/1203816>09:27
dimiternrogpeppe: you haven't changed getAuthFuncs to use method expressions yet?09:40
rogpeppedimitern: no, i still need another LGTM on that CL09:41
dimiternrogpeppe: ah, ok09:41
rogpeppedimitern: i'm also looking for reviews of https://codereview.appspot.com/12361043/ (mgz?) and https://codereview.appspot.com/12352044/09:42
dimiternrogpeppe: will take a look in a bit09:45
=== _thumper_ is now known as thumper
* thumper waves from the IOM10:03
jamespagedavecheney, which release of juju-core should I be uploading to saucy?10:04
dimiternthumper: hey, how is it going there?10:05
thumpergood so far, going through everyone's demos10:06
thumperalso, raining10:06
dimitern:) cool10:06
mgzjamespage: 1.12 I believe10:08
jamespagemgz, ack - thats what I thought10:08
davecheneyjamespage: correct10:15
jamespagedavecheney, great -thanks for confirming - working that now10:32
davecheneyjamespage: thanks mate10:32
davecheneythis is the version we talked about in Oakland10:32
davecheneyie, the one we're hoping to feed into backports10:32
dimiternrogpeppe: one review done, i'm on your second CL now10:34
dimiternrogpeppe: can you take a look at https://codereview.appspot.com/12443044/ in the mean time?10:34
rogpeppedavecheney: i'd be interested in your input on  https://codereview.appspot.com/12361043/ too, please10:35
rogpeppedimitern: looking10:36
dimiternrogpeppe: second review done as well10:36
rogpeppedimitern: i don't know if it's a nice catch until we get a lack of intermittent test failures for that test :-)10:37
rogpeppedimitern: do you know if it had a bug report, BTW? i couldn't find one10:37
dimiternrogpeppe: which test failed?10:41
davecheneyrogpeppe: i saw that10:41
rogpeppedimitern: MachineSuite.TestWatchMachine10:41
davecheneywhere is the change to the README to explain how to use it ?10:41
dimiternrogpeppe: no, I don't think there's a bug for it10:41
dimiternrogpeppe: just checked10:41
rogpeppedavecheney: currently we're just putting it into the tree. mgz is going to change the bot to use it; then i plan to change godeps so it can use it10:42
davecheneyrogpeppe: where is godeps ?10:43
rogpeppedavecheney: go get launchpad.net/godeps10:43
dimiternsidnei: you've got a review10:46
sidneidimitern: lovely. i might be doing a few more changes, during testing i noticed the proxy is set up too late, talking with smoser about a proper fix10:47
jamespagedavecheney, do you happen to know what happening re upgrade from pyjuju->juju-core10:47
jamespagefirst upgrade break:10:47
jamespagehttps://bugs.launchpad.net/ubuntu/+source/juju-core/+bug/120087810:47
_mup_Bug #1200878: Upgrade breaks existing pyjuju deployment <apport-collected> <regression-release> <saucy> <juju-core (Ubuntu):Triaged> <https://launchpad.net/bugs/1200878>10:47
dimiternsidnei: I see, ok10:47
dimiternoh boy.. EnsureDeaderer10:52
dimiternor maybe DeathEnsurerer :)10:53
rogpeppedimitern: DeadEnsurer?10:55
dimiternrogpeppe: that's for state?10:56
rogpeppedimitern: is there a problem with changing the Machines field to Entities in the Machine.SetStatus call, BTW? i'm concerned about backward incompatibility.10:56
rogpeppedimitern: yeah10:56
dimiternrogpeppe: that's why I added DEPRECATE(v1.14) to it10:57
dimiternrogpeppe: to the older struct10:57
rogpeppedimitern: ah, ok10:57
rogpeppedimitern: cool10:57
dimiternrogpeppe: ok i'll go with DeadEnsurer10:58
sidneidimitern: indeed, the AddScripts was supposed to be a pre-req, wasn't merged yet. i'll submit it.11:00
jamjust saying a quick hello to everyone. In a meeting, but back at work after vacation.11:01
dimiternsidnei: ok; you might run into conflicts with this CL afte the prereq lands11:01
dimiternjam: heyhey11:01
sidneidimitern: in codereview? because bzr should handle it fine.11:01
rogpeppedimitern: i'm not sure how your changes preserve API backward compatibility11:03
dimiternsidnei: ah, ok then; no, codereview doesn't matter - it's a bzr matter anyway11:03
dimiternrogpeppe: do you propose to have handling for both MachineSetStatus and SetStatus for compatibility?11:04
rogpeppedimitern: how would that help?11:05
dimiternrogpeppe: it'll take both types of args11:06
dimiternrogpeppe: (machiner.SetStatus)11:06
* dimitern fwiw i think even considering backwards compatibility with the API at this point is ridiculous11:07
rogpeppedimitern: it's something that we need to consider11:08
rogpeppedimitern: if something updates the API server but not one of the clients, then this change will break the installation11:08
jamdimitern: my personal feeling, you don't have to preserve compat with 1.13, but we should preserve with things in 1.12. (At least, we need to start getting comfortable with how we are going to do these things going forward.)11:08
rogpeppejam: hiya11:09
rogpeppejam: i think i agree with that11:09
dimiternrogpeppe: so how about my proposal?11:09
rogpeppedimitern: and i *think* 1.12 used the API machiner, didn't it?11:09
dimiternrogpeppe: handle both the old and new args types in SetStatus?11:09
rogpeppedimitern: that seems reasonable. just add a Machines field in params.SetStatus, marked deprecated.11:10
dimiternrogpeppe: and read both?11:11
rogpeppedimitern: if len(p.Entities) == 0 { p.Entities = p.Machines }11:12
dimiternrogpeppe: ok11:12
rogpeppedimitern: i'm particularly +1 on jam's remark "we need to start getting comfortable with how we are going to do these things going forward"11:13
rogpeppedimitern: it's important that we get experience maintaining API compatibility, see what works, what doesn't.11:14
dimiternrogpeppe: ok, I can agree with that11:15
dimiternrogpeppe: how can I get 1.12 tools to test the upgrade?11:26
rogpeppedimitern: i should hope they'd be in the tools bucket11:26
rogpeppedimitern: if not, you'll have to fetch the tgz and compile them yourself11:27
dimiternrogpeppe: I might need to have a quick chat with you about that, after the standup11:27
rogpeppedimitern: ok11:27
dimiternmgz: standup?11:31
dimiternjam, thumper: I suppose you won't be joining as well11:32
mgzta dimitern11:33
jamwe will not11:37
jamlunch time for us11:37
wallyworldrogpeppe: https://codereview.appspot.com/12308044/ :-)11:37
rogpeppewallyworld: ta!11:38
sidneidimitern: cl updated11:49
natefinchrogpeppe: https://codereview.appspot.com/12347044/    It still needs tests, but I wanted a check to make sure the approach was ok, since it's a bit above and beyond what the bug calls for.   It's a very small number of lines changed, however.12:02
dimiternsidnei: thanks, still LGTM12:03
rogpeppenatefinch: ah yes, i started looking at that and wasn't entirely sure, but got distracted while trying to think of a better alternative...12:04
rogpeppenatefinch: one question: why does ReadEnvirons return a no-env error only if path=="" ?12:04
natefinchrogpeppe: I went back and forth on that.  The idea was that it only gives the error message if you're using the default environment... because otherwise it means you explicitly gave it a file you were expecting to exist, and the error message talks about using init, which won't help make your existing configuration work12:06
rogpeppenatefinch: hmm, that sounds like something that should be triggered at a different level (for example at the command level, where you know if you've been passed an environment or not)12:08
rogpeppenatefinch: i have an idea - i'll just check to see if it's viable, one mo12:08
natefinchrogpeppe: cool, thanks for the help.12:08
rogpeppenatefinch: i wonder if a better place to return the NoEnv error would be from juju.NewConnFromName12:18
dimiternnatefinch: reviewed12:19
rogpeppenatefinch: and i'm not sure if we should pollute cmd/cmd.go with juju-command specific stuff (it's also used by jujud)12:19
dimiternrogpeppe: that's where the supercommand lives, no?12:19
rogpeppedimitern: yes, but i don't thing the supercommand wants to know about stuff that cmd/juju is doing. it seems like mixing responsibilities12:20
rogpeppenatefinch: so i'd be tempted to do something like this, in each juju command that calls NewConnFromName:12:21
rogpeppeconn, err := juju.NewConnFromName(c.EnvName)12:21
rogpeppeif err != nil {12:21
rogpeppereturn envOpenFailure(err)12:21
rogpeppe}12:21
dimiternrogpeppe: if it's already reading the env.yaml file there, the responsibility is there12:21
rogpeppedimitern: it's not, is it?12:21
natefinchrogpeppe: yeah, I was trying to avoid changing every single command, but if cmd.go isn't juju specific, then yeah, we don't want to pollute that12:21
rogpeppenatefinch: and define envOpenFailure as: func envOpenFailure(err error) error {if err == juju.ErrNoEnvironmentFile {print message; return cmd.ErrSilent}; return err}12:22
dimiternrogpeppe: i'll not restrict EnsureDead to not alive entities then12:24
natefinchrogpeppe: Yeah, I guess I was ok letting the error go back up the stack,  mostly so it still gets printed out, but I guess we can just print it out there, too.12:24
natefinchrogpeppe: (the file not found error)12:24
rogpeppenatefinch: i think there's no need to embed the original file-not-found error - we already know it's os.IsNotExist12:25
natefinchrogpeppe: I think it's helpful to know what file the system was trying to open and couldn't find.  It helps if you typo the path of the file somewhere12:26
rogpeppenatefinch: fair enough12:29
rogpeppenatefinch: oh yes, you'll probably want envOpenFailure(err error, envName string) so that you can print the "Please create a configuration" message only if it's empty.12:30
rogpeppenatefinch: or you could even implement it as a method on EnvCommandBase12:30
natefinchrogpeppe: yep, sounds good12:31
dimiternmgz: https://codereview.appspot.com/12443044/ this is the first CL12:36
dimiternmgz: and this is the follow-up https://codereview.appspot.com/1246104312:37
dimiternrogpeppe: ^^12:37
dimiternrogpeppe: enter the DeadEnsurer :)12:37
* rogpeppe feels uncomfortable about the spelling, but DeathEnsurer seems wrong too12:38
dimiternrogpeppe: I'm open to suggestions12:38
rogpeppedimitern: i have none.12:39
natefinchdimitern: If we have the opportunity to put a DeathEnsurer in the product, I think we should take it :)12:40
natefinchdimitern: Reaper?  With a Reap() function?12:41
dimiternnatefinch: :) alas we need to adhere to the predefined state interface12:41
dimiternnatefinch: I proposed DeathEnsurer, but it's equally bad12:41
natefinchdimitern: Ahh, too bad.12:42
dimiternrogpeppe: 1.12 is reallt 1.11.something, right?13:02
dimiternreally*13:02
rogpeppedimitern: yeah13:02
dimiternrogpeppe: do you know which one exactly?13:02
rogpeppedimitern: no. why do you want to know?13:02
dimiternrogpeppe: so I can wget it and test the upgrade13:03
rogpeppedimitern: https://launchpad.net/juju-core/1.12/1.12.0/+download/juju-core_1.12.0-1.tar.gz13:03
dimiternrogpeppe: ah, ok, 10x13:03
* rogpeppe goes for lunch13:07
dimiternmgz: ping13:07
mgzhey dimitern13:07
dimiternmgz: hey, any chance to look at my CLs?13:07
mgz088 and 089?13:08
dimiternmgz: yep13:08
mgzdoing so now13:08
dimiterncheers!13:08
mgzI find "NewStatusSetter returns a new StatusSetter" a little funny as the first sentence of a doc comment13:12
mgzbut can't really suggest an improvement....13:12
dimiternthat's what it does :)13:12
mgzdimitern: one down, will just grab some food them look at the other13:16
dimiternok, thanks13:16
dimiternmgz: about the deprecation stuff - aiui we need to make sure the api params/calls are backwards compatible between versions, rather than removing them straight away - it'll make certain version-to-version upgrades problematic13:26
dimiternhence the deprecation - we guarantee at least the upgrade is possible from the previous release, but deprecated stuff will go away in the next13:28
=== teknico1 is now known as teknico
dimiternand now.. AgentEntityWatcherer..13:40
dimiternwe defined a whole dictionary13:40
natefinchdimitern: I usually take the "add -er to an interface name" as a guideline, not a hard and fast rule, for exactly these problems13:50
dimiternnatefinch: tell that to rogpeppe :)13:50
rogpeppedimitern: i agree with natefinch13:51
rogpeppedimitern: i hate the *erer names13:51
dimiternrogpeppe: you're the one who usually insists on using -er everywhere13:51
dimiternrogpeppe: I can remember at least 3 cases where I choose something else :)13:52
rogpeppedimitern: only when reasonable. i would never have suggested Removerer (the first such name)13:52
dimiternrogpeppe: let me find the CL13:52
natefinchat some point it just looks ridiculous (pretty much any -erer)13:52
rogpeppedimitern: i don't know who did Removerer - i laughed out loud when i saw it13:53
rogpeppedimitern: looks like you and jam were responsible... https://codereview.appspot.com/11125043/diff/1/state/apiserver/common/remove.go#newcode17state/apiserver/common/remove.go:1713:54
dimiternrogpeppe: ok, sorry it wasn't you - it was jam, sorry13:54
rogpeppedimitern: you will be :-) :-)13:55
dimiternwell, strictly speaking English is not my native language, so none of these names look especially funny or wrong to me :)13:56
dimiternit's just convention13:56
fwereaderogpeppe, dimitern: so, SetStatus change13:56
fwereaderogpeppe, dimitern: what's the deal?13:56
dimiternfwereade: it landed13:56
dimiternfwereade: oh? what13:57
fwereadedimitern, Machines vs Agents/Entities/whatever13:57
rogpeppefwereade: i suggested that it was worth maintaining 1.12 compat13:57
dimiternfwereade: yes, and I did that13:57
dimiternfwereade: it's deprecated13:58
fwereaderogpeppe, for values of "worth" equal to "necessary"13:58
rogpeppefwereade: which means that SetStatus needs to recognise the Machines argument, until we can deprecate iyt13:58
fwereaderogpeppe, dimitern: perfect13:58
fwereaderogpeppe, dimitern: just checking, there was uncertainty here13:58
dimiternfwereade: I even added a test for 1.12 compat and live tested an upgrade 1.12 -> tip13:58
fwereadedimitern, rogpeppe: lovely13:59
rogpeppefwereade: in practice, i don't *think* it would be a problem if we didn't recognise the Machines argument, because environments tend to upgrade all at the same time13:59
fwereaderogpeppe, disagree13:59
fwereaderogpeppe, dimitern: please confirm which workers are currently using the api14:00
rogpeppefwereade: in 1.12, i think it's the machiner14:00
fwereaderogpeppe, in trunk14:00
dimiternfwereade: upgrader, deployer and machiner14:00
dimiternrogpeppe: upgrader as well, right?14:00
rogpeppedimitern: yup14:00
rogpeppefwereade: i *think* this particular incompatibility is only a problem if there's an agent that's persistently using an earlier version.14:02
fwereaderogpeppe, I would prefer us not to half-ass compatibility even if we can get away with it today14:02
rogpeppefwereade: i agree entirely, which was why i suggested the change14:02
rogpeppefwereade: but it's interesting to consider what the actual ramifications of the incompatibility might be in *practice*14:03
fwereaderogpeppe, gtg, but I note in APIWorker14:16
fwereade    runner := worker.NewRunner(allFatal, moreImportant)14:16
rogpeppefwereade: yes, that will change very soon14:16
fwereaderogpeppe, cool, so long as we're aligned on it being important14:16
rogpeppefwereade: indeed14:16
=== tasdomas is now known as tasdomas_afk
dimiternmgz: ping14:33
mgzdimitern: second branch? :)14:33
dimiternmgz: yep :)14:33
dimiternrogpeppe: can you take a look as well? https://codereview.appspot.com/12461043/14:33
mgzDeadEnsurer really is funny14:34
rogpeppedimitern: looking14:34
dimiternit might as well be GrimReaper14:34
rogpeppedimitern: i wonder if we might want to consider combining LifeGetter, StatusGetter, DeadEnsurer etc into a single type14:36
rogpeppedimitern: i dunno actually, just a passing thought14:37
dimiternrogpeppe: I'll actually do something like this in the final CL14:37
dimiternrogpeppe: but they are good on their own, at least for now14:37
dimiternsweet.. now with the last CL the machiner API is reduced to a single constructor14:38
dimiternrogpeppe: thanks!14:58
dimiternrogpeppe, mgz: last one (for now) https://codereview.appspot.com/1246404314:59
mgzdimitern: ta14:59
sidneican i get one more review on https://codereview.appspot.com/12143043/ ?15:18
dimiternrogpeppe: now that we have a separate apiserver/agent, we'll get rid of apiserver/machine/agent.go and rename the path to apiserver/machiner, right (well, pending deprecation in 1.14). For the uniter, I'll create it in apiserver/uniter directly15:19
rogpeppedimitern: i don't quite understand. rename which path? create what in apiserver/uniter?15:20
dimiternrogpeppe: rename apiserver/machine to apiserver/machiner, remove agent.go from apiserver/machine; create apiserver/uniter/uniter.go15:21
rogpeppedimitern: sgtm15:22
dimiternrogpeppe: but the renaming and removing agent.go only in 1.14, right?15:24
rogpeppedimitern: yeah15:24
natefinchdimitern, rogpeppe, whoever else: what's the best way to get bazaar to show diffs in an external diff tool? I'm a big fan of Beyond Compare, but a quick google gives me like 6 different ways to hook up external diff/conflict resolution... and none of them look particularly good.15:28
rogpeppenatefinch: i use qbzr15:28
rogpeppenatefinch: so there is some way of doing it, but i don't know more than that15:29
natefinchrogpeppe: thanks, that's a good place to start15:29
dimiternnatefinch: +10 to qbzr15:29
rogpeppenatefinch: mgz is good on bzr15:29
rogpeppedimitern: do you use any other qbzr feature than qdiff?15:29
mgzyou can also just alias something with the --using flag15:30
dimiternrogpeppe: I use a few - qlog, qannotate, qdiff, q15:30
dimiternnot just q :)15:30
mgzthe reson the docs aren't completely clear on this is there are two scenarious you might want to use beyond compare15:30
mgzjust looking at the current state of the tree, a la `bzr diff`, and resolving merges15:30
mgzand there's not unified config for the two15:31
natefinchmgz: pretty much any time I *can* use Beyond Compare, I do :)15:31
dimiternsidnei: ping rogpeppe and mgz directly :)15:32
rogpeppedimitern: good point.15:32
rogpeppesidnei: looking :-)15:32
dimiternrogpeppe: and then maybe look my third? :)15:33
mgznatefinch: so, for starts you just want somethig like `bzr alias bc="diff --using=/path/to/bc"`15:38
natefinchmgz: thanks15:43
dimiternmgz: I feel bad to bug you again..15:47
mgzdimitern: it's okay, I keep wombling off onto other code15:48
mgzpoking is justified15:48
dimitern:) ok, noted15:48
=== tasdomas_afk is now known as tasdomas
mgzdimitern: why have you moved away from table-ish tests to a similar style but with five or so seperate condidiotns in one test case?15:58
dimiternmgz: which one are you refering to?15:58
mgzhaving the inputs x0..x5 at the top, then the expected results at the bottom of a long-ish test not obviously connected seems more confusing to me15:59
mgzTestEnsureDead and TestSetStatus in the previous mp16:00
dimiternmgz: what do you suggest?16:05
rogpeppesidnei: reviewed16:05
mgzI'm just curious, those tests aren't so huge, but I thought it was the kind of thing you favoured the table driven style for16:05
dimiternmgz: well, imo table-driven tests are good for a lot of similar cases, which only slightly differ in their setup; this is a single test with multiple arguments16:06
sidneirogpeppe: thanks!16:10
sidneirogpeppe: http://paste.ubuntu.com/5951789/16:19
sidneior dimitern ^16:19
rogpeppesidnei: sorry, use DeepEquals16:19
dimiternsidnei: yeah16:20
sidneithat works, thanks!16:20
sidneirogpeppe: next: ./apt.go:24: invalid method expression exec.Cmd.Output (needs pointer receiver: (*exec.Cmd).Output)16:23
sidneioh, just did as the error message, works.16:24
dimiternniemeyer: ping16:25
niemeyerdimitern: Yo16:25
dimiternniemeyer: hey16:25
dimiternniemeyer: so no rpc/jsoncodec lines at all in all-machines.log?16:25
niemeyerdimitern: Yeah16:26
dimiternniemeyer: any DEBUG stuff at all?16:26
niemeyerdimitern: Yeah16:26
dimiternniemeyer: that's really strange.. can you check machine-1.log or some other machine log?16:27
niemeyerdimitern: The file is also very messy16:27
niemeyerdimitern: It's missing line breaks16:27
niemeyerdimitern: It has about 3 messages about rpc, all of them of the style:16:27
niemeyerINFO JUJU:jujud:machine rpc: discarding obtainer method reflect.Method{Name:"Kill"16:27
dimiternniemeyer: anything with "juju.worker.machiner" in there? (not "juju/worker/machiner")16:27
dimiternniemeyer: ah, should be printed once per method in the beginning - it's messy, yes16:28
niemeyerdimitern: Nothing at all16:29
dimiternniemeyer: can you paste the log somehow? it shouldn't be that huge16:29
niemeyerdimitern: Definitely.. just a sec16:30
niemeyerdimitern: Btw, I wouldn't be surprised if I have an out-of-date dependency.. but it's not clear which. I'd expect the agent stuff to be all within juju-core itself16:31
dimiternniemeyer: it is, yes16:31
sidneirogpeppe: did you meant to suggest CombinedOutput? the comment is a bit unclear16:32
rogpeppesidnei: ah, sorry missed your earlier remark16:33
rogpeppesidnei: (*exec.Cmd).Output16:33
niemeyer% juju ssh 0 cat /var/log/juju/all-machines.log | pastebinit16:33
niemeyerhttp://paste.ubuntu.com/5951849/16:33
sidneirogpeppe: yes, past that now, onto the next comment about capturing stderr16:33
niemeyerdimitern: ^^^16:33
niemeyerHmm16:34
niemeyerDidn't quite work16:34
rogpeppesidnei: it depends where the apt- command prints its error message to16:34
rogpeppesidnei: perhaps it's safer to use CombinedOutput, unless it's cluttered with stdout stuff16:34
dimiternniemeyer: maybe it's a depedency actually16:34
niemeyerWeird.. piping isn't working16:34
sidneirogpeppe: seems to be stderr: https://pastebin.canonical.com/95449/16:35
dimiternniemeyer: you can try comparing the godeps generated dependencies.tsv file from here https://codereview.appspot.com/12361043/ to a run of godeps -t `{go list ./...}` in juju-core/ (get it from launchpad.net/godeps/16:35
* rogpeppe goes to look for his keyring for 2-factor auth16:35
sidneirogpeppe: sorry, pasting to public16:35
niemeyerdimitern: Holy crap.. it's one gigantic line!16:36
dimiternniemeyer: the log?16:36
sidneirogpeppe: http://paste.ubuntu.com/5951862/16:36
rogpeppesidnei: thanks16:36
rogpeppesidnei: it looks as if the error lines have a leading "E:"16:37
niemeyerdimitern: Yeah16:37
rogpeppesidnei: if that's standard, perhaps we should use those for the error message. i wonder if we can have several.16:37
sidneiindeed. conversely it doesn't print any error on missing config, it just produces no output.16:37
niemeyerdimitern: It's breaking the editor as well16:37
rogpeppesidnei: i guess we could split them and join them with semicolons or something16:38
dimiternniemeyer: hmm.. maybe take a look for anything suspicious in cloud-init-output.log ?16:38
sidneirogpeppe: http://paste.ubuntu.com/5951872/16:38
niemeyerdimitern: Please note that the system is actually working16:38
dimiternniemeyer: hmm.. perhaps try zipping the logs and passing it over U1 or something?16:39
=== tasdomas is now known as tasdomas_afk
rogpeppesidnei: i imagine there are other possible failure modes16:39
dimiternmgz, rogpeppe: poke https://codereview.appspot.com/12464043/16:41
sidneirogpeppe: i'll make it like the cmd() in git.go then.16:41
rogpeppesidnei: yeah, that seems reasonable16:42
rogpeppesidnei: thanks16:43
natefinchmgz: bzr diff --using seems to only show diffs serially, which is kind of annoying. Is there a way to just have it show them all in parallel?  I don't see anything obvious in the man pages16:49
mgznot for diff I think, the equivalent for merge can be smarter16:52
mgz...though that probably wants you to resolve everything sequentially16:53
mgzah, maybe qbzr has better handling for this?16:54
natefinchqbzr looks like it should work... evidently some kinks to work out16:55
natefinchit's not opening the external diff I specified in the config by default, and if I switch to bcompare from the qdiff window, the command line seems not to expand environment variables16:56
mgzhave to tried just running `bzr qdiff` with args?16:56
mgzmodifying your alias to be qdiff rather than diff may be all you need16:57
natefinchqdiff doesn't seem to have using16:57
mgzhm, no, the flags are different16:58
mgzso, is through config only16:59
natefinchyeah, I can get qdiff to pop up the default diff, and then choose beyond compare from the list of external diffs... but it doesn't seem to want to pop up beyond compare by default17:01
dimiternrogpeppe: are you seious about the tests?17:02
dimiternserious17:02
rogpeppedimitern: only if we're serious about the tests for any of the other of those methods. as they are all going away very soon (assuming my proposal is accepted), i have difficulty in suggesting seriously that you write the tests17:03
dimiternrogpeppe: yep17:03
mgznatefinch: as you may have gathered, I don't use external diff toos so am not clear on all the details... possibly qbzr doesn't support going straight to a subprocess for this17:03
dimiternrogpeppe: I'll shovel up most of these ifaces soon17:04
mgzlooks like what we really want is the better qbzr code in bzr core anyway17:04
rogpeppedimitern: that's what i'm doing now17:04
natefinchmgz: no problem, thanks for the help anyway17:04
dimiternrogpeppe: ah, even better then :)17:04
rogpeppedimitern: i'm also making some changes to the names package that i hope you'll like17:04
dimiternrogpeppe: nice, can't wait to see them17:05
dimiternmgz: well, as we discovered with rogpeppe, Setterer is actually a word for some bizare profession, but Watcherer is just a proper name in some parts :)17:07
natefinchdimitern: have you gotten qdiff to work with external diff by default?17:08
dimiternnatefinch: since I couldn't use my favorite meld, I didn't bother trying to setup external diff with bzr; qdiff seems fine for my uses17:11
natefinchdimitern: dang17:12
* dimitern signs off for today17:19
dimiterng'night all!17:20
rogpeppedimitern: g'night17:20
sidneirogpeppe: fixed 'em all17:21
rogpeppesidnei: brilliant, thanks17:21
sidneirogpeppe: should i poke someone else re: apt-config, or you're comfortable with approving?17:21
rogpeppesidnei: it would be really good to get at least one person who knows about that stuff to have a sanity check17:22
rogpeppesidnei: i don't really feel comfortable approving something that i don't know anything about17:22
sidneithere's not really much to know about it other than 'man apt-config' afaict17:23
sidneirogpeppe: i've validated the approach with smoser fwiw17:23
rogpeppesidnei: it would be nice if he could have a look at the code, but if it's not possible, then i guess it'll be ok17:24
sidneirogpeppe: +1'd in private17:30
rogpeppesidnei: cool17:30
sidneirogpeppe: there will be a new feature in cloud-init itself so that apt_https_proxy is a valid config option, then we can remove the 99proxy-extra hack when that's out there.17:31
rogpeppesidnei: cool17:31
rogpeppesidnei: just doing a last once-over17:31
mattywI seem to get permission denied when sshing to a unit and cd'ing to /var/lib/juju/agents/<unit-name>/charm, anyone else seen this? < - juju 1.13.017:32
rogpeppesidnei: i hope that apt doesn't sometimes print warnings to stderr :-)17:33
sidneii could look at the source, but meh. it's generally not very verbose.17:33
rogpeppesidnei: reviewed17:35
sidneirogpeppe: when putting }) in the newline, should i end the last line with ',' as well?17:37
rogpeppesidnei: yes17:37
rogpeppesidnei: (you need to)17:37
sidneido i need to lbox propose again or just rv-submit?17:39
sidneioh, apt-config output is case sensitive17:42
* sidnei looks for case-insensitive flags on go regex17:42
sidneicool fixed.17:46
sidneirogpeppe: sent for landing17:57
* rogpeppe smells the sweet smell of frying onions and garlic from downstairs18:20
rogpeppetime to stop for the day :-)18:20
mgzhow very british :)18:20
rogpeppemgz: pea risotto. lots of peas from the garden, mmm.18:21
mgzsounds great18:21
rogpeppemgz: smells great :-)18:21
rogpeppeg'night all18:22
mgzlater rog18:22
davecheneyjamespage: no, sorry, i do not know about pyjuju -> go juju upgrades23:35
davecheneyat one level, we always said there is no upgrade path for pyjuju-> go juju environments23:35
davecheneyi am not sure if that was your question23:35

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