openstack provider: if use-floating-ip=true, uses incorrect compute API endpoint to determine available floating IPs
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Canonical Juju |
Fix Released
|
High
|
Heather Lanigan |
Bug Description
Trying to spin up a Juju controller in a public cloud with:
juju --debug bootstrap <name> \
--config image-metadata-
--config network=<uuid> \
--config use-floating-
Bootstrap fails.
Debug log shows these critical lines:
20:42:52 DEBUG juju.provider.
20:42:54 INFO juju.provider.
20:42:54 INFO juju.provider.
20:42:54 DEBUG juju.provider.
20:42:55 INFO juju.provider.
20:42:55 DEBUG juju.provider.
20:42:58 ERROR cmd supercommand.go:458 failed to bootstrap model: cannot start bootstrap instance: cannot allocate a public IP as needed: failed to allocate a floating ip
caused by: Resource at https://<hostname>
caused by: request (https://<hostname>
Now, compare to an API call for listing floating IPs:
nova --debug floating-ip-list
[...]
https://<hostname>
Compare the two API URLs, note they differ in v2.1 vs. v2.
"openstack catalog show compute" lists this publicURL:
publicURL: https://<hostname>
So the question is: where exactly does Juju dream up the v2.1 URL, which is then bound to fail with a 404?
Changed in juju: | |
status: | New → Triaged |
importance: | Undecided → High |
milestone: | none → 2.1.0-beta2 |
assignee: | nobody → Alexis Bruemmer (alexis-bruemmer) |
Changed in juju: | |
status: | Triaged → In Progress |
assignee: | Alexis Bruemmer (alexis-bruemmer) → Andrew Wilkins (axwalk) |
milestone: | 2.1.0-beta2 → 2.0.2 |
Changed in juju: | |
status: | In Progress → Fix Committed |
Changed in juju: | |
status: | Fix Committed → Fix Released |
Changed in juju: | |
status: | In Progress → Fix Committed |
Changed in juju: | |
status: | Fix Committed → Fix Released |
There was a recent change to do API version discovery. In some calls to OpenStack, Juju will look for an API version matching "v2", which will list all of the available API versions and select the most recent one matching the major version 2. The v2.1 comes from the version list endpoint (GET https://<hostname>:8774/).
It looks like your version of OpenStack supports a microversion >= 2.35, at which point the network API proxy endpoints have been removed. We'll need to update Juju 2.0.x to either force the use of v2.0 (probably simplest), or specify a microversion.
There is work underway to move us off using the deprecated network APIs, and use the Neutron service directly. I think this won't be landing until Juju 2.1.