/srv/irclogs.ubuntu.com/2014/07/02/#maas.txt

=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
=== vladk|offline is now known as vladk
=== gmb is now known as breakum-binns
=== vladk is now known as vladk|offline
=== vladk|offline is now known as vladk
=== jfarschman is now known as MilesDenver
=== CyberJacob|Away is now known as CyberJacob
jtvDoes anyone know of a reason besides legacy tests why NodeGroup.objects.new should have the ability to create a NodeGroupInterface?06:52
bigjoolsnope07:05
bigjoolsI noticed that the other day - seems arse about face07:05
jtvBecause it created trouble for me last night and so I wrote up a branch that removes it.07:05
jtvNot a small branch, mind you.07:05
bigjoolsthe factory make_node_group_interface has no option to create a nodegroup, you have to supply it07:06
jtvYes, I found that helpful.  Why do you bring it up?07:07
bigjoolsbecause it's the opposite of every other factory method07:09
jtvTrue.  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
jtvIn some of those cases, I forgot to pass the nodegroup, and the factory protected me against that.  So it worked out well.07:12
bigjoolsjtv: oh I wonder - it might be because of the default interface07:16
jtvHmm... right, that would get horribly confusing.07:16
jtvOr pointless, depending on implementation.07:17
bigjoolsthese methods need better docs07:17
jtvEither "create this NGI, and a nodegroup, with its own NGI"; or "do the exact same thing as make_node_group"07:17
bigjoolsI'll do some reviewing in a short while, back in 1007:17
jtvI 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:17
bigjools\o/07:23
bigjoolsok really back in 1-07:23
bigjools1007:23
=== breakum-binns is now known as gmb
gmbKILL ME.07:28
gmbbigjools: Here I am.07:29
=== jfarschman is now known as MilesDenver
lifelessgmb: for a terrorist suspect, thats perhaps not the wisest thing to say :)07:55
bigjoolsgmb: I forgot what I wanted to tell you noqw07:58
bigjoolsnow07:58
rvbabigjools: 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:07
bigjoolsrvba: you're happy to do my work for me?08:09
rvbabigjools: if you want to concentrate on the QA08:09
bigjoolsrvba: QA is done :)08:09
rvbaAll right then :)08:09
bigjoolsI even found a bug08:09
bigjoolsrvba: FWIW I think we need a ton more CI cases to exercise the API08:10
bigjoolstonne - sorry you're metric08:10
bigjoolsand you may interpret that second part in both ways :)08:11
rvbaheh08:11
bigjoolsrvba: I was on the fence with a form TBH, it was only a single parameter08:12
bigjoolswith no clear advantage (yet) to a form08:12
rvbaApart from better encapsulation, easier testing, etc.08:12
bigjoolsI reject your easier testing remark08:13
bigjoolsit would mean more tests08:13
rvbaNot 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:15
bigjoolswell it would be interesting to see how you'd do that08:16
bigjoolsI like the behavioural testing here08:16
bigjoolsuh let's continue this shortly, I have to run to eat and get back in time for the call08:17
rvbaAnd obviously using a form means you can reuse it in the UI.08:17
bigjools(again)08:17
rvbaThat's clearly the decisive factor.08:17
rvbaWell, in my opinion at least.08:17
=== gmb is now known as breakum-binns
=== breakum-binns is now known as gmb
=== gmb is now known as breakum-binns
bigjoolsbreakum-binns: ^^ lol08:33
breakum-binnsFFS08:34
=== breakum-binns is now known as gmb
* gmb probably needs to restart bip08:34
=== cobradevil is now known as william_W
=== jfarschman is now known as MilesDenver
bigjoolsgmb: it has been said for some time that the easiest way to have a proxy is to use Quassel08:50
jtvWould 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:18
rvbaAs long as the helper doesn't use the ORM, it's fine.09:25
jtvGreat.  Thanks.09:27
jtv(Ceterum censeo that we really should have a utilities package)09:27
=== CyberJacob is now known as CyberJacob|Away
=== jfarschman is now known as MilesDenver
rvbajtv: bigjools: https://code.launchpad.net/~rvb/maas/bug-1336709/+merge/22528110:19
bigjoolslooking10:19
jtvrvba: I already had a fix for that lint landing.10:20
jtvBut in landing it hit... can you guess which bug?10:20
rvbaheh10:20
jtvI think there may be more affected tests... let me look.10:21
jtvrvba: I noted another failing test on the MP.10:25
jtvOh good, and now I hit another completely unrelated spurious failure.  It's Big Red Button day.10:25
rvbabigjools: A test that pass with the exception of an assertion is a failing test (at least in my book).10:28
bigjoolsrvba: 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:29
bigjoolsrvba: what you wrote doesn't match what I wrote :)10:30
rvbabigjools: what?10:30
bigjoolsmaybe I confused things by using the word exception with two different meanings10:30
bigjoolsrvba: to put it another way:10:30
rvbaYou said: 'the test would have passed'10:30
rvbaThis is wrong.10:30
bigjoolsno it's not10:31
bigjoolshang on10:31
bigjoolsif the assertion for the exception *text* was there it would have passed10:31
bigjoolsor if the text matched the exception text in the underlying assertionerror10:31
bigjoolsthe change and its test are irrelevant IMO10:31
rvbano it's not: yes it is10:32
rvbaI guess I'm missing something10:32
bigjoolsrvba: you would get an assertion error without the check10:32
bigjoolsthe check you added, I mean10:32
rvbaBut with the wrong message10:32
rvbaThat's my point10:32
bigjoolsI disagree10:33
bigjoolsit's a perfectly cromulent message10:33
bigjoolsyou're adding the same check up the call stack10:33
bigjoolsit's pointless10:33
bigjoolsyou get a stack trace out of the original one10:33
bigjoolswhich will help pinpoint where you went wrong10:34
bigjools(as this is a programming error)10:34
rvbaI see your point.  But I think the message you get should be improved.10:34
bigjoolsok, but why?10:34
bigjoolsthis is a programming error10:35
bigjoolsnot a user-facing error10:35
jtvMaybe the docstring for claim_static_ip should say that this type is not accepted.10:35
jtvBecause as it is, that restriction is hidden underneath, but shows up as an assertion error.10:36
rvbaRight.10:36
rvbaAt the very least the docstring for claim_static_ip should be updated.10:36
jtvThe message tells a developer "you must pass a user" — to a function that doesn't accept one.10:37
rvbaBut bigjools has a point, since this is a programming error, the stacktrace is the most important information here.10:39
bigjoolsI agree with the docstring update10:39
bigjoolsthat's why I mentioned it in the review :)10:40
rvbaBranch is landing.10:42
jtvArgh.  And yet another test that is affected: maasserver.models.tests.test_node.NodeTest.test_delete_node_also_deletes_related_static_IPs10:44
jtvrvba: will your branch fix the two other affected tests that I mentioned on the MP?10:46
rvbajtv: should do10:47
jtvrvba: argh, no, it doesn't fix the one in test_node.py.  :-(10:50
jtvI'm chasing down two other spurious test failures that I've been hitting today.  This is a not a good day for landings.10:51
schegi_hey anyone here who could help me with an cloud-init-nonet issue???11:29
=== vladk is now known as vladk|offline
rvbajtv: you're right, I'm fixing the one in test_node.py now…11:42
jtv4 failed landings, due to spurious test failures, on a lint branch...  :(11:43
rvba:/11:43
=== vladk|offline is now known as vladk
=== jfarschman is now known as MilesDenver
rvbajtv: I can't reproduce the failure in test_node.py12:05
=== vladk is now known as vladk|offline
jtvrvba: I just ran it a few dozen times and got multiple failures.12:29
rvbajtv: I'm running:  ./bin/test.maas src/maasserver/models/tests/test_node.py:NodeTest.test_delete_node_also_deletes_related_static_IPs12:34
rvbaIs this what you're running?12:34
jtvI'm not seeing it on trunk either now...12:34
jtvYes, that looks like the test I ran.12:34
rvbaI've run it more than 50 times without seeing a failure.12:34
jtvI ran it a few hundred times just now, and... no more failures.  I hope I didn't paste the wrong test name...12:35
jtvYup, it _is_ the same test that failed for me earlier.12:36
rvbaI'm running the whole test suite in a loop on canonistack to fish for other spurious failures.12:36
jtvExcellent.12:37
jtvI've been hitting ones related to IP ranges.  But it sounds like gmb has been looking into those.12:37
gmbjtv: I am12:38
gmbrvba ^^12:38
jtvtest_clean_ip_ranges_works_with_ipv6_ranges failed with "lower bound IP greater than upper bound"12:38
gmbjtv: That’s the one.12:38
gmbSeems like a trip into weirdness… we explicitly check in the factory that the lower bound is < the upper bound.12:38
jtvAnd 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
gmbBut it looks like it failed for IPv6, so maybe there’s some associated weirdness.12:39
jtvOne problem may be that get_random_ipv6_address returns an IPAddress whereas the IPv4 equivalent returns a unicode.12:39
gmbjtv: It doesn’t anymore, does it? I thought I’d fixed that.12:39
gmb(So they both returned unicode)12:39
gmbjtv: Besides, IPRange.__init__() converts upper and lower bounds to ints when it does the comparison.12:42
gmbjtv: 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.12:43
=== jfarschman is now known as MilesDenver
=== jfarschman is now known as MilesDenver
gmbrvba, allenap, jtv: I’ve got a branch that partially addresses bug 1336617: https://code.launchpad.net/~gmb/maas/bug-1336617/+merge/22532513:31
ubot5bug 1336617 in MAAS "getRandomNetwork() setting upper bound IP lower than lower bound" [Critical,In progress] https://launchpad.net/bugs/133661713:31
allenapgmb: I hath claimed it.13:31
gmballenap: 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:32
blake_rrvba: django won't let me set the label in the model. "got an unexpected keyword argument 'label'"13:48
blake_rrvba: so I need the form filed in the LicenseKey field, correct?13:48
rvbablake_r: otp, just one sec13:49
blake_rrvba: np13:49
rvbablake_r: isn't https://docs.djangoproject.com/en/dev/ref/models/fields/#verbose-name what you're looking for?14:00
blake_rrvba: okay, didn;t know it used a different kwarg14:01
blake_rrvba: thanks14:01
rvbajtv: 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:11
jtvrvba: yes, it's implemented — although only in one direction.14:18
jtvThe other direction was neither as easy nor as urgent.14:18
=== jfarschman is now known as MilesDenver
rvbajtv: all right, cool.14:21
=== william_W is now known as william_home
blake_rrvba: finished fixing license-key-form if you could give it another look14:32
rvbablake_r: sure, doing that now14:33
blake_rrvba: awesome, thanks14:33
=== Solution-X|AFK is now known as Solution-X
jtvArrrgh...  I've been trying to define a required model field with a matching but non-required form field.14:50
jtvAnd a form clean_<field> that provides a default.14:50
jtvBut the form tests keep failing because the model field is left blank.14:50
william_homeHi, could someone point me in the right direction for working around or solve  https://bugs.launchpad.net/maas/+bug/128850214:51
ubot5Ubuntu bug 1288502 in MAAS "archive and proxy settings not honoured for commissioning" [High,Triaged]14:51
jtvwilliam_home: not solved yet, I'm afraid.  :(14:51
jtvBest I can think of for now is to set up a transparent proxy...14:52
william_homei'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 mirror14:52
william_homejtv: 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
l1feis there any way to have the maas controller also be a maas node?14:54
jtvlife: I don't think there is.14:54
jtvwilliam_home: a lot of this is in the "commissioning snippets."14:55
jtvThey're in etc/maas/templates/commissioning/user-data/snippets14:55
jtvThose get sent to the node and executed there.14:55
jtvAlthough I think the part that really needs the proxy is in the code, I think.  Hang on.14:55
Solution-Xl1fe- im getting ready to run down the same path as you. first time with pxe booting, first time with openstack...itll be a fun journey14:56
l1feSolution-X: ha, that's one way to describe it...14:56
l1feI'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_rallenap: gmb: jtv: rvba: i would like to get you comments on this https://bugs.launchpad.net/maas/+bug/131914314:58
ubot5Ubuntu bug 1319143 in MAAS "move supported operating system into cluster using RPC" [Critical,Triaged]14:58
l1fefeel free to ask me about all the different ways I've screwed up ^_^14:59
Solution-Xlol, i wouldnt force you to write a novel15:00
Solution-Xive spent the last 5 years in vmware and looking to try something new, figured maas/juju/OS is "the next step"15:00
Solution-Xas long as im going OS i might as well learn the hardware provisioning side of things so that i have a true setup15:01
william_homejtv: still hanging on :) do you have a pointer for me?16:05
=== Guest47111 is now known as jefferai
=== roadmr is now known as roadmr_afk
MilesDenverBack 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
MilesDenveranyone know how I can track this?17:14
newellMilesDenver, blake_r has been working on that.  He would probably be the best to answer.17:20
blake_rMilesDenver: both are supported in MAAS trunk, not released yet17:21
MilesDenverOh, cool.  I can pull that when necessary17:21
=== roadmr_afk is now known as roadmr
=== vladk|offline is now known as vladk
=== vladk is now known as vladk|offline
=== vladk|offline is now known as vladk
MilesDenverIf 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:56
MilesDenvernvm - it seems like it does work… I'm just not very patient.17:58
breze431Could anyone tell me how to pin a maas node to a certain dhcp ip when using maas as a dns/dhcp ?18:14
=== roadmr is now known as roadmr_afk
=== CyberJacob|Away is now known as CyberJacob
=== jfarschman is now known as MilesDenver
si458Hi all, i have got MAAS working happily with JUJU for an internal network :)19:46
si458how do i assign external IP address now to the JUJU charms that are deployed?19:46
si458each node has 2 lans attached, int network and ext network19:46
=== roadmr_afk is now known as roadmr
si458anybody?19:58
si458_anythin people?20:05
=== vladk is now known as vladk|offline
MilesDenveris 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
MilesDenvershared NFS really wants the same uid.22:25
MilesDenverpreseed commands don't appear to specify a user 'd-i passwd/user-uid string 113'22:26
=== CyberJacob is now known as CyberJacob|Away

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