/srv/irclogs.ubuntu.com/2012/11/26/#juju-dev.txt

mrammHow goes?02:04
jammorning wallyworld_, I hope your weekend went well.05:32
wallyworld_jam: hello, very busy but good05:35
mrammAnybody about that can give me a quick update on openstack progress, subordinates, or TLS?  I'm putting together a status update for internal folks, but also thinking about sending out e-mail with some status info to the list.06:29
mrammI seem to have found a time where all the core guys are not online...   Bully for me!06:30
mrammok, signing out for a bit, back later this evening when EU folks are up ;)06:46
TheMueMorning.07:13
rogpeppemorning all08:29
rogpeppefwereade: have a nice holiday?08:29
fwereaderogpeppe, thank you, yes :)08:30
TheMuerogpeppe, fwereade: Hiya.08:30
rogpeppefwereade: i got TLS working live BTW08:30
fwereaderogpeppe, ate in cafes, went to beach, the usual late-november things :)08:30
fwereaderogpeppe, awesome!08:30
fwereadeTheMue, morning08:30
rogpeppefwereade: the late november thing here currently is sheltering from the rain and squelching through mud08:31
TheMuefwereade: Walking to the beach is definitely a benefit of your home town. Here it is too windy and cold.08:31
TheMuerogpeppe: +108:31
fwereaderogpeppe, TheMue: :)08:31
* TheMue had some nice malts on Friday, warming from inside.08:32
fwereadewhoops, need to pop out a mo08:39
fwereade(I *think* I just wrote something nice...)08:39
rogpeppeyay! all live tests pass with TLS enabled...09:08
TheMuerogpeppe: Cheers.09:09
fwereaderogpeppe, cool!09:20
rogpeppefwereade: of course, it'll probably take weeks to get the CLs through :-|09:21
rogpeppefwereade: there's one little thing i encountered that i'm not sure of the best way to fix09:21
fwereaderogpeppe, quite, but this is a significant milestone nonetheless09:21
fwereaderogpeppe, oh yes?09:21
rogpeppefwereade: when you first make the connection to the state, you might succeed in connecting before the initialisation process has set up the initial password09:22
rogpeppefwereade: so you can get an "unauthorized" error09:22
fwereaderogpeppe, ha, but usually unauthorized means that something's really wrong09:23
rogpeppefwereade: there's only a very short time window for it to happen09:23
rogpeppefwereade: yeah09:23
fwereaderogpeppe, grar09:23
rogpeppefwereade: so i'm wondering if we should only open the mgo port after bootstrap-state has completed09:23
fwereaderogpeppe, +109:23
rogpeppefwereade: that involves a few icky special-case hacks though09:24
rogpeppefwereade: for instance, i think we'd need a new entry point in Environ09:24
rogpeppefwereade: and... oh bugger, we can't do it09:25
fwereaderogpeppe, what if we were to bunch all the mgo setup stuff up as a Stater task?09:25
rogpeppefwereade: we can't change ports09:25
rogpeppefwereade: before the first client connection09:25
fwereaderogpeppe, oh ok09:25
rogpeppefwereade: because we haven't got the enviroment credentials yet09:25
rogpeppefwereade: there's another possibility actually09:26
rogpeppefwereade: and maybe it's not a bad one, as we're going to be doing something similar later with the API09:26
rogpeppefwereade: we could start a proxy process09:26
rogpeppefwereade: that just port-forwards09:26
rogpeppefwereade: and start *that* after bootstrap-state has completed.09:27
fwereaderogpeppe, sounds very sane to me09:27
rogpeppefwereade: i think i'll leave it as a possibility for the moment - the retry logic is sufficient for the time being.09:28
fwereaderogpeppe, cool09:28
mrammGreetings from the opposite side of the world from my normal life09:28
rogpeppemramm: yo!09:29
mrammI'm exactly 12 hours off normal schedule09:29
rogpeppemramm: where are you?09:29
mrammso, instead of 1, 2, and 4 pm meetings09:29
mrammI have midnight through four in the morning meetings :)09:29
mrammThailand09:29
rogpeppemramm: for work or play?09:29
mrammvisiting friends of my mom, and hanging out on the beach09:29
rogpeppemramm: very nice!09:29
rogpeppemramm: temperature?09:30
mrammI also bought a suit or two for work09:30
mrammhot09:30
mramm;)09:30
* rogpeppe is jealous09:30
* rogpeppe as he hears the rain drumming outside09:30
rogpeppemramm: you might be interested to know i got all the TLS stuff working.09:30
mrammabout 32 degrees09:31
mrammand that's because it has cooled off a bit since yesterday09:31
rogpeppemramm: nice. not *too* ridiculous09:32
mrammright09:32
mrammit has rained every day09:32
mrammbut not for too long09:32
mrammand warm rain09:32
rogpeppemramm: i hope you've been taking full advantage of the local cuising09:32
rogpeppecuisine09:32
mrammso, today I'm working so that I can be ready for all those late night meetings09:32
mrammyea, I love me some thai food09:32
mrammgot some basil thai fried rice from a street vendor for lunch09:33
mramm40 baht ($1.20)09:33
mrammand it was delicious09:33
mrammanyway I'll be updating a few of the existing briefs, and adding a new one for API stuff09:34
mrammand I also created a new status report doc, so that I can pull from it to give big Mark updates on a regular basis09:35
rogpeppedavecheney: yo!09:40
davecheneyrogpeppe: hey09:40
rogpeppedavecheney: since i'm telling everyone... i got TLS working.09:40
davecheneyrogpeppe: congratulations!!09:43
rogpeppedavecheney: interesting test failure you saw last night09:47
rogpeppedavecheney: i think we should probably never rely on error messages from go09:48
TheMue*: https://codereview.appspot.com/6853075/ likes another review.10:19
TheMuefwereade: I somehow have a problem changing the original LXC configuration for testing. A possible solution may be a kind of chroot() and have an own /etc directory. But I'm not sure. Any other good idea is welcome.10:21
fwereadeTheMue, hum: is it possible to just make the path configurable and settable for the tests?10:22
fwereadeTheMue, much like the charm stor url in juju-core/charm IIRC10:22
TheMuefwereade: Yeah, should be possible. Good idea.10:23
mrammdimitern, etc: how are things going on the provider front?10:31
dimiternmramm: we're into refactoring the POC client code and writing test services (doubles of openstack api subset we're implementing)10:32
mrammcool10:33
dimiternmramm: we have identity auth service + client code mostly done, and the nova and swift packages taking shape10:33
mrammnice10:33
dimiternmramm: we also have a complete stub openstack provider ready in juju-core10:33
mrammawesome10:33
dimiternonly needs its actual "meat" over the bones10:34
mgz dimitern, also known as the code that actually does stuff :)10:35
jammorning dimitern10:35
dimiternjam, mgz: morning10:37
mrammjam, mgz: Morning10:54
rogpeppejam, mgz: what's the story with goose? is it going to start with merges from scratch again, or are we moving on from its current state?10:54
rogpeppejam, mgz, dimitern: morning, BTW!10:55
dimiternrogpeppe: morning! well done for the TLS! :)10:56
rogpeppedimitern: thanks. we'll see how long it takes to land :-)10:56
rogpeppedimitern: at least i can see the light at the end of the tunnel...10:56
jamrogpeppe: moving on from the current state10:58
rogpeppejam: ok, there are a few comments i'd like to make at some point, if that's ok10:58
jamrogpeppe: silence! the code is perfect as is, and I will hear no dissent.10:58
* rogpeppe mumbles10:59
jamrogpeppe: I would be happy to get feedback.10:59
* rogpeppe feels the lack of a codereview CL to click on :-)10:59
jamrogpeppe: can you propose the code against a blank tree?11:00
jamI think reitveld just works from a patch anyway.11:00
jam(diff)11:00
jambzr diff -r 0..-1 would give it to you11:00
rogpeppejam: yeah, i'll give that a go11:00
mgzthe puns! the puns!11:02
TheMuefwereade: Done, thanks for the good hint.11:04
mrammalrght everybody I'll be back in a few hours.   Going to get some food and rest up for tonight's marathon of meetings starting at midnight.11:04
niemeyerGood morning jujuers11:06
rogpeppeniemeyer: yo!11:07
niemeyerrogpeppe: Hey man, how was the weekend?11:07
fssniemeyer: morning :-)11:08
rogpeppeniemeyer: great. i did a fun gig in St Andrews, and spent the train journey up there getting TLS working11:08
rogpeppeniemeyer: which it now does, all live tests pass11:08
niemeyerrogpeppe: Ohhh, sweet11:08
niemeyerfss: Heya11:09
fssniemeyer: yesterday I tried go version11:09
mrammniemeyer: good morning!11:10
niemeyermramm: Heya, how were holidays?11:10
niemeyerfss: Nice, how was it?11:10
fssniemeyer: looks neat :-) I'm glad most of proxy stuff worked because go's http client supports http_proxy and https_proxy11:11
mrammniemeyer: good. I have another week here on the beach.11:11
TheMueniemeyer: Hiya11:11
mrammniemeyer: but am working a bit, just to stay on top of meetings and whatnot11:12
niemeyermramm: Oh, so you're still mostly off this week?11:12
mrammyea11:12
niemeyerTheMue: Heya11:12
niemeyermramm: Cool11:12
mrammtoday I'm working all day11:12
niemeyerfss: So did it all work?11:12
fwereadeearly lunch, bbiab11:13
niemeyermramm: How was the 6AM meeting? :-)11:13
fwereadeheya niemeyer11:13
niemeyerfwereade: Heya11:13
fssniemeyer: almost11:13
fssniemeyer: it doesn't work in the agent, because it would need to be exported in the upstart config file (using env)11:13
fssniemeyer: I don't know if there is another way11:14
fssniemeyer: (regarding http_proxy and https_proxy env vars)11:14
niemeyerfss: Ah, I see11:14
rogpeppejam: https://codereview.appspot.com/684408711:14
mrammniemeyer: which one?  I'm on UTC/GMT +7 hours11:15
niemeyermramm: The one 3h ago11:15
jamrogpeppe: so that looks like it worked, but did it announce itself to anyone to actually follow it?11:15
rogpeppejam: nope11:15
mrammniemeyer: interesting, that wasn't on my calendar11:15
rogpeppejam: or... i dunno11:15
mrammI do have one for midnight tonight, and then another at 1am ;)11:15
rogpeppejam: probably not11:15
rogpeppejam: but we can advertise it if we like11:16
jamrogpeppe: well, the big thing is that when you actually make comments, I would like to see them.11:16
niemeyermramm: Hmm.. I think I'm on crack.. I see it's now scheduled to 17 UTC11:16
fssniemeyer: we'd like to help getting it to work on sa-east-1, terminate-machine, destroy-service, vpc and proxy (our scenario)11:17
mrammniemeyer: no worries we all hit the crack a little bit too hard sometimes ;)11:17
niemeyermramm: 1AM? Ugh11:18
rogpeppejam: if you comment on the CL, you'll see any further comments11:18
niemeyerfss: The proposal of a sprint is still up11:18
jamrogpeppe: which is... a bit non-ideal, but what I just did.11:18
fssniemeyer: nice, next friday is our deadline for getting tsuru working in vpc, so I will keep working in the python fork today and tomorrow, and them I will start helping out go version11:21
mrammniemeyer: That's what I get for going to vacation 12 hours removed from my normal tz!11:21
niemeyermramm: Yeah, a bit intense :)11:23
niemeyermramm: Well, to be honest though, that's what you get for *working* during vacation :-)11:23
niemeyerfss: The proposal won't be up for much longer, though.. if you're actually interested, we have to sort that out today or tomorrow11:24
niemeyerfss: Otherwise we'll be doing it remotely, which is no big deal, but will take a bit longer11:24
fssniemeyer: hmm, I don't think we will be able to sort it out today or tomorrow, we will probably work remotely. I'll let you know11:26
mrammniemeyer: yea, but if I *didn't* work during vacation, what would I do ;)11:28
niemeyerBtw, I've upgraded my network connection to amazing 10Mbps on Friday, which means my video should suck a bit less now.. it took some troublesome cabling effort, but it worked out in the end.11:39
niemeyer"amazing" because I didn't quite trust it to work for real here, but apparently it's quite reasonable11:40
niemeyerfwereade: Please ping me when you're back12:10
niemeyerfwereade: I'd like to sort out the machine id situation somehow12:10
fwereadeniemeyer, heyhey12:10
fwereadeniemeyer, ok, I have a pair of branches that I am just about to push on the strength of which you may find it helpful to judge12:11
niemeyerfwereade: Okay12:11
niemeyerfwereade: I have an idea I'd like to talk as well..12:11
niemeyerfwereade: Can we have a quick call?12:11
fwereadeniemeyer, ofc12:11
fwereadeniemeyer, will you invite or shall I?12:12
niemeyerfwereade: Sending12:12
TheMuekunchtime12:31
mgzis that a special german custom? :)12:33
=== niemeyer_ is now known as niemeyer
fssniemeyer: just confirmed, it's not possible to arrange that sprint12:43
niemeyerfss: Cool12:43
niemeyerfss: Thanks12:44
fss=/12:46
rogpeppejam: i've made some comments. https://codereview.appspot.com/6844087/12:51
rogpeppejam: it seems a pity that you can't push changes to that CL though.12:52
rogpeppejam: as another possibility (too late!) i was wondering if it might be better to make a minor change to each file (e.g. a comment "// pending review") and propose that as a CL to the existing trunk. then people could comment on any file, and changes would be targetted to trunk.12:53
jamrogpeppe, must I remind you: (2:58:50 PM) jam: rogpeppe: silence! the code is perfect as is, and I will hear no dissent. :)12:56
mgztoo many camels12:56
jamthanks for the comments, the inline comments is an interesting idea12:56
rogpeppejam: oops12:56
jamI'll look over your comments and see if it is something that can be addressed quickly, or not.12:56
rogpeppejam: there are many small issues12:56
mgzthe top few I generally agree with and a few have been mentioned/are being fixed12:57
rogpeppejam: it would have been nicer if we could have commented as the branch was being built up12:57
mgzso, less redundant naming of things in packages, constants where just using the string would do, and so on12:57
mgzrogpeppe: you were sitting right next to us :D12:57
rogpeppemgz: i saw no proposals :-)12:57
rogpeppemgz: yeah, just lots of go-idiomatic things, mostly12:58
niemeyerfss: What was the issue, out of curiosity?12:59
mgzrogpeppe: okay, on the json error to go error thing, this is what I want to get sorted13:00
rogpeppemgz: that was probably the most substantive comment, yeah13:01
mgzbut, discussing it this morning, I still don't really get the go conventions for rich error instances13:01
rogpeppemgz: basically you can document that a function may return a particular error type13:01
rogpeppemgz: then the caller can dynamically check (if it wants to) whether such an error type was actually returned13:02
fwereadeTheMue, hmm, my understanding of something is fatally flawed: why is firewaller using a MachinePrincipalUnitsWatcher?13:02
rogpeppemgz: there are actually three conventions13:02
mgzbut you can't have a type, and then a subtype of that, as I understand is, so no `except EnvironmentError:` kind of thing13:02
fwereadeTheMue, I thought the whole point of the MachineUnitsWatcher was to do exactly what the fw needed?13:02
rogpeppemgz: you can return several different possible types13:03
mgzso, having a general OpenstackInteractionError then specific types that derive from that is no go13:03
fssniemeyer: I don't know. We all should pray for transparency :-( There was an excuse, but I'm not sure that was the reason13:03
rogpeppemgz: e.g. EnvironmentError, HttpError, JsonError, etc13:03
rogpeppemgz: then the caller can do: if e, ok := err.(*EnvironmentError); ok { ... we got an environment error }13:04
mgzthe point of EnvironmentError in python is it catches OSError (and subclasses) and IOError (and subclasses)13:04
rogpeppemgz: well, we don't do subclasses. you'd need to decide which errors come within which category.13:05
rogpeppemgz: (errors can of course contain other errors)13:05
rogpeppemgz: sorry, i'm not very familiar with python or its class hierarchy13:05
mgzthe other question...13:06
mgzin python I'd make an exception class with several attributes13:06
mgzand a __str__ method that took those attributes and presented something pretty13:06
mgzso, you could do `err.code == 404` but when propogates you still get the nice stringification13:07
rogpeppemgz: that sounds very similar to a struct type with an Error method13:07
mgzwhere's a good go example for that?13:07
rogpeppemgz: egrep for ' Error\('13:07
rogpeppemgz: well...13:07
rogpeppemgz: i'll fine you an example13:08
rogpeppefind13:08
rogpeppemgz: basically, if you define an "Error() string" method on a type, it can be used as an error.13:08
rogpeppemgz: so if you've got a struct type describing your error, you can write an Error method that produces a pretty string version of the error13:09
mgzokay, thanks.13:09
mgzI'll do such after lunch.13:09
jamrogpeppe: the OpenStackHTTPClient stuff is already in a branch to land, for some of the naming tihngs.13:10
rogpeppemgz: example at random: look in go/scanner/errors.go in the go source tree13:10
rogpeppejam: ok.13:10
jamrogpeppe: so what is the difference between fmt.Errorf and errors.New() ?  It would seem New() won't let you ever put in custom formatting, while Errorf() is pretty obvious for that.13:11
rogpeppejam: that's the only difference. errors.New is a teeny bit more efficient as it doesn't need to scan the string.13:12
jamIt seems a bit odd to use both in the codebase (having to import errors just to get New, when most of the time you use fmt.Errorf() because you want extra context)13:12
rogpeppejam: i suggested using errors.New because the errors package was already imported13:12
rogpeppejam: it's not a significant issue though13:13
niemeyerfss: What was the excuse?13:14
niemeyerfss: If that's publc13:15
niemeyerpublic13:15
TheMuefwereade: I can't help you here. I used machine.WatchUnits() in my latest version before I added the global mode. At this time the change to the principal unit watcher has been introduced.13:15
TheMuefwereade: I think it may be a temporary change due to the work on the unit watcher.13:16
fwereadeTheMue, ah, ok, I shall examine it further13:18
fwereadeTheMue, cheers13:18
niemeyerjam: Do you have a moment before you go?13:19
jamrogpeppe: I'll read through your suggestions a bit more tomorrow. My son is indicating in no uncertain terms that its my EOD.13:19
jamniemeyer: I might have 30s or so13:19
rogpeppejam: okeydokey13:20
fssniemeyer: msg :-)13:20
niemeyerjam: Cool, that won't be enough.. let's catch up tomorrow then13:20
jamniemeyer: works for me.13:21
niemeyerjam: Have a pleasant evening there13:21
hazmatniemeyer, re depart hooks, the pinger presence expiration won't trigger them?14:04
niemeyerhazmat: Nope14:04
rogpeppeanyone fancy having a look at some of my outstanding reviews? i'm sure a couple of them could be submitted if i had two LGTMs.14:07
mgzrogpeppe: the ones I reviewed I don't think I said lgtm but did mean it14:09
rogpeppemgz: thanks. yeah, you're the first LGTM!14:09
rogpeppemgz: just wondering: why do you define an interface type for each of the various clients (e.g. swift.Swift, swift.Nova, etc) ?14:29
rogpeppes/swift.Nova/nova.Nova/ of course14:29
mgzwhich part of that question is surprising for you? I think the bit that's novel for me might not be what you mean...14:30
mgzneeding an interface seems to be a neat way in go of providing a real implementation and a testing backend that support the same stuff.14:30
mgzbut I suspect you mean why not just one interface for everything?14:30
mgzopenstack exposes various seperate services, with different endpoints, so, for instance, you could have a deployment that had nova for compute, but no swift (as canonistack did for a long time)14:32
mgzso, we might for instance want a ceph object-store client as well, which we could then perhaps factor a common interface out of14:34
TheMuerogpeppe: Which CL do you want to be reviewed?14:36
rogpeppemgz: sorry, only just saw your reply. (i generally don't notice things on irc unless directly addressed)14:37
rogpeppeTheMue: any of the ones in https://code.launchpad.net/juju-core/+activereviews with no prereqs would be a good start14:37
rogpeppemgz: i mean both actually14:37
rogpeppemgz: i don't see that defining an interface that provides exactly the same things as the type you're also defining is useful.14:38
mgzrogpeppe: right, it's only really useful when you have another type as well14:38
rogpeppemgz: it just means that you have to do more work when changing type sigs, because you need to keep the interface type in sync too14:38
rogpeppemgz: in general, in Go we define interfaces when we need them.14:39
mgzwhich I think is what the plan was over providing test versions, but there's still some debate over what we're trying to do there exactly14:39
rogpeppemgz: it's not that usual to use interfaces in Go just to enable mocking.14:40
mgzfair enough, and we may do that all at the http level anyway14:40
rogpeppemgz: that's the approach we took for ec2, and it seems to have worked ok14:40
mgzyou seem to rely a lot on testing edge cases just against ec2 itself14:41
mgzthat's less tractable with the myriad possible openstack deployments14:41
rogpeppemgz: for example?14:41
* niemeyer => lunch14:41
mgzbut there are also other ways to address that with a faked out server14:41
rogpeppemgz: we run the "live" tests against the fake server too14:41
mgzdave cheney just fixed an issue where you get an odd error back from ec2 when in a different region and trying to access the public bucket14:43
mgzreally, for that kind of thing with openstack, we want to test the specific error back from swift gets propogated to the client as something understandable so the user can fix their region14:44
mgzif you just have a well behaved pretend swift server, testing particular error cases means either adding params to it and spinning up a new one each test, or poking a running one to do something special next response14:45
mgzor I guess here, hardcoding some maic region value that both the test and the server expect to behave in a particular way14:46
mgzthat starts to add a lot of complexity after the 50th quirk you want to test14:47
mgzrogpeppe: ^example :)14:47
rogpeppemgz: we should definitely test that kind of thing locally. we happened to find the error when testing live, but there's no reason we can't use the local test server to check those kinds of issue.14:49
rogpeppemgz: i'd provide a way to configure the test server so that it emulates one (or a set) of the possibilities14:49
mgzrogpeppe: I'm not seeing that being done in several merge proposals that have gone past, generally just the client code has been fixed14:49
rogpeppemgz: i agree, that's a problem.14:50
rogpeppemgz: but that doesn't mean the general approach is wrong14:51
rogpeppemgz: what do you think of the idea of defining a common-subset interface across the various provider types?14:54
mgzrogpeppe: don't think it's practical14:55
rogpeppemgz: there's no common functionality at all?14:55
rogpeppemgz: from my brief glance, it looks as if there's at least some14:56
mgzmight work for some bits like storage, which tends to be a thin wrapper around the underlying apis anyway,14:56
mgzwhich a few added frustrations in the design from s3isms14:57
rogpeppemgz: it's entirely possible to have a common-subset API which still provides access to extended features14:57
fwereaderogpeppe, it's a question of convenience in a particular setting, though14:57
mgzopenstack and ec2 should be able to share a fair bit, but maas doesn't look much like them outside of having somewhere to poke files14:57
rogpeppemgz: oh sorry14:57
rogpeppemgz: i wasn't talking about between openstack and ec214:58
rogpeppemgz: i was talking about the various clients within openstack14:58
rogpeppemgz: e.g. nova, swift14:58
rogpeppeahem14:59
mgzrogpeppe: so, there's not much direct overlap at present, potential for s3-compat/swift/ceph aside14:59
rogpeppeperhaps i should google a bit before talking about something i don't know anything about :-)14:59
mgzbut certainly services that provide roughly similar apis like that should be exposed through a common interface for usage that doesn't care about which one you're using for object-store15:00
TheMuerogpeppe: One LGTM with a small hint.15:00
rogpeppemgz: it does look like there are potential types in common though. Entity, for example, is the same in each, no?15:00
rogpeppeTheMue: append(certPEM, keyPEM...) *can* touch certPEM15:01
mgzrogpeppe: the other thing along those lines is some compat stuff where apis used to be in nova but have been split out in newer versions, clients ideally shouldn't care where the volume management bits are, just that a volume management interface is available15:01
mgzrogpeppe: some apis take uuids that refer to the same objects, I'm not sure what other things apart from auth are shared15:02
rogpeppemgz: it seems to me like that's something that can be managed at a later stage.15:02
rogpeppemgz: Link ?15:02
mgzfor example, booting a server requires knowing what image to use15:02
TheMuerogpeppe: OK. Is it platform dependend? Can't reproduce it.15:03
rogpeppemgz: oh yeah, another thing i noticed (can't remember quite where now) - if you want to unmarshal a possibly null string using JSON, you can use *string rather than interface.15:03
mgzthis is just given as a uuid, and at present will need to manually configured as we haven't got a neat cloudwotsit that tells you what the latest precise image on hp is, for instance15:03
rogpeppeTheMue: try: x := []int{1,2,3}; y = append(x[0:1], 4); fmt.Println(x)15:04
mgzbut you don't need a rich image object, which is what you'd expect back when looking up images using glance (seperate project farmed out from nova a few releases back)15:04
rogpeppemgz: i'm talking about shared concepts, not just shared things. can't we use a common Link type across each package?15:05
mgzprobably, what specifically does that get us?15:06
TheMuerogpeppe: OK, that's the trick, IC. Thx.15:06
TheMuerogpeppe: Tested it without indexing.15:06
rogpeppemgz: it reduces the number of overall entities.15:06
mgzricher basic types would be good.15:06
mgzsure, but what would Link be exactly?15:07
rogpeppemgz: what is it now? (i don't see any docs :-])15:07
mgz...I think this is all stuff for unmarshalling/marshalling specific json15:08
mgzwhich is likely not very sharable, at least if we want to be well behaved15:08
rogpeppemgz: IMHO it's nice to factor out common elements when appropriate. then it becomes easy to use common code across those elements.15:08
rogpeppemgz: but ListFlavors, for example, returns a []Entity15:09
mgzrogpeppe: one issue I have is optional params15:09
rogpeppemgz: so it's *not* just about marshalling/unmarshalling15:09
mgzas I understand it, unmarshalling lacking some json keys is fine, the value for that key is then just nil15:09
rogpeppemgz: yeah15:09
mgzbut the reverse is a little suspect15:10
mgzif you're meant to provide key A or key B, you don't really want {... A: "", B: "something"}15:10
rogpeppemgz: you can have omitempty for that15:10
mgzah, that sounds good.15:10
rogpeppemgz: it doesn't work for structs though, i think15:11
rogpeppemgz: just atoms15:11
rogpeppemgz: but i may be wrong there15:11
rogpeppemgz: anyway, it's not necessary to use the same types for unmarshalling as you're returning from the functions.15:11
mgzsure, but it is pretty handy, and we'd need even more structs to make that distinction15:13
mgzthe Link/Entity thing is pretty mysterious...15:14
mgzdoes seem they're meant to be a common interface many objects use15:15
rogpeppemgz: do they have a common json representation too?15:17
mgznope, but share some keys15:17
mgzmany things have an id:UUID, name:string, links:{} as well as the rest of their details15:18
mgzso, having that up one level might make sense (not for swift though)15:19
mgzthe nova derived parts are more homogenous15:20
rogpeppemgz: you *might* be able to use an embedded Entity struct to make that work15:20
rogpeppemgz: is there an API reference for these things BTW? i just found java docs.15:21
mgzapi.openstack.org15:21
rogpeppeah, i was looking at docs.openstack.org15:22
* rogpeppe loves the way a single example is considered sufficient documentation15:23
mgzhey, at least there's an example these days15:23
rogpeppe:-)15:25
mgzI did quite a bit of coding to the implementation...15:25
mgzwhich when bouncing through and external api then the internal rpc was often quite fun to work out exactly what some param did15:26
rogpeppemgz: i'm sure15:26
mgzreminds me, I still want to see if I can do away with the need for private storage via cunning compute api usage15:28
mgzthe main problem is the habit of stuffing charms in there... which I think we can just do with an auto-generated local-public bucket15:28
fwereademgz, +115:29
mgzthe current hack of just making the whole bucket public-readable is... not something I'm happy with15:30
rogpeppemgz: we also use the private storage for pushing development versions of tools to15:33
rogpeppemgz: but in general it's an idea we're working towards15:34
rogpeppefwereade: will we be able to use your new UnitsWatcher for watching service units too?15:47
fssniemeyer: regarding proxy support, there's another issue, we would need to specify it to cloud init too, so it is used when apt-getting15:48
fssniemeyer: our current approach is to set the proxy in /etc/apt/apt.conf.d in a customized AMI15:49
niemeyerfss: We probably need an env setting for that15:49
fssniemeyer: makes sense15:51
fssniemeyer: thanks15:55
niemeyerfss: Do you need https proxy as well, or just http?15:55
fwereaderogpeppe, nope, there will be too many service units for that approach15:57
rogpeppefwereade: any chance of a review of this trivial branch? https://codereview.appspot.com/6847091/15:58
* fwereade looks16:00
fssniemeyer: yep. We use the HTTP proxy for tunneling HTTPS connections. Unfortunately, twisted does not support that. We're using HTTP AWS endpoints, but we don't plan to keep using this16:02
rogpeppeTheMue: ultra-trivial review for you (and also fixes trunk when compiling against go tip): https://codereview.appspot.com/684910116:03
TheMuerogpeppe: Indeed ultra-trivial. ;)16:05
niemeyerrogpeppe: https://codereview.appspot.com/6847091/diff/4001/environs/bootstrap.go#newcode7716:05
niemeyerrogpeppe: Please please please don't commit that16:05
niemeyerrogpeppe: It's getting pretty frustrating to see that on *every* branch16:05
rogpeppeniemeyer: i've fixed it now, AFAIK16:06
rogpeppeniemeyer: i'll re-gofmt that branch16:06
niemeyerrogpeppe: It's still there16:07
rogpeppeniemeyer: i haven't re-proposed it yet16:07
niemeyerrogpeppe: Understood.. the only thing I can comment on is what I can see :)16:07
rogpeppeniemeyer: FWIW, i wouldn't be able to submit it like that anyway16:08
rogpeppeniemeyer: re-submitted16:08
rogpeppeniemeyer: proposed, rather16:08
fssniemeyer: ops, the correct answer should be no. We use http proxy for tunneling https requests. Sorry16:08
niemeyerfss: Okay, they're both the same then, I see16:09
niemeyerrogpeppe: Thanks!16:09
rogpeppeniemeyer: have you got any other comments on that CL, BTW? it seems pretty straightforward to me.16:18
niemeyerrogpeppe: I'm surprised ot not see any comments from me there16:18
niemeyerrogpeppe: I'm pretty sure I had reviewed it already16:19
rogpeppeniemeyer: i haven't seen anything16:19
niemeyerrogpeppe: LGTM either way16:19
rogpeppeniemeyer: thanks16:20
fwereadeTheMue, I am lacking firewaller context again16:23
fwereadeTheMue, there was talk with Aram of some bug in the firewaller16:23
fwereadeTheMue, can you remind me what it was and whether it is addressed somewhere?16:23
TheMuefwereade: His watcher changes lead to a different handling of the global mode. And there sometimes occurs a race. At least it seems so.16:24
fwereadeTheMue, hmm; do you know if it was addressed?16:25
TheMuefwereade: No, because the watcher and firewaller changes are still in review and he tried to find out what exactly is happening.16:27
fwereadeniemeyer, ^^16:27
fwereadeniemeyer, his branch still has the contentious c.Skip("disabled until firewaller initialization is fixed")16:27
niemeyerTheMue: What is the different handling more precisely?16:28
fwereadeniemeyer, *that* was why I judged it a potential rabbit hole16:28
niemeyerfwereade: Are we within the hole already or not?16:28
fwereadeniemeyer, AFAIK the current trunk uses the old-style MPUW16:28
niemeyerfwereade: IOW, is this exposing we already have, or one we're getting into?16:28
fwereadeniemeyer, if we were to merge Aram's MUW, it would expose this nebulously-defined bug16:29
fwereadeniemeyer, sorry16:29
fwereadeniemeyer, if we were to merge the branch which *uses* Aram's MUW, it would expose...16:29
niemeyerfwereade: Yeah, everything I heard about it so far was indeed nebulously defined :)16:29
TheMueniemeyer: I would have to take a look again. He moved parts of the firewallers main loop into an own method. And there the logic IMHO changed because the watcher now returns the ids (if I'm right) and the lifecycle state has to be checked.16:29
niemeyerTheMue, fwereade: Yes, and that's exactly what we should do to finish porting watchers16:30
niemeyerTheMue, fwereade: We need someone to stop nebulously defining what's going on, and actually get stuff working :)16:30
TheMuefwereade: If it's ok for you we both could dig deeper into it tomorrow morning together. From two sides, the watcher and the firewaller.16:32
fwereadeniemeyer, oddly enough, that is what I am trying to do :)16:32
niemeyerfwereade: and I'm sorry that this is getting on your track.. I really wished your non-trivially filled plate wouldn't get fuller, but if your goal goes over that track, the best course of action is to go head on and understand what's going on16:33
fwereadeniemeyer, I have perhaps not made clear how closely my branch tracks aram's second one16:34
fwereadeniemeyer, but it doesn't include machiner changes16:34
niemeyerfwereade: I don't understand how you can track the branch changes without touching the call sites that use it16:36
fwereadeniemeyer, I can deal with the additional bits on my plate, but I would like to tackle them in such a way that I can get this little, disproportionately-useful, chunk merged16:36
fwereadeniemeyer, I want to *just add a type*16:36
fwereadeniemeyer, because this is a useful change16:36
fwereadeniemeyer, and stands well on its own16:36
fwereadeniemeyer, and doesn't dilute the focus of the branch16:36
niemeyerfwereade: You want to add a type, that does the same thing already being done elsewhere, right?16:36
fwereadeniemeyer, it does something different, that is very nearly the same as what aram's second branch does16:37
niemeyerfwereade: Duplicating logic that was supposed to be the same, right?16:37
fwereadeniemeyer, I don;t consider the machiner bits of that branch to be anywhere near ready16:37
niemeyerfwereade: So let's do them16:37
niemeyerfwereade: Seriously.. this has been coming forever, for no good reason16:38
fwereadeniemeyer, all in one branch?16:38
niemeyerfwereade: We already have two branches16:39
niemeyerfwereade: and those two branches already had their lives in other branches16:39
fwereadeniemeyer, right; one of them is a potential rats' nest, and it is blocking the other one16:39
niemeyerfwereade: I'm sorry you're getting involved on that, but I'm clearly concerned about that stuff by now16:39
fwereadeniemeyer, I have extracted the best parts of that other one into a fresh CL16:39
fwereadeniemeyer, which is IMO a useful stepping stone towards having everything fixed16:40
niemeyerfwereade: This problem has grown up disproportionally to the task16:40
niemeyerfwereade: which is why we can't just keep patching stuff around the actual task16:40
niemeyerfwereade: It's time to sort it out16:40
niemeyerfwereade: I'm happy to do that, but only if the rest of these branches are coming along16:41
fwereadeniemeyer, I am willing to take on the responsibility of landing that functionality16:41
niemeyerfwereade: If the idea is cherrypicking what you need and leaving the rest, the no, let's not do that please16:41
niemeyerfwereade: Okay, so tell me about that16:41
niemeyerfwereade: What's the rest of the plan?16:42
fwereadeniemeyer, figure out what the deal is with the nebulous bug, in parallel with the other work that will be unblocked by implementing the new-style UnitsWatcher16:42
fwereadeniemeyer, namely the Deployer and associated Container changes we discussed16:43
fwereadeniemeyer, and then replace Machiner entirely, once Deployer has been approved and merged16:43
fwereadeniemeyer, are you concerned that I will forget to fix the firewaller? ;)16:44
fwereadeniemeyer, I am mainly concerned that I will spend days up to my elbows in it, and then aram will show up and push a branch that fixes it16:44
niemeyerfwereade: I'm concerned that we'll lose months of work on that silly change16:45
niemeyerfwereade: Because we're again re-branching and re-starting16:45
niemeyerfwereade: and even worse this time: we're doing stuff in parallel16:45
niemeyerfwereade: Which opens a big opportunity to keep the old version around so we don't spent time on it16:45
niemeyerfwereade: That said,16:46
niemeyerfwereade: You have a good track record on that stuff16:46
niemeyerfwereade: So if you're indeed going to finish that migration over the next couple of weeks, you'll have my sympathy and my time on it too16:46
fwereadeniemeyer, awesome, tyvm :D16:47
fwereadeniemeyer, let me just -wip that branch and repropose with unscrewed API in a bit16:47
niemeyerfwereade: But let's do it.. we can't afford to leave the situation unhandled16:47
fwereadeniemeyer, upon my honour, I will land that branch or a close relative thereof :)16:48
niemeyerfwereade: SGTM :-)16:48
rogpeppeniemeyer: i've just proposed this branch. it changes environs.Bootstrap to work like we discussed, i hope. https://codereview.appspot.com/678211917:03
niemeyerrogpeppe: Thanks a lot17:05
rogpeppeniemeyer: if you were to review some of my branches today, these ones (particularly the first) are the ones i'd most like some feedback on. (i can't propose more because subsequent branches have more than one dependency)17:21
rogpeppe149-state-info-rootcert https://codereview.appspot.com/6855054/17:21
rogpeppe164-bootstrap-generate (https://codereview.appspot.com/6782119/17:21
rogpeppe166-juju-cert-flag https://codereview.appspot.com/6842088/17:21
niemeyerrogpeppe: Sounds good.. I'm on a call right now, but once I'm back I'll continue through the queue first17:22
rogpeppeniemeyer: thanks17:22
niemeyerrogpeppe: Will do as much as I can on the two hours remaining after that17:22
rogpeppeniemeyer: you've already reviewed almost all the first one - it just lacks a LGTM, i think17:23
niemeyerrogpeppe: Sounds good, will start with that then17:32
rogpeppeniemeyer: FWIW here's the branch dependency tree that takes us up to working TLS: http://paste.ubuntu.com/1389506/17:36
fssniemeyer: could you take a look at that iam CL later?18:04
niemeyerfss: Will do18:05
fssniemeyer: thanks18:05
fssniemeyer: this is the error when bootstrapin on sa-east-1: cannot query old bootstrap state: Get : 301 response missing Location header18:28
rogpeppei'm off for the evening.18:29
rogpeppe'night all18:29
niemeyerfss: Still on a call, but will be back in a bit18:36
niemeyerfss: That issue is known, and already being fixed I believe18:37
niemeyerrogpeppe: Have a good one18:37
fssniemeyer: oh, nice :-) thanks18:43
niemeyerfss: https://code.launchpad.net/~dave-cheney/juju-core/052-environs-ec2-always-request-public-tools-from-us-east-1/+merge/13607718:44
fssniemeyer: nice18:46
fssniemeyer: also, could you improve the error message when public-bucket is not defined?18:47
fss$ juju bootstrap18:47
fsserror: cannot find tools: no compatible tools found18:47
niemeyerfss: Yeah, that'd be useful, and a nice simple task to get started with the workflow on the Go side, actually (hint! hint!) :-)18:48
fssniemeyer: sure, will do this. Looks like I can't develop juju-core on mac os :-( I'm setting up an instance for development18:49
fssniemeyer: I can't find what's the default message for required settings. do you have one? :-)19:02
niemeyerfss: Hmm19:18
niemeyerfss: What's the situation?19:18
niemeyerfss: You can find that kind of case in environs/config/config.go19:18
niemeyerfss: But I'm not entirely sure if that's what you're looking for19:18
fssniemeyer: I'm validating the presence of public-bucket19:19
fssniemeyer: I get some gofmt and govet errors when running lbox19:19
niemeyerfss: That's not a required setting19:20
fsshum19:20
niemeyerfss: I guess I misunderstood what you meant earlier19:20
niemeyerfss: Sorry about that19:20
niemeyerfss: You can use juju during development purely with a private bucket19:21
niemeyerfss: and there will be a default value for public-bucket19:21
fssniemeyer: oh, I see. So there's no need to improve this error message because it won't happen when a default value for public-bucket is defined19:22
* niemeyer breaks out.. will come back for a few more reviews later if I feel energized enough20:12

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