Add support for service status

Change-Id: I5349524d262ffcadf88b3c914f187dfc26563156
Depends-On: Iaf10d8486ac8015ecf9f394dfbf074bfb863fb78
This commit is contained in:
Endre Karlson 2016-02-24 13:11:08 +01:00 committed by Endre Karlson
parent 7b1caa5944
commit 05b396bfa1
5 changed files with 166 additions and 0 deletions

View File

@ -0,0 +1,46 @@
# Copyright 2016 Hewlett Packard Enterprise Development Company LP
#
# Author: Endre Karlson <endre.karlson@hp.com>
#
# 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 designateclient.tests import v2
class TestServiceStatuses(v2.APIV2TestCase, v2.CrudMixin):
RESOURCE = 'service_statuses'
def new_ref(self, **kwargs):
ref = super(TestServiceStatuses, self).new_ref(**kwargs)
ref["name"] = "foo"
return ref
def test_get(self):
ref = self.new_ref()
self.stub_entity("GET", entity=ref, id=ref["id"])
response = self.client.service_statuses.get(ref["id"])
self.assertEqual(ref, response)
def test_list(self):
items = [
self.new_ref(),
self.new_ref()
]
self.stub_url("GET", parts=[self.RESOURCE],
json={"service_statuses": items})
listed = self.client.service_statuses.list()
self.assertList(items, listed)
self.assertQueryStringIs("")

View File

@ -0,0 +1,87 @@
# Copyright 2016 Hewlett Packard Enterprise Development Company LP
#
# Author: Endre Karlson <endre.karlson@hp.com>
#
# 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 lister
from cliff import show
import six
from designateclient import utils
from designateclient.v2 import utils as v2_utils
LOG = logging.getLogger(__name__)
def _format_status(status):
status.pop("links", None)
# Remove unneeded fields for display output formatting
for k in ("capabilities", "stats"):
status[k] = "\n".join(status[k]) if status[k] else "-"
return status
class ListServiceStatusesCommand(lister.Lister):
"""List service statuses"""
columns = ['id', 'hostname', 'service_name', 'status', 'stats',
'capabilities']
def get_parser(self, prog_name):
parser = super(ListServiceStatusesCommand, self).get_parser(prog_name)
parser.add_argument("--hostname", help="Hostname", required=False)
parser.add_argument("--service_name", help="Service Name",
required=False)
parser.add_argument("--status", help="Status", required=False)
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.dns
cols = self.columns
criterion = {}
for i in ["hostname", "service_name", "status"]:
v = getattr(parsed_args, i)
if v is not None:
criterion[i] = v
data = v2_utils.get_all(client.service_statuses.list,
criterion=criterion)
for i, s in enumerate(data):
data[i] = _format_status(s)
return cols, (utils.get_item_properties(s, cols) for s in data)
class ShowServiceStatusCommand(show.ShowOne):
"""Show service status details"""
def get_parser(self, prog_name):
parser = super(ShowServiceStatusCommand, self).get_parser(prog_name)
parser.add_argument('id', help="Service Status ID")
return parser
def take_action(self, parsed_args):
client = self.app.client_manager.dns
data = client.service_statuses.get(parsed_args.id)
_format_status(data)
return six.moves.zip(*sorted(six.iteritems(data)))

View File

@ -21,6 +21,7 @@ from designateclient.v2.limits import LimitController
from designateclient.v2.nameservers import NameServerController
from designateclient.v2.recordsets import RecordSetController
from designateclient.v2.reverse import FloatingIPController
from designateclient.v2.service_statuses import ServiceStatusesController
from designateclient.v2.tlds import TLDController
from designateclient.v2.zones import ZoneController
from designateclient.v2.zones import ZoneExportsController
@ -97,6 +98,7 @@ class Client(object):
self.limits = LimitController(self)
self.nameservers = NameServerController(self)
self.recordsets = RecordSetController(self)
self.service_statuses = ServiceStatusesController(self)
self.tlds = TLDController(self)
self.zones = ZoneController(self)
self.zone_transfers = ZoneTransfersController(self)

View File

@ -0,0 +1,28 @@
# Copyright 2016 Hewlett Packard Enterprise Development Company LP
#
# Author: Endre Karlson <endre.karlson@hp.com>
#
# 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 designateclient.v2 import base
class ServiceStatusesController(base.V2Controller):
def list(self, criterion=None, marker=None, limit=None):
url = self.build_url('/service_statuses', criterion, marker, limit)
return self._get(url, response_key="service_statuses")
def get(self, service_status_id):
url = '/service_statuses/%s' % service_status_id
return self._get(url)

View File

@ -139,6 +139,9 @@ openstack.dns.v2 =
ptr_record_set = designateclient.v2.cli.reverse:SetFloatingIPCommand
ptr_record_unset = designateclient.v2.cli.reverse:UnsetFloatingIPCommand
dns_service_list = designateclient.v2.cli.service_statuses:ListServiceStatusesCommand
dns_service_show = designateclient.v2.cli.service_statuses:ShowServiceStatusCommand
[build_sphinx]
all_files = 1
build-dir = doc/build