Deprecate multinic, os-virtual-interfaces, and floating IP action APIs¶
https://blueprints.launchpad.net/nova/+spec/deprecate-multinic-proxy-api
The proxies APIs were deprecated in the Deprecate API Proxies spec which resulted in the 2.36 microversion. But the multinic, os-virtual-interfaces, addFloatingIP and removeFloatingIP APIs were missed in that change. This spec aims to describe the deprecation for them.
Problem description¶
multinic
The neutron implementation of Nova multinic API (under nova.network.neutronv2.api) is allocating one new fixed IP address to the instance’s existed interface in the specific network. The user only can input the network id which is used by existed interface, then the implementation is going to allocate one fixed IP address from existed subnets in that network. If there is only one subnet in the network, the new fixed IP address is just allocated from that subnet. If there are multiple subnets in the network, it always allocates fixed IP address from the subnet which is the first subnet item of the response from Neutron list subnets API. There isn’t clear use-case for this semantics. Also, this behavior is just proxy API for the Neutron API. The user can do the same thing with Neutron API as below:
# To list all subnets in the specific network
neutron subnet-list --network-id NETWORK_ID
# Update the port includes the existed subnet and fixedIP and the new subnet
neutron port-update --fixed-ip subnet-id=EXISTED_SUBNET_ID,ip_address=EXISTED_IP_ADDRESS --fixed-ip subnet-id=NEW_SUBNET_ID
In the API response of GET /servers/{uuid} and GET /servers/{uuid}/ips, there is Fixed IP address info. Due to Neutron will send out network-changed event when the port updated, that info also won’t be stale when the user adds new fixedIP to the instance through Neutron API directly.
os-virtual-interfaces
The os-virtual-interfaces
API has a single
GET /servers/{server_id}/os-virtual-interfaces
method to list virtual
interfaces for a server. This API is only implemented with nova-network and
results in a 400 error when using Neutron. nova-network has been deprecated
since the 14.0.0 Newton release and though not a proxy to an external service,
we deprecated several network resource APIs with the 2.36 microversion and this
falls under that same category for deprecation.
addFloatingIP, removeFloatingIP
The floatingip actions API is used to associate a floating IP with the port interface of an instance. The API supports both nova-network and neutron backends. Since nova-network is deprecated, we do not need this API anymore. For neutron, the API implementation is a kind of proxy of the neutron API.
To associate a floating IP with an instance by addFloatingIP API, the end user needs to do as below:
neutron floatingip-create EXT_NET_ID
nova floating-ip-associate FLOATING_IP_ID [--fixed-address FIXED_ADDRESS]
With neutron, the end user needs to do as below:
neutron floatingip-create EXT_NET_ID
neutron floatingip-associate FLOATING_IP_ID VM_PORT_ID
or
neutron floatingip-create EXT_NET_ID VM_PORT_ID
The instance’s floating IP info is also exposed in the Nova API. You can get an instance’s floating IP info from the addresses attribute of GET /servers/{uuid} and GET /servers/{uuid}/ips APIs. Those instance floating IP info is read from the instance network cache. If user associate floating to the instance’s interface with Neutron API directly, Neutron will send network-changed event to Nova, then Nova will update specific instance’s network info cache. This is obviously not atomic or fail-safe, and in the future we may rework the addresses field in the server representation but that is out of scope for this spec.
Use Cases¶
As a user, I want to add multiple fixed and/or floating IPs to my server instance and do it in a consistent and predictable way.
As a deployer, I don’t want to support broken compute APIs that are poor proxies to the networking service.
Proposed change¶
In a single microversion, deprecate the multinic, os-virtual-interfaces, addFloatingIP and removeFloatingIP APIs.
Requests to these APIs at the deprecation microversion or later will result in a 404 NotFound response.
Alternatives¶
Keep these proxies forever. This will increase the cost of the maintenance of Nova and slow down our ability to adapt to new features and requirements.
Data model impact¶
None
REST API impact¶
The following requests with the microversion or later will result in a 404 error response:
POST /servers/{server_id}/action
{
"addFixedIp": {
"networkId": 1
}
}
POST /servers/{server_id}/action
{
"removeFixedIp":{
"address": "10.0.0.4"
}
}
GET /servers/{server_id}/os-virtual-interfaces
POST /servers/{server_id}/action
{
"addFloatingIp" : {
"address": "10.10.10.10",
"fixed_address": "192.168.0.3"
}
}
POST /servers/{server_id}/action
{
"removeFloatingIp": {
"address": "172.16.10.7"
}
}
Security impact¶
None
Notifications impact¶
None
Other end user impact¶
The python API binding and CLI in python-novaclient for the following commands will be deprecated and capped under the new microversion:
nova add-fixed-ip
nova remove-fixed-ip
nova virtual-interface-list
nova floating-ip-associate
nova floating-ip-disassociate
If the user wants to use these CLIs or APIs, they should request with a version that is less than the new microversion.
Performance Impact¶
None
Other deployer impact¶
None
Developer impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
Alex Xu <hejie.xu@intel.com>
- Other contributors:
Matt Riedemann <mriedem.os@gmail.com>
Work Items¶
The following are all done under a single new microversion:
Deprecate the multinic, os-virtual-interfaces, addFloatingIP and removeFloatingIP APIs.
Deprecate and cap the CLIs and APIs listed in the Other end user impact section.
Dependencies¶
None
Testing¶
There will be in tree functional testing that these APIs do the right thing after this microversion and return 404s.
For Tempest, the following tests will need to be capped at the new microversion:
test_add_remove_fixed_ip
test_associate_disassociate_floating_ip
test_associate_already_associated_floating_ip
test_rescued_vm_associate_dissociate_floating_ip
test_server_basic_ops
test_minimum_basic_scenario
test_list_virtual_interfaces
There may be more tests that need to change in Tempest based on the new microversion, like negative tests related to the above positive tests. Also, some of the changes in the scenario tests may have duplicate coverage and could be consolidated.
Documentation Impact¶
Update the compute api-ref documentation to note the deprecation of the
multinic
, os-virtual-interfaces
, addFloatingIP
and
removeFloatingIP
APIs.
References¶
History¶
Release Name |
Description |
---|---|
Pike |
Introduced |