[02:26] bigjools: complication with the specify-nodegroup-when-creating-node story is that we don't give users a way to identify nodegroups apart from uuids. [02:27] morning jtv [02:27] And good morning [02:27] yes, we briefly talked about that yesterday [02:27] which is why I said to use subnet [02:27] Which didn't work for cases where we don't manage dhcp. [02:28] it can, if the subnet is provided regardless [02:28] where provided means configured on nodegroup [02:28] Yes, that'd help. [02:28] did you have any other ideas? [02:29] Only things like “identify by uuid but show name and subnet in the UI.” I still haven't found a way to identify objects _in the API call_ based on something other than id though. [02:30] The form logic seems to mandate id as the key. [02:30] I'm trying to get around that. [02:31] oh smeg [02:31] Yeah. The convenience of frameworks is like the beauty of a Potemkin village. [02:31] Skin deep. [02:32] Also, always specifying the subnet feels like it's going to have widespread consequences. [02:33] it would be worth asking for more opinions on this [02:36] I already had a pre-imp with Raphaël. He said it was doable to use a different key for passing a nodegroup to the form, so I'm still searching. [02:38] I need lunch [02:38] back later [04:13] jtv: btw I sorted the package build problem [04:13] branch up for review [04:14] bigjools: whoo [04:14] https://code.launchpad.net/~julian-edwards/maas/packaging/+merge/125393 [04:15] not sure I like the tests themselves mind, they seem hard-coded to work in the qa lab [04:15] bigjools: reviewed [04:16] Yes, they are hardcoded to work in the qa lab. I think I reviewed that bit and said the same thing. But couldn't hold the whole thing up for that, given the circumstances. [04:25] afk for a bit. [04:53] Back. [05:01] me too [05:08] Great, then we're both back. [05:08] Wow, a quick round around the block can really clear the head. [05:08] yes [05:09] I keep skipping that to get work done, and then when there's finally time, it's dark and raining. [05:30] Making progress on select-nodegroup-for-node, thanks to postgres. [05:32] But it's like trying to hack your way into a voodoo ritual. [05:33] Which, in case you've never tried it, is mostly a matter of just trying things. [05:53] bigjools: currently working on getting the django form to do what I want; we'll also need to figure out what needs doing in order to get a subnet for every nodegroup. [05:54] jtv: we'll make it part of cluster registration [05:55] jtv: subnet will return many matches on NodeGroupInterface but fortunately one NodeGroup [05:55] Many, even? [05:56] BTW since it's easy, I'm making it accept any IP address within the nodegroup's subnet. So you can pass the node's IP, or the cluster manager's IP within the subnet, or the base address, or the broadcast address, or… [05:56] Avoids confusion about the bits that just don't matter. [05:57] broadcast address? [05:57] ok might be ok [05:58] I notice for example that Raphaël likes to write addresses like 192.168.1.1/24 where I prefer 192.168.1.0/24. The difference shouldn't matter. [05:59] \o/ I built a package! Thank you again. [05:59] :) [06:01] Now, one issue: how do I represent the nodegroups as labels in the UI, if the label is a subnet and the nodegroup may have multiple subnets? [06:01] labels? [06:01] Labels for the selection of a node's nodegroup. [06:01] In other words, what is the human-readable identification of a nodegroup? [06:02] I was thinking of showing subnet and name, but if there are multiple subnets… [06:04] hmmm [06:05] I'd just show first subnet/name [06:06] I could probably just show all, but I don't know how many subnets there might be per nodegroup. [06:06] I guess right now it's still just one. [06:06] get_managed_interface() is singular. [06:06] yer [06:09] I wonder why the lovely nodegroup field I added shows up when editing an existing node (when I don't want it) but not when creating a new one (when I do want it). [06:10] grar [06:10] jtv: I know a man who will know [06:10] * bigjools wonders why the maas-dhcp package depends on the maas package [06:11] !? [06:11] Shouldn't that be the other way around? [06:11] And then maas-dhcp can depend on maas-common? [06:11] no, there should be no dependency at all [06:12] Ah, right. Not if we want to be able to run appservers without master workers. [13:02] mgz: ping me when you are back from lunch, I decided to reverse the many-to-many to have node.tags rather than tag.nodes. [13:02] It felt more natural to say node.tags.add(tag) rather than tag.nodes.add(node) [13:03] jam: okay, will update my copy of your branch [13:03] mgz: I'm happy to review or just preliminary look over (and fix up) a branch that you have [13:07] jam: ta, will post things [13:12] allenap or rvba: can you take a look at jam's tag-tables mp and see if there's anything that you're not happy with? [13:12] this is the main bit of interface we'll actually be sticking with, everything else is more temporary [13:13] mgz: ok, I'll have a look. [13:20] mgz, jam: It looked good to me a day or two ago. rvba, any Django-expert reservations about tag-tables? [13:22] rvba, so did we decide what '--ip=' is supposed to do to mean when given to 'maas config_master_dhcp' [13:22] mgz: jam allenap, that change looks good to me. [13:24] ace, thanks guys [13:25] mgz, rvba: thanks, submitted. [13:25] hm, for migrations, should they be strictly linear? so, I should base my branch off any existing migration branches so we don't get two 0026-s? [13:26] mgz: i think allenap is the one to ask, but it does look that way to me [13:26] mgz: it's very important that you merge trunk first and regenerate the migration if necessary. [13:26] I'll pull and rebase then, thanks. [13:27] South puts the complete state of the models in every migration. It uses the last migration to compute diffs when you change a model. [13:27] I suppose you can see how wrong this can go :) [13:28] yeah, just looking at that, why record all models, even the completely unrelated ones? [13:29] Yeah, it's a bit stupid but even if South was smarter that would not solve all the potential problems. [13:31] mgz: the rule of thumb is that if you see someone created a migration while you were working on yours, you have to merge and *recreate the migration*. Rebasing won't be enough. [13:31] mgz: you have to change your needsfixing to approve [13:32] rvba: isn't it possible to rm *my_migration, 'bzr merge theirs/trunk', bin/... --auto ? [13:32] mgz: because if the other migration added a field, your new migration (if you simply rebase) won't have that field and so the state in the latest migration will be wrong (that new field will be missing). [13:32] jam: absolutely. [13:32] That's what I meant by 'recreate the migration' [13:33] jam: didit. [13:50] allenap, rvba, mgz: I'm looking at adding an API equivalent to Nodes.list() for Tag.list() [13:50] I'm noticing that nodes have some NODE_PERMISSION.VIEW etc stuff. [13:50] should we be setting ownership for tags similarly? [13:51] hm, I'd say not === cmagina_ is now known as cmagina [13:51] tags are an adminny thing, but don't really have ownership, whereas nodes may need to be queried by non-admin users [13:51] I think this will complicate things for little added benefit. [13:54] rvba: I definitely agree it will complicate things. I just don't know the Maas users model very well. [13:54] If it would be a problem that user A created a tag, and user B would have access to change it. [13:56] jam: is tag editing something that is accessible to all users? [13:56] rvba, I think not. [13:56] rvba: is tag editing something that should be restricted to specific users? If so, which ones? [13:57] I can give answers, but I don't have the depth of background to know for sure that they are good ones. :) [13:57] we can certainly say must be superuser or somehow marked as admin? [13:57] That sounds reasonable to me to restrict that to admin users. [13:58] But I can't say I have looked at the use case in great detail. [14:01] rvba: so there seems to be 'User.is_superuser' and 'User.is_staff' [14:02] jam: 'is_staff' means 'can access the admin site'. [14:02] jam: in MAAS, we only use 'is_superuser'. [14:02] right, which sounded like an admin to me [14:02] k [14:07] roaksoax: Hi Andres. It turns out we can land the branch we discussed yesterday which creates the rabbitmq user used for celery communications. Right now, both the celery worker and the MAAS server use the same file to get the broker credentials. So the change I'm proposing in https://code.launchpad.net/~rvb/maas/packaging.set-rabbitmq-creds/+merge/125248 can be applied right now. [14:09] roaksoax: I've added (upsteam) a file named contrib/maas_local_celeryconfig.py. That file is loaded from celeryconfig and should contain the location-specific BROKER_URL. It's that file that my change in the packaging modifies. [14:10] rvba: alright, I'll look at it later today [14:10] roaksoax: this works exactly as contrib/maas_local_settings.py works but of course I'll need you to help me out with the packaging branch and the testing as I might have missed some things. [14:10] roaksoax: cool, thanks a lot. [14:12] rvba: hold on [14:12] rvba: we are shipping a celeryconfig.py and now a maas_local_celeryconfig.py? [14:13] rvba: and that file is symlinked to usr/share/maas/celeryconfig.py [14:13] roaksoax: yes, I'm ok to change that it you can think of a better way, but this is exactly the same as what we've done with src/maas/settings.py and contrib/maas_local_config.py. [14:13] rvba: cant it just be the same file ? celeryconfig.py and maas_local_celeryconfig.py? [14:14] roaksoax: well, one is part of the package and the other one is populated at install time. [14:14] I thought this was the right way to do it. But I'm happy to do that differently if you think that's better. [14:15] roaksoax: maas_local_celeryconfig.py only contains the things that are specific to each installation, right now only the BROKER_URL param. [14:15] rvba: i'll take a look first, and then will let oytu know [14:15] roaksoax: all right. [14:15] rvba: so celeryconfig.py will be installed in usr/share/maas/ and maas_local_celeryconfig.py installed in /etc/maas and symlinked to usr/share/maas right? [14:16] roaksoax: yes. [14:16] roaksoax: celeryconfig.py is not meant to be changed by a user. [14:16] rvba: alright [14:17] allenap: ping === matsubara-afk is now known as matsubara [14:28] urk, datamigration hiccough, I need to transfer stuff from metadataserver to maasserver... which are managed seperately by south [14:28] is there something magic I need? [14:32] ...the south docs seem to cover it at least [14:38] anyone know a way to get nose to only run the tests associated with one test class? [14:38] I want to add my tests into test_api, but that is 200+ tests that I don't need to run every time. [14:39] the first arg should extend down from modules into test classes as per -s on bzrlib, no? [14:40] mgz: when I do it (as I think it would look) I get 0 tests run [14:40] it seems to only match at the Module leve [14:40] level [14:41] mgz: bin/test.maas --exclude=Node maasserver.tests.test_api.TestNodesAPI [14:41] for example [14:41] well, remove the --exclude, just a sec [14:41] yeah, still 0 [14:41] bin/test.maas maasserver.tests.test_api.TestNodesAPI [14:42] note that if you have a typo [14:42] such as [14:42] bin/test.maas maasserver.tests.test_api.TestNodesAPIXXXX [14:42] then it tells you no-such-attribute [14:42] ...that's no fun [14:43] mgz: http://nose.readthedocs.org/en/latest/usage.html looks like you need to use a : [14:43] bin/test.maas maasserver.tests.test_api:TestNodesAPI [14:49] jam: mgz: you can use ./bin/maas test src/maasserver/tests/test_api.py:TestNodeGroupAPI [14:49] or even, to run a particular test: ./bin/maas test src/maasserver/tests/test_api.py:TestNodeGroupAPI.test_method [14:49] rvba: yeah, you can use the python path, or the filename path, and then a :Class, it just took me a while to find the ':' magic. [14:50] jam: there is a note about that in HACKING.txt ;) [14:51] rvba: I don't suppose you know the exact form of the filenames in NodeCommissionResult [14:51] roaksoax: pong [14:52] I'm reading etc/maas/commissioning-user-data but my bash is not good enough to be confident that I understand the exact form [14:52] it looks like it should be 01-lshw.out, but will it be absolute including /tmp or does one of the bash magic things make it relative? [14:54] mgz: fargs="$fargs --file=${file##*/}" [14:54] I think that means strip all the beginning [14:54] everything up to a '/' [14:55] mgz: see man bash, and /## [14:55] (grep for ##) [14:56] thanks, and it's greedy with the double hash [14:56] mgz: also see the python code, which does files[os.path.basename(fpath)] = ... [14:57] that leaves a lot of open file handles lying around. [14:57] mgz: should I expose tag URIs by their tag name? or by their tag.id? [14:57] (nodes are expose by their system_id [14:58] which is probably closer to name than DB id) [14:58] the name seems preferable [14:59] mgz: no, sorry, my bash-fu is not strong enough for me to be really confident with that script ;) [14:59] mgz: using the name seems much better to me too. [15:01] allenap: apiclient needs only python-oauth or httplib2 too? [15:07] "The model 'nodecommissionresult' from the app 'metadataserver' is not available in this migration." [15:07] that is not encouraging... [15:08] roaksoax: I'll check [15:09] roaksoax: Only python-oauth right now, but it will soon require python-httplib2. [15:10] allenap: ok will update the package when that happesn [15:10] allenap: i separated apiclient from maascli [15:10] allenap: it *is* required by provisioningserver [15:10] roaksoax: Cool. [15:10] hopefully --freeze metadataserver is not harmful... [15:11] mgz: if you are curious: lp:~jameinel/maas/tag-list-api now has exposed a '/tags/' api and a '/tags//' api. They don't really do much yet, but it is a start. [15:11] i'll poke at it a bit more later, but it is time for dinner now. [15:12] jam: ace, will have a look [15:13] the sampledata doesn't include anything from metadataserver though, so I'm not sure how confident I am of this migration code [15:13] and migrations don't seem very testable... [15:14] allenap: cna we already start nodes from your cli? [15:26] rvba: around? [15:26] jtv: around [15:26] ? [15:26] allenap: around? [15:26] roaksoax: yep. [15:26] I take it no one minds if I add more sample data [15:27] rvba: were there any recent changes with the PXE templates? I'm getting AssertionError: No PXE template found in '/usr/lib/python2.7/dist-packages/provisioningserver/pxe'! [15:28] roaksoax: not that I know of… let me have a look at the commit history. [15:30] roaksoax: looks like this might be a side effect of the changes introduced in revision 1025. allenap, can you help us out here, I see you've reviewed that change…? [15:32] rvba: ok I figured it out, it seems due to the fact that when you start a node and the node is not allocated to anybody [15:32] the node still pxeboots [15:32] and before we had a poweroff thing i think [15:35] matsubara: the issue that you were seeing when booting and getting stuck, was on commissioning right? [15:36] roaksoax, enlisting [15:36] roaksoax, oh wait, you mean the ipmi thing? or the image issue? [15:37] matsubara: the image issue. I'm getting a similar issue with quantal images [15:40] roaksoax, the image issue happened during enlisting. It was due to some changes to kernel options passed on that smoser knows more about [15:41] matsubara: kyeah [15:41] alright [15:41] mine seems unrelated after all [15:42] roaksoax, what are you seeing ? [15:42] i am close to being able to have quantal images produced as 'daily' [15:43] all the changes are into archive except for 1 (mountall bug 643289) [15:43] Launchpad bug 643289 in nfs-utils (Ubuntu Precise) "idmapd does not starts to work after system reboot" [High,Triaged] https://launchpad.net/bugs/643289 [15:43] smoser: nothing really, my own dumbness i guess [15:43] smoser: your change to the console output made me think there was an error on quantal installer [15:45] ah. yeah. i can see that. [15:45] so we need to make that easily configurable. [15:45] as your usecase is not unreasonable [15:45] but in "hyperscale", i surely dont think anyone is going to be watching video consoles [15:45] indeed [15:45] and serial console is very likely to be loggable [15:49] smoser: do you know why libvirt might not be be serving DNS anymore? [15:50] what do you mean. [15:50] smoser: for some reason, the machines I deploy on libvirt, i.r. [15:50] no longer resolve [15:50] to the dns name [15:57] oh. you mean in vdenv ? [15:57] smoser: Yep [15:57] i'm not sure. i've not used in a long time. [15:57] it*should* work :) [16:03] yeah it was working [16:03] for some reason it no longer does [16:03] oh well [16:15] smoser: could you please? https://code.launchpad.net/~andreserl/maas/packaging_maas_client_improvements/+merge/125507 [16:23] roaksoax, can you clarify for me? [16:23] python -c 'import apiclient' [16:23] is that how you'd use this "apiclient" ? [16:23] because that is a flat out broken name. [16:24] smoser: that's how upstream has it [16:24] ie, 'python -c import maas_apiclient' [16:24] yeah, thats broken. [16:25] smoser: unless, that all gets installed as a private module [16:26] what do you mean ? [16:26] smoser: install it in /usr/share/maas [16:27] i'll open a bug on it. [16:27] its just bad though. [16:28] i agree, but that's what private modules in packaging terms are for I guess [16:28] though that isn't really that private [16:28] upstream maas has essentially claimed the names 'provisioningsever', 'metadataserver' 'maasserver' and now 'apiclient' [16:28] i'm perfectly fine with [16:28] python -c 'import maas.provisioningsever' [16:30] smoser: right, thought that's why we can change the installation path to be a private module rather than a public one [16:30] i don't know, however, how things will be affected [16:30] we'll definitely have things broken [16:31] https://bugs.launchpad.net/maas/+bug/1053507 [16:31] Ubuntu bug 1053507 in MAAS "maas installs python modules with out any namespacing" [Undecided,New] [16:31] smoser: but I agree with you, it should be maas.XYZ [16:31] maas.apiclient maas.provisioningserver etc etc [16:33] * roaksoax lunch === matsubara is now known as matsubara-lunch === matsubara-lunch is now known as matsubara