kolla-cli/kolla_cli/commands/property.py

267 lines
9.4 KiB
Python

# Copyright(c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# 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.
import traceback
from cliff.command import Command
from cliff.lister import Lister
from kolla_cli.api.client import ClientApi
from kolla_cli.commands.exceptions import CommandError
from kolla_cli.common import utils
import kolla_cli.i18n as u
CLIENT = ClientApi()
def _get_names(args_list):
csv_list = args_list[0].strip()
names = csv_list.split(',')
if 'all' in names:
names = None
return names
class PropertySet(Command):
"Property Set"
def get_parser(self, prog_name):
parser = super(PropertySet, self).get_parser(prog_name)
parser.add_argument('propertyname', metavar='<propertyname>',
help=u._('Property name'))
parser.add_argument('propertyvalue', metavar='<propertyvalue',
help=u._('Property value'))
parser.add_argument('--hosts', nargs=1,
metavar='<host_list>',
help=u._('Property host list'))
parser.add_argument('--groups', nargs=1,
metavar='<group_list>',
help=u._('Property group list'))
return parser
def take_action(self, parsed_args):
try:
property_name = parsed_args.propertyname.strip()
property_value = parsed_args.propertyvalue.strip()
property_dict = {}
property_dict[property_name] = property_value
if parsed_args.hosts:
if parsed_args.groups:
raise CommandError(
u._('Invalid to use both hosts and groups arguments '
'together.'))
host_names = _get_names(parsed_args.hosts)
CLIENT.property_set(property_dict,
'host', host_names)
elif parsed_args.groups:
group_names = _get_names(parsed_args.groups)
CLIENT.property_set(property_dict,
'group', group_names)
else:
CLIENT.property_set(property_dict,
'global')
except Exception:
raise Exception(traceback.format_exc())
class PropertyClear(Command):
"Property Clear"
def get_parser(self, prog_name):
parser = super(PropertyClear, self).get_parser(prog_name)
parser.add_argument('propertyname', metavar='<propertyname>',
help=u._('Property name'))
parser.add_argument('--hosts', nargs=1,
metavar='<host_list>',
help=u._('Property host list'))
parser.add_argument('--groups', nargs=1,
metavar='<group_list>',
help=u._('Property group list'))
return parser
def take_action(self, parsed_args):
try:
property_name = parsed_args.propertyname.strip()
property_list = []
property_list.append(property_name)
if parsed_args.hosts:
if parsed_args.groups:
raise CommandError(
u._('Invalid to use both hosts and groups arguments '
'together.'))
host_names = _get_names(parsed_args.hosts)
CLIENT.property_clear(property_list, 'host',
host_names)
elif parsed_args.groups:
group_names = _get_names(parsed_args.groups)
CLIENT.property_clear(property_list, 'group',
group_names)
else:
CLIENT.property_clear(property_list, 'global')
except Exception:
raise Exception(traceback.format_exc())
class PropertyList(Lister):
"""List all properties."""
def __init__(self, app, app_args, cmd_name=None):
super(Lister, self).__init__(app, app_args,
cmd_name=cmd_name)
self.is_global = True
self.is_all_flag = False
self.is_long_flag = False
self.list_type = None
def get_parser(self, prog_name):
parser = super(PropertyList, self).get_parser(prog_name)
parser.add_argument('--all', action='store_true',
help=u._('List all properties'))
parser.add_argument('--long', action='store_true',
help=u._('Show all property attributes'))
parser.add_argument('--hosts', nargs=1,
metavar='<host_list>',
help=u._('Property host list'))
parser.add_argument('--groups', nargs=1,
metavar='<group_list>',
help=u._('Property group list'))
return parser
def take_action(self, parsed_args):
try:
if parsed_args.all:
self.is_all_flag = True
if parsed_args.long:
self.is_long_flag = True
if parsed_args.hosts:
if parsed_args.groups:
raise CommandError(
u._('Invalid to use both hosts and groups arguments '
'together.'))
self.is_global = False
self.list_type = u._('Host')
host_names = _get_names(parsed_args.hosts)
property_list = CLIENT.property_get('host',
host_names)
elif parsed_args.groups:
self.is_global = False
self.list_type = u._('Group')
group_names = _get_names(parsed_args.groups)
property_list = CLIENT.property_get('group',
group_names)
else:
property_list = CLIENT.property_get('global')
data = self._get_list_data(property_list)
header = self._get_list_header()
return (header, data)
except Exception:
raise Exception(traceback.format_exc())
def _get_list_header(self):
header = None
if self.is_long_flag:
if self.is_global:
header = (u._('OVR'),
u._('Property Name'), u._('Property Value'),
u._('Original Value'))
else:
header = (u._('OVR'),
u._('Property Name'), u._('Property Value'),
u._('Original Value'),
self.list_type)
else:
if self.is_global:
header = (u._('OVR'),
u._('Property Name'), u._('Property Value'))
else:
header = (u._('OVR'),
u._('Property Name'), u._('Property Value'),
self.list_type)
return header
def _get_list_data(self, property_list):
data = []
if property_list:
property_length = utils.get_property_list_length()
for prop in property_list:
include_prop = False
if (prop.value is not None and
len(str(prop.value)) > property_length):
if self.is_all_flag:
include_prop = True
else:
include_prop = True
if not include_prop:
continue
ovr_global = '-'
ovr_group = '-'
ovr_host = '-'
if prop.ovr_global:
ovr_global = '*'
if prop.ovr_group:
ovr_group = 'G'
if prop.ovr_host:
ovr_host = 'H'
prop_ovr = ovr_global + ovr_group + ovr_host
if self.is_long_flag:
if self.is_global:
data.append((prop_ovr, prop.name, prop.value,
prop.orig_value))
else:
data.append((prop_ovr, prop.name, prop.value,
prop.orig_value, prop.target))
else:
if self.is_global:
data.append((prop_ovr, prop.name, prop.value))
else:
data.append((prop_ovr, prop.name, prop.value,
prop.target))
else:
if self.is_long_flag:
if self.is_global:
data.append(('', '', '', ''))
else:
data.append(('', '', '', '', ''))
else:
if self.is_global:
data.append(('', '', ''))
else:
data.append(('', '', '', ''))
return data