Merge "Implement new network-addrpool CLI"

This commit is contained in:
Zuul 2024-03-11 20:12:46 +00:00 committed by Gerrit Code Review
commit 0befaa8ff0
6 changed files with 150 additions and 0 deletions

View File

@ -120,3 +120,9 @@ class ShellTest(utils.BaseTestCase):
host_results = self.shell("host-list")
self.assertIn('controller-0', host_results)
self.assertNotIn('controller-1', host_results)
def test_help_on_network_addrpool_subcommand(self):
self.shell("help network-addrpool-list")
self.shell("help network-addrpool-show")
self.shell("help network-addrpool-assign")
self.shell("help network-addrpool-remove")

View File

@ -8,6 +8,7 @@
#
from cgtsclient.common import base
from cgtsclient.common import utils
from cgtsclient import exc
@ -52,3 +53,20 @@ class AddressPoolManager(base.Manager):
def update(self, pool_id, patch):
path = '/v1/addrpools/%s' % pool_id
return self._update(path, patch)
def _find_addrpool(cc, addrpool):
if utils.is_uuid_like(addrpool):
try:
a = cc.address_pool.get(addrpool)
except exc.HTTPNotFound:
raise exc.CommandError('address pool not found: %s' % addrpool)
else:
return a
else:
addrpool_list = cc.address_pool.list()
for a in addrpool_list:
if a.name == addrpool:
return a
else:
raise exc.CommandError('address pool not found: %s' % addrpool)

View File

@ -66,6 +66,7 @@ from cgtsclient.v1 import lldp_agent
from cgtsclient.v1 import lldp_neighbour
from cgtsclient.v1 import load
from cgtsclient.v1 import network
from cgtsclient.v1 import network_addrpool
from cgtsclient.v1 import partition
from cgtsclient.v1 import pci_device
from cgtsclient.v1 import port
@ -146,6 +147,7 @@ class Client(object):
self.load = load.LoadManager(self.http_client)
self.upgrade = upgrade.UpgradeManager(self.http_client)
self.network = network.NetworkManager(self.http_client)
self.network_addrpool = network_addrpool.NetworkAddrPoolManager(self.http_client)
self.datanetwork = datanetwork.DataNetworkManager(self.http_client)
self.interface_datanetwork = \
interface_datanetwork.InterfaceDataNetworkManager(self.http_client)

View File

@ -0,0 +1,50 @@
#
# Copyright (c) 2024 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# -*- encoding: utf-8 -*-
#
from cgtsclient.common import base
from cgtsclient import exc
CREATION_ATTRIBUTES = [
'address_pool_uuid', 'network_uuid'
]
class NetworkAddrPool(base.Resource):
def __repr__(self):
return "<network_addrpool %s>" % self._info
class NetworkAddrPoolManager(base.Manager):
resource_class = NetworkAddrPool
def list(self):
path = '/v1/network_addresspools'
return self._list(path, "network_addresspools")
def get(self, network_addrpool_uuid):
path = '/v1/network_addresspools/%s' % network_addrpool_uuid
try:
return self._list(path)[0]
except IndexError:
return None
def assign(self, **kwargs):
path = '/v1/network_addresspools'
new = {}
for (key, value) in kwargs.items():
if key in CREATION_ATTRIBUTES:
new[key] = value
else:
raise exc.InvalidAttribute('%s' % key)
return self._create(path, new)
def remove(self, network_addrpool_uuid):
path = '/v1/network_addresspools/%s' % network_addrpool_uuid
return self._delete(path)

View File

@ -0,0 +1,72 @@
#
# Copyright (c) 2024 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# -*- encoding: utf-8 -*-
#
from cgtsclient.common import utils
from cgtsclient import exc
from cgtsclient.v1 import address_pool as addrpool_utils
from cgtsclient.v1 import network as network_utils
def _print_network_addrpool_show(cc, obj):
fields = ['uuid', 'network_name', 'address_pool_name']
fields_labels = ['uuid', 'network_name', 'pool_name']
data = [(fields_labels[index], getattr(obj, f, ''))
for index, f in enumerate(fields)]
utils.print_tuple_list(data)
def do_network_addrpool_list(cc, args):
"""List network and address pools."""
fields = ['uuid', 'network_name', 'address_pool_name']
fields_labels = ['uuid', 'network_name', 'addrpool_name']
network_addrpools = cc.network_addrpool.list()
utils.print_list(network_addrpools, fields, fields_labels, sortby=1)
@utils.arg('network_addrpool_uuid',
metavar='<network addrpool uuid>',
help="UUID of network addrpool entry")
def do_network_addrpool_show(cc, args):
"""Show network address-pool attributes."""
network_addrpool = cc.network_addrpool.get(args.network_addrpool_uuid)
_print_network_addrpool_show(cc, network_addrpool)
@utils.arg('netnameoruuid',
metavar='<network name or uuid>',
help="Name or UUID of IP network [REQUIRED]")
@utils.arg('addrpoolnameoruuid',
metavar='<addrpool name or uuid>',
help="Name or UUID of address pool [REQUIRED]")
def do_network_addrpool_assign(cc, args):
"""Assign a network to an address pool."""
# Determine address pool and network using the given arguments
addrpool = addrpool_utils._find_addrpool(cc, args.addrpoolnameoruuid)
network = network_utils._find_network(cc, args.netnameoruuid)
data = dict()
data['address_pool_uuid'] = addrpool.uuid
data['network_uuid'] = network.uuid
network_addrpool = cc.network_addrpool.assign(**data)
uuid = getattr(network_addrpool, 'uuid', '')
try:
network_addrpool = cc.network_addrpool.get(uuid)
except exc.HTTPNotFound:
raise exc.CommandError('Created Network AddrPool UUID not found: %s' % uuid)
_print_network_addrpool_show(cc, network_addrpool)
@utils.arg('network_addrpool_uuid',
metavar='<network addrpool uuid>',
help="UUID of network addrpool entry")
def do_network_addrpool_remove(cc, args):
"""Remove an assigned address pool from a network."""
cc.network_addrpool.remove(args.network_addrpool_uuid)
print('Deleted Network Addrpool: %s' % args.network_addrpool_uuid)

View File

@ -51,6 +51,7 @@ from cgtsclient.v1 import license_shell
from cgtsclient.v1 import lldp_agent_shell
from cgtsclient.v1 import lldp_neighbour_shell
from cgtsclient.v1 import load_shell
from cgtsclient.v1 import network_addrpool_shell
from cgtsclient.v1 import network_shell
from cgtsclient.v1 import partition_shell
from cgtsclient.v1 import pci_device_shell
@ -111,6 +112,7 @@ COMMAND_MODULES = [
pci_device_shell,
upgrade_shell,
network_shell,
network_addrpool_shell,
interface_network_shell,
datanetwork_shell,
interface_datanetwork_shell,