Merge "Implement new network-addrpool CLI"
This commit is contained in:
commit
0befaa8ff0
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue