From cd43284c7b76e7b953d01aa5acaf15e99f313907 Mon Sep 17 00:00:00 2001 From: Enzo Candotti Date: Tue, 31 Aug 2021 16:52:17 -0300 Subject: [PATCH] Removing Host Hardware Profiles from CLI The Host Hardware Profiles for creating re-usable configuration templates for hosts are no longer maintained or supported and should be removed from code. Including : CPU, Interface, Storage and Memory profiles. This patch removes profiles from cgtsclient v1 CLI. Story: 2009163 Task: 43158 Depends-On: https://review.opendev.org/c/starlingx/gui/+/806967 Signed-off-by: Enzo Candotti Change-Id: Ib7a7b94499cd0b12c866dfb4e983ccecea50ee6f --- .../cgtsclient/common/constants.py | 7 - .../cgts-client/cgtsclient/common/utils.py | 7 +- .../cgts-client/cgtsclient/v1/client.py | 4 +- .../cgts-client/cgtsclient/v1/iHost_shell.py | 199 +---- .../cgts-client/cgtsclient/v1/ihost.py | 6 +- .../cgts-client/cgtsclient/v1/iprofile.py | 143 ---- .../cgtsclient/v1/iprofile_shell.py | 706 ------------------ .../cgts-client/cgtsclient/v1/shell.py | 2 - 8 files changed, 4 insertions(+), 1070 deletions(-) delete mode 100644 sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile.py delete mode 100644 sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile_shell.py diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/common/constants.py b/sysinv/cgts-client/cgts-client/cgtsclient/common/constants.py index 03a29e85ec..5d7bdf8833 100755 --- a/sysinv/cgts-client/cgts-client/cgtsclient/common/constants.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/common/constants.py @@ -49,13 +49,6 @@ SB_TASK_RECONFIG_WORKER = 'reconfig-worker' SB_TASK_RESIZE_CEPH_MON_LV = 'resize-ceph-mon-lv' SB_TASK_ADD_OBJECT_GATEWAY = 'add-object-gateway' -# Profiles -PROFILE_TYPE_CPU = 'cpu' -PROFILE_TYPE_INTERFACE = 'if' -PROFILE_TYPE_STORAGE = 'stor' -PROFILE_TYPE_MEMORY = 'memory' -PROFILE_TYPE_LOCAL_STORAGE = 'localstg' - # Board Management Region Info REGION_PRIMARY = "Internal" REGION_SECONDARY = "External" diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/common/utils.py b/sysinv/cgts-client/cgts-client/cgtsclient/common/utils.py index a08da5ef11..f9321b2eff 100644 --- a/sysinv/cgts-client/cgts-client/cgtsclient/common/utils.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/common/utils.py @@ -1,4 +1,4 @@ -# Copyright 2013-2019 Wind River, Inc +# Copyright 2013-2021 Wind River, Inc # Copyright 2012 OpenStack LLC. # All Rights Reserved. # @@ -101,11 +101,6 @@ def _does_command_need_no_wrap(callback): if callback.__name__ in \ ['donot_config_ntp_list', 'donot_config_ptp_list', - 'do_host_apply_memprofile', - 'do_host_apply_cpuprofile', - 'do_host_apply_ifprofile', - 'do_host_apply_profile', - 'do_host_apply_storprofile', 'donot_config_oam_list', 'donot_dns_list', 'do_host_cpu_modify', diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/client.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/client.py index c6c53cf749..84953c0794 100644 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/client.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/v1/client.py @@ -1,4 +1,4 @@ -# Copyright 2012-2020 OpenStack LLC. +# Copyright 2012-2021 OpenStack LLC. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -47,7 +47,6 @@ from cgtsclient.v1 import inode from cgtsclient.v1 import interface_datanetwork from cgtsclient.v1 import interface_network from cgtsclient.v1 import intp -from cgtsclient.v1 import iprofile from cgtsclient.v1 import ipv from cgtsclient.v1 import isensor from cgtsclient.v1 import isensorgroup @@ -129,7 +128,6 @@ class Client(http.HTTPClient): self.storage_ceph_rook = storage_ceph_rook.StorageCephRookManager(self) self.ceph_mon = ceph_mon.CephMonManager(self) self.drbdconfig = drbdconfig.drbdconfigManager(self) - self.iprofile = iprofile.iprofileManager(self) self.port = port.PortManager(self) self.ethernet_port = ethernetport.EthernetPortManager(self) self.address = address.AddressManager(self) diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iHost_shell.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/iHost_shell.py index ee43603398..48edab8241 100755 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iHost_shell.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/v1/iHost_shell.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2013-2020 Wind River Systems, Inc. +# Copyright (c) 2013-2021 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -10,17 +10,13 @@ # from collections import OrderedDict -import datetime import os from cgtsclient._i18n import _ from cgtsclient.common import constants from cgtsclient.common import utils from cgtsclient import exc -from cgtsclient.v1 import icpu as icpu_utils from cgtsclient.v1 import ihost as ihost_utils -from cgtsclient.v1 import iinterface as iinterface_utils -from cgtsclient.v1 import iprofile as iprofile_utils from cgtsclient.v1 import istor as istor_utils from six.moves import input @@ -515,199 +511,6 @@ def _list_storage(cc, host): utils.print_list(ipvs, fields, field_labels, sortby=0) -""" -NOTE (neid): - all three "do_host_apply_profile" methods can be replaced - with a single "do_host_apply_profile" - sysinv REST API checks what type of profile is being applied and acts - accordingly - this allows for profiles with multiple objects - (eg a profile with cpus and stors) - or a profile including all of cpu, stor, if - or a profile including all of cpu, stor, if -""" - - -@utils.arg('hostnameorid', - metavar='', - help="Name or ID of host") -@utils.arg('profilenameoruuid', - metavar='', - help="Name or ID of the profile") -def do_host_apply_profile(cc, args): - """Apply a profile to a host.""" - - # Assemble patch - profile = iprofile_utils._find_iprofile(cc, args.profilenameoruuid) - patch = _prepare_profile_patch(profile.uuid) - - # Send patch - host = ihost_utils._find_ihost(cc, args.hostnameorid) - try: - host = cc.ihost.update(host.id, patch) - except exc.HTTPNotFound: - raise exc.CommandError('host not found: %s' % args.hostnameorid) - - # Echo list of new host interfaces - iinterfaces = cc.iinterface.list(host.uuid) - for i in iinterfaces: - iinterface_utils._get_ports(cc, host, i) - field_labels = ['uuid', 'name', 'network type', 'type', 'vlan id', 'ports', 'uses', 'used by', 'mtu', 'provider networks'] - fields = ['uuid', 'ifname', 'networktype', 'iftype', 'vlan_id', 'ports', 'uses', 'used_by', 'imtu', 'providernetworks'] - utils.print_list(iinterfaces, fields, field_labels, sortby=0) - - # Echo list of new host cpus - icpus = cc.icpu.list(host.uuid) - field_labels = ['uuid', 'log_core', 'processor', 'phy_core', 'thread', - 'processor_model', 'assigned_function'] - fields = ['uuid', 'cpu', 'numa_node', 'core', 'thread', - 'cpu_model', 'allocated_function'] - utils.print_list(icpus, fields, field_labels, sortby=1, - formatters={'allocated_function': - icpu_utils._cpu_function_tuple_formatter}) - - _list_storage(cc, host) - - # Echo list of new memory - imemory = cc.imemory.list(host.uuid) - field_labels = ['uuid', 'application_hugepages_1G', 'application_hugepages_2M', - 'application_hugepages_2M_pending', - 'application_hugepages_1G_pending'] - - fields = ['uuid', 'vm_hugepages_nr_1G', 'vm_hugepages_nr_2M', - 'vm_hugepages_nr_2M_pending', 'vm_hugepages_nr_1G_pending'] - utils.print_list(imemory, fields, field_labels, sortby=0) - - -@utils.arg('hostnameorid', - metavar='', - help="Name or ID of host") -@utils.arg('profilenameoruuid', - metavar='', - help="Name or ID of interface profile") -def do_host_apply_ifprofile(cc, args): - """Apply an interface profile to a host.""" - - # Assemble patch - profile = iprofile_utils._find_iprofile(cc, args.profilenameoruuid) - patch = _prepare_profile_patch(profile.uuid) - - # Send patch - host = ihost_utils._find_ihost(cc, args.hostnameorid) - try: - host = cc.ihost.update(host.id, patch) - except exc.HTTPNotFound: - raise exc.CommandError('host not found: %s' % args.hostnameorid) - - # Echo list of new host interfaces - iinterfaces = cc.iinterface.list(host.uuid) - for i in iinterfaces: - iinterface_utils._get_ports(cc, host, i) - field_labels = ['uuid', 'name', 'network type', 'type', 'vlan id', 'ports', 'uses', 'used by', 'mtu', 'provider networks'] - fields = ['uuid', 'ifname', 'networktype', 'iftype', 'vlan_id', 'ports', 'uses', 'used_by', 'imtu', 'providernetworks'] - utils.print_list(iinterfaces, fields, field_labels, sortby=0) - - -@utils.arg('hostnameorid', - metavar='', - help="Name or ID of host") -@utils.arg('profilenameoruuid', - metavar='', - help="Name or ID of cpu profile") -def do_host_apply_cpuprofile(cc, args): - """Apply a cpu profile to a host.""" - # Assemble patch - profile = iprofile_utils._find_iprofile(cc, args.profilenameoruuid) - patch = _prepare_profile_patch(profile.uuid) - - # Send patch - host = ihost_utils._find_ihost(cc, args.hostnameorid) - try: - host = cc.ihost.update(host.id, patch) - except exc.HTTPNotFound: - raise exc.CommandError('host not found: %s' % args.hostnameorid) - - # Echo list of new host cpus - icpus = cc.icpu.list(host.uuid) - field_labels = ['uuid', 'log_core', 'processor', 'phy_core', 'thread', - 'processor_model', 'assigned_function'] - fields = ['uuid', 'cpu', 'numa_node', 'core', 'thread', - 'cpu_model', 'allocated_function'] - utils.print_list(icpus, fields, field_labels, sortby=1, - formatters={'allocated_function': - icpu_utils._cpu_function_tuple_formatter}) - - -@utils.arg('hostnameorid', - metavar='', - help="Name or ID of host") -@utils.arg('profilenameoruuid', - metavar='', - help="Name or ID of stor profile") -def do_host_apply_storprofile(cc, args): - """Apply a storage profile to a host.""" - # Assemble patch - profile = iprofile_utils._find_iprofile(cc, args.profilenameoruuid) - patch = _prepare_profile_patch(profile.uuid) - - host = ihost_utils._find_ihost(cc, args.hostnameorid) - try: - host = cc.ihost.update(host.id, patch) - except exc.HTTPNotFound: - raise exc.CommandError('Host not found: %s' % args.hostnameorid) - - _list_storage(cc, host) - - -@utils.arg('hostnameorid', - metavar='', - help="Name or ID of host") -@utils.arg('profilenameoruuid', - metavar='', - help="Name or ID of stor profile") -def do_host_apply_memprofile(cc, args): - """Apply a memory profile to a host.""" - # Assemble patch - profile = iprofile_utils._find_iprofile(cc, args.profilenameoruuid) - patch = _prepare_profile_patch(profile.uuid) - - # Send patch - host = ihost_utils._find_ihost(cc, args.hostnameorid) - try: - host = cc.ihost.update(host.id, patch) - except exc.HTTPNotFound: - raise exc.CommandError('host not found: %s' % args.hostnameorid) - - # Echo list of new host memory - imemory = cc.imemory.list(host.uuid) - field_labels = ['uuid', 'application_hugepages_1G', 'application_hugepages_2M', - 'application_hugepages_2M_pending', 'application_hugepages_1G_pending', - 'vswitch_hugepages_nr', 'vswitch_hugepages_size_reqd', - 'vswitch_hugepages_size_mib'] - - fields = ['uuid', 'vm_hugepages_nr_1G', 'vm_hugepages_nr_2M', - 'vm_hugepages_nr_2M_pending', 'vm_hugepages_nr_1G_pending', - 'vswitch_hugepages_nr', 'vswitch_hugepages_reqd', - 'vswitch_hugepages_size_mib'] - utils.print_list(imemory, fields, field_labels, sortby=0) - - -def _prepare_profile_patch(iprofile_uuid): - dict = {} - dict['action'] = 'apply-profile' - dict['iprofile_uuid'] = iprofile_uuid - - patch = [] - for (k, v) in dict.items(): - patch.append({'op': 'replace', 'path': '/' + k, 'value': str(v)}) - - return patch - - -def _timestamped(dname, fmt='%Y-%m-%d-%H-%M-%S_{dname}'): - return datetime.datetime.now().strftime(fmt).format(dname=dname) - - @utils.arg('hostnameorid', metavar='', help="Name or ID of host") diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/ihost.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/ihost.py index bc6bab3949..f378b7ff1d 100644 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/ihost.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/v1/ihost.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2013-2020 Wind River Systems, Inc. +# Copyright (c) 2013-2021 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -38,10 +38,6 @@ class ihostManager(base.Manager): def list(self): return self._list(self._path(), "ihosts") - def list_profiles(self): - path = "/v1/ihosts/personality_profile" - return self._list(self._path(path), "ihosts") - def list_port(self, ihost_id): path = "%s/ports" % ihost_id return self._list(self._path(path), "ports") diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile.py deleted file mode 100644 index bc6a042c39..0000000000 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile.py +++ /dev/null @@ -1,143 +0,0 @@ -# -# Copyright (c) 2013-2014 Wind River Systems, Inc. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# -*- encoding: utf-8 -*- -# - -from cgtsclient.common import base -from cgtsclient.common import utils -from cgtsclient import exc - - -CREATION_ATTRIBUTES = ['profiletype', 'profilename', 'ihost_uuid'] - - -class iprofile(base.Resource): - def __repr__(self): - return "" % self._info - - -class iprofileManager(base.Manager): - resource_class = iprofile - - @staticmethod - def _path(id=None): - return '/v1/iprofile/%s' % id if id else '/v1/iprofile' - - def list(self): - return self._list(self._path(), "iprofiles") - - def list_interface_profiles(self): - path = "ifprofiles_list" - profiles = self._list(self._path(path)) - for profile in profiles: - profile.ports = [utils.objectify(n) for n in profile.ports] - profile.interfaces = [utils.objectify(n) for n in - profile.interfaces] - return profiles - - def list_cpu_profiles(self): - path = "cpuprofiles_list" - profiles = self._list(self._path(path)) - for profile in profiles: - profile.cpus = [utils.objectify(n) for n in profile.cpus] - profile.nodes = [utils.objectify(n) for n in profile.nodes] - return profiles - - def list_memory_profiles(self): - path = "memprofiles_list" - profiles = self._list(self._path(path)) - for profile in profiles: - profile.memory = [utils.objectify(n) for n in profile.memory] - profile.nodes = [utils.objectify(n) for n in profile.nodes] - return profiles - - def list_storage_profiles(self): - path = "storprofiles_list" - profiles = self._list(self._path(path)) - for profile in profiles: - profile.disks = [utils.objectify(n) for n in profile.disks] - profile.partitions = [utils.objectify(n) for n in - profile.partitions] - profile.stors = [utils.objectify(n) for n in profile.stors] - profile.lvgs = [utils.objectify(n) for n in profile.lvgs] - profile.pvs = [utils.objectify(n) for n in profile.pvs] - return profiles - - def list_ethernet_port(self, iprofile_id): - path = "%s/ethernet_ports" % iprofile_id - return self._list(self._path(path), "ethernet_ports") - - def list_iinterface(self, iprofile_id): - path = "%s/iinterfaces" % iprofile_id - return self._list(self._path(path), "iinterfaces") - - def list_icpus(self, iprofile_id): - path = "%s/icpus" % iprofile_id - return self._list(self._path(path), "icpus") - - def list_inodes(self, iprofile_id): - path = "%s/inodes" % iprofile_id - return self._list(self._path(path), "inodes") - - def list_imemorys(self, iprofile_id): - path = "%s/imemorys" % iprofile_id - return self._list(self._path(path), "imemorys") - - def list_idisks(self, iprofile_id): - path = "%s/idisks" % iprofile_id - return self._list(self._path(path), "idisks") - - def list_partitions(self, iprofile_id): - path = "%s/partitions" % iprofile_id - return self._list(self._path(path), "partitions") - - def list_istors(self, iprofile_id): - path = "%s/istors" % iprofile_id - return self._list(self._path(path), "istors") - - def list_ilvgs(self, iprofile_id): - path = "%s/ilvgs" % iprofile_id - return self._list(self._path(path), "ilvgs") - - def list_ipvs(self, iprofile_id): - path = "%s/ipvs" % iprofile_id - return self._list(self._path(path), "ipvs") - - def get(self, iprofile_id): - try: - return self._list(self._path(iprofile_id))[0] - except IndexError: - return None - - def create(self, **kwargs): - new = {} - for (key, value) in kwargs.items(): - if key in CREATION_ATTRIBUTES: - new[key] = value - else: - raise exc.InvalidAttribute() - return self._create(self._path(), new) - - def delete(self, iprofile_id): - return self._delete(self._path(iprofile_id)) - - def update(self, iprofile_id, patch): - return self._update(self._path(iprofile_id), patch) - - def import_profile(self, file): - path = self._path("import_profile") - return self._upload(path, file) - - -def _find_iprofile(cc, iprofilenameoruuid): - iprofiles = cc.iprofile.list() - for ip in iprofiles: - if ip.hostname == iprofilenameoruuid or ip.uuid == iprofilenameoruuid: - break - else: - raise exc.CommandError('Profile not found: %s' % iprofilenameoruuid) - return ip diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile_shell.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile_shell.py deleted file mode 100644 index 021fa17701..0000000000 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/iprofile_shell.py +++ /dev/null @@ -1,706 +0,0 @@ -# -# Copyright (c) 2013-2018 Wind River Systems, Inc. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# All Rights Reserved. -# - -from cgtsclient.common import constants -from cgtsclient.common import utils -from cgtsclient import exc -from cgtsclient.v1 import ethernetport as ethernetport_utils -from cgtsclient.v1 import icpu as icpu_utils -from cgtsclient.v1 import ihost as ihost_utils -from cgtsclient.v1 import interface_datanetwork as ifdn_utils -from cgtsclient.v1 import interface_network as ifnet_utils -from cgtsclient.v1 import iprofile as iprofile_utils -import math - -# -# INTERFACE PROFILES -# - - -def _get_interface_ports_interfaces(iprofile, interface): - - interface.ports = None - interface.interfaces = None - if interface.iftype != 'vlan' and interface.iftype != 'ae': - ports = iprofile.ports - if ports and hasattr(ports[0], 'interface_uuid'): - port_list = [ethernetport_utils.get_port_display_name(p) - for p in ports if p.interface_uuid and p.interface_uuid == interface.uuid] - else: - port_list = [ethernetport_utils.get_port_display_name(p) - for p in ports if p.interface_id and p.interface_id == interface.id] - interface.ports = port_list - - else: - interfaces = iprofile.interfaces - interface_list = [i.ifname for i in interfaces if i.ifname in interface.uses] - interface.interfaces = interface_list - - -def get_portconfig(iprofile): - pstr = '' - for port in iprofile.ports: - pstr = pstr + "%s: %s" % (ethernetport_utils.get_port_display_name(port), port.pdevice) - port.autoneg = 'Yes' # TODO(jkung) Remove when autoneg supported in DB - if port.autoneg != 'na': - pstr = pstr + " | Auto Neg = %s" % (port.autoneg) - if port.bootp: - pstr = pstr + " | bootp-IF" - pstr = pstr + '\n' - - return pstr - - -def get_interfaceconfig(cc, iprofile): - istr = '' - for interface in iprofile.interfaces: - istr = istr + "%s: " % (interface.ifname) - if interface.ifclass == 'platform': - network_names = ifnet_utils.get_network_names(cc, interface) - istr = istr + "( %s )" % network_names - elif interface.ifclass == 'data': - istr = istr + "( %s )" % ifdn_utils.get_datanetwork_names(cc, interface) - _get_interface_ports_interfaces(iprofile, interface) - if interface.ports: - istr = istr + " | %s | PORTS = %s" % (interface.iftype, interface.ports) - if interface.interfaces: - istr = istr + " | %s | INTERFACES = %s" % (interface.iftype, interface.interfaces) - if interface.iftype == 'ae': - istr = istr + " | %s" % interface.aemode - if interface.aemode == 'balanced': - istr = istr + " | %s" % interface.txhashpolicy - istr = istr + " | MTU = %s" % interface.imtu - istr = istr + '\n' - return istr - - -def get_ifprofile_data(cc, iprofile): - iprofile.ports = cc.iprofile.list_ethernet_port(iprofile.uuid) - if iprofile.ports: # an 'interface' profile - iprofile.portconfig = get_portconfig(iprofile) - iprofile.interfaces = cc.iprofile.list_iinterface(iprofile.uuid) - iprofile.interfaceconfig = get_interfaceconfig(cc, iprofile) - - -def do_ifprofile_list(cc, args): - """List interface profiles.""" - profiles = cc.iprofile.list_interface_profiles() - for profile in profiles: - profile.portconfig = get_portconfig(profile) - profile.interfaceconfig = get_interfaceconfig(cc, profile) - - field_labels = ['uuid', 'name', 'port config', 'interface config'] - fields = ['uuid', 'profilename', 'portconfig', 'interfaceconfig'] - utils.print_list(profiles, fields, field_labels, sortby=0) - - -def _print_ifprofile_show(ifprofile): - fields = ['profilename', 'portconfig', 'interfaceconfig', 'uuid', - 'created_at', 'updated_at'] - field_labels = ['name', 'port config', 'interface config', 'uuid'] - data = [(f, getattr(ifprofile, f, '')) for f in fields] - utils.print_tuple_list(data, field_labels) - - -@utils.arg('ifprofilenameoruuid', - metavar='', - help="Name or UUID of if profile") -def do_ifprofile_show(cc, args): - """Show interface profile attributes.""" - iprofile = iprofile_utils._find_iprofile(cc, args.ifprofilenameoruuid) - - get_ifprofile_data(cc, iprofile) - if not iprofile.ports: # not an 'interface' profile - raise exc.CommandError('If Profile not found: %s' % args.ifprofilenameoruuid) - - _print_ifprofile_show(iprofile) - - -@utils.arg('iprofilename', - metavar='', - help="Name of if profile [REQUIRED]") -@utils.arg('hostnameoruuid', - metavar='', - help='Name or UUID of the host [REQUIRED]') -def do_ifprofile_add(cc, args): - """Add an interface profile.""" - ihost = ihost_utils._find_ihost(cc, args.hostnameoruuid) - - # create new if profile - data = {} - data['profilename'] = args.iprofilename - data['profiletype'] = constants.PROFILE_TYPE_INTERFACE - data['ihost_uuid'] = ihost.uuid - - try: - iprofile = cc.iprofile.create(**data) - except Exception as e: - raise exc.CommandError(str(e)) - - suuid = getattr(iprofile, 'uuid', '') - try: - iprofile = cc.iprofile.get(suuid) - except exc.HTTPNotFound: - raise exc.CommandError('If Profile not found: %s' % suuid) - else: - get_ifprofile_data(cc, iprofile) - _print_ifprofile_show(iprofile) - - -@utils.arg('ifprofilenameoruuid', - metavar='', - nargs='+', - help="Name or UUID of if profile") -def do_ifprofile_delete(cc, args): - """Delete an interface profile.""" - for n in args.ifprofilenameoruuid: - iprofile = iprofile_utils._find_iprofile(cc, n) - try: - cc.iprofile.delete(iprofile.uuid) - except exc.HTTPNotFound: - raise exc.CommandError('if profile delete failed: %s' % n) - print('Deleted if profile %s' % n) - -# -# CPU PROFILES -# - - -def get_cpuprofile_data(cc, iprofile): - iprofile.cpus = cc.iprofile.list_icpus(iprofile.uuid) - iprofile.nodes = cc.iprofile.list_inodes(iprofile.uuid) - icpu_utils.restructure_host_cpu_data(iprofile) - iprofile.platform_cores = get_core_list_str(iprofile, icpu_utils.PLATFORM_CPU_TYPE) - iprofile.vswitch_cores = get_core_list_str(iprofile, icpu_utils.VSWITCH_CPU_TYPE) - iprofile.shared_cores = get_core_list_str(iprofile, icpu_utils.SHARED_CPU_TYPE) - iprofile.application_cores = get_core_list_str(iprofile, icpu_utils.APPLICATION_CPU_TYPE) - iprofile.isolated_cores = get_core_list_str(iprofile, icpu_utils.ISOLATED_CPU_TYPE) - - -def get_core_list_str(iprofile, function): - istr = '' - sep = '' - for cpuFunc in iprofile.core_assignment: - if cpuFunc.allocated_function == function: - for s, cores in cpuFunc.socket_cores.items(): - istr = istr + sep + "Processor %s: %s" % (s, cores) - sep = ',\n' - return istr - return istr - - -def do_cpuprofile_list(cc, args): - """List cpu profiles.""" - profiles = cc.iprofile.list_cpu_profiles() - for profile in profiles: - icpu_utils.restructure_host_cpu_data(profile) - profile.platform_cores = get_core_list_str(profile, - icpu_utils.PLATFORM_CPU_TYPE) - profile.vswitch_cores = get_core_list_str(profile, - icpu_utils.VSWITCH_CPU_TYPE) - profile.shared_cores = get_core_list_str(profile, - icpu_utils.SHARED_CPU_TYPE) - profile.application_cores = get_core_list_str(profile, icpu_utils.APPLICATION_CPU_TYPE) - profile.isolated_cores = get_core_list_str(profile, - icpu_utils.ISOLATED_CPU_TYPE) - - field_labels = ['uuid', 'name', - 'processors', 'phy cores per proc', 'hyperthreading', - 'platform cores', 'vswitch cores', 'shared cores', - 'application cores', 'application-isolated cores'] - fields = ['uuid', 'profilename', - 'sockets', 'physical_cores', 'hyperthreading', - 'platform_cores', 'vswitch_cores', 'shared_cores', 'application_cores', - 'isolated_cores'] - utils.print_list(profiles, fields, field_labels, sortby=0) - - -def _print_cpuprofile_show(cpuprofile): - labels = ['uuid', 'name', - 'processors', 'phy cores per proc', 'hyperthreading', - 'platform cores', 'vswitch cores', 'shared cores', 'application cores', - 'application-isolated cores', 'created_at', 'updated_at'] - fields = ['uuid', 'profilename', - 'sockets', 'physical_cores', 'hyperthreading', - 'platform_cores', 'vswitch_cores', 'shared_cores', 'application_cores', - 'isolated_cores', 'created_at', 'updated_at'] - data = [(f, getattr(cpuprofile, f, '')) for f in fields] - utils.print_tuple_list(data, labels) - - -@utils.arg('cpuprofilenameoruuid', - metavar='', - help="Name or UUID of cpu profile") -def do_cpuprofile_show(cc, args): - """Show cpu profile attributes.""" - iprofile = iprofile_utils._find_iprofile(cc, args.cpuprofilenameoruuid) - get_cpuprofile_data(cc, iprofile) - if not iprofile.cpus: # not a 'cpu' profile - raise exc.CommandError('CPU Profile not found: %s' % args.cpuprofilenameoruuid) - _print_cpuprofile_show(iprofile) - - -@utils.arg('iprofilename', - metavar='', - help="Name of cpu profile [REQUIRED]") -@utils.arg('hostnameoruuid', - metavar='', - help='Name or UUID of the host [REQUIRED]') -def do_cpuprofile_add(cc, args): - """Add a cpu profile.""" - ihost = ihost_utils._find_ihost(cc, args.hostnameoruuid) - - # create new cpu profile - data = {} - data['profilename'] = args.iprofilename - data['profiletype'] = constants.PROFILE_TYPE_CPU - data['ihost_uuid'] = ihost.uuid - - try: - iprofile = cc.iprofile.create(**data) - except Exception as e: - raise exc.CommandError(str(e)) - - suuid = getattr(iprofile, 'uuid', '') - try: - iprofile = cc.iprofile.get(suuid) - except exc.HTTPNotFound: - raise exc.CommandError('CPU Profile not found: %s' % suuid) - else: - get_cpuprofile_data(cc, iprofile) - _print_cpuprofile_show(iprofile) - - -@utils.arg('cpuprofilenameoruuid', - metavar='', - nargs='+', - help="Name or UUID of cpu profile") -def do_cpuprofile_delete(cc, args): - """Delete a cpu profile.""" - for n in args.cpuprofilenameoruuid: - iprofile = iprofile_utils._find_iprofile(cc, n) - try: - cc.iprofile.delete(iprofile.uuid) - except exc.HTTPNotFound: - raise exc.CommandError('Cpu profile delete failed: %s' % n) - print('Deleted cpu profile %s' % n) - - -# -# DISK PROFILES -# -def get_storconfig_short(iprofile): - str = '' - for stor in iprofile.stors: - if str != '': - str = str + "; " - str = str + "%s" % stor.function - if stor.function == 'osd': - str = str + ": %s" % stor.tier_name - return str - - -def get_storconfig_detailed(iprofile): - str = '' - journals = {} - count = 0 - for stor in iprofile.stors: - # count journals - if stor.function == 'journal': - count += 1 - journals.update({stor.uuid: count}) - for stor in iprofile.stors: - str += "function: %s stor" % stor.function - if stor.function == 'journal' and count > 1: - str += " %s" % journals[stor.uuid] - if stor.function == 'osd': - str += ", ceph journal: size %s GiB, " % (stor.journal_size_mib // 1024) - if stor.journal_location == stor.uuid: - str += "collocated on osd stor" - else: - str += "on journal stor" - if count > 1: - str += (" %s" % journals[stor.journal_location]) - str += ", for tier: %s" % stor.tier_name - str = str + "\n" - return str - - -def get_diskconfig(iprofile): - str = '' - invalid_profile = False - for disk in iprofile.disks: - if str != '': - str = str + "; " - str = str + "%s: %s GiB" % (disk.device_path, math.floor(float(disk.size_mib) / 1024 * 1000) / 1000.0) - if not disk.device_path: - invalid_profile = True - return str, invalid_profile - - -def get_partconfig(iprofile): - str = '' - for part in iprofile.partitions: - if str != '': - str = str + "; " - str = str + "%s: %s GiB" % (part.device_path, math.floor(float(part.size_mib) / 1024 * 1000) / 1000.0) - return str - - -def get_ilvg_config(iprofile): - str = '' - for ilvg in iprofile.ilvgs: - if str != '': - str += "; " - - capabilities_str = '' - for k, v in ilvg.capabilities.items(): - if capabilities_str != '': - capabilities_str += "; " - capabilities_str += "%s: %s " % (k, v) - - str += "%s, %s" % (ilvg.lvm_vg_name, capabilities_str) - return str - - -def get_ipv_config(iprofile): - str = '' - for ipv in iprofile.ipvs: - if str != '': - str = str + "; " - str = str + "type %s: %s" % (ipv.pv_type, ipv.disk_or_part_device_path) - return str - - -def get_storprofile_data(cc, iprofile, detailed=False): - profile_disk_invalid = False - iprofile.disks = cc.iprofile.list_idisks(iprofile.uuid) - if iprofile.disks: - iprofile.diskconfig, profile_disk_invalid = get_diskconfig(iprofile) - iprofile.partitions = cc.iprofile.list_partitions(iprofile.uuid) - iprofile.partconfig = get_partconfig(iprofile) - iprofile.stors = cc.iprofile.list_istors(iprofile.uuid) - if iprofile.stors: - if detailed: - iprofile.storconfig = get_storconfig_detailed(iprofile) - else: - iprofile.storconfig = get_storconfig_short(iprofile) - else: - iprofile.ilvgs = cc.iprofile.list_ilvgs(iprofile.uuid) - iprofile.ipvs = cc.iprofile.list_ipvs(iprofile.uuid) - iprofile.ilvg_config = get_ilvg_config(iprofile) - iprofile.ipv_config = get_ipv_config(iprofile) - - return profile_disk_invalid - - -def do_storprofile_list(cc, args): - """List storage profiles.""" - profiles = cc.iprofile.list_storage_profiles() - storprofiles = [] - localstorprofiles = [] - profile_disk_invalid = False - - for profile in profiles: - profile.disks = [utils.objectify(n) for n in profile.disks] - profile.partitions = [utils.objectify(n) for n in profile.partitions] - profile.stors = [utils.objectify(n) for n in profile.stors] - profile.ilvgs = [utils.objectify(n) for n in profile.lvgs] - profile.ipvs = [utils.objectify(n) for n in profile.pvs] - - profile.diskconfig, crt_profile_disk_invalid = get_diskconfig(profile) - profile_disk_invalid = (profile_disk_invalid or - crt_profile_disk_invalid) - profile.partconfig = get_partconfig(profile) - profile.storconfig = get_storconfig_short(profile) - profile.ilvg_config = get_ilvg_config(profile) - profile.ipv_config = get_ipv_config(profile) - - if profile.profiletype == constants.PROFILE_TYPE_LOCAL_STORAGE: - localstorprofiles.append(profile) - else: - storprofiles.append(profile) - - if profile_disk_invalid: - print("WARNING: Storage profiles from a previous release are " - "missing the persistent disk name in the disk config field. " - "These profiles need to be deleted and recreated.") - - if storprofiles: - field_labels = ['uuid', 'name', 'disk config', 'partition config', - 'stor config'] - fields = ['uuid', 'profilename', 'diskconfig', 'partconfig', - 'storconfig'] - utils.print_list(storprofiles, fields, field_labels, sortby=0) - - if localstorprofiles: - field_labels = ['uuid', 'name', 'disk config', 'partition config', - 'physical volume config', - 'logical volume group config'] - fields = ['uuid', 'profilename', 'diskconfig', 'partconfig', - 'ipv_config', 'ilvg_config'] - utils.print_list(localstorprofiles, fields, field_labels, sortby=0) - - -def _print_storprofile_show(storprofile): - if hasattr(storprofile, 'ilvg_config'): - fields = ['uuid', 'profilename', 'diskconfig', 'partconfig', - 'ipv_config', 'ilvg_config'] - field_labels = ['uuid', 'name', 'diskconfig', 'partconfig', 'physical ' - 'volume config', 'logical volume group config'] - else: - fields = ['profilename', 'diskconfig', 'partconfig', 'storconfig', - 'uuid', 'created_at', 'updated_at'] - field_labels = ['name', 'diskconfig', 'partconfig', 'storconfig', - 'uuid', 'created_at', 'updated_at'] - - data = [(f, getattr(storprofile, f, '')) for f in fields] - utils.print_tuple_list(data, field_labels) - - -@utils.arg('iprofilenameoruuid', - metavar='', - help="Name or UUID of stor profile") -def do_storprofile_show(cc, args): - """Show storage profile attributes.""" - iprofile = iprofile_utils._find_iprofile(cc, args.iprofilenameoruuid) - - get_storprofile_data(cc, iprofile) - if not iprofile.disks: # not a stor profile - raise exc.CommandError('Stor Profile not found: %s' % args.ifprofilenameoruuid) - - profile_disk_invalid = get_storprofile_data(cc, iprofile, detailed=True) - if profile_disk_invalid: - print("WARNING: This storage profile, from a previous release, is " - "missing the persistent disk name in the disk config field. " - "This profile needs to be deleted and recreated.") - _print_storprofile_show(iprofile) - - -@utils.arg('iprofilename', - metavar='', - help="Name of stor profile [REQUIRED]") -@utils.arg('hostnameoruuid', - metavar='', - help='Name or UUID of the host [REQUIRED]') -def do_storprofile_add(cc, args): - """Add a storage profile""" - ihost = ihost_utils._find_ihost(cc, args.hostnameoruuid) - - # create new storage profile - data = {} - data['profilename'] = args.iprofilename - data['profiletype'] = constants.PROFILE_TYPE_STORAGE - data['ihost_uuid'] = ihost.uuid - - try: - iprofile = cc.iprofile.create(**data) - except Exception as e: - raise exc.CommandError(str(e)) - - suuid = getattr(iprofile, 'uuid', '') - try: - iprofile = cc.iprofile.get(suuid) - except exc.HTTPNotFound: - raise exc.CommandError('Storage Profile not found: %s' % suuid) - else: - get_storprofile_data(cc, iprofile) - _print_storprofile_show(iprofile) - - -@utils.arg('iprofilenameoruuid', - metavar='', - nargs='+', - help="Name or UUID of stor profile") -def do_storprofile_delete(cc, args): - """Delete a storage profile.""" - for n in args.iprofilenameoruuid: - iprofile = iprofile_utils._find_iprofile(cc, n) - try: - cc.iprofile.delete(iprofile.uuid) - except exc.HTTPNotFound: - raise exc.CommandError('Storage profile delete failed: %s' % n) - print('Deleted storage profile %s' % n) - -# -# MEMORY PROFILES -# - - -def get_memoryconfig_platform(iprofile): - str = '' - for memory in iprofile.memory: - if str != '': - str = str + "; " - str = str + "%s" % (memory.platform_reserved_mib) - return str - - -def get_memoryconfig_2M(iprofile): - str = '' - for memory in iprofile.memory: - if str != '': - str = str + "; " - str = str + "%s" % (memory.vm_hugepages_nr_2M_pending) - return str - - -def get_memoryconfig_1G(iprofile): - str = '' - for memory in iprofile.memory: - if str != '': - str = str + "; " - str = str + "%s" % (memory.vm_hugepages_nr_1G_pending) - return str - - -def get_memoryconfig_vswitch_nr(iprofile): - str = '' - for memory in iprofile.memory: - if str != '': - str = str + "; " - str = str + "%s" % (memory.vswitch_hugepages_reqd) - return str - - -def get_memoryconfig_vswitch_size(iprofile): - str = '' - for memory in iprofile.memory: - if str != '': - str = str + "; " - str = str + "%s" % (memory.vswitch_hugepages_size_mib) - return str - - -def get_memprofile_data(cc, iprofile): - iprofile.memory = cc.iprofile.list_imemorys(iprofile.uuid) - iprofile.nodes = cc.iprofile.list_inodes(iprofile.uuid) - iprofile.platform_reserved_mib = get_memoryconfig_platform(iprofile) - iprofile.application_hugepages_2M = get_memoryconfig_2M(iprofile) - iprofile.application_hugepages_1G = get_memoryconfig_1G(iprofile) - iprofile.vswitch_hugepages_nr = get_memoryconfig_vswitch_nr(iprofile) - iprofile.vswitch_hugepages_size_mib = get_memoryconfig_vswitch_size(iprofile) - - -def do_memprofile_list(cc, args): - """List memory profiles.""" - profiles = cc.iprofile.list_memory_profiles() - for profile in profiles: - profile.platform_reserved_mib = get_memoryconfig_platform(profile) - profile.application_hugepages_2M = get_memoryconfig_2M(profile) - profile.application_hugepages_1G = get_memoryconfig_1G(profile) - profile.vswitch_hugepages_nr = get_memoryconfig_vswitch_nr(profile) - profile.vswitch_hugepages_size_mib = get_memoryconfig_vswitch_size(profile) - - field_labels = ['uuid', 'name', 'platform_reserved_mib', - 'application_hugepages_2M', 'application_hugepages_1G', - 'vswitch_hugepages_nr', 'vswitch_hugepages_size_mib'] - fields = ['uuid', 'profilename', 'platform_reserved_mib', - 'application_hugepages_2M', 'application_hugepages_1G', - 'vswitch_hugepages_nr', 'vswitch_hugepages_size_mib'] - utils.print_list(profiles, fields, field_labels, sortby=0) - - -def _print_memprofile_show(memoryprofile): - fields = ['profilename', 'platform_reserved_mib', 'application_hugepages_2M', - 'application_hugepages_1G', 'vswitch_hugepages_nr', - 'vswitch_hugepages_size_mib', 'uuid', 'created_at', 'updated_at'] - labels = ['name', 'platform_reserved_mib', 'application_hugepages_2M', - 'application_hugepages_1G', 'vswitch_hugepages_nr', - 'vswitch_hugepages_size_mib', 'uuid', 'created_at', 'updated_at'] - - data = [(f, getattr(memoryprofile, f, '')) for f in fields] - utils.print_tuple_list(data, labels) - - -@utils.arg('iprofilenameoruuid', - metavar='', - help="Name or UUID of memory profile") -def do_memprofile_show(cc, args): - """Show memory profile attributes.""" - iprofile = iprofile_utils._find_iprofile(cc, args.iprofilenameoruuid) - - get_memprofile_data(cc, iprofile) - if not iprofile.memory: # not a memory profile - raise exc.CommandError('Memory Profile not found: %s' % args.ifprofilenameoruuid) - - _print_memprofile_show(iprofile) - - -@utils.arg('iprofilename', - metavar='', - help="Name of memory profile [REQUIRED]") -@utils.arg('hostnameoruuid', - metavar='', - help='Name or ID of the host [REQUIRED]') -def do_memprofile_add(cc, args): - """Add a memory profile.""" - ihost = ihost_utils._find_ihost(cc, args.hostnameoruuid) - - # create new memory profile - data = {} - data['profilename'] = args.iprofilename - data['profiletype'] = constants.PROFILE_TYPE_MEMORY - data['ihost_uuid'] = ihost.uuid - - try: - iprofile = cc.iprofile.create(**data) - except Exception as e: - raise exc.CommandError(str(e)) - - suuid = getattr(iprofile, 'uuid', '') - try: - iprofile = cc.iprofile.get(suuid) - except exc.HTTPNotFound: - raise exc.CommandError('Memory profile not found: %s' % suuid) - else: - get_memprofile_data(cc, iprofile) - _print_memprofile_show(iprofile) - - -@utils.arg('iprofilenameoruuid', - metavar='', - nargs='+', - help="Name or UUID of memory profile") -def do_memprofile_delete(cc, args): - """Delete a memory profile.""" - for n in args.iprofilenameoruuid: - iprofile = iprofile_utils._find_iprofile(cc, n) - try: - cc.iprofile.delete(iprofile.uuid) - except exc.HTTPNotFound: - raise exc.CommandError('Memory profile delete failed: %s' % n) - print('Deleted memory profile %s' % n) - - -@utils.arg('profilefilename', - metavar='', - nargs='+', - help="Full path of the profile file to be imported") -def do_profile_import(cc, args): - """Import a profile file.""" - filename = args.profilefilename[0] - - try: - file = open(filename, 'rb') - except Exception: - raise exc.CommandError("Error: Could not open file %s for read." % filename) - - results = cc.iprofile.import_profile(file) - if results: - for result in results: - if(result['result'] == 'Invalid'): - print('error: %s is not a valid profile file.' % (filename)) - else: - print(result['msg']) - - if result['detail']: - print(' %s' % (result['detail'])) diff --git a/sysinv/cgts-client/cgts-client/cgtsclient/v1/shell.py b/sysinv/cgts-client/cgts-client/cgtsclient/v1/shell.py index 2d7b043eb3..a07ed135bd 100644 --- a/sysinv/cgts-client/cgts-client/cgtsclient/v1/shell.py +++ b/sysinv/cgts-client/cgts-client/cgtsclient/v1/shell.py @@ -34,7 +34,6 @@ from cgtsclient.v1 import imemory_shell from cgtsclient.v1 import interface_datanetwork_shell from cgtsclient.v1 import interface_network_shell from cgtsclient.v1 import intp_shell -from cgtsclient.v1 import iprofile_shell from cgtsclient.v1 import ipv_shell from cgtsclient.v1 import isensor_shell from cgtsclient.v1 import isensorgroup_shell @@ -89,7 +88,6 @@ COMMAND_MODULES = [ istor_shell, ilvg_shell, ipv_shell, - iprofile_shell, sm_service_nodes_shell, sm_servicegroup_shell, sm_service_shell,