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")
|
host_results = self.shell("host-list")
|
||||||
self.assertIn('controller-0', host_results)
|
self.assertIn('controller-0', host_results)
|
||||||
self.assertNotIn('controller-1', 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 base
|
||||||
|
from cgtsclient.common import utils
|
||||||
from cgtsclient import exc
|
from cgtsclient import exc
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,3 +53,20 @@ class AddressPoolManager(base.Manager):
|
||||||
def update(self, pool_id, patch):
|
def update(self, pool_id, patch):
|
||||||
path = '/v1/addrpools/%s' % pool_id
|
path = '/v1/addrpools/%s' % pool_id
|
||||||
return self._update(path, patch)
|
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 lldp_neighbour
|
||||||
from cgtsclient.v1 import load
|
from cgtsclient.v1 import load
|
||||||
from cgtsclient.v1 import network
|
from cgtsclient.v1 import network
|
||||||
|
from cgtsclient.v1 import network_addrpool
|
||||||
from cgtsclient.v1 import partition
|
from cgtsclient.v1 import partition
|
||||||
from cgtsclient.v1 import pci_device
|
from cgtsclient.v1 import pci_device
|
||||||
from cgtsclient.v1 import port
|
from cgtsclient.v1 import port
|
||||||
|
@ -146,6 +147,7 @@ class Client(object):
|
||||||
self.load = load.LoadManager(self.http_client)
|
self.load = load.LoadManager(self.http_client)
|
||||||
self.upgrade = upgrade.UpgradeManager(self.http_client)
|
self.upgrade = upgrade.UpgradeManager(self.http_client)
|
||||||
self.network = network.NetworkManager(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.datanetwork = datanetwork.DataNetworkManager(self.http_client)
|
||||||
self.interface_datanetwork = \
|
self.interface_datanetwork = \
|
||||||
interface_datanetwork.InterfaceDataNetworkManager(self.http_client)
|
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_agent_shell
|
||||||
from cgtsclient.v1 import lldp_neighbour_shell
|
from cgtsclient.v1 import lldp_neighbour_shell
|
||||||
from cgtsclient.v1 import load_shell
|
from cgtsclient.v1 import load_shell
|
||||||
|
from cgtsclient.v1 import network_addrpool_shell
|
||||||
from cgtsclient.v1 import network_shell
|
from cgtsclient.v1 import network_shell
|
||||||
from cgtsclient.v1 import partition_shell
|
from cgtsclient.v1 import partition_shell
|
||||||
from cgtsclient.v1 import pci_device_shell
|
from cgtsclient.v1 import pci_device_shell
|
||||||
|
@ -111,6 +112,7 @@ COMMAND_MODULES = [
|
||||||
pci_device_shell,
|
pci_device_shell,
|
||||||
upgrade_shell,
|
upgrade_shell,
|
||||||
network_shell,
|
network_shell,
|
||||||
|
network_addrpool_shell,
|
||||||
interface_network_shell,
|
interface_network_shell,
|
||||||
datanetwork_shell,
|
datanetwork_shell,
|
||||||
interface_datanetwork_shell,
|
interface_datanetwork_shell,
|
||||||
|
|
Loading…
Reference in New Issue