/srv/irclogs.ubuntu.com/2012/09/25/#maas.txt

=== jtv1 is now known as jtv
=== allenap` is now known as allenap
* Daviey ponders mongo...08:50
Davieyyou know.. Ubuntu isn't ready for mongo do be a dependency..08:51
Davieybigjools: ^08:51
bigjoolsDaviey: fancy that08:53
bigjoolsjtv: how may I help?08:53
Davieybigjools: I assume current quantal version is the release that has been developed against ?08:57
Daviey(another project asked us to consider a major version update)08:57
bigjoolsDaviey: yeah - is someone pulling in mongo?08:57
Davieybigjools: Are we not?08:59
bigjoolsDaviey: AFAIK, no09:00
bigjoolsnot right now anyway09:00
Davieywe will, no?09:00
bigjoolsDaviey: possibly - I don't recall the exact discussions that jam1 had around this09:01
mgzDaviey: we decided to avoid the excitement09:01
mgzat least until 13.0409:02
Davieymgz: What what ding ding?09:02
mgzwhy exactly isn't ubuntu ready for a committed relationship with mongo though?09:02
mgzand it's us that needs to change, not them?09:02
Davieymgz: you make it sound like a marriage :)09:02
DavieyI think we should see other people..09:03
Davieymgz: The process for mongo to be in main, hasn't been started... that is all.09:03
mgzthere are plenty of other databases in the sea09:03
lifelesshah09:03
lifelessnot sure that that analogy holds09:03
=== jam1 is now known as jam
rbasakDo we have a preferred method of defining properties? Is @property def foo, then @foo.setter OK?09:14
mgzjam: https://codereview.appspot.com/656905309:18
bigjoolsrbasak: I think that's ok09:19
jammgz: hmm.. I don't see a way to sub to just the MP without commenting on it.09:19
jammgz: is it possible to call it just 'tags'? rather than 'maas-tags' ?09:20
jamI believe we want to match the search in our web UI with what you pass to juju, and putting 'maas-' in there is a bit annoying.09:20
jam(I recognize the idea of namespacing, though)09:20
jammgz: also here: https://codereview.appspot.com/6569053/patch/1/5 you seem to be removing 'maas-name' but it is still listed as supported in the other files09:22
jamor is it just that you fallback to None if not supplied?09:22
jammgz: and here: https://codereview.appspot.com/6569053/patch/1/6 I think we are going to go with 'tag1,tag2,tag3' style rather than tag1&!tag2|tag309:23
mgzjam: there's a linked lp proposal you can comment on if their funny code review doesn't play ball09:23
mgzhttps://code.launchpad.net/~gz/juju/add_maas_constraints/+merge/12620309:23
jamthe changes look good to me, just some small bits09:24
mgzI think in the context of the maas code, just using "tags" is fine, but it's so generic a term I don't like exposing it as a general constraint without getting more specific09:24
mgzthe removal of maas-name from those tests is just cleanup, it's not required and confuses what they're trying to test09:25
mgzmy first pass at this parsed and validated the tags on the juju side09:26
mgzbut I reverted to this approach of just passing a string through, because I'm not sure how far we want to go with tag combinations09:26
jammgz: well I know hazmat asked us to make it less specific, so the provider should query Maas for a list of acceptable tags.09:27
mgzcould just pick nodes with a superset of the tags specified, or could do full boolean logic09:27
jamless generic?09:27
mgzI think hazmat will be fine with maas returning good errors for non-existant tags or a bad tag string09:27
jamThe argument is that deploying is async, so by the time the provider responds, it is too late to inform the user of a typo/etc.09:27
mgzright, so provided we catch before acquire actually happens that a tag is bad, and return a 4XX straight away without going down to the cluster, I think that's fine09:28
mgz...I probably want to add some tests for that error case09:30
jammgz: shall we chat on mumble/09:38
jam?09:38
bigjoolsDaviey: should I reference the snakeoil certs as an example when I stick in SSL support? (so it just works as a demo)09:41
mgzjam: lets09:45
Davieybigjools: i'd say so09:46
Davieyhmm09:46
Davieywhat do you think?09:46
bigjoolsDaviey: WFM09:46
bigjoolsit works, anyway :)09:47
jammgz: http://ezix.org/project/wiki/HardwareLiSter#Howtointerpretlshwsoutput10:02
rbasakrvba: having some trouble migrating Node.architecture into Node._arch with a Node.architecture frontend property. It works, except NodeForm screws up. I think it's because it can't automatically generate the form from the model for the architecture property, since that's no longer an ORM field.10:56
rbasakrvba: can I perhaps make NodeForm.architecture an "extra" field which does map to Node.architecture's property but not automatically?10:57
rvbarbasak: sounds like a good idea.  You'll have to create a form field which handles that logic: display a single choice but stores into two fields.10:58
rbasakrvba: to start with I'm just trying to move architecture into _arch but with the same behaviour as before10:59
rbasakSo there's an abstraction layer that I can then modify. But all tests should pass at this stage10:59
rvbarbasak: let me have a look at NodeForm.11:00
rbasakrvba: I'm not clear on the exact mechanics between ModelForm, Form and Model11:00
rvbarbasak: it overrides the 'architecture' field so you'll need to rename that field as well.11:00
rvbarbasak: ModelForm is only a base class for forms that help creating forms from model definitions.11:01
rvbaThat's the 'Meta' part where you define on which model a ModelForm is based and which fields are taken from that model.11:02
rbasakrvba: yep - so if I remove fields = ( 'architecture') from NodeForm, it should still work? I'm a bit confused as to what purpose it's serving at the mment, since there's already an explicit architecture definition in NodeForm11:02
rvbarbasak: the ModelForm also handles the fact that when you save that form, an specific object is needed.11:03
rvbarbasak: s/needed/created/11:04
rbasakrvba: so if I remove fields=('architecture'), then the object will be created but without that field? How would I override that to add it again?11:05
rvbarbasak: having 'architecture' in fields (even if the form field is defined on the form itself) is to instruct the form that whatever comes out of the form's field 'architecture' is a field on the created/modified model object.11:07
rbasakrvba: thanks. I think I understand that part then, but don't understand the failure I'm getting11:08
rbasakrvba: lots of ValidationError: {u'architecture': [u'This field is required.']11:08
rvbarbasak: I think you want to create a multivalue field (https://docs.djangoproject.com/en/dev/ref/forms/fields/#multivaluefield).11:08
rvbarbasak: can I see the diff?11:08
rbasakrvba: http://paste.ubuntu.com/1226381/11:09
rvbarbasak: right, but NodeForm still has a required 'architecture' field.  Hence the validation failure.11:10
rbasakrvba: but I still require an 'architecture' to be set in the model11:10
rbasakrvba: ah. Is it that model_to_dict isn't returning an 'architecture' field?11:14
rbasakrvba: one failure is in NodeGroupInterfaceHandler.update for example. Perhaps it's not retrieving the architecture field, so when it tries to update it updates without one11:15
rvbarbasak: yep, something like that.  But I'm trying to work out if the problem is in Django itself (which would mean it can't work with python properties) or in how MAAS handles the forms in the API.11:16
rbasakrvba: sqlalchemy has a solution to this it calls hybrid properties, which allow derived attributes to be defined in the model and mapped properly.11:17
rbasakrvba: I found http://stackoverflow.com/questions/12217763/does-django-orm-have-an-equivalent-to-sqlalchemys-hybrid-attribute which suggests that django doesn't have an equivalent11:17
rvbarbasak: also, without the db migration in place, South hijacks the models definition so your new field is probably not even properly registered.11:24
rbasakrvba: I don't have a new field!11:25
rbasak(yet)11:25
rvbaRight, but I'm wondering if the change is still something that South needs to know about.11:25
rbasakok11:25
allenapmgz: You can self-review https://code.launchpad.net/~gz/maas/move_update_hardware_details_tests/+merge/126226 if you want; there's nothing controversial in there.11:25
rbasakrvba: looks like this might be an alternate approach to using properties: Challenger 60011:30
rbasakAarh11:30
rbasakhttps://docs.djangoproject.com/en/dev/howto/custom-model-fields/11:31
rvbarbasak: did you consider keeping the architecture field as is but have it populated with things like 'arch/subarch' and have two methods on the node to get just the arch or just the subarch?11:31
rbasakrvba: I thought it would be cleaner if everything apart from the model dealt with the architecture as a 2-tuple11:31
rbasakrvba: rather than adding another subarchitecture field11:31
rbasak(and needing to pass two values around all the time)11:32
rbasakBut perhaps this is more complicated than it first seemed11:32
rvbaBut what about storing both the arch and the subarch in the 'architecture' field?11:32
rbasakOh11:32
rbasakUsing a '/' as a separator?11:32
rvbaYes11:32
rvba'arch/subarch'11:33
rbasakThat would work too but I think even more ugly. At what layer would we translate to a 2-tuple? And if we don't translate to a 2-tuple, then code that needs to just match arch will have to split('/') and we'd end up with those all over the place11:33
rvbaWhat part of the code needs a 2-tuple?11:34
rvbaProbably only a fraction of the code.11:35
rvbaAll the rest of the code (UI/API/model) could deal with 'arch/subarch'.11:35
rbasakAny time I want to say "if arm", I'd need to say "if architecture.split('/')[0] == 'armhf'"11:36
rvbaIf the code that needs to do that is manipulating node objects, then this could be a method of Node.11:40
rbasakI suspect that the node object itself will be lost higher up in the call stack, and only the architecture field will be passed down11:43
rvbaYeah, probably.11:43
rbasakBut it's a trade-off, and implementing a 2-tuple may be too complicated11:43
rbasakThe only way clean way right now seems to be a django custom field11:43
rbasakIf overloading the string type is acceptable to the team, I'll happily do it that way11:44
rbasakallenap: ^^ your opinion please?11:44
* allenap looks11:45
rvbarbasak: the problem you're having right now is that the ModelForm only tries to save on the node object the fields that a) are listed in 'field' and b) correspond to a real DB field.11:46
rvbas/'field'/'fields'/11:47
rbasakrvba: I think I follow (just)11:47
rbasakrvba: so it seems that using a property on a Model in order to map derived fields is not so straightforward in django11:47
rvbaIndeed.11:47
rbasakrvba: I'm concerned that there will be other areas where doing it this way might be a problem in future even if we do manage to make it work11:48
rvbaAnd a custom field is only really helpful if you're trying to store a structure inside a single db column.11:48
rbasakah11:48
rbasakwell that eliminates that option then11:49
rbasakso it looks like overloading a string is the only option left11:49
rbasakI'll just do that then11:50
rbasakAt least it's easier even if it is ugly!11:50
rbasakUnless allenap has a better suggestion?11:50
rvbaI think this will be much more simple as a single field.11:51
allenaprbasak: I was thinking of something like http://paste.ubuntu.com/1226429/11:51
rvbaEven if it's slightly ugly.11:51
rvbaallenap: that's the cleanest possible in terms of db but it will make the form code complicated.11:52
allenapI didn't know how far back to read, so you might have discounted that idea already.11:52
rvbaBecause now you've got one field which is dependent on the other.11:52
rbasakallenap: yeah that's exactly what I tried, but it breaks model_to_dict11:52
allenaprvba: Does the form code have to be driven from the model definition, or can its "architecture" field be specially prepared?11:53
rbasakallenap: and it feels that trying to fix that up is a step too far, and will end up being more hacky than just overloading the string11:53
allenapYeah.11:53
rvbaallenap: it can be done at the form level.11:54
allenapJust put "arch/subarch" in the field, and have a couple of functions to get the arch and subarch out. I guess that was the intention behind subclassing str/unicode. Can Django be taught to always use a particular string class for a field?11:54
rvbaallenap: "subclassing str/unicode"?11:55
rbasakoooh11:55
allenaprvba: I thought that was what rbasak had suggested earlier with "overloading the string type".11:56
rbasakthat's not what I meant, but it's an interesting idea11:56
rbasakor just have an Architecture class which can be contructed with a string11:56
allenapIt would be nice to avoid impedance problems when dealing with Django's models, if we can.11:57
allenapCustom field type territory then.11:58
rbasakyeah11:58
rbasakbut it would work11:58
rbasakIs it worth the effort?11:58
rbasakOr can I just use a string for now?11:58
allenapAgain, not sure if the form machinery will cope.11:58
rvbaThe form machinery should be fine I think.11:59
allenaprbasak: Just use a string I think :)11:59
rbasakAlthough a custom field would save a db migration11:59
rbasakthough maybe we should do one anyway11:59
rvbaA db migration is really cheap.11:59
rbasakI presume we can do a migration even without a db schema change?12:00
rbasakupdate node set architecture=architecture + 'generic'12:00
rbasakupdate node set architecture=architecture + '/generic'12:00
rvbaYou want a datamigration (and not a schema migration).12:00
allenapI have to go and feed children, back later.12:00
rbasakok12:00
rbasakI think that's a decision then12:01
rbasakthank to both of you!12:01
rbasakthanks12:01
mgzthis is an error?12:06
mgzWhile: Installing repl. Getting distribution for 'amqplib>=0.6.1'.12:06
mgzError: Picked: amqplib = 1.0.212:06
mgzwhat is buildout trying to tell me?12:08
jtvmgz: it's configured not to pick its versions freely, yet the versions we specify are minima, not exact values.  We fixed it by relying on installed packages more.12:21
jtvRemoving the egg from your cache may help.12:22
mgzthat's not an egg, it's what precise installed I suspect12:24
jtvoh, precise12:24
mgzbut... it really can't do > properly? really?12:24
jtvIt's configured not to.12:24
jtvDon't ask me for the details; I don't know them.12:25
jamjtv: I think your patch is breaking Jenkins. Did you see the failures?12:25
jtvjam: not yet -- I'll have a look.12:25
jamhttps://jenkins.qa.ubuntu.com/job/maas-trunk/849/console d12:25
jamhas: u'refresh_workers' not in '--========12:25
jamin a 'test_start_up_calls_refresh_secrets"12:25
jamjtv: for what it is worth, that test fails locally for me as well.12:25
jamIt looks like it is a mix of your test plus allenap's change to use email12:26
jam(given that it is asserting a string is present in a mime encoded chunk)12:26
jtvIt sounds as if registration of tasks got messed up somehow12:28
mgzremoving the egg alas did not help, precise has 1.0.0+ds-1, buildout gets and installs 1.0.2 then complains that 1.0.2>=0.6.1 is false...12:29
jtvNo, trunk is for quantal now.12:30
jtvjam: ahhh, looks like something in the data presentation changed -- may have been Gavin's work on maascli.12:33
jamjtv: or his recent change to use the email module?12:34
jamI wouldn't usually expect to do 'content in mime_string'12:34
jtvdunno about that12:34
jam(given that mime_string might be base64 encoded)12:34
jtvYeah -- and mime is such a pain to deal with12:34
jtv:(12:35
jamjtv: since you're here, I'm trying to add a test that if you give bad data, we make sure the db stays consistent.12:35
jamI am able to trigger the DatabaseError12:35
jambut now I don't know how to rollback12:35
jtvotp though12:35
jamin order to inspect the db to make sure the content is consistent12:35
jamrvba: ^^12:35
jamI see there is 'transaction' objects in Django, do I just need to use it in the test suite?12:35
rvbajam: you need to use a special test case if you want to use transaction management in your test.12:36
jamrvba: well, there are 2 levels then. I also want to test that the API call doesn't bork things up in the middle, which means it might need a transaction object as well.12:37
rvbaThis is because the default testcase in Django uses rollback to wipe out the data between tests.  More details here: https://docs.djangoproject.com/en/dev/topics/testing/#django.test.TransactionTestCase12:37
jamrvba: ah, so none of the 'obj.save()' calls are actually being committed?12:38
jtvthat's not a commit12:38
jtvthat's just "write this to the database"12:38
jtvdoesn't care one hoot about transactions.12:38
jamjtv: https://docs.djangoproject.com/en/dev/topics/db/transactions/?from=olddocs (by default .save is committed in essentially autocommit mode)12:38
jtvThe same goes for the "commit" argument to form.save():  it's about writing stuff to the db, not about transactions12:38
jtvNot "essentially" autocommit, but actual autocommit.12:39
jtvIt's entirely divorced from transaction management.12:40
jamjtv: right, I was trying to ascertain what is being done in Maas.12:40
jtvOK12:40
jamI do understand the difference between a .save() and a .commit.12:40
rvbajtv: right, unless you're using the TransactionTestCase.12:41
jtv(Sorry, I'm in the next phone call, a friend who seems upset but there doesn't seem to be anything to do for him but let him tallk.  Very distracting)12:41
jamfor the API calls, what is the transaction logic? Autocommit? The "TransactionMiddleware" that is recommended.12:41
rvbaerr, jam ^12:41
allenapjtv: Want me to fix that failing test? I know what to do, and have a function ready to do it.12:41
jtvOh, that'd be great!12:41
rvbaallenap: since you're there, mgz seems to be having the same problem I had yesterday.12:41
allenaprvba: The amqp one?12:42
rvbaSince then I upgraded to Quantal and the problem is gone.12:42
rvbaallenap: yes12:42
allenapDamnable buildout.12:42
allenapmgz: Are you able to upgrade to Quantal, or at least use it on Canonistack?12:43
jamrvba: so is it as simple as importing maastesting.djangotestcase.TransactionTestCase? And not worry about the other setup code in maasserver.testing.testcase.TestCase.setUp() ?12:43
jamallenap: mgz is off to lunch. But he did mention it to me.12:43
jamI think it is a matter of: "why is running on P so horribly broken" vs12:44
jamI cannot run on Q12:44
allenapjam: That sounds like he's not blocked, phew :)12:44
jamI think it is a bit of 'I don't *want* to run on Q as well' but he mentioned being able to switch VMs.12:45
jtvjam: it should be as easy as changing TestCase classes, yes.  Just slower.12:45
rbasakrvba: so I'm think of this: http://paste.ubuntu.com/1226522/ - would this work for the web UI?12:46
jtvHowever we've been seeing some mysterious test failures with unusual invocations of the test suite, and those _seem_ to be related to TransactionTestCase.  So whatever you do, run the full test suite!12:46
rvbajam: Good point, you might need to create a class which inherits from the TransactionalTestCase and have the setup from maasserver.testing.testcase.TestCase.12:46
rvbarbasak: that should be ok.12:47
rbasakthanks - I'll continue12:47
jtvjam: about that pastebin -- I'm not sure the migration runs in a transaction, so breakage in mid-transaction might leave you with only some of the nodes updated.12:48
jtvOh, that's rbasak!12:49
jtvrbasak: don't know how much it matters but those node updates in your schema patch may run in autocommit.12:49
rbasakthat's insane12:50
rbasakwhose idea was it to make data migrations _not_ run in a transaction by default?12:50
jtvI'm not _sure_ they don't run in transactions.12:50
rbasakwhy would one ever not want to do that?!12:50
jtvThe django people do not seem to have much truck with the whole notion.12:50
jtvI hope my impression is just an exaggeration, but I hear the same from others.12:51
rbasakjtv: we're good: http://south.readthedocs.org/en/latest/migrationstructure.html#transactions12:51
jtvPhew.  Thanks, that's a load off my mind!12:53
jtvSouth != django :)12:53
jtvThere's another reason to be pleasantly surprised: don't know what it's like now, but transactionality of schema changes used to be a laughable concept in many databases.12:55
jtvallenap: out of interest, do you know which change broke my test?  And what is that fix you had lying around?12:56
allenapjtv: I changed the multipart mime stuff to use the built-in email stuff for generation, but owing to a "bug" in it, I had to ensure that everything is now base64 encoded so that I can post-process line-endings.12:59
allenapjtv: The reason for the change was unicode support.12:59
allenapjtv: The function that's lying around is parse_headers_and_body_with_django.12:59
jtvAh.  That means you understand more of MIME in python than most now.  Please while you're at it give us a better replacement for the standard library's MIME bits.  :)12:59
jtvAhhh nice.12:59
allenapHowever, that's a pita because it requires DJANGO_SETTINGS_MODULE, not something that's typically lying around in the pserv.13:00
allenapI HATE DJANGO.13:00
=== flacoste changed the topic of #maas to: 2 weeks until Final Freeze | Discussion of upstream development of Ubuntu's Metal as a Service (MAAS) tool | MAAS jenkins: https://jenkins.qa.ubuntu.com/job/maas-trunk/
jtvThere's no way to get the requirements out into... apiclient or something?13:09
mgzallenap: yup, I can upgrade, I just need to deal with scott's change to how cloud-init displays ssh fingerprint stuff13:16
rbasakmgz: will it be an issue if arch constraints start needing to specify "i386/generic" instead of just i386?13:18
rbasakThe reason is that armhf/highbank and armhf/armadaxp need to be distinguished13:19
mgzrbasak: wouldn't be an issue, but also not hard to match if only a main(?) arch is given and not a subarch13:20
rbasakmgz: it's a bit annoying as sql queries go, because we concluded above that we want to squeeze both into a single string field13:21
mgzso people could still use arch=amd64 as the constraint, and maas knows that amd64/generic satisfies that13:21
rbasakbut we could check for a prefix of arch + '/'13:21
mgzwell, for that case you can just expand the input13:22
rbasakit can't be farmed off to the db to process then though13:22
mgzand for arm, you can do much the same, treat "armhf" in the api as filter to ('armhf/highbank', 'armhf/armadaxp') or whatever the acceptable full values are13:22
rbasakOh, I see13:22
mgzhave a dict at the python level of what the short versions are in full13:23
rbasakright13:23
roaksoax_big/win 1113:40
allenapjtv: Got time for a review? https://code.launchpad.net/~allenap/maas/no-string-in-mime/+merge/12624814:03
jtvallenap: right after I answer nature's call14:04
allenapHah, ta.14:04
jtvallenap: nature and your MP have been answered.14:13
allenapjtv: Thanks :)14:15
jtvThanks for fixing my test.14:16
jtvhey there matsubara14:34
matsubarahi jtv15:01
jtvmatsubara: wanted to give you a heads up for a change I landed: a new maas-provision command that registers a cluster controller with the region controller.15:03
jtvWe're not using it yet, but it should work.15:03
matsubarajtv, ok15:03
jtvAssuming that celery is not running, you should be able to start the cluster controller by running "maas-provision start-cluster-controller <region-controller URL>"15:03
matsubarajtv, is this the work to make maas work across different subnet?15:04
jtvPart of it, yes.15:04
jtvIt lets us run multiple clusters.15:05
jtvThe nice thing is that the exact same registration procedure will work for existing cluster controllers that are rebooting, new ones that haven't been registered yet, and new ones that have just been approved.15:05
jtvCluster controller asks the region controller: "Hi, I'd like to work for you as a cluster controller.  Is that OK?"15:06
jtvRegion controller answers with either:15:06
jtv(a) Get lost, creep.  I don't know you.15:06
jtv(b) Still waiting for my human to make a decision.  Can you call me back in a minute or so?15:06
jtv(c) Sure buddy, and welcome!  Here's the information you need to connect to RabbitMQ.15:07
jtvIf the cluster was already known, it just immediately gets (c).15:07
Davieyb opens itself to brute force fwiw.. It confirms there is an account with that user.15:07
jtvDaviey: no account or user is implicated.15:07
Davieyso how does the client know the difference between a and b?15:08
jtvJust the http status code in the response.15:08
allenaprvba: Do you have time for a call to help me understand what I'm doing with this dns stuff?15:08
rvbaallenap: sure.15:08
jtvmatsubara: the important thing to know for the future is that we won't be starting an upstart celery service.  We'll be starting this new command, and once it gets a positive response, it will fire up celery.15:09
jtvOnce the cluster controller has been accepted, it sends the region controller a request: "now that I'm one of your cluster controller and am connected to the RabbitMQ channel, could you send each of your known cluster controllers their individual credentials etc. over rabbit?"15:11
allenapmatsubara: Hey there, can you change the `make check` line in Jenkins to `make offline=true check`?15:49
matsubaraallenap, yes, sure15:51
allenapmatsubara: Ta.15:51
matsubaraallenap, so, should it look like this: make distclean && make offline=true build && make offline=true check?15:57
allenapmatsubara: Yep.16:21
matsubaraallenap, ok, so it's been done. I take this should be applied for both maas jobs, right?16:21
allenapmatsubara: Yes, think so; I backported it to 12.04-nocobbler.16:22
matsubaracool16:22
=== matsubara is now known as matsubara-lunch
platypusfriendGreets17:15
platypusfriendI have a question about configuring maas-dhcp on a system with two network interfaces (I'd like my MAAS server to provision nodes on a private network)17:16
platypusfriendHow do I configure maas-dhcp to use my second interface? I wasn't able to find this answer in the documentation, or in a Google search.17:17
platypusfriendAdditionally I'm unable to use or install the maas-provision utility.17:21
platypusfriend$ maas-provision generate-dhcp-config -h maas-provision: command not found17:22
platypusfriend$ sudo apt-get install maas-provision Reading package lists... Done Building dependency tree        Reading state information... Done maas-provision is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.17:22
smoserroaksoax_, have you poked at all at commissioning ipmi stuff17:41
roaksoax_smoser: yeah... was just waiting a way to commit that stuff to finish it17:41
smoser?17:42
smosercan we chat here in 30  minutes?17:42
roaksoax_smoser: sure17:42
platypusfriendHas anyone been able to use maas-provision with 12.04.1?17:43
roaksoax_platypusfriend: precise's version of MAAS does not ship maas-provision17:51
roaksoax_platypusfriend: that's only in quantal17:51
platypusfriendaaahhh....17:51
platypusfriendty17:51
=== matsubara-lunch is now known as matsubara
=== roaksoax_ is now known as roaksoax
=== robbiew1 is now known as robbiew
roaksoaxwq/win 1222:26
roaksoaxbigjools: around already?22:26
bigjoolsroaksoax: it seems so22:27
bigjoolstwins woke up at $EARLY22:27
roaksoaxbigjools: hehe sounds like fun22:27
bigjoolsnot so much :)22:27
roaksoax:)22:28
roaksoaxbigjools: so do you want to go over the packaging stuff?22:28
bigjoolsyes gimme 1 min22:29
bigjoolsroaksoax: ok let's, err, rock :)22:35
roaksoaxbigjools: http://paste.ubuntu.com/1227561/22:36
roaksoaxbigjools: ok so overall it is looking good22:36
roaksoaxbigjools: now, if you see I've made a few changes. python-* should not really contain any binaries22:37
roaksoaxnor config files22:37
bigjoolsyeah I figured there would be some of that22:37
roaksoaxbigjools: now, celery...  where is it needed?22:37
bigjoolscluster controller22:38
bigjoolsthere's a wrapper that will start it up22:38
roaksoaxbigjools: so maas-region-controller does not need it at all?22:39
roaksoaxbigjools: nothing else needs the config?"22:39
bigjoolsnope22:39
roaksoaxbigjools: so this changes like: http://paste.ubuntu.com/1227581/22:41
bigjoolswhy did you make python-maas-provisioningserver conflict with python-django-maas?22:41
roaksoaxbigjools: now, maas-dns is to be installed only on the region, on the cluster, or both?22:41
bigjoolsonly region22:41
roaksoaxbigjools: check the versions of conflict. Any lower than the current 104922:42
roaksoaxbigjools: the reason is becuase provisioning server used to be part of python-django-maas and for upgrades to work, we need that22:42
bigjoolswhy does it need that?22:42
bigjoolsok22:43
roaksoaxok so maas-dns is *only* on the region22:44
bigjoolsyup22:44
bigjoolsroaksoax: argh22:44
bigjoolsone small fly22:44
roaksoaxwhat is it?22:44
bigjoolsthe region controller does need a celeryd22:44
bigjoolslet me try and explain22:45
bigjoolsthis is a little awkward and I'm not sure if it's the best way, but we have a concept of a "master" cluster22:45
bigjoolswhere the worker also handles the dns jobs22:45
bigjoolsit needs to install appropriately22:46
roaksoaxbigjools: right, so what's the difference?22:46
bigjoolsroaksoax: when it sets up the nodegroup it needs to have a special name22:46
roaksoaxbigjools: where is this being set?22:47
bigjoolsso maas generate_dhcp_config22:47
bigjoolswhich maas-dhcp calls right now22:47
bigjoolseven  if dhcp is not managed22:47
roaksoaxbigjools: right, so my questions remains, who needs celery?22:48
roaksoaxbigjools: python-maas-provisioningserver22:48
roaksoaxi pressume22:48
bigjoolsroaksoax: clusters and the region controller then, sorry I was not clear22:49
roaksoaxbigjools: right, but from the clusters and the region, who needs it exactly. Who needs the daemon running22:49
bigjoolsbut there's a requirement for a cluster controller as a "master"22:49
bigjoolswhich is on the region22:49
bigjoolsroaksoax: let me rewind a bit22:50
bigjoolsit's not a direct dependency of a region controller, but a region controller needs a master cluster controller somewhere, which needs celeryd22:50
bigjoolsmake sense?22:50
roaksoaxbigjools: yes, but my point being is this "maasserver/api.py" imports celery, and then, provisioningserver does22:51
bigjoolsroaksoax: so a region needs at least one cluster22:51
bigjoolsroaksoax: yes but the region doesn't run the daemon22:51
roaksoaxbigjools: that's what I needed to know22:52
roaksoaxbigjools: so cluster runs the daemon, both need python-celery22:52
roaksoaxand both need celeryconfig right?22:52
bigjoolsroaksoax: yes22:52
bigjoolsroaksoax: however see bug https://bugs.launchpad.net/bugs/105625022:53
ubot5Ubuntu bug 1056250 in MAAS "etc/celeryconfig.py is used by both the region controller code and the worker code." [Critical,Triaged]22:53
roaksoaxbigjools: ok so celeryconfig should go in a common package, i.e maas-common and the upstart job with the twisted daemon in maas-cluster-controller22:53
bigjoolsyes22:54
bigjoolswell the cluster is a little more complicated22:54
bigjoolsit needs to start two upstart jobs22:54
bigjools1. the existing pserv twisted daemon22:54
bigjools2. the new script that wraps celeryd22:54
bigjoolsI added the latter in this branch22:54
roaksoaxwhat script?\22:55
roaksoaxbigjools: ok so what else is common?22:56
bigjoolsmaas-cluster-controller.maas-celery.upstart is the new upstart22:57
roaksoaxah ok22:57
roaksoaxthat's fine then22:57
* bigjools thinks what else is common22:57
roaksoaxso we only need the celeryconfig and maas_local_celeryconfig.py in a common package22:57
bigjoolsyeah this is what I thought could go in the provisioningserver package :)22:57
bigjoolsbut you nixed that22:57
roaksoaxbigjools: yeah python-xyz packages usually don't contain config files22:59
roaksoaxat least i can't recall seeing one22:59
bigjoolsI learned something today22:59
roaksoaxbigjools: ok, now DHCP only on cluster23:00
roaksoaxright?23:00
bigjoolsyep23:01
roaksoaxbigjools: now, rsyslog.d, where will it be?23:01
bigjoolsroaksoax: NFI!23:01
bigjoolsthat one I didn't play with really, needed to talk about it23:01
roaksoaxok that's something to fiure out23:01
bigjoolsit's for syslog from the nodes right?23:01
roaksoaxbigjools: now, preseeds?23:01
roaksoaxbigjools: yes23:02
bigjoolsdepends where we want the log to go then, region or cluster?23:02
bigjoolslogs*23:02
roaksoaxbigjools: let's take care of other stuff first23:02
* bigjools spins the quantal roulette wheel daily updates23:02
bigjoolspreseeds are on region only23:02
roaksoaxbigjools: so the cluster will provide DHCP, tftp, right?23:03
roaksoaxbigjools: hold on... so when a node boots with the cluste,r the cluster will tell him "here's your preseed in the REGION?"23:03
bigjoolsroaksoax: no, the cluster controller fetches them over the api23:04
roaksoaxbigjools: ok, what about squid-deb-proxy?23:04
roaksoaxregion too?23:04
bigjoolsyeah23:04
bigjoolsthat one's a bit horrible23:04
roaksoaxok so I guess syslog also makes sense to be in region for now23:04
bigjoolsit is not scalable23:04
roaksoaxbigjools: well TBH, that's why mirrors are for :)23:05
roaksoaxbigjools: now there's a problem23:08
bigjools /o\23:08
roaksoaxbigjools: the problem is that in packagin we modify the config files in order to set the settings we want automatically right?23:08
roaksoaxbigjools: so everytime we upgrade, and the upstream config file differs from the installed one (pre-modification), it will prompt23:09
roaksoaxthe user23:09
roaksoaxto upgrade it23:09
bigjoolsyeah23:09
roaksoaxso we need to find a way to handle that gracefully23:09
bigjoolsand that is very very annoying23:09
roaksoaxindeed23:10
* bigjools stares at cups packaging23:10
roaksoaxand annother annoring thing is dbconfig-common23:10
roaksoaxbigjools: ok so thjis is what I've got so far: http://paste.ubuntu.com/1227614/23:11
roaksoaxbigjools: it would be usefull to have this branch in ~maas-maintainers so I can alsocommit to it23:11
bigjoolsroaksoax: let me work something out23:12
bigjoolsroaksoax: alternatively I can merge your branch if you have a copy23:12
bigjoolsprob easier in the long run23:12
roaksoaxbigjools: apply this patch so far :) http://paste.ubuntu.com/1227614/23:12
roaksoaxtake a look at it, and if you agree please merge it23:12
bigjoolshax0ring without a branch? :)23:12
bigjoolsoik23:12
bigjoolsok even23:13
bigjoolsroaksoax: ok changes pushed up, the diff will update soon23:15
roaksoaxbigjools: what comes to my head is find a way to determine when it has changed upstream automatically, and when that happens, simply move the old config file, display a message, and reconfigure things23:15
bigjoolsroaksoax: should we just write the new config to the side and leave a message?23:16
bigjoolslet the user merge later23:16
bigjoolsIdeally we won't amend the *local* configs23:16
roaksoaxbigjools: right, but pserv.yaml and txlongpoll.yaml have no local configs23:17
bigjoolsroaksoax: also see https://bugs.launchpad.net/ubuntu/+source/maas/+bug/105595123:17
ubot5Ubuntu bug 1055951 in maas (Ubuntu) "maas-dhcp has no sudoers permission to start maas-dhcp-server" [Undecided,New]23:17
bigjoolsyeah23:17
roaksoaxbigjools: and maas_local_settings has changed quite frequently23:17
bigjoolsit has, until it settles down :)23:17
roaksoaxbigjools: the fix for the bug above: https://code.launchpad.net/~andreserl/maas/packaging_update23:20
roaksoaxhttps://code.launchpad.net/~andreserl/maas/packaging_update/+merge/12635023:21
bigjoolsroaksoax: that was quicj!23:21
bigjoolsroaksoax: can you set a commit msgt23:21
bigjoolsmsg23:21
roaksoax:)23:21
roaksoaxdone23:22
roaksoaxalright, i'm off23:22
roaksoaxwill probably be back later23:22
bigjoolsroaksoax: nice one, thanks.  One more problem is that of upgrading from 12.0423:22
bigjoolsthe upgrade scripts are in maas-region-controller23:22
bigjoolsbut will be checking unknown versions23:22
bigjoolssince they used to be in maas23:22
bigjoolsbut we can chat when you get back23:23
roaksoaxalrighty. Will talk about that later23:25

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