Merge "Show reserved status for a fixed_ip if available"
This commit is contained in:
commit
64c8039c1e
novaclient
@ -243,3 +243,36 @@ class ClientTestBase(testtools.TestCase):
|
|||||||
if l_property.strip() == key:
|
if l_property.strip() == key:
|
||||||
return l_value.strip()
|
return l_value.strip()
|
||||||
raise ValueError("Property '%s' is missing from the table." % key)
|
raise ValueError("Property '%s' is missing from the table." % key)
|
||||||
|
|
||||||
|
def _get_column_value_from_single_row_table(self, table, column):
|
||||||
|
"""Get the value for the column in the single-row table
|
||||||
|
|
||||||
|
Example table:
|
||||||
|
|
||||||
|
+----------+-------------+----------+----------+
|
||||||
|
| address | cidr | hostname | host |
|
||||||
|
+----------+-------------+----------+----------+
|
||||||
|
| 10.0.0.3 | 10.0.0.0/24 | test | myhost |
|
||||||
|
+----------+-------------+----------+----------+
|
||||||
|
|
||||||
|
:param table: newline-separated table with |-separated cells
|
||||||
|
:param column: name of the column to look for
|
||||||
|
:raises: ValueError if the column value is not found
|
||||||
|
"""
|
||||||
|
lines = table.split("\n")
|
||||||
|
# Determine the column header index first.
|
||||||
|
column_index = -1
|
||||||
|
for line in lines:
|
||||||
|
if "|" in line:
|
||||||
|
if column_index == -1:
|
||||||
|
headers = line.split("|")[1:-1]
|
||||||
|
for index, header in enumerate(headers):
|
||||||
|
if header.strip() == column:
|
||||||
|
column_index = index
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# We expect a single-row table so we should be able to get
|
||||||
|
# the value now using the column index.
|
||||||
|
return line.split("|")[1:-1][column_index].strip()
|
||||||
|
|
||||||
|
raise ValueError("Unable to find value for column '%s'.")
|
||||||
|
67
novaclient/tests/functional/test_fixedips.py
Normal file
67
novaclient/tests/functional/test_fixedips.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Copyright 2015 IBM Corp.
|
||||||
|
# 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 oslo_utils import strutils
|
||||||
|
|
||||||
|
from novaclient.tests.functional import base
|
||||||
|
from novaclient.v2 import shell
|
||||||
|
|
||||||
|
|
||||||
|
class TestFixedIPsNovaClient(base.ClientTestBase):
|
||||||
|
"""FixedIPs functional tests."""
|
||||||
|
|
||||||
|
API_VERSION = '2.1'
|
||||||
|
|
||||||
|
def nova(self, *args, **kwargs):
|
||||||
|
flags = '--os-compute-api-version %s ' % self.API_VERSION
|
||||||
|
return self.cli_clients.nova(flags=flags, *args, **kwargs)
|
||||||
|
|
||||||
|
def _create_server(self):
|
||||||
|
name = self.name_generate(prefix='server')
|
||||||
|
server = self.client.servers.create(name, self.image, self.flavor)
|
||||||
|
shell._poll_for_status(
|
||||||
|
self.client.servers.get, server.id,
|
||||||
|
'building', ['active'])
|
||||||
|
self.addCleanup(server.delete)
|
||||||
|
return server
|
||||||
|
|
||||||
|
def _test_fixedip_get(self, expect_reserved=False):
|
||||||
|
server = self._create_server()
|
||||||
|
networks = server.networks
|
||||||
|
self.assertIn('private', networks)
|
||||||
|
fixed_ip = networks['private'][0]
|
||||||
|
table = self.nova('fixed-ip-get %s' % fixed_ip)
|
||||||
|
addr = self._get_column_value_from_single_row_table(table, 'address')
|
||||||
|
self.assertEqual(fixed_ip, addr)
|
||||||
|
if expect_reserved:
|
||||||
|
reserved = self._get_column_value_from_single_row_table(table,
|
||||||
|
'reserved')
|
||||||
|
# By default the fixed IP should not be reserved.
|
||||||
|
self.assertEqual(False, strutils.bool_from_string(reserved,
|
||||||
|
strict=True))
|
||||||
|
else:
|
||||||
|
self.assertRaises(ValueError,
|
||||||
|
self._get_column_value_from_single_row_table,
|
||||||
|
table, 'reserved')
|
||||||
|
|
||||||
|
def test_fixedip_get(self):
|
||||||
|
self._test_fixedip_get()
|
||||||
|
|
||||||
|
|
||||||
|
class TestFixedIPsNovaClientV24(TestFixedIPsNovaClient):
|
||||||
|
"""FixedIPs functional tests for v2.4 nova-api microversion."""
|
||||||
|
|
||||||
|
API_VERSION = '2.4'
|
||||||
|
|
||||||
|
def test_fixedip_get(self):
|
||||||
|
self._test_fixedip_get(expect_reserved=True)
|
@ -3621,11 +3621,23 @@ def do_service_delete(cs, args):
|
|||||||
cs.services.delete(args.id)
|
cs.services.delete(args.id)
|
||||||
|
|
||||||
|
|
||||||
|
@api_versions.wraps("2.0", "2.3")
|
||||||
|
def _print_fixed_ip(cs, fixed_ip):
|
||||||
|
fields = ['address', 'cidr', 'hostname', 'host']
|
||||||
|
utils.print_list([fixed_ip], fields)
|
||||||
|
|
||||||
|
|
||||||
|
@api_versions.wraps("2.4")
|
||||||
|
def _print_fixed_ip(cs, fixed_ip):
|
||||||
|
fields = ['address', 'cidr', 'hostname', 'host', 'reserved']
|
||||||
|
utils.print_list([fixed_ip], fields)
|
||||||
|
|
||||||
|
|
||||||
@cliutils.arg('fixed_ip', metavar='<fixed_ip>', help=_('Fixed IP Address.'))
|
@cliutils.arg('fixed_ip', metavar='<fixed_ip>', help=_('Fixed IP Address.'))
|
||||||
def do_fixed_ip_get(cs, args):
|
def do_fixed_ip_get(cs, args):
|
||||||
"""Retrieve info on a fixed IP."""
|
"""Retrieve info on a fixed IP."""
|
||||||
result = cs.fixed_ips.get(args.fixed_ip)
|
result = cs.fixed_ips.get(args.fixed_ip)
|
||||||
utils.print_list([result], ['address', 'cidr', 'hostname', 'host'])
|
_print_fixed_ip(cs, result)
|
||||||
|
|
||||||
|
|
||||||
@cliutils.arg('fixed_ip', metavar='<fixed_ip>', help=_('Fixed IP Address.'))
|
@cliutils.arg('fixed_ip', metavar='<fixed_ip>', help=_('Fixed IP Address.'))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user