[06:52] <jtv> Does anyone know of a reason besides legacy tests why NodeGroup.objects.new should have the ability to create a NodeGroupInterface?
[07:05] <bigjools> nope
[07:05] <bigjools> I noticed that the other day - seems arse about face
[07:05] <jtv> Because it created trouble for me last night and so I wrote up a branch that removes it.
[07:05] <jtv> Not a small branch, mind you.
[07:06] <bigjools> the factory make_node_group_interface has no option to create a nodegroup, you have to supply it
[07:07] <jtv> Yes, I found that helpful.  Why do you bring it up?
[07:09] <bigjools> because it's the opposite of every other factory method
[07:12] <jtv> True.  But I ran into a bunch of cases where we didn't create an NGI because we wanted one, but because we needed to add one to a particular NG.
[07:12] <jtv> In some of those cases, I forgot to pass the nodegroup, and the factory protected me against that.  So it worked out well.
[07:16] <bigjools> jtv: oh I wonder - it might be because of the default interface
[07:16] <jtv> Hmm... right, that would get horribly confusing.
[07:17] <jtv> Or pointless, depending on implementation.
[07:17] <bigjools> these methods need better docs
[07:17] <jtv> Either "create this NGI, and a nodegroup, with its own NGI"; or "do the exact same thing as make_node_group"
[07:17] <bigjools> I'll do some reviewing in a short while, back in 10
[07:17] <jtv> I ran into a nasty bug in there, too: make_node_group generated the interface parameters, then called make_node_group_interface — which again created the interface parameters.
[07:23] <bigjools> \o/
[07:23] <bigjools> ok really back in 1-
[07:23] <bigjools> 10
[07:28] <gmb> KILL ME.
[07:29] <gmb> bigjools: Here I am.
[07:55] <lifeless> gmb: for a terrorist suspect, thats perhaps not the wisest thing to say :)
[07:58] <bigjools> gmb: I forgot what I wanted to tell you noqw
[07:58] <bigjools> now
[08:07] <rvba> bigjools: I'm happy to do the refactoring we talked about in the review (add a form instead of doing the validation manually in the API).
[08:09] <bigjools> rvba: you're happy to do my work for me?
[08:09] <rvba> bigjools: if you want to concentrate on the QA
[08:09] <bigjools> rvba: QA is done :)
[08:09] <rvba> All right then :)
[08:09] <bigjools> I even found a bug
[08:10] <bigjools> rvba: FWIW I think we need a ton more CI cases to exercise the API
[08:10] <bigjools> tonne - sorry you're metric
[08:11] <bigjools> and you may interpret that second part in both ways :)
[08:11] <rvba> heh
[08:12] <bigjools> rvba: I was on the fence with a form TBH, it was only a single parameter
[08:12] <bigjools> with no clear advantage (yet) to a form
[08:12] <rvba> Apart from better encapsulation, easier testing, etc.
[08:13] <bigjools> I reject your easier testing remark
[08:13] <bigjools> it would mean more tests
[08:15] <rvba> Not sure about that, you can test most of the cases at the form level, and only a handfull of them at the API level.  It will probably mean a couple more tests in total.  But the code will be cleaner and the tests faster (form tests are faster than full-fledged API tests).
[08:16] <bigjools> well it would be interesting to see how you'd do that
[08:16] <bigjools> I like the behavioural testing here
[08:17] <bigjools> uh let's continue this shortly, I have to run to eat and get back in time for the call
[08:17] <rvba> And obviously using a form means you can reuse it in the UI.
[08:17] <bigjools> (again)
[08:17] <rvba> That's clearly the decisive factor.
[08:17] <rvba> Well, in my opinion at least.
[08:33] <bigjools> breakum-binns: ^^ lol
[08:34] <breakum-binns> FFS
[08:34]  * gmb probably needs to restart bip
[08:50] <bigjools> gmb: it has been said for some time that the easiest way to have a proxy is to use Quassel
[09:18] <jtv> Would it be acceptable for schema migrations to import code from the main tree?  I have a helper in there that I'd love to unit-test.
[09:25] <rvba> As long as the helper doesn't use the ORM, it's fine.
[09:27] <jtv> Great.  Thanks.
[09:27] <jtv> (Ceterum censeo that we really should have a utilities package)
[10:19] <rvba> jtv: bigjools: https://code.launchpad.net/~rvb/maas/bug-1336709/+merge/225281
[10:19] <bigjools> looking
[10:20] <jtv> rvba: I already had a fix for that lint landing.
[10:20] <jtv> But in landing it hit... can you guess which bug?
[10:20] <rvba> heh
[10:21] <jtv> I think there may be more affected tests... let me look.
[10:25] <jtv> rvba: I noted another failing test on the MP.
[10:25] <jtv> Oh good, and now I hit another completely unrelated spurious failure.  It's Big Red Button day.
[10:28] <rvba> bigjools: A test that pass with the exception of an assertion is a failing test (at least in my book).
[10:29] <bigjools> rvba: what?
[10:29] <rvba> "Did you write and run the test before adding this code?  Because the test would have passed (with the exception of the exception text) because there's already an assertion in the underlying allocate_new."
[10:30] <bigjools> rvba: what you wrote doesn't match what I wrote :)
[10:30] <rvba> bigjools: what?
[10:30] <bigjools> maybe I confused things by using the word exception with two different meanings
[10:30] <bigjools> rvba: to put it another way:
[10:30] <rvba> You said: 'the test would have passed'
[10:30] <rvba> This is wrong.
[10:31] <bigjools> no it's not
[10:31] <bigjools> hang on
[10:31] <bigjools> if the assertion for the exception *text* was there it would have passed
[10:31] <bigjools> or if the text matched the exception text in the underlying assertionerror
[10:31] <bigjools> the change and its test are irrelevant IMO
[10:32] <rvba> no it's not: yes it is
[10:32] <rvba> I guess I'm missing something
[10:32] <bigjools> rvba: you would get an assertion error without the check
[10:32] <bigjools> the check you added, I mean
[10:32] <rvba> But with the wrong message
[10:32] <rvba> That's my point
[10:33] <bigjools> I disagree
[10:33] <bigjools> it's a perfectly cromulent message
[10:33] <bigjools> you're adding the same check up the call stack
[10:33] <bigjools> it's pointless
[10:33] <bigjools> you get a stack trace out of the original one
[10:34] <bigjools> which will help pinpoint where you went wrong
[10:34] <bigjools> (as this is a programming error)
[10:34] <rvba> I see your point.  But I think the message you get should be improved.
[10:34] <bigjools> ok, but why?
[10:35] <bigjools> this is a programming error
[10:35] <bigjools> not a user-facing error
[10:35] <jtv> Maybe the docstring for claim_static_ip should say that this type is not accepted.
[10:36] <jtv> Because as it is, that restriction is hidden underneath, but shows up as an assertion error.
[10:36] <rvba> Right.
[10:36] <rvba> At the very least the docstring for claim_static_ip should be updated.
[10:37] <jtv> The message tells a developer "you must pass a user" — to a function that doesn't accept one.
[10:39] <rvba> But bigjools has a point, since this is a programming error, the stacktrace is the most important information here.
[10:39] <bigjools> I agree with the docstring update
[10:40] <bigjools> that's why I mentioned it in the review :)
[10:42] <rvba> Branch is landing.
[10:44] <jtv> Argh.  And yet another test that is affected: maasserver.models.tests.test_node.NodeTest.test_delete_node_also_deletes_related_static_IPs
[10:46] <jtv> rvba: will your branch fix the two other affected tests that I mentioned on the MP?
[10:47] <rvba> jtv: should do
[10:50] <jtv> rvba: argh, no, it doesn't fix the one in test_node.py.  :-(
[10:51] <jtv> I'm chasing down two other spurious test failures that I've been hitting today.  This is a not a good day for landings.
[11:29] <schegi_> hey anyone here who could help me with an cloud-init-nonet issue???
[11:42] <rvba> jtv: you're right, I'm fixing the one in test_node.py now…
[11:43] <jtv> 4 failed landings, due to spurious test failures, on a lint branch...  :(
[11:43] <rvba> :/
[12:05] <rvba> jtv: I can't reproduce the failure in test_node.py
[12:29] <jtv> rvba: I just ran it a few dozen times and got multiple failures.
[12:34] <rvba> jtv: I'm running:  ./bin/test.maas src/maasserver/models/tests/test_node.py:NodeTest.test_delete_node_also_deletes_related_static_IPs
[12:34] <rvba> Is this what you're running?
[12:34] <jtv> I'm not seeing it on trunk either now...
[12:34] <jtv> Yes, that looks like the test I ran.
[12:34] <rvba> I've run it more than 50 times without seeing a failure.
[12:35] <jtv> I ran it a few hundred times just now, and... no more failures.  I hope I didn't paste the wrong test name...
[12:36] <jtv> Yup, it _is_ the same test that failed for me earlier.
[12:36] <rvba> I'm running the whole test suite in a loop on canonistack to fish for other spurious failures.
[12:37] <jtv> Excellent.
[12:37] <jtv> I've been hitting ones related to IP ranges.  But it sounds like gmb has been looking into those.
[12:38] <gmb> jtv: I am
[12:38] <gmb> rvba ^^
[12:38] <jtv> test_clean_ip_ranges_works_with_ipv6_ranges failed with "lower bound IP greater than upper bound"
[12:38] <gmb> jtv: That’s the one.
[12:38] <gmb> Seems like a trip into weirdness… we explicitly check in the factory that the lower bound is < the upper bound.
[12:39] <jtv> And test_new_creates_interface failed with "{u'static_ip_range_low': [u'Enter a valid IPv4 or IPv6 address.'], u'static_ip_range_high': [u'Enter a valid IPv4 or IPv6 address.']}|
[12:39] <gmb> But it looks like it failed for IPv6, so maybe there’s some associated weirdness.
[12:39] <jtv> One problem may be that get_random_ipv6_address returns an IPAddress whereas the IPv4 equivalent returns a unicode.
[12:39] <gmb> jtv: It doesn’t anymore, does it? I thought I’d fixed that.
[12:39] <gmb> (So they both returned unicode)
[12:42] <gmb> jtv: Besides, IPRange.__init__() converts upper and lower bounds to ints when it does the comparison.
[12:43] <gmb> jtv: But I’ve realised that we don’t actually check for lower_bound > upper_bound *at all* anyway, so I’ll fix that while I’m here.
[13:31] <gmb> rvba, allenap, jtv: I’ve got a branch that partially addresses bug 1336617: https://code.launchpad.net/~gmb/maas/bug-1336617/+merge/225325
[13:31] <allenap> gmb: I hath claimed it.
[13:32] <gmb> allenap: Cool. This will at least allow us to see what actually went wrong, and also handle the problem properly (previously reversed bounds would cause an unhandled AddrFormatError).
[13:48] <blake_r> rvba: django won't let me set the label in the model. "got an unexpected keyword argument 'label'"
[13:48] <blake_r> rvba: so I need the form filed in the LicenseKey field, correct?
[13:49] <rvba> blake_r: otp, just one sec
[13:49] <blake_r> rvba: np
[14:00] <rvba> blake_r: isn't https://docs.djangoproject.com/en/dev/ref/models/fields/#verbose-name what you're looking for?
[14:01] <blake_r> rvba: okay, didn;t know it used a different kwarg
[14:01] <blake_r> rvba: thanks
[14:11] <rvba> jtv: I see on the 'Investigate: arp' card that you found a way to query the ARP table for both IPv6 and IPv4 addresses.  Is this actually implemented or should I file a card for this?
[14:18] <jtv> rvba: yes, it's implemented — although only in one direction.
[14:18] <jtv> The other direction was neither as easy nor as urgent.
[14:21] <rvba> jtv: all right, cool.
[14:32] <blake_r> rvba: finished fixing license-key-form if you could give it another look
[14:33] <rvba> blake_r: sure, doing that now
[14:33] <blake_r> rvba: awesome, thanks
[14:50] <jtv> Arrrgh...  I've been trying to define a required model field with a matching but non-required form field.
[14:50] <jtv> And a form clean_<field> that provides a default.
[14:50] <jtv> But the form tests keep failing because the model field is left blank.
[14:51] <william_home> Hi, could someone point me in the right direction for working around or solve  https://bugs.launchpad.net/maas/+bug/1288502
[14:51] <jtv> william_home: not solved yet, I'm afraid.  :(
[14:52] <jtv> Best I can think of for now is to set up a transparent proxy...
[14:52] <william_home> i'm new to the maas thing but we are in the process off setting up maas / juju / openstack on a site where any internet connection is disallowed so i have to do it using a local mirror
[14:54] <william_home> jtv: if we wanna solve this issue could you point me to the packages / images which are responsible for commisioning a node so i can look into it?
[14:54] <l1fe> is there any way to have the maas controller also be a maas node?
[14:54] <jtv> life: I don't think there is.
[14:55] <jtv> william_home: a lot of this is in the "commissioning snippets."
[14:55] <jtv> They're in etc/maas/templates/commissioning/user-data/snippets
[14:55] <jtv> Those get sent to the node and executed there.
[14:55] <jtv> Although I think the part that really needs the proxy is in the code, I think.  Hang on.
[14:56] <Solution-X> l1fe- im getting ready to run down the same path as you. first time with pxe booting, first time with openstack...itll be a fun journey
[14:56] <l1fe> Solution-X: ha, that's one way to describe it...
[14:58] <l1fe> I've installed an OpenStack cluster manually before, but figured I'd try something a little more...robust. Getting MAAS and Juju to work together has been rather taxing :)
[14:58] <blake_r> allenap: gmb: jtv: rvba: i would like to get you comments on this https://bugs.launchpad.net/maas/+bug/1319143
[14:59] <l1fe> feel free to ask me about all the different ways I've screwed up ^_^
[15:00] <Solution-X> lol, i wouldnt force you to write a novel
[15:00] <Solution-X> ive spent the last 5 years in vmware and looking to try something new, figured maas/juju/OS is "the next step"
[15:01] <Solution-X> as long as im going OS i might as well learn the hardware provisioning side of things so that i have a true setup
[16:05] <william_home> jtv: still hanging on :) do you have a pointer for me?
[17:14] <MilesDenver> Back at the Atlanta OpenStack Conference I heard that MaaS was going to be able to support PXE for CentOS, and I thought I heard Windows?
[17:14] <MilesDenver> anyone know how I can track this?
[17:20] <newell> MilesDenver, blake_r has been working on that.  He would probably be the best to answer.
[17:21] <blake_r> MilesDenver: both are supported in MAAS trunk, not released yet
[17:21] <MilesDenver> Oh, cool.  I can pull that when necessary
[17:56] <MilesDenver> If I delete a nodes from MaaS should it be able to recapture it on the next reboot?  Seems like Yes… but PXE just times out.
[17:58] <MilesDenver> nvm - it seems like it does work… I'm just not very patient.
[18:14] <breze431> Could anyone tell me how to pin a maas node to a certain dhcp ip when using maas as a dns/dhcp ?
[19:46] <si458> Hi all, i have got MAAS working happily with JUJU for an internal network :)
[19:46] <si458> how do i assign external IP address now to the JUJU charms that are deployed?
[19:46] <si458> each node has 2 lans attached, int network and ext network
[19:58] <si458> anybody?
[20:05] <si458_> anythin people?
[22:25] <MilesDenver> is there a way to add a second user with preseed.  I'm using MaaS to add puppet, but this results in puppet taking a uid that should belong to my NFS user.
[22:25] <MilesDenver> shared NFS really wants the same uid.
[22:26] <MilesDenver> preseed commands don't appear to specify a user 'd-i passwd/user-uid string 113'