diff --git a/distributedcloud-client/dcmanagerclient/api/v1/client.py b/distributedcloud-client/dcmanagerclient/api/v1/client.py index cc16754..ce36ac4 100644 --- a/distributedcloud-client/dcmanagerclient/api/v1/client.py +++ b/distributedcloud-client/dcmanagerclient/api/v1/client.py @@ -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 = \ diff --git a/distributedcloud-client/dcmanagerclient/api/v1/kube_rootca_update_manager.py b/distributedcloud-client/dcmanagerclient/api/v1/kube_rootca_update_manager.py new file mode 100644 index 0000000..6c91b2c --- /dev/null +++ b/distributedcloud-client/dcmanagerclient/api/v1/kube_rootca_update_manager.py @@ -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) diff --git a/distributedcloud-client/dcmanagerclient/commands/v1/kube_rootca_update_manager.py b/distributedcloud-client/dcmanagerclient/commands/v1/kube_rootca_update_manager.py new file mode 100644 index 0000000..ba34afc --- /dev/null +++ b/distributedcloud-client/dcmanagerclient/commands/v1/kube_rootca_update_manager.py @@ -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 diff --git a/distributedcloud-client/dcmanagerclient/commands/v1/sw_update_manager.py b/distributedcloud-client/dcmanagerclient/commands/v1/sw_update_manager.py index 7712c58..9e224eb 100644 --- a/distributedcloud-client/dcmanagerclient/commands/v1/sw_update_manager.py +++ b/distributedcloud-client/dcmanagerclient/commands/v1/sw_update_manager.py @@ -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) diff --git a/distributedcloud-client/dcmanagerclient/shell.py b/distributedcloud-client/dcmanagerclient/shell.py index e30b3c4..205637c 100644 --- a/distributedcloud-client/dcmanagerclient/shell.py +++ b/distributedcloud-client/dcmanagerclient/shell.py @@ -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, diff --git a/distributedcloud-client/dcmanagerclient/tests/v1/test_kube_rootca_update_strategy.py b/distributedcloud-client/dcmanagerclient/tests/v1/test_kube_rootca_update_strategy.py new file mode 100644 index 0000000..0725ae8 --- /dev/null +++ b/distributedcloud-client/dcmanagerclient/tests/v1/test_kube_rootca_update_strategy.py @@ -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