find or install suitable dependencies / maas + curtin with vivid image fails to import yaml
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
curtin |
Fix Released
|
Medium
|
Unassigned | ||
curtin (Ubuntu) |
Fix Released
|
Critical
|
Unassigned | ||
Trusty |
Fix Released
|
High
|
Unassigned | ||
Utopic |
Fix Released
|
High
|
Unassigned | ||
Vivid |
Fix Released
|
Critical
|
Unassigned |
Bug Description
=== Begin SRU Template ===
[Impact]
In its current state, maas is unable to install vivid/14.10 using curtin.
This is obviously quite serious as users using LTS server can then not
install the Ubuntu development release for testing.
The failure is fallout of there not being 'python2-yaml' in a maas ephemeral
image (which is used for curtin install environment). The fix is that
curtin is now able to run with either python2 or python3 and finds the
appropriate/
[Test Case]
Generally, the test case flow is:
* Install MAAS
* import boot resources using the 'daily' stream.
* attempt to install a node with vivid
* see install fail, with message about unable to find 'curtin.
I've documented and walked through installation of maas and use of
libvirt and qemu to test in
maas-1.7 http://
maas-1.5 http://
[Regression Potential]
The potential failure path is in one of 2 paths:
a.) curtin being broken on python3
b.) curtin's launcher selecting the wrong python
Curtin basically has 3 dependencies:
python (or python3)
python-yaml (or python3-yaml)
oauth or oauthlib
These are satisfied in the image by:
precise: python2 (which has no python3 executable)
trusty: python2 (which has python3 executable but no python3-yaml)
vivid: python3 (which has python2 executable but no python-yaml)
Oauthlib or oauth is satisfied by the same python (riding on dependencies of
cloud-init). curtin does not currently check for that library, but
missing library does not cause failure, just failure to report status
back to maas. That said, in all supported use cases it will be fine.
=== End SRU Template ===
curtin can run in python3 or python2. its only python dependency is yaml.
maas-images of 12.04 do not have python3.
maas-images of 15.04 do not have python-yaml (python2) future images might not have any python2.
right now maas invokes curtin thorugh cloud-init user-data. curtin packs itself into a self extracting executable, is transferred via user-data and invoked inside the image. Sending it through the user-data means that the maas server being updated is all that is necessary to deliver new curtin (rather than SRU to each release).
Right now, in vivid that means that curtin tries to run with python2 and thus fails to import yaml.
Basically curtin can't really depend on anything that isn't in ubuntu maas image (cloud-iamge derived). And, it doesn't get installed via apt.
A couple solutions here:
a.) a mechanism in curtin to run with python3 or python2, and just go on as is.
on new cloud-images curtin will get the python3-yaml (a dependency of cloud-init) and in older versions it would run with python2. A '$python -m curtin.checkdeps' would be run as a way to determine which python to run,
b.) get python-yaml into maas images and use python2.
c.) allow curtin to 'apt-get install' its deps.
note, this has the unfortunate dependency on doing that, and then having more io and network traffic and such during an install if the image doesn't contain python-yaml or other things.
Note, though, that curtin (or maas) changes that are made in order to support use of vivid would then need to be SRU'd, where as changes to the vivid image itself would not.
Related bugs:
* Bug 1434679: maas 1.5 does not know about vivid
description: | updated |
description: | updated |
Changed in curtin (Ubuntu): | |
status: | New → Confirmed |
importance: | Undecided → Critical |
status: | Confirmed → In Progress |
Changed in curtin: | |
status: | New → Confirmed |
importance: | Undecided → Medium |
Changed in curtin (Ubuntu Trusty): | |
status: | New → Confirmed |
Changed in curtin (Ubuntu Utopic): | |
status: | New → Confirmed |
Changed in curtin (Ubuntu Trusty): | |
importance: | Undecided → High |
Changed in curtin (Ubuntu Utopic): | |
importance: | Undecided → High |
Changed in curtin: | |
status: | Confirmed → Fix Committed |
description: | updated |
description: | updated |
i shoved an initial python3or2 attempt to lp:~smoser/curtin/trunk.py2or3