Merge "Implementation of baremetal port create"
This commit is contained in:
commit
5825573288
|
@ -0,0 +1,65 @@
|
|||
#
|
||||
# Copyright 2015 Red Hat, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import logging
|
||||
|
||||
from cliff import show
|
||||
|
||||
from ironicclient.common import utils
|
||||
from ironicclient.v1 import resource_fields as res_fields
|
||||
|
||||
|
||||
class CreateBaremetalPort(show.ShowOne):
|
||||
"""Create a new port"""
|
||||
|
||||
log = logging.getLogger(__name__ + ".CreateBaremetalPort")
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(CreateBaremetalPort, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'address',
|
||||
metavar='<address>',
|
||||
help='MAC address for this port.')
|
||||
parser.add_argument(
|
||||
'--node',
|
||||
dest='node_uuid',
|
||||
metavar='<uuid>',
|
||||
required=True,
|
||||
help='UUID of the node that this port belongs to.')
|
||||
parser.add_argument(
|
||||
'--extra',
|
||||
metavar="<key=value>",
|
||||
action='append',
|
||||
help="Record arbitrary key/value metadata. "
|
||||
"Can be specified multiple times.")
|
||||
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self.log.debug("take_action(%s)" % parsed_args)
|
||||
baremetal_client = self.app.client_manager.baremetal
|
||||
|
||||
field_list = ['address', 'extra', 'node_uuid']
|
||||
fields = dict((k, v) for (k, v) in vars(parsed_args).items()
|
||||
if k in field_list and v is not None)
|
||||
fields = utils.args_array_to_dict(fields, 'extra')
|
||||
port = baremetal_client.port.create(**fields)
|
||||
|
||||
data = dict([(f, getattr(port, f, '')) for f in
|
||||
res_fields.PORT_DETAILED_RESOURCE.fields])
|
||||
|
||||
return self.dict2columns(data)
|
|
@ -36,6 +36,17 @@ BAREMETAL = {
|
|||
'links': []
|
||||
}
|
||||
|
||||
baremetal_port_uuid = 'zzz-zzzzzz-zzzz'
|
||||
baremetal_port_address = 'AA:BB:CC:DD:EE:FF'
|
||||
baremetal_port_extra = {}
|
||||
|
||||
BAREMETAL_PORT = {
|
||||
'uuid': baremetal_port_uuid,
|
||||
'address': baremetal_port_address,
|
||||
'extra': baremetal_port_extra,
|
||||
'node_uuid': baremetal_uuid,
|
||||
}
|
||||
|
||||
|
||||
class TestBaremetal(utils.TestCommand):
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
#
|
||||
# Copyright 2015 Red Hat, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import copy
|
||||
|
||||
from ironicclient.osc.v1 import baremetal_port
|
||||
from ironicclient.tests.unit.osc.v1 import fakes as baremetal_fakes
|
||||
|
||||
|
||||
class TestBaremetalPort(baremetal_fakes.TestBaremetal):
|
||||
|
||||
def setUp(self):
|
||||
super(TestBaremetalPort, self).setUp()
|
||||
|
||||
self.baremetal_mock = self.app.client_manager.baremetal
|
||||
self.baremetal_mock.reset_mock()
|
||||
|
||||
|
||||
class TestCreateBaremetalPort(TestBaremetalPort):
|
||||
def setUp(self):
|
||||
super(TestCreateBaremetalPort, self).setUp()
|
||||
|
||||
self.baremetal_mock.port.create.return_value = (
|
||||
baremetal_fakes.FakeBaremetalResource(
|
||||
None,
|
||||
copy.deepcopy(baremetal_fakes.BAREMETAL_PORT),
|
||||
loaded=True,
|
||||
))
|
||||
|
||||
# Get the command object to test
|
||||
self.cmd = baremetal_port.CreateBaremetalPort(self.app, None)
|
||||
|
||||
def test_baremetal_port_create(self):
|
||||
arglist = [
|
||||
baremetal_fakes.baremetal_port_address,
|
||||
'--node', baremetal_fakes.baremetal_uuid,
|
||||
]
|
||||
|
||||
verifylist = [
|
||||
('node_uuid', baremetal_fakes.baremetal_uuid),
|
||||
('address', baremetal_fakes.baremetal_port_address),
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
# DisplayCommandBase.take_action() returns two tuples
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
# Set expected values
|
||||
args = {
|
||||
'address': baremetal_fakes.baremetal_port_address,
|
||||
'node_uuid': baremetal_fakes.baremetal_uuid,
|
||||
}
|
||||
|
||||
self.baremetal_mock.port.create.assert_called_once_with(**args)
|
|
@ -8,6 +8,7 @@ features:
|
|||
* openstack baremetal node set
|
||||
* openstack baremetal node show
|
||||
* openstack baremetal node unset
|
||||
* openstack baremetal port create
|
||||
deprecations:
|
||||
- |
|
||||
Deprecating the following commands in favor of the new commands:
|
||||
|
|
|
@ -37,6 +37,7 @@ openstack.baremetal.v1 =
|
|||
baremetal_node_set = ironicclient.osc.v1.baremetal:SetBaremetalNode
|
||||
baremetal_node_show = ironicclient.osc.v1.baremetal:ShowBaremetalNode
|
||||
baremetal_node_unset = ironicclient.osc.v1.baremetal:UnsetBaremetalNode
|
||||
baremetal_port_create = ironicclient.osc.v1.baremetal_port:CreateBaremetalPort
|
||||
baremetal_set = ironicclient.osc.v1.baremetal:SetBaremetal
|
||||
baremetal_show = ironicclient.osc.v1.baremetal:ShowBaremetal
|
||||
baremetal_unset = ironicclient.osc.v1.baremetal:UnsetBaremetal
|
||||
|
|
Loading…
Reference in New Issue