Merge "Adding dcmanager kube-rootca-update-strategy CLI"

This commit is contained in:
Zuul 2021-09-20 13:39:53 +00:00 committed by Gerrit Code Review
commit aa37442252
6 changed files with 128 additions and 17 deletions

View File

@ -29,6 +29,7 @@ import osprofiler.profiler
from dcmanagerclient.api import httpclient
from dcmanagerclient.api.v1 import alarm_manager as am
from dcmanagerclient.api.v1 import fw_update_manager as fum
from dcmanagerclient.api.v1 import kube_rootca_update_manager as krum
from dcmanagerclient.api.v1 import kube_upgrade_manager as kupm
from dcmanagerclient.api.v1 import strategy_step_manager as ssm
from dcmanagerclient.api.v1 import subcloud_deploy_manager as sdm
@ -104,6 +105,8 @@ class Client(object):
self.http_client)
self.alarm_manager = am.alarm_manager(self.http_client)
self.fw_update_manager = fum.fw_update_manager(self.http_client)
self.kube_rootca_update_manager = \
krum.kube_rootca_update_manager(self.http_client)
self.kube_upgrade_manager = kupm.kube_upgrade_manager(self.http_client)
self.sw_patch_manager = spm.sw_patch_manager(self.http_client)
self.sw_update_options_manager = \

View File

@ -0,0 +1,16 @@
#
# Copyright (c) 2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from dcmanagerclient.api.v1.sw_update_manager import sw_update_manager
SW_UPDATE_TYPE_KUBE_ROOTCA_UPDATE = "kube-rootca-update"
class kube_rootca_update_manager(sw_update_manager):
def __init__(self, http_client):
super(kube_rootca_update_manager, self).__init__(
http_client,
update_type=SW_UPDATE_TYPE_KUBE_ROOTCA_UPDATE)

View File

@ -0,0 +1,48 @@
#
# Copyright (c) 2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from dcmanagerclient.commands.v1 import sw_update_manager
class KubeRootcaUpdateManagerMixin(object):
"""This Mixin provides the update manager used for kube rootca updates."""
def get_sw_update_manager(self):
dcmanager_client = self.app.client_manager.kube_rootca_update_manager
return dcmanager_client.kube_rootca_update_manager
class CreateKubeRootcaUpdateStrategy(KubeRootcaUpdateManagerMixin,
sw_update_manager.CreateSwUpdateStrategy):
"""Create a kube rootca update strategy."""
# override validate_force_params defined in CreateSwUpdateStrategy
def validate_force_params(self, parsed_args):
"""Disable validation the force option. Allows multiple subclouds."""
pass
class ShowKubeRootcaUpdateStrategy(KubeRootcaUpdateManagerMixin,
sw_update_manager.ShowSwUpdateStrategy):
"""Show the details of a kube rootca update strategy for a subcloud."""
pass
class DeleteKubeRootcaUpdateStrategy(KubeRootcaUpdateManagerMixin,
sw_update_manager.DeleteSwUpdateStrategy):
"""Delete kube rootca update strategy from the database."""
pass
class ApplyKubeRootcaUpdateStrategy(KubeRootcaUpdateManagerMixin,
sw_update_manager.ApplySwUpdateStrategy):
"""Apply a kube rootca update strategy."""
pass
class AbortKubeRootcaUpdateStrategy(KubeRootcaUpdateManagerMixin,
sw_update_manager.AbortSwUpdateStrategy):
"""Abort a kube rootca update strategy."""
pass

View File

@ -170,6 +170,30 @@ class CreateSwUpdateStrategy(base.DCManagerShowOne):
return parser
# These validate methods can be overridden
def validate_force_params(self, parsed_args):
"""Most orchestrations only support force for a single subcloud"""
if parsed_args.force and not parsed_args.cloud_name:
error_msg = 'The --force option can only be applied to a single ' \
'subcloud. Please specify the subcloud name.'
raise exceptions.DCManagerClientException(error_msg)
def validate_group_params(self, parsed_args):
"""When specifying a group, other inputs are considered invalid"""
if parsed_args.group:
if parsed_args.cloud_name:
error_msg = 'The cloud_name and group options are mutually ' \
'exclusive.'
raise exceptions.DCManagerClientException(error_msg)
if parsed_args.subcloud_apply_type:
error_msg = 'The --subcloud-apply-type is not ' \
'supported when --group option is applied.'
raise exceptions.DCManagerClientException(error_msg)
if parsed_args.max_parallel_subclouds:
error_msg = 'The --max-parallel-subclouds options is not ' \
'supported when --group option is applied.'
raise exceptions.DCManagerClientException(error_msg)
def _get_resources(self, parsed_args):
kwargs = dict()
if parsed_args.subcloud_apply_type:
@ -186,22 +210,8 @@ class CreateSwUpdateStrategy(base.DCManagerShowOne):
if parsed_args.group is not None:
kwargs['subcloud_group'] = parsed_args.group
if parsed_args.force and not parsed_args.cloud_name:
error_msg = 'The --force option can only be applied to a single ' \
'subcloud. Please specify the subcloud name.'
raise exceptions.DCManagerClientException(error_msg)
if parsed_args.cloud_name and parsed_args.group:
error_msg = 'The cloud_name and group options are mutually ' \
'exclusive.'
raise exceptions.DCManagerClientException(error_msg)
if parsed_args.group and (parsed_args.subcloud_apply_type or
parsed_args.max_parallel_subclouds):
error_msg = 'The --subcloud-apply-type and ' \
'--max-parallel-subclouds options are not ' \
'supported when --group option is applied.'
raise exceptions.DCManagerClientException(error_msg)
self.validate_force_params(parsed_args)
self.validate_group_params(parsed_args)
return self.get_sw_update_manager().create_sw_update_strategy(**kwargs)

View File

@ -38,6 +38,7 @@ from osc_lib.command import command
import argparse
from dcmanagerclient.commands.v1 import alarm_manager as am
from dcmanagerclient.commands.v1 import fw_update_manager as fum
from dcmanagerclient.commands.v1 import kube_rootca_update_manager as krum
from dcmanagerclient.commands.v1 import kube_upgrade_manager as kupm
from dcmanagerclient.commands.v1 import subcloud_deploy_manager as sdm
from dcmanagerclient.commands.v1 import subcloud_group_manager as gm
@ -470,7 +471,8 @@ class DCManagerShell(app.App):
strategy_step_manager=self.client,
sw_update_options_manager=self.client,
sw_upgrade_manager=self.client,
kube_upgrade_manager=self.client)
kube_upgrade_manager=self.client,
kube_rootca_update_manager=self.client)
)
self.client_manager = ClientManager()
@ -520,6 +522,16 @@ class DCManagerShell(app.App):
'fw-update-strategy apply': fum.ApplyFwUpdateStrategy,
'fw-update-strategy abort': fum.AbortFwUpdateStrategy,
'fw-update-strategy show': fum.ShowFwUpdateStrategy,
'kube-rootca-update-strategy create':
krum.CreateKubeRootcaUpdateStrategy,
'kube-rootca-update-strategy delete':
krum.DeleteKubeRootcaUpdateStrategy,
'kube-rootca-update-strategy apply':
krum.ApplyKubeRootcaUpdateStrategy,
'kube-rootca-update-strategy abort':
krum.AbortKubeRootcaUpdateStrategy,
'kube-rootca-update-strategy show':
krum.ShowKubeRootcaUpdateStrategy,
'kube-upgrade-strategy create': kupm.CreateKubeUpgradeStrategy,
'kube-upgrade-strategy delete': kupm.DeleteKubeUpgradeStrategy,
'kube-upgrade-strategy apply': kupm.ApplyKubeUpgradeStrategy,

View File

@ -0,0 +1,22 @@
#
# Copyright (c) 2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from dcmanagerclient.commands.v1 import kube_rootca_update_manager as cli_cmd
from dcmanagerclient.tests import base
from dcmanagerclient.tests.v1.mixins import UpdateStrategyMixin
class TestKubeRootcaUpdateStrategy(UpdateStrategyMixin, base.BaseCommandTest):
def setUp(self):
super(TestKubeRootcaUpdateStrategy, self).setUp()
self.sw_update_manager = self.app.client_manager.\
kube_rootca_update_manager.kube_rootca_update_manager
self.create_command = cli_cmd.CreateKubeRootcaUpdateStrategy
self.show_command = cli_cmd.ShowKubeRootcaUpdateStrategy
self.delete_command = cli_cmd.DeleteKubeRootcaUpdateStrategy
self.apply_command = cli_cmd.ApplyKubeRootcaUpdateStrategy
self.abort_command = cli_cmd.AbortKubeRootcaUpdateStrategy