Merge "Create software-deploy-strategy command"
This commit is contained in:
commit
76029da32b
|
@ -1,7 +1,7 @@
|
||||||
# Copyright 2014 - Mirantis, Inc.
|
# Copyright 2014 - Mirantis, Inc.
|
||||||
# Copyright 2015 - StackStorm, Inc.
|
# Copyright 2015 - StackStorm, Inc.
|
||||||
# Copyright 2016 - Ericsson AB.
|
# Copyright 2016 - Ericsson AB.
|
||||||
# Copyright (c) 2017-2023 Wind River Systems, Inc.
|
# Copyright (c) 2017-2024 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -34,6 +34,7 @@ from dcmanagerclient.api.v1 import subcloud_deploy_manager as sdm
|
||||||
from dcmanagerclient.api.v1 import subcloud_group_manager as gm
|
from dcmanagerclient.api.v1 import subcloud_group_manager as gm
|
||||||
from dcmanagerclient.api.v1 import subcloud_manager as sm
|
from dcmanagerclient.api.v1 import subcloud_manager as sm
|
||||||
from dcmanagerclient.api.v1 import subcloud_peer_group_manager as pm
|
from dcmanagerclient.api.v1 import subcloud_peer_group_manager as pm
|
||||||
|
from dcmanagerclient.api.v1 import sw_deploy_manager as swdm
|
||||||
from dcmanagerclient.api.v1 import sw_patch_manager as spm
|
from dcmanagerclient.api.v1 import sw_patch_manager as spm
|
||||||
from dcmanagerclient.api.v1 import sw_prestage_manager as spr
|
from dcmanagerclient.api.v1 import sw_prestage_manager as spr
|
||||||
from dcmanagerclient.api.v1 import sw_strategy_manager as sstm
|
from dcmanagerclient.api.v1 import sw_strategy_manager as sstm
|
||||||
|
@ -118,6 +119,7 @@ class Client(object):
|
||||||
self.kube_rootca_update_manager = \
|
self.kube_rootca_update_manager = \
|
||||||
krum.kube_rootca_update_manager(self.http_client)
|
krum.kube_rootca_update_manager(self.http_client)
|
||||||
self.kube_upgrade_manager = kupm.kube_upgrade_manager(self.http_client)
|
self.kube_upgrade_manager = kupm.kube_upgrade_manager(self.http_client)
|
||||||
|
self.sw_deploy_manager = swdm.SwDeployManager(self.http_client)
|
||||||
self.sw_patch_manager = spm.sw_patch_manager(self.http_client)
|
self.sw_patch_manager = spm.sw_patch_manager(self.http_client)
|
||||||
self.sw_prestage_manager = spr.sw_prestage_manager(self.http_client)
|
self.sw_prestage_manager = spr.sw_prestage_manager(self.http_client)
|
||||||
self.sw_update_options_manager = \
|
self.sw_update_options_manager = \
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2024 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
from dcmanagerclient.api.v1.sw_update_manager import sw_update_manager
|
||||||
|
|
||||||
|
SW_UPDATE_TYPE_USM = "software"
|
||||||
|
|
||||||
|
|
||||||
|
class SwDeployManager(sw_update_manager):
|
||||||
|
def __init__(self, http_client):
|
||||||
|
super().__init__(
|
||||||
|
http_client, update_type=SW_UPDATE_TYPE_USM, extra_args=["release"]
|
||||||
|
)
|
|
@ -0,0 +1,95 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2024 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
from dcmanagerclient.commands.v1 import sw_update_manager
|
||||||
|
|
||||||
|
RELEASE_FIELD = -3
|
||||||
|
|
||||||
|
|
||||||
|
class SwDeployManagerMixin(object):
|
||||||
|
"""This Mixin provides the manager used for software deploy releases."""
|
||||||
|
|
||||||
|
def get_sw_update_manager(self):
|
||||||
|
dcmanager_client = self.app.client_manager.sw_deploy_manager
|
||||||
|
return dcmanager_client.sw_deploy_manager
|
||||||
|
|
||||||
|
def custom_format_function(self, sw_update_strategy=None):
|
||||||
|
original_fmt_func = super()._get_format_function()
|
||||||
|
columns, data = original_fmt_func(sw_update_strategy)
|
||||||
|
release_id = ""
|
||||||
|
if sw_update_strategy and sw_update_strategy.extra_args:
|
||||||
|
release_id = sw_update_strategy.extra_args.get("release_id")
|
||||||
|
|
||||||
|
# Insert the 'release_id' field before the 'state',
|
||||||
|
# 'created_at' and 'updated_at' fields
|
||||||
|
columns = columns[:RELEASE_FIELD] + (
|
||||||
|
"release_id",) + columns[RELEASE_FIELD:]
|
||||||
|
data = data[:RELEASE_FIELD] + (release_id,) + data[RELEASE_FIELD:]
|
||||||
|
return columns, data
|
||||||
|
|
||||||
|
def _get_format_function(self):
|
||||||
|
return self.custom_format_function
|
||||||
|
|
||||||
|
|
||||||
|
class CreateSwDeployStrategy(
|
||||||
|
SwDeployManagerMixin, sw_update_manager.CreateSwUpdateStrategy
|
||||||
|
):
|
||||||
|
"""Create a software deploy strategy."""
|
||||||
|
|
||||||
|
def add_force_argument(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
"--force",
|
||||||
|
required=False,
|
||||||
|
action="store_true",
|
||||||
|
help="Skip checking the subcloud for management affecting alarms.",
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(CreateSwDeployStrategy, self).get_parser(prog_name)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--release-id",
|
||||||
|
required=True,
|
||||||
|
help="The release to be deployed.",
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def process_custom_params(self, parsed_args, kwargs_dict):
|
||||||
|
"""Updates kwargs dictionary from parsed_args for patching"""
|
||||||
|
kwargs_dict["release_id"] = parsed_args.release_id
|
||||||
|
|
||||||
|
# override validate_force_params defined in CreateSwUpdateStrategy
|
||||||
|
def validate_force_params(self, parsed_args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ShowSwDeployStrategy(
|
||||||
|
SwDeployManagerMixin, sw_update_manager.ShowSwUpdateStrategy
|
||||||
|
):
|
||||||
|
"""Show the details of a software deploy strategy for a subcloud."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteSwDeployStrategy(
|
||||||
|
SwDeployManagerMixin, sw_update_manager.DeleteSwUpdateStrategy
|
||||||
|
):
|
||||||
|
"""Delete software deploy strategy from the database."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ApplySwDeployStrategy(
|
||||||
|
SwDeployManagerMixin, sw_update_manager.ApplySwUpdateStrategy
|
||||||
|
):
|
||||||
|
"""Apply a software deploy strategy."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class AbortSwDeployStrategy(
|
||||||
|
SwDeployManagerMixin, sw_update_manager.AbortSwUpdateStrategy
|
||||||
|
):
|
||||||
|
"""Abort a software deploy strategy."""
|
||||||
|
pass
|
|
@ -18,20 +18,18 @@
|
||||||
Command-line interface to the DC Manager APIs
|
Command-line interface to the DC Manager APIs
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from dcmanagerclient import __version__ as dcmanager_version
|
|
||||||
from dcmanagerclient.api import client
|
|
||||||
from dcmanagerclient import exceptions
|
|
||||||
|
|
||||||
from cliff import app
|
from cliff import app
|
||||||
from cliff import commandmanager
|
from cliff import commandmanager
|
||||||
from cliff import help
|
from cliff import help as cliff_help
|
||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
|
|
||||||
import argparse
|
from dcmanagerclient import __version__ as dcmanager_version
|
||||||
|
from dcmanagerclient.api import client
|
||||||
from dcmanagerclient.commands.v1 import alarm_manager as am
|
from dcmanagerclient.commands.v1 import alarm_manager as am
|
||||||
from dcmanagerclient.commands.v1 import fw_update_manager as fum
|
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_rootca_update_manager as krum
|
||||||
|
@ -43,12 +41,14 @@ from dcmanagerclient.commands.v1 import subcloud_deploy_manager as sdm
|
||||||
from dcmanagerclient.commands.v1 import subcloud_group_manager as gm
|
from dcmanagerclient.commands.v1 import subcloud_group_manager as gm
|
||||||
from dcmanagerclient.commands.v1 import subcloud_manager as sm
|
from dcmanagerclient.commands.v1 import subcloud_manager as sm
|
||||||
from dcmanagerclient.commands.v1 import subcloud_peer_group_manager as pm
|
from dcmanagerclient.commands.v1 import subcloud_peer_group_manager as pm
|
||||||
|
from dcmanagerclient.commands.v1 import sw_deploy_manager as swdm
|
||||||
from dcmanagerclient.commands.v1 import sw_patch_manager as spm
|
from dcmanagerclient.commands.v1 import sw_patch_manager as spm
|
||||||
from dcmanagerclient.commands.v1 import sw_prestage_manager as spr
|
from dcmanagerclient.commands.v1 import sw_prestage_manager as spr
|
||||||
from dcmanagerclient.commands.v1 import sw_update_manager as sum
|
from dcmanagerclient.commands.v1 import sw_update_manager as swum
|
||||||
from dcmanagerclient.commands.v1 import sw_update_options_manager as suom
|
from dcmanagerclient.commands.v1 import sw_update_options_manager as suom
|
||||||
from dcmanagerclient.commands.v1 import sw_upgrade_manager as supm
|
from dcmanagerclient.commands.v1 import sw_upgrade_manager as supm
|
||||||
from dcmanagerclient.commands.v1 import system_peer_manager as sp
|
from dcmanagerclient.commands.v1 import system_peer_manager as sp
|
||||||
|
from dcmanagerclient import exceptions
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class OpenStackHelpFormatter(argparse.HelpFormatter):
|
||||||
super(OpenStackHelpFormatter, self).start_section(heading)
|
super(OpenStackHelpFormatter, self).start_section(heading)
|
||||||
|
|
||||||
|
|
||||||
class HelpCommand(help.HelpCommand):
|
class HelpCommand(cliff_help.HelpCommand):
|
||||||
"""print detailed help for another command
|
"""print detailed help for another command
|
||||||
|
|
||||||
Provide a custom action so the help command without
|
Provide a custom action so the help command without
|
||||||
|
@ -498,6 +498,7 @@ class DCManagerShell(app.App):
|
||||||
strategy_step_manager=self.client,
|
strategy_step_manager=self.client,
|
||||||
sw_update_options_manager=self.client,
|
sw_update_options_manager=self.client,
|
||||||
sw_upgrade_manager=self.client,
|
sw_upgrade_manager=self.client,
|
||||||
|
sw_deploy_manager=self.client,
|
||||||
kube_upgrade_manager=self.client,
|
kube_upgrade_manager=self.client,
|
||||||
kube_rootca_update_manager=self.client,
|
kube_rootca_update_manager=self.client,
|
||||||
sw_prestage_manager=self.client,
|
sw_prestage_manager=self.client,
|
||||||
|
@ -528,109 +529,114 @@ class DCManagerShell(app.App):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_commands_v1():
|
def _get_commands_v1():
|
||||||
return {
|
return {
|
||||||
'bash-completion': BashCompletionCommand,
|
"alarm summary": am.ListAlarmSummary,
|
||||||
'subcloud add': sm.AddSubcloud,
|
"bash-completion": BashCompletionCommand,
|
||||||
'subcloud delete': sm.DeleteSubcloud,
|
"fw-update-strategy abort": fum.AbortFwUpdateStrategy,
|
||||||
'subcloud list': sm.ListSubcloud,
|
"fw-update-strategy apply": fum.ApplyFwUpdateStrategy,
|
||||||
'subcloud show': sm.ShowSubcloud,
|
"fw-update-strategy create": fum.CreateFwUpdateStrategy,
|
||||||
'subcloud errors': sm.ShowSubcloudError,
|
"fw-update-strategy delete": fum.DeleteFwUpdateStrategy,
|
||||||
'subcloud unmanage': sm.UnmanageSubcloud,
|
"fw-update-strategy show": fum.ShowFwUpdateStrategy,
|
||||||
'subcloud manage': sm.ManageSubcloud,
|
"kube-rootca-update-strategy abort":
|
||||||
'subcloud update': sm.UpdateSubcloud,
|
|
||||||
'subcloud reconfig': sm.ReconfigSubcloud,
|
|
||||||
'subcloud reinstall': sm.ReinstallSubcloud,
|
|
||||||
'subcloud redeploy': sm.RedeploySubcloud,
|
|
||||||
'subcloud restore': sm.RestoreSubcloud,
|
|
||||||
'subcloud prestage': sm.PrestageSubcloud,
|
|
||||||
'subcloud-backup create': sbm.CreateSubcloudBackup,
|
|
||||||
'subcloud-backup delete': sbm.DeleteSubcloudBackup,
|
|
||||||
'subcloud-backup restore': sbm.RestoreSubcloudBackup,
|
|
||||||
'subcloud-group add': gm.AddSubcloudGroup,
|
|
||||||
'subcloud-group delete': gm.DeleteSubcloudGroup,
|
|
||||||
'subcloud-group list': gm.ListSubcloudGroup,
|
|
||||||
'subcloud-group list-subclouds': gm.ListSubcloudGroupSubclouds,
|
|
||||||
'subcloud-group show': gm.ShowSubcloudGroup,
|
|
||||||
'subcloud-group update': gm.UpdateSubcloudGroup,
|
|
||||||
'subcloud deploy abort': psdm.AbortPhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy create': psdm.CreatePhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy bootstrap': psdm.BootstrapPhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy config': psdm.ConfigPhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy install': psdm.InstallPhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy complete': psdm.CompletePhasedSubcloudDeploy,
|
|
||||||
'subcloud deploy resume': psdm.PhasedSubcloudDeployResume,
|
|
||||||
'subcloud deploy upload': sdm.SubcloudDeployUpload,
|
|
||||||
'subcloud deploy show': sdm.SubcloudDeployShow,
|
|
||||||
'subcloud deploy delete': sdm.SubcloudDeployDelete,
|
|
||||||
'subcloud-deploy upload': sdm.DeprecatedSubcloudDeployUpload,
|
|
||||||
'subcloud-deploy show': sdm.DeprecatedSubcloudDeployShow,
|
|
||||||
'subcloud-peer-group add': pm.AddSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group list': pm.ListSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group list-subclouds':
|
|
||||||
pm.ListSubcloudPeerGroupSubclouds,
|
|
||||||
'subcloud-peer-group show': pm.ShowSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group update': pm.UpdateSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group delete': pm.DeleteSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group migrate': pm.MigrateSubcloudPeerGroup,
|
|
||||||
'subcloud-peer-group status': pm.StatusSubcloudPeerGroup,
|
|
||||||
'system-peer add': sp.AddSystemPeer,
|
|
||||||
'system-peer list': sp.ListSystemPeer,
|
|
||||||
'system-peer show': sp.ShowSystemPeer,
|
|
||||||
'system-peer update': sp.UpdateSystemPeer,
|
|
||||||
'system-peer delete': sp.DeleteSystemPeer,
|
|
||||||
'system-peer list-subcloud-peer-groups':
|
|
||||||
sp.ListSystemPeerSubcloudPeerGroups,
|
|
||||||
'peer-group-association add': pgam.AddPeerGroupAssociation,
|
|
||||||
'peer-group-association list': pgam.ListPeerGroupAssociation,
|
|
||||||
'peer-group-association show': pgam.ShowPeerGroupAssociation,
|
|
||||||
'peer-group-association sync': pgam.SyncPeerGroupAssociation,
|
|
||||||
'peer-group-association update': pgam.UpdatePeerGroupAssociation,
|
|
||||||
'peer-group-association delete': pgam.DeletePeerGroupAssociation,
|
|
||||||
'alarm summary': am.ListAlarmSummary,
|
|
||||||
'fw-update-strategy create': fum.CreateFwUpdateStrategy,
|
|
||||||
'fw-update-strategy delete': fum.DeleteFwUpdateStrategy,
|
|
||||||
'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,
|
krum.AbortKubeRootcaUpdateStrategy,
|
||||||
'kube-rootca-update-strategy show':
|
"kube-rootca-update-strategy apply":
|
||||||
|
krum.ApplyKubeRootcaUpdateStrategy,
|
||||||
|
"kube-rootca-update-strategy create":
|
||||||
|
krum.CreateKubeRootcaUpdateStrategy,
|
||||||
|
"kube-rootca-update-strategy delete":
|
||||||
|
krum.DeleteKubeRootcaUpdateStrategy,
|
||||||
|
"kube-rootca-update-strategy show":
|
||||||
krum.ShowKubeRootcaUpdateStrategy,
|
krum.ShowKubeRootcaUpdateStrategy,
|
||||||
'kube-upgrade-strategy create': kupm.CreateKubeUpgradeStrategy,
|
"kube-upgrade-strategy abort": kupm.AbortKubeUpgradeStrategy,
|
||||||
'kube-upgrade-strategy delete': kupm.DeleteKubeUpgradeStrategy,
|
"kube-upgrade-strategy apply": kupm.ApplyKubeUpgradeStrategy,
|
||||||
'kube-upgrade-strategy apply': kupm.ApplyKubeUpgradeStrategy,
|
"kube-upgrade-strategy create": kupm.CreateKubeUpgradeStrategy,
|
||||||
'kube-upgrade-strategy abort': kupm.AbortKubeUpgradeStrategy,
|
"kube-upgrade-strategy delete": kupm.DeleteKubeUpgradeStrategy,
|
||||||
'kube-upgrade-strategy show': kupm.ShowKubeUpgradeStrategy,
|
"kube-upgrade-strategy show": kupm.ShowKubeUpgradeStrategy,
|
||||||
'patch-strategy create': spm.CreatePatchUpdateStrategy,
|
"patch-strategy abort": spm.AbortPatchUpdateStrategy,
|
||||||
'patch-strategy delete': spm.DeletePatchUpdateStrategy,
|
"patch-strategy apply": spm.ApplyPatchUpdateStrategy,
|
||||||
'patch-strategy apply': spm.ApplyPatchUpdateStrategy,
|
"patch-strategy create": spm.CreatePatchUpdateStrategy,
|
||||||
'patch-strategy abort': spm.AbortPatchUpdateStrategy,
|
"patch-strategy delete": spm.DeletePatchUpdateStrategy,
|
||||||
'patch-strategy show': spm.ShowPatchUpdateStrategy,
|
"patch-strategy show": spm.ShowPatchUpdateStrategy,
|
||||||
'prestage-strategy create': spr.CreateSwPrestageStrategy,
|
"patch-strategy-config delete": suom.DeleteSwUpdateOptions,
|
||||||
'prestage-strategy delete': spr.DeleteSwPrestageStrategy,
|
"patch-strategy-config list": suom.ListSwUpdateOptions,
|
||||||
'prestage-strategy apply': spr.ApplySwPrestageStrategy,
|
"patch-strategy-config show": suom.ShowSwUpdateOptions,
|
||||||
'prestage-strategy abort': spr.AbortSwPrestageStrategy,
|
"patch-strategy-config update": suom.UpdateSwUpdateOptions,
|
||||||
'prestage-strategy show': spr.ShowSwPrestageStrategy,
|
"peer-group-association add": pgam.AddPeerGroupAssociation,
|
||||||
'strategy-step list': sum.ListSwUpdateStrategyStep,
|
"peer-group-association delete": pgam.DeletePeerGroupAssociation,
|
||||||
'strategy-step show': sum.ShowSwUpdateStrategyStep,
|
"peer-group-association list": pgam.ListPeerGroupAssociation,
|
||||||
'patch-strategy-config update': suom.UpdateSwUpdateOptions,
|
"peer-group-association show": pgam.ShowPeerGroupAssociation,
|
||||||
'patch-strategy-config list': suom.ListSwUpdateOptions,
|
"peer-group-association sync": pgam.SyncPeerGroupAssociation,
|
||||||
'patch-strategy-config show': suom.ShowSwUpdateOptions,
|
"peer-group-association update": pgam.UpdatePeerGroupAssociation,
|
||||||
'patch-strategy-config delete': suom.DeleteSwUpdateOptions,
|
"prestage-strategy abort": spr.AbortSwPrestageStrategy,
|
||||||
'strategy-config update': suom.UpdateSwUpdateOptions,
|
"prestage-strategy apply": spr.ApplySwPrestageStrategy,
|
||||||
'strategy-config list': suom.ListSwUpdateOptions,
|
"prestage-strategy create": spr.CreateSwPrestageStrategy,
|
||||||
'strategy-config show': suom.ShowSwUpdateOptions,
|
"prestage-strategy delete": spr.DeleteSwPrestageStrategy,
|
||||||
'strategy-config delete': suom.DeleteSwUpdateOptions,
|
"prestage-strategy show": spr.ShowSwPrestageStrategy,
|
||||||
'upgrade-strategy create': supm.CreateSwUpgradeStrategy,
|
"software-deploy-strategy abort": swdm.AbortSwDeployStrategy,
|
||||||
'upgrade-strategy delete': supm.DeleteSwUpgradeStrategy,
|
"software-deploy-strategy apply": swdm.ApplySwDeployStrategy,
|
||||||
'upgrade-strategy apply': supm.ApplySwUpgradeStrategy,
|
"software-deploy-strategy create": swdm.CreateSwDeployStrategy,
|
||||||
'upgrade-strategy abort': supm.AbortSwUpgradeStrategy,
|
"software-deploy-strategy delete": swdm.DeleteSwDeployStrategy,
|
||||||
'upgrade-strategy show': supm.ShowSwUpgradeStrategy,
|
"software-deploy-strategy show": swdm.ShowSwDeployStrategy,
|
||||||
|
"strategy-step list": swum.ListSwUpdateStrategyStep,
|
||||||
|
"strategy-step show": swum.ShowSwUpdateStrategyStep,
|
||||||
|
"strategy-config delete": suom.DeleteSwUpdateOptions,
|
||||||
|
"strategy-config list": suom.ListSwUpdateOptions,
|
||||||
|
"strategy-config show": suom.ShowSwUpdateOptions,
|
||||||
|
"strategy-config update": suom.UpdateSwUpdateOptions,
|
||||||
|
"subcloud add": sm.AddSubcloud,
|
||||||
|
"subcloud delete": sm.DeleteSubcloud,
|
||||||
|
"subcloud deploy abort": psdm.AbortPhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy bootstrap": psdm.BootstrapPhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy complete": psdm.CompletePhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy config": psdm.ConfigPhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy create": psdm.CreatePhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy delete": sdm.SubcloudDeployDelete,
|
||||||
|
"subcloud deploy install": psdm.InstallPhasedSubcloudDeploy,
|
||||||
|
"subcloud deploy resume": psdm.PhasedSubcloudDeployResume,
|
||||||
|
"subcloud deploy show": sdm.SubcloudDeployShow,
|
||||||
|
"subcloud deploy upload": sdm.SubcloudDeployUpload,
|
||||||
|
"subcloud errors": sm.ShowSubcloudError,
|
||||||
|
"subcloud list": sm.ListSubcloud,
|
||||||
|
"subcloud manage": sm.ManageSubcloud,
|
||||||
|
"subcloud reconfig": sm.ReconfigSubcloud,
|
||||||
|
"subcloud redeploy": sm.RedeploySubcloud,
|
||||||
|
"subcloud reinstall": sm.ReinstallSubcloud,
|
||||||
|
"subcloud restore": sm.RestoreSubcloud,
|
||||||
|
"subcloud show": sm.ShowSubcloud,
|
||||||
|
"subcloud prestage": sm.PrestageSubcloud,
|
||||||
|
"subcloud unmanage": sm.UnmanageSubcloud,
|
||||||
|
"subcloud update": sm.UpdateSubcloud,
|
||||||
|
"subcloud-backup create": sbm.CreateSubcloudBackup,
|
||||||
|
"subcloud-backup delete": sbm.DeleteSubcloudBackup,
|
||||||
|
"subcloud-backup restore": sbm.RestoreSubcloudBackup,
|
||||||
|
"subcloud-deploy show": sdm.DeprecatedSubcloudDeployShow,
|
||||||
|
"subcloud-deploy upload": sdm.DeprecatedSubcloudDeployUpload,
|
||||||
|
"subcloud-group add": gm.AddSubcloudGroup,
|
||||||
|
"subcloud-group delete": gm.DeleteSubcloudGroup,
|
||||||
|
"subcloud-group list": gm.ListSubcloudGroup,
|
||||||
|
"subcloud-group list-subclouds": gm.ListSubcloudGroupSubclouds,
|
||||||
|
"subcloud-group show": gm.ShowSubcloudGroup,
|
||||||
|
"subcloud-group update": gm.UpdateSubcloudGroup,
|
||||||
|
"subcloud-peer-group add": pm.AddSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group delete": pm.DeleteSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group list": pm.ListSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group list-subclouds":
|
||||||
|
pm.ListSubcloudPeerGroupSubclouds,
|
||||||
|
"subcloud-peer-group migrate": pm.MigrateSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group show": pm.ShowSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group status": pm.StatusSubcloudPeerGroup,
|
||||||
|
"subcloud-peer-group update": pm.UpdateSubcloudPeerGroup,
|
||||||
|
"system-peer add": sp.AddSystemPeer,
|
||||||
|
"system-peer delete": sp.DeleteSystemPeer,
|
||||||
|
"system-peer list": sp.ListSystemPeer,
|
||||||
|
"system-peer list-subcloud-peer-groups":
|
||||||
|
sp.ListSystemPeerSubcloudPeerGroups,
|
||||||
|
"system-peer show": sp.ShowSystemPeer,
|
||||||
|
"system-peer update": sp.UpdateSystemPeer,
|
||||||
|
"upgrade-strategy abort": supm.AbortSwUpgradeStrategy,
|
||||||
|
"upgrade-strategy apply": supm.ApplySwUpgradeStrategy,
|
||||||
|
"upgrade-strategy create": supm.CreateSwUpgradeStrategy,
|
||||||
|
"upgrade-strategy delete": supm.DeleteSwUpgradeStrategy,
|
||||||
|
"upgrade-strategy show": supm.ShowSwUpgradeStrategy,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2024 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
from dcmanagerclient.commands.v1 import sw_deploy_manager as cli_cmd
|
||||||
|
from dcmanagerclient.tests import base
|
||||||
|
from dcmanagerclient.tests.v1.mixins import UpdateStrategyMixin
|
||||||
|
from dcmanagerclient.tests.v1 import utils
|
||||||
|
|
||||||
|
|
||||||
|
class TestSwDeployStrategy(UpdateStrategyMixin, base.BaseCommandTest):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
# Increase results_length due to the 'upload only' field
|
||||||
|
self.results_length += 1
|
||||||
|
|
||||||
|
self.sw_update_manager = (
|
||||||
|
self.app.client_manager.sw_deploy_manager.sw_deploy_manager
|
||||||
|
)
|
||||||
|
self.create_command = cli_cmd.CreateSwDeployStrategy
|
||||||
|
self.show_command = cli_cmd.ShowSwDeployStrategy
|
||||||
|
self.delete_command = cli_cmd.DeleteSwDeployStrategy
|
||||||
|
self.apply_command = cli_cmd.ApplySwDeployStrategy
|
||||||
|
self.abort_command = cli_cmd.AbortSwDeployStrategy
|
||||||
|
|
||||||
|
def test_create_strategy(self):
|
||||||
|
"""Test deploy strategy should be created with --release-id"""
|
||||||
|
|
||||||
|
# prepare mixin attributes
|
||||||
|
manager_to_test = self.sw_update_manager
|
||||||
|
expected_strategy_type = manager_to_test.update_type
|
||||||
|
|
||||||
|
# mock the result of the API call
|
||||||
|
strategy = utils.make_strategy(
|
||||||
|
strategy_type=expected_strategy_type, extra_args={
|
||||||
|
"release_id": "stx-24.09.1"}
|
||||||
|
)
|
||||||
|
|
||||||
|
# mock that there is no pre-existing strategy
|
||||||
|
manager_to_test.create_sw_update_strategy.return_value = strategy
|
||||||
|
|
||||||
|
# invoke the backend method for the CLI.
|
||||||
|
# Returns a tuple of field descriptions, and a second tuple of values
|
||||||
|
fields, results = self.call(
|
||||||
|
self.create_command, ["--release-id", "stx-24.09.1"])
|
||||||
|
|
||||||
|
# results is a tuple of expected length
|
||||||
|
self.assertEqual(len(results), self.results_length)
|
||||||
|
# result tuple values are
|
||||||
|
# - strategy type
|
||||||
|
# - subcloud apply type
|
||||||
|
# - max parallel subclouds
|
||||||
|
# - stop on failure
|
||||||
|
# - release_id
|
||||||
|
# - state
|
||||||
|
# - created_at
|
||||||
|
# - updated_at
|
||||||
|
|
||||||
|
self.assertEqual(results[0], expected_strategy_type)
|
||||||
|
self.assertEqual(fields[-4], "release_id")
|
||||||
|
self.assertEqual(results[-4], "stx-24.09.1")
|
||||||
|
|
||||||
|
def test_create_strategy_without_release_id(self):
|
||||||
|
"""Test deploy strategy should not be created without --release-id"""
|
||||||
|
|
||||||
|
# prepare mixin attributes
|
||||||
|
manager_to_test = self.sw_update_manager
|
||||||
|
|
||||||
|
# mock that there is no pre-existing strategy
|
||||||
|
manager_to_test.create_sw_update_strategy.return_value = None
|
||||||
|
|
||||||
|
# invoke the backend method for the CLI.
|
||||||
|
# Returns a tuple of field descriptions, and a second tuple of values
|
||||||
|
self.assertRaises(SystemExit, self.call, self.create_command, [])
|
Loading…
Reference in New Issue