From 64a0bcae5aacff2bf2445ab519b837b4e01cce60 Mon Sep 17 00:00:00 2001 From: Arata Notsu Date: Wed, 3 Apr 2013 19:31:09 +0900 Subject: 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 --- .../baremetal-node-create-req.json | 3 +-- .../baremetal-node-create-req.xml | 3 +-- .../baremetal-node-create-resp.json | 1 - .../baremetal-node-create-resp.xml | 1 - .../baremetal-node-create-with-address-req.json | 13 +++++++++++++ .../baremetal-node-create-with-address-req.xml | 11 +++++++++++ .../baremetal-node-create-with-address-resp.json | 21 +++++++++++++++++++++ .../baremetal-node-create-with-address-resp.xml | 19 +++++++++++++++++++ .../baremetal-node-list-resp.json | 1 - .../os-baremetal-nodes/baremetal-node-list-resp.xml | 1 - .../baremetal-node-show-resp.json | 1 - .../os-baremetal-nodes/baremetal-node-show-resp.xml | 1 - .../openstack/compute/contrib/baremetal_nodes.py | 18 +++++++++++++++--- .../compute/contrib/test_baremetal_nodes.py | 1 - .../baremetal-node-create-req.json.tpl | 1 - .../baremetal-node-create-req.xml.tpl | 1 - .../baremetal-node-create-resp.json.tpl | 1 - .../baremetal-node-create-resp.xml.tpl | 1 - .../baremetal-node-create-with-address-req.json.tpl | 13 +++++++++++++ .../baremetal-node-create-with-address-req.xml.tpl | 11 +++++++++++ ...baremetal-node-create-with-address-resp.json.tpl | 19 +++++++++++++++++++ .../baremetal-node-create-with-address-resp.xml.tpl | 19 +++++++++++++++++++ .../baremetal-node-list-resp.json.tpl | 1 - .../baremetal-node-list-resp.xml.tpl | 1 - .../baremetal-node-show-resp.json.tpl | 1 - .../baremetal-node-show-resp.xml.tpl | 1 - nova/tests/integrated/test_api_samples.py | 15 +++++++++++++++ 27 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json create mode 100644 doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml create mode 100644 doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json create mode 100644 doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml create mode 100644 nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json.tpl create mode 100644 nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml.tpl create mode 100644 nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json.tpl create mode 100644 nova/tests/integrated/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml.tpl diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.json index fa6455c49..389517ed7 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.json +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.json @@ -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 } -} \ No newline at end of file +} diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml index 3cbc3ea8a..a06b8d73f 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-req.xml @@ -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" -/> \ No newline at end of file +/> diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json index 0f176482c..fdb206560 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.json @@ -8,7 +8,6 @@ "memory_mb": 8192, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "service_host": "host", "terminal_port": 8000 } diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml index 20fb43b64..6a0b3a266 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-resp.xml @@ -4,7 +4,6 @@ pm_address="10.1.2.3" cpus="8" memory_mb="8192" - prov_mac_address="12:34:56:78:90:ab" service_host="host" local_gb="128" id="1" diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json new file mode 100644 index 000000000..82b6485b9 --- /dev/null +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.json @@ -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": "12:34:56:78:90:ab", + "terminal_port": 8000 + } +} diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml new file mode 100644 index 000000000..8065c41c1 --- /dev/null +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-req.xml @@ -0,0 +1,11 @@ + + diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json new file mode 100644 index 000000000..90ff4e371 --- /dev/null +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.json @@ -0,0 +1,21 @@ +{ + "node": { + "cpus": 8, + "id": 1, + "instance_uuid": null, + "interfaces": [ + { + "address": "12:34:56:78:90:ab", + "datapath_id": null, + "id": 1, + "port_no": null + } + ], + "local_gb": 128, + "memory_mb": 8192, + "pm_address": "10.1.2.3", + "pm_user": "pm_user", + "service_host": "host", + "terminal_port": 8000 + } +} diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml new file mode 100644 index 000000000..1432629ed --- /dev/null +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-create-with-address-resp.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json index d85f7c6f7..1b8d5a8ce 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.json @@ -16,7 +16,6 @@ "memory_mb": 8192, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "service_host": "host", "terminal_port": 8000 } diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml index feb3d6f1d..2afc47f67 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-list-resp.xml @@ -5,7 +5,6 @@ pm_address="10.1.2.3" cpus="8" memory_mb="8192" - prov_mac_address="12:34:56:78:90:ab" service_host="host" local_gb="128" id="1" diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json b/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json index c407c20a2..a8ba25ef9 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.json @@ -15,7 +15,6 @@ "memory_mb": 8192, "pm_address": "10.1.2.3", "pm_user": "pm_user", - "prov_mac_address": "12:34:56:78:90:ab", "service_host": "host", "terminal_port": 8000 } diff --git a/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml b/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml index 12d881a3f..438ee5921 100644 --- a/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml +++ b/doc/api_samples/os-baremetal-nodes/baremetal-node-show-resp.xml @@ -4,7 +4,6 @@ pm_address="10.1.2.3" cpus="8" memory_mb="8192" - prov_mac_address="12:34:56:78:90:ab" service_host="host" local_gb="128" id="1" 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 @@ + + 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 @@ + + + + + + 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\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) -- cgit