diff options
| author | Arata Notsu <notsu@virtualtech.jp> | 2013-04-03 19:31:09 +0900 |
|---|---|---|
| committer | Arata Notsu <notsu@virtualtech.jp> | 2013-04-11 16:31:11 +0900 |
| commit | 64a0bcae5aacff2bf2445ab519b837b4e01cce60 (patch) | |
| tree | 243170bab11e611acaac302b034387360a7fe491 /nova | |
| parent | 6b2af9c084754a1e678f741bfc6b97e13f1cf8a5 (diff) | |
| download | nova-64a0bcae5aacff2bf2445ab519b837b4e01cce60.tar.gz nova-64a0bcae5aacff2bf2445ab519b837b4e01cce60.tar.xz nova-64a0bcae5aacff2bf2445ab519b837b4e01cce60.zip | |
baremetal: Change node api related to prov_mac_address
Now prov_mac_address is going to be dropped from bm_nodes table. This patch
adjust api to the change.
A user is expected to create a node without specifying prov_mac_address, then add
an interface having the address to the node. However, for compatibility, a user
still can specify prov_mac_address when create a node. In this case, an interface
having prov_mac_address is automatically added to the node.
In response body of create, index and show, "prov_mac_address" field no longer
exists since they are showed as a member of "interfaces" fileld.
DocImpact
Change-Id: I6653829364b0a641442d45e766493180d6f2a880
Diffstat (limited to 'nova')
15 files changed, 92 insertions, 12 deletions
diff --git a/nova/api/openstack/compute/contrib/baremetal_nodes.py b/nova/api/openstack/compute/contrib/baremetal_nodes.py index b3f226039..f69db50f0 100644 --- a/nova/api/openstack/compute/contrib/baremetal_nodes.py +++ b/nova/api/openstack/compute/contrib/baremetal_nodes.py @@ -26,7 +26,7 @@ from nova.virt.baremetal import db authorize = extensions.extension_authorizer('compute', 'baremetal_nodes') node_fields = ['id', 'cpus', 'local_gb', 'memory_mb', 'pm_address', - 'pm_user', 'prov_mac_address', + 'pm_user', 'service_host', 'terminal_port', 'instance_uuid', ] @@ -129,9 +129,21 @@ class BareMetalNodeController(wsgi.Controller): def create(self, req, body): context = req.environ['nova.context'] authorize(context) - node = db.bm_node_create(context, body['node']) + values = body['node'].copy() + prov_mac_address = values.pop('prov_mac_address', None) + node = db.bm_node_create(context, values) node = _node_dict(node) - node['interfaces'] = [] + if prov_mac_address: + if_id = db.bm_interface_create(context, + bm_node_id=node['id'], + address=prov_mac_address, + datapath_id=None, + port_no=None) + if_ref = db.bm_interface_get(context, if_id) + node['interfaces'] = [_interface_dict(if_ref)] + else: + node['interfaces'] = [] + print node return {'node': node} def delete(self, req, id): diff --git a/nova/tests/api/openstack/compute/contrib/test_baremetal_nodes.py b/nova/tests/api/openstack/compute/contrib/test_baremetal_nodes.py index 76ebd8dec..23d06cad2 100644 --- a/nova/tests/api/openstack/compute/contrib/test_baremetal_nodes.py +++ b/nova/tests/api/openstack/compute/contrib/test_baremetal_nodes.py @@ -46,7 +46,6 @@ class BareMetalNodesTest(test.TestCase): 'pm_address': "10.1.2.3", 'pm_user': "pm_user", 'pm_password': "pm_pass", - 'prov_mac_address': "12:34:56:78:90:ab", 'terminal_port': 8000, 'interfaces': [], } diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.json.tpl index 82b6485b9..389517ed7 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.json.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.json.tpl @@ -7,7 +7,6 @@ "pm_address": "10.1.2.3", "pm_user": "pm_user", "pm_password": "pm_pass", - "prov_mac_address": "12:34:56:78:90:ab", "terminal_port": 8000 } } diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml.tpl index 8065c41c1..a06b8d73f 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml.tpl @@ -6,6 +6,5 @@ local_gb="128" pm_address="10.1.2.3" pm_user="pm_user" - prov_mac_address="12:34:56:78:90:ab" terminal_port="8000" /> diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json.tpl index a0d976b99..855b67150 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json.tpl @@ -6,7 +6,6 @@ "local_gb": 128, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "terminal_port": 8000, "instance_uuid": null, "id": %(node_id)s, diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml.tpl index 1c3700841..15d0640c9 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml.tpl @@ -6,7 +6,6 @@ local_gb="128" pm_address="10.1.2.3" pm_user="pm_user" - prov_mac_address="12:34:56:78:90:ab" terminal_port="8000" instance_uuid="None" id="%(node_id)s"> diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json.tpl new file mode 100644 index 000000000..458aa1282 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json.tpl @@ -0,0 +1,13 @@ +{ + "node": { + "service_host": "host", + "cpus": 8, + "memory_mb": 8192, + "local_gb": 128, + "pm_address": "10.1.2.3", + "pm_user": "pm_user", + "pm_password": "pm_pass", + "prov_mac_address": "%(address)s", + "terminal_port": 8000 + } +} diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml.tpl new file mode 100644 index 000000000..2c7273709 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml.tpl @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<node + service_host="host" + cpus="8" + memory_mb="8192" + local_gb="128" + pm_address="10.1.2.3" + pm_user="pm_user" + prov_mac_address="%(address)s" + terminal_port="8000" +/> diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json.tpl new file mode 100644 index 000000000..dae8d4373 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json.tpl @@ -0,0 +1,19 @@ +{ + "node": { + "service_host": "host", + "cpus": 8, + "memory_mb": 8192, + "local_gb": 128, + "pm_address": "10.1.2.3", + "pm_user": "pm_user", + "terminal_port": 8000, + "instance_uuid": null, + "id": %(node_id)s, + "interfaces": [{ + "id": %(interface_id)s, + "address": "%(address)s", + "datapath_id": null, + "port_no": null + }] + } +} diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml.tpl new file mode 100644 index 000000000..b036a1d47 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml.tpl @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<node + service_host="host" + cpus="8" + memory_mb="8192" + local_gb="128" + pm_address="10.1.2.3" + pm_user="pm_user" + terminal_port="8000" + instance_uuid="None" + id="%(node_id)s"> + <interfaces> + <interface + id="%(interface_id)s" + address="%(address)s" + datapath_id="None" + port_no="None"/> + </interfaces> +</node> diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json.tpl index 4a5e03701..a38bdf6d7 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json.tpl @@ -6,7 +6,6 @@ "local_gb": 128, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "terminal_port": 8000, "instance_uuid": null, "id": %(node_id)s, diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml.tpl index f8cfc3885..5bb51d4be 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml.tpl @@ -7,7 +7,6 @@ local_gb="128" pm_address="10.1.2.3" pm_user="pm_user" - prov_mac_address="12:34:56:78:90:ab" terminal_port="8000" instance_uuid="None" id="%(node_id)s"> diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json.tpl index 67a878a4a..dae8d4373 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json.tpl @@ -6,7 +6,6 @@ "local_gb": 128, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "terminal_port": 8000, "instance_uuid": null, "id": %(node_id)s, diff --git a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml.tpl b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml.tpl index 667024116..7fc10026e 100644 --- a/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml.tpl @@ -6,7 +6,6 @@ local_gb="128" pm_address="10.1.2.3" pm_user="pm_user" - prov_mac_address="12:34:56:78:90:ab" terminal_port="8000" instance_uuid="None" id="%(node_id)s"> diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index c0c908e07..5a2327bc0 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -2782,9 +2782,24 @@ class BareMetalNodesJsonTest(ApiSampleTestBase, bm_db_base.BMDBTestCase): return self._verify_response("baremetal-node-create-resp", subs, response, 200) + def _create_node_with_address(self): + address = '12:34:56:78:90:ab' + req_subs = {'address': address} + response = self._do_post("os-baremetal-nodes", + "baremetal-node-create-with-address-req", + req_subs) + subs = {'node_id': '(?P<id>\d+)', + 'interface_id': '\d+', + 'address': address} + return self._verify_response("baremetal-node-create-with-address-resp", + subs, response, 200) + def test_create_node(self): self._create_node() + def test_create_node_with_address(self): + self._create_node_with_address() + def test_list_nodes(self): node_id = self._create_node() interface_id = self._add_interface(node_id) |
