Support to getting managebale servers
Now Mogan has supported to getting managebale servers in Pike. This will introduce the funcation in moganclient. Change-Id: I4f055ad78496865cb3659b9f5a49114896b5f5c3 Implements: bp manage-existing-bms
This commit is contained in:
parent
cd878ca2b4
commit
57d952fe36
@ -101,3 +101,10 @@ BaremetalCompute availability zone
|
|||||||
|
|
||||||
.. autoprogram-cliff:: openstack.baremetal_compute.v1
|
.. autoprogram-cliff:: openstack.baremetal_compute.v1
|
||||||
:command: baremetalcompute availability zone *
|
:command: baremetalcompute availability zone *
|
||||||
|
|
||||||
|
==================================
|
||||||
|
BaremetalCompute manageable server
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. autoprogram-cliff:: openstack.baremetal_compute.v1
|
||||||
|
:command: baremetalcompute manageable server *
|
||||||
|
93
moganclient/osc/v1/manageable_server.py
Normal file
93
moganclient/osc/v1/manageable_server.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# Copyright 2017 Fiberhome, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
"""Mogan v1 manageable servers action implementations"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from osc_lib.command import command
|
||||||
|
from osc_lib import utils
|
||||||
|
|
||||||
|
from moganclient.common.i18n import _
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ListManageableServer(command.Lister):
|
||||||
|
"""List all manageable servers"""
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(ListManageableServer, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'--long',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=_("List additional fields in output")
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
bc_client = self.app.client_manager.baremetal_compute
|
||||||
|
|
||||||
|
if parsed_args.long:
|
||||||
|
# This is the easiest way to change column headers
|
||||||
|
column_headers = (
|
||||||
|
"UUID",
|
||||||
|
"Name",
|
||||||
|
"Power State",
|
||||||
|
"Provision State",
|
||||||
|
"Image Id",
|
||||||
|
"Resource Class",
|
||||||
|
"Ports",
|
||||||
|
"Port Groups"
|
||||||
|
)
|
||||||
|
columns = (
|
||||||
|
"uuid",
|
||||||
|
"name",
|
||||||
|
"power_state",
|
||||||
|
"provision_state",
|
||||||
|
"image_source",
|
||||||
|
"resource_class",
|
||||||
|
"ports",
|
||||||
|
"portgroups"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
column_headers = (
|
||||||
|
"UUID",
|
||||||
|
"Name",
|
||||||
|
"Power State",
|
||||||
|
"Provision State",
|
||||||
|
"Image Id",
|
||||||
|
"Resource Class"
|
||||||
|
)
|
||||||
|
columns = (
|
||||||
|
"uuid",
|
||||||
|
"name",
|
||||||
|
"power_state",
|
||||||
|
"provision_state",
|
||||||
|
"image_source",
|
||||||
|
"resource_class"
|
||||||
|
)
|
||||||
|
|
||||||
|
data = bc_client.manageable_server.list()
|
||||||
|
net_formatter = lambda s: json.dumps(s, indent=2, sort_keys=True)
|
||||||
|
formatters = {'ports': net_formatter,
|
||||||
|
'portgroups': net_formatter
|
||||||
|
}
|
||||||
|
return (column_headers,
|
||||||
|
(utils.get_item_properties(
|
||||||
|
s, columns, formatters=formatters) for s in data))
|
@ -24,6 +24,7 @@ from moganclient.common import base
|
|||||||
from moganclient.v1 import aggregate
|
from moganclient.v1 import aggregate
|
||||||
from moganclient.v1 import availability_zone
|
from moganclient.v1 import availability_zone
|
||||||
from moganclient.v1 import flavor
|
from moganclient.v1 import flavor
|
||||||
|
from moganclient.v1 import manageable_server
|
||||||
from moganclient.v1 import node
|
from moganclient.v1 import node
|
||||||
from moganclient.v1 import server
|
from moganclient.v1 import server
|
||||||
from moganclient.v1 import server_group
|
from moganclient.v1 import server_group
|
||||||
@ -74,6 +75,8 @@ class FakeBaremetalComputeV1Client(object):
|
|||||||
self.fake_http_client)
|
self.fake_http_client)
|
||||||
self.aggregate_node = aggregate.AggregateNodeManager(
|
self.aggregate_node = aggregate.AggregateNodeManager(
|
||||||
self.fake_http_client)
|
self.fake_http_client)
|
||||||
|
self.manageable_server = manageable_server.ManageableServerManager(
|
||||||
|
self.fake_http_client)
|
||||||
|
|
||||||
|
|
||||||
class FakeHTTPClient(object):
|
class FakeHTTPClient(object):
|
||||||
|
90
moganclient/tests/unit/osc/v1/test_manageable_server.py
Normal file
90
moganclient/tests/unit/osc/v1/test_manageable_server.py
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# Copyright 2017 Fiberhome, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
import json
|
||||||
|
|
||||||
|
import mock
|
||||||
|
|
||||||
|
from moganclient.osc.v1 import manageable_server
|
||||||
|
from moganclient.tests.unit import base as test_base
|
||||||
|
from moganclient.tests.unit import fakes
|
||||||
|
from moganclient.v1 import manageable_server as ms_mgr
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch.object(ms_mgr.ManageableServerManager, '_list')
|
||||||
|
class TestManageableServerList(test_base.TestBaremetalComputeV1):
|
||||||
|
def setUp(self):
|
||||||
|
super(TestManageableServerList, self).setUp()
|
||||||
|
self.cmd = manageable_server.ListManageableServer(self.app, None)
|
||||||
|
self.fake_ms = {
|
||||||
|
"uuid": "166f5efc-f1c8-421b-b909-47cea4e59f25",
|
||||||
|
"image_source": "755cac03-a460-4de0-8d8e-d1ac842768bf",
|
||||||
|
"name": "node-0",
|
||||||
|
"power_state": "power on",
|
||||||
|
"provision_state": "active",
|
||||||
|
"resource_class": "baremetal",
|
||||||
|
"ports": [{
|
||||||
|
"uuid": "935ff2f1-89ca-4d6e-b7ab-286c01dc40bb",
|
||||||
|
"address": "52:54:00:01:c6:db",
|
||||||
|
"neutron_port_id": "0c19889a-67f1-443a-85a9-21afcedcfc92"}],
|
||||||
|
"portgroups": [{
|
||||||
|
"neutron_port_id": None,
|
||||||
|
"address": "52:54:00:0e:00:ef",
|
||||||
|
"uuid": "5c84edb4-66f8-4199-aa57-6c08be362bbc"}]
|
||||||
|
}
|
||||||
|
self.fake_ms_obj = fakes.FakeResource(
|
||||||
|
manager=None,
|
||||||
|
info=copy.deepcopy(self.fake_ms),
|
||||||
|
loaded=True)
|
||||||
|
|
||||||
|
def test_list_manageable_server(self, mock_list):
|
||||||
|
arglist = []
|
||||||
|
verifylist = []
|
||||||
|
mock_list.return_value = [self.fake_ms_obj]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
mock_list.assert_called_once_with('/manageable_servers',
|
||||||
|
response_key='manageable_servers')
|
||||||
|
self.assertEqual(('UUID', 'Name', 'Power State', 'Provision State',
|
||||||
|
'Image Id', 'Resource Class'), columns)
|
||||||
|
self.assertEqual((("166f5efc-f1c8-421b-b909-47cea4e59f25",
|
||||||
|
"node-0", "power on", "active",
|
||||||
|
"755cac03-a460-4de0-8d8e-d1ac842768bf",
|
||||||
|
"baremetal"),), tuple(data))
|
||||||
|
|
||||||
|
def test_list_manageable_server_long(self, mock_list):
|
||||||
|
arglist = [
|
||||||
|
'--long',
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('long', True),
|
||||||
|
]
|
||||||
|
mock_list.return_value = [self.fake_ms_obj]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
mock_list.assert_called_once_with('/manageable_servers',
|
||||||
|
response_key='manageable_servers')
|
||||||
|
self.assertEqual(('UUID', 'Name', 'Power State', 'Provision State',
|
||||||
|
'Image Id', 'Resource Class', 'Ports',
|
||||||
|
'Port Groups'), columns)
|
||||||
|
p_str = json.dumps(self.fake_ms_obj.ports, indent=2, sort_keys=True)
|
||||||
|
pg_str = json.dumps(self.fake_ms_obj.portgroups, indent=2,
|
||||||
|
sort_keys=True)
|
||||||
|
self.assertEqual((("166f5efc-f1c8-421b-b909-47cea4e59f25",
|
||||||
|
"node-0", "power on", "active",
|
||||||
|
"755cac03-a460-4de0-8d8e-d1ac842768bf",
|
||||||
|
"baremetal", p_str, pg_str
|
||||||
|
),), tuple(data))
|
@ -18,6 +18,7 @@ from moganclient.v1 import aggregate
|
|||||||
from moganclient.v1 import availability_zone
|
from moganclient.v1 import availability_zone
|
||||||
from moganclient.v1 import flavor
|
from moganclient.v1 import flavor
|
||||||
from moganclient.v1 import keypair
|
from moganclient.v1 import keypair
|
||||||
|
from moganclient.v1 import manageable_server
|
||||||
from moganclient.v1 import node
|
from moganclient.v1 import node
|
||||||
from moganclient.v1 import server
|
from moganclient.v1 import server
|
||||||
from moganclient.v1 import server_group
|
from moganclient.v1 import server_group
|
||||||
@ -40,3 +41,5 @@ class Client(object):
|
|||||||
self.aggregate = aggregate.AggregateManager(self.http_client)
|
self.aggregate = aggregate.AggregateManager(self.http_client)
|
||||||
self.server_group = server_group.ServerGroupManager(self.http_client)
|
self.server_group = server_group.ServerGroupManager(self.http_client)
|
||||||
self.aggregate_node = aggregate.AggregateNodeManager(self.http_client)
|
self.aggregate_node = aggregate.AggregateNodeManager(self.http_client)
|
||||||
|
self.manageable_server = manageable_server.ManageableServerManager(
|
||||||
|
self.http_client)
|
||||||
|
28
moganclient/v1/manageable_server.py
Normal file
28
moganclient/v1/manageable_server.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Copyright 2017 Fiberhome, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
from moganclient.common import base
|
||||||
|
|
||||||
|
|
||||||
|
class ManageableServer(base.Resource):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ManageableServerManager(base.ManagerWithFind):
|
||||||
|
resource_class = ManageableServer
|
||||||
|
|
||||||
|
def list(self):
|
||||||
|
url = '/manageable_servers'
|
||||||
|
return self._list(url, response_key='manageable_servers')
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Support to list all manageable servers from Mogan. This will help users
|
||||||
|
to manage those existing servers using different drivers, like Ironic.
|
@ -72,6 +72,7 @@ openstack.baremetal_compute.v1 =
|
|||||||
baremetalcompute_aggregate_add_node = moganclient.osc.v1.aggregate:AggregateAddNode
|
baremetalcompute_aggregate_add_node = moganclient.osc.v1.aggregate:AggregateAddNode
|
||||||
baremetalcompute_aggregate_list_node = moganclient.osc.v1.aggregate:AggregateListNode
|
baremetalcompute_aggregate_list_node = moganclient.osc.v1.aggregate:AggregateListNode
|
||||||
baremetalcompute_aggregate_remove_node = moganclient.osc.v1.aggregate:AggregateRemoveNode
|
baremetalcompute_aggregate_remove_node = moganclient.osc.v1.aggregate:AggregateRemoveNode
|
||||||
|
baremetalcompute_manageable_server_list = moganclient.osc.v1.manageable_server:ListManageableServer
|
||||||
|
|
||||||
[build_sphinx]
|
[build_sphinx]
|
||||||
source-dir = doc/source
|
source-dir = doc/source
|
||||||
|
Loading…
x
Reference in New Issue
Block a user