Modifying Openstack client for undercloud and overcloud backup
- '--init' flag was marked with WARNING indicating it will be deprecated and replaced by '--setup-nfs' and '--setup-rear'. Now it receives arguments: 'rear' and 'nfs'. Defaults to: rear, so it doesn't break interface. - '--setup-nfs' flag added which installs and configure NFS on the 'BackupNode' host. - '--setup-rear' flag added which installs and configure ReaR on the 'Undercloud' or the 'Controller' nodes. - '--extra-vars' was enabled to pass variables to the playbooks by specifying JSON/YAML string or full path of the file. - Now 'tags' parameter is used internally to specify which tasks to run. - '--storage-ip' flag on overcloud backup command was marked with WARNING indicating it will be deprecated in favor of '--extra-vars' which allows to pass this and more properties. Thought, it has precedence over '--extra-vars'. If used it will replace the '--extra-vars' property 'tripleo_backup_and_restore_nfs_server'. Bugzilla: #1824806 Change-Id: I31f2a554b03677fe29bd1186dee5d278b6d0554b
This commit is contained in:
parent
143666443c
commit
945882fe72
|
@ -20,6 +20,7 @@ from osc_lib.tests import utils
|
||||||
from tripleoclient import constants
|
from tripleoclient import constants
|
||||||
from tripleoclient.tests import fakes
|
from tripleoclient.tests import fakes
|
||||||
from tripleoclient.v1 import overcloud_backup
|
from tripleoclient.v1 import overcloud_backup
|
||||||
|
from unittest.mock import call
|
||||||
|
|
||||||
|
|
||||||
class TestOvercloudBackup(utils.TestCommand):
|
class TestOvercloudBackup(utils.TestCommand):
|
||||||
|
@ -48,10 +49,11 @@ class TestOvercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='cli-overcloud-backup.yaml',
|
playbook='cli-overcloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars={}
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
@ -69,43 +71,86 @@ class TestOvercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='prepare-overcloud-backup.yaml',
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
skip_tags='bar_create_recover_image, bar_setup_nfs_server',
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars={}
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
autospec=True)
|
autospec=True)
|
||||||
def test_overcloud_backup_storage_ip(self, mock_playbook):
|
def test_overcloud_backup_init_nfs(self, mock_playbook):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--init',
|
'--init',
|
||||||
'--storage-ip',
|
'nfs'
|
||||||
'192.168.0.100'
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars={}
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_overcloud_backup_setup_nfs(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-nfs'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars={}
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_overcloud_backup_setup_rear(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-rear',
|
||||||
]
|
]
|
||||||
verifylist = []
|
verifylist = []
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
extra_vars = {
|
|
||||||
"tripleo_backup_and_restore_nfs_server": parsed_args.storage_ip
|
|
||||||
}
|
|
||||||
|
|
||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
mock_playbook.assert_called_once_with(
|
mock_playbook.assert_called_once_with(
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='prepare-overcloud-backup.yaml',
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
skip_tags='bar_create_recover_image, bar_setup_nfs_server',
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=extra_vars
|
extra_vars={}
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook', autospec=True)
|
||||||
autospec=True)
|
def test_overcloud_backup_setup_nfs_rear_with_inventory(self,
|
||||||
def test_overcloud_backup_init_with_inventory(self, mock_playbook):
|
mock_playbook):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--init',
|
'--setup-nfs',
|
||||||
|
'--setup-rear',
|
||||||
'--inventory',
|
'--inventory',
|
||||||
'/tmp/test_inventory.yaml'
|
'/tmp/test_inventory.yaml'
|
||||||
]
|
]
|
||||||
|
@ -113,15 +158,77 @@ class TestOvercloudBackup(utils.TestCommand):
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
calls = [call(workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars={}),
|
||||||
|
call(workdir=mock.ANY,
|
||||||
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars={})]
|
||||||
|
|
||||||
|
mock_playbook.assert_has_calls(calls)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_overcloud_backup_setup_rear_extra_vars_inline(self,
|
||||||
|
mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-rear',
|
||||||
|
'--extra-vars',
|
||||||
|
'{"tripleo_backup_and_restore_nfs_server": "192.168.24.1"}'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
extra_vars_dict = {
|
||||||
|
'tripleo_backup_and_restore_nfs_server': '192.168.24.1'
|
||||||
|
}
|
||||||
|
|
||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
mock_playbook.assert_called_once_with(
|
mock_playbook.assert_called_once_with(
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='prepare-overcloud-backup.yaml',
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
skip_tags='bar_create_recover_image, bar_setup_nfs_server',
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars=extra_vars_dict
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_overcloud_backup_setup_rear_with_extra_vars(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-rear',
|
||||||
|
'--extra-vars',
|
||||||
|
'/tmp/test_vars.yaml'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars='/tmp/test_vars.yaml'
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
@ -140,8 +247,9 @@ class TestOvercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='cli-overcloud-backup.yaml',
|
playbook='cli-overcloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars={}
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,6 +20,7 @@ from osc_lib.tests import utils
|
||||||
from tripleoclient import constants
|
from tripleoclient import constants
|
||||||
from tripleoclient.tests import fakes
|
from tripleoclient.tests import fakes
|
||||||
from tripleoclient.v1 import undercloud_backup
|
from tripleoclient.v1 import undercloud_backup
|
||||||
|
from unittest.mock import call
|
||||||
|
|
||||||
|
|
||||||
class TestUndercloudBackup(utils.TestCommand):
|
class TestUndercloudBackup(utils.TestCommand):
|
||||||
|
@ -53,6 +54,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook=mock.ANY,
|
playbook=mock.ANY,
|
||||||
inventory=mock.ANY,
|
inventory=mock.ANY,
|
||||||
|
tags=None,
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
|
@ -81,6 +83,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook=mock.ANY,
|
playbook=mock.ANY,
|
||||||
inventory=mock.ANY,
|
inventory=mock.ANY,
|
||||||
|
tags=None,
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
@ -109,6 +112,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook=mock.ANY,
|
playbook=mock.ANY,
|
||||||
inventory=mock.ANY,
|
inventory=mock.ANY,
|
||||||
|
tags=None,
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
|
@ -133,6 +137,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook=mock.ANY,
|
playbook=mock.ANY,
|
||||||
inventory=mock.ANY,
|
inventory=mock.ANY,
|
||||||
|
tags=None,
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
|
@ -152,6 +157,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='cli-undercloud-backup.yaml',
|
playbook='cli-undercloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
|
@ -173,7 +179,53 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='prepare-undercloud-backup.yaml',
|
playbook='prepare-undercloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
skip_tags='bar_create_recover_image',
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars=None
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_undercloud_backup_init_nfs(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--init',
|
||||||
|
'nfs'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars=None
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_undercloud_backup_setup_nfs(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-nfs'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars=None
|
||||||
|
@ -181,11 +233,9 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
autospec=True)
|
autospec=True)
|
||||||
def test_undercloud_backup_init_with_inventory(self, mock_playbook):
|
def test_undercloud_backup_setup_rear(self, mock_playbook):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--init',
|
'--setup-rear'
|
||||||
'--inventory',
|
|
||||||
'/tmp/test_inventory.yaml'
|
|
||||||
]
|
]
|
||||||
verifylist = []
|
verifylist = []
|
||||||
|
|
||||||
|
@ -196,10 +246,97 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='prepare-undercloud-backup.yaml',
|
playbook='prepare-undercloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
skip_tags='bar_create_recover_image',
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
extra_vars=None
|
extra_vars=None
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_undercloud_backup_setup_rear_extra_vars_inline(self,
|
||||||
|
mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-rear',
|
||||||
|
'--extra-vars',
|
||||||
|
'{"tripleo_backup_and_restore_nfs_server": "192.168.24.1"}'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
extra_vars_dict = {
|
||||||
|
'tripleo_backup_and_restore_nfs_server': '192.168.24.1'
|
||||||
|
}
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-undercloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars=extra_vars_dict
|
||||||
|
)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook', autospec=True)
|
||||||
|
def test_undercloud_backup_setup_nfs_rear_with_inventory(self,
|
||||||
|
mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-nfs',
|
||||||
|
'--setup-rear',
|
||||||
|
'--inventory',
|
||||||
|
'/tmp/test_inventory.yaml'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
calls = [call(workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars=None),
|
||||||
|
call(workdir=mock.ANY,
|
||||||
|
playbook='prepare-undercloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars=None)]
|
||||||
|
|
||||||
|
mock_playbook.assert_has_calls(calls)
|
||||||
|
|
||||||
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
autospec=True)
|
||||||
|
def test_undercloud_backup_setup_nfs_with_extra_vars(self, mock_playbook):
|
||||||
|
arglist = [
|
||||||
|
'--setup-nfs',
|
||||||
|
'--extra-vars',
|
||||||
|
'/tmp/test_vars.yaml'
|
||||||
|
]
|
||||||
|
verifylist = []
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
mock_playbook.assert_called_once_with(
|
||||||
|
workdir=mock.ANY,
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
verbosity=3,
|
||||||
|
extra_vars='/tmp/test_vars.yaml'
|
||||||
)
|
)
|
||||||
|
|
||||||
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
@mock.patch('tripleoclient.utils.run_ansible_playbook',
|
||||||
|
@ -218,6 +355,7 @@ class TestUndercloudBackup(utils.TestCommand):
|
||||||
workdir=mock.ANY,
|
workdir=mock.ANY,
|
||||||
playbook='cli-undercloud-backup.yaml',
|
playbook='cli-undercloud-backup.yaml',
|
||||||
inventory=parsed_args.inventory,
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
verbosity=3,
|
verbosity=3,
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import yaml
|
||||||
|
|
||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
from osc_lib.i18n import _
|
from osc_lib.i18n import _
|
||||||
|
@ -37,62 +39,167 @@ class BackupOvercloud(command.Command):
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--init',
|
'--init',
|
||||||
|
const='rear',
|
||||||
|
nargs='?',
|
||||||
|
action='store',
|
||||||
|
help=_("Initialize environment for backup,"
|
||||||
|
"using 'rear' or 'nfs' as args "
|
||||||
|
"which will check for package install "
|
||||||
|
"and configured ReaR or NFS server. "
|
||||||
|
"Defaults to: rear. "
|
||||||
|
"i.e. --init rear. "
|
||||||
|
"WARNING: This flag will be deprecated"
|
||||||
|
"and replaced by '--setup-rear' and"
|
||||||
|
"'--setup-nfs'.")
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--setup-nfs',
|
||||||
default=False,
|
default=False,
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help=_("Initialize enviornment for backup,"
|
help=_("Setup the NFS server on the backup node "
|
||||||
"which will check for package install"
|
"which will install required packages "
|
||||||
"status and configured ReaR.")
|
"and configuration on the host 'BackupNode' "
|
||||||
|
"in the ansible inventory.")
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--setup-rear',
|
||||||
|
default=False,
|
||||||
|
action='store_true',
|
||||||
|
help=_("Setup ReaR on the overcloud 'Controller' hosts which will "
|
||||||
|
"install and configure ReaR.")
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--inventory',
|
'--inventory',
|
||||||
default='/home/stack/tripleo-inventory.yaml',
|
default='/home/stack/tripleo-inventory.yaml',
|
||||||
help=_("Tripleo inventory file generated with"
|
help=_("Tripleo inventory file generated with "
|
||||||
"tripleo-ansible-inventory command.")
|
"tripleo-ansible-inventory command. "
|
||||||
|
"Defaults to: /home/stack/tripleo-inventory.yaml.")
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--storage-ip',
|
'--storage-ip',
|
||||||
help=_("Storage IP is an optional parameter"
|
help=_("Storage IP is an optional parameter "
|
||||||
"which allows for an ip of a storage"
|
"which allows for an ip of a storage "
|
||||||
"server to be specified, overriding the"
|
"server to be specified, overriding the "
|
||||||
"default undercloud.")
|
"default undercloud. "
|
||||||
|
"WARNING: This flag will be deprecated in "
|
||||||
|
"favor of '--extra-vars' which will allow "
|
||||||
|
"to pass this and other variables.")
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--extra-vars',
|
||||||
|
default=None,
|
||||||
|
action='store',
|
||||||
|
help=_("Set additional variables as Dict or as "
|
||||||
|
"an absolute path of a JSON or YAML file type. "
|
||||||
|
"i.e. --extra-vars '{\"key\": \"val\", "
|
||||||
|
" \"key2\": \"val2\"}' "
|
||||||
|
"i.e. --extra-vars /path/to/my_vars.yaml "
|
||||||
|
"i.e. --extra-vars /path/to/my_vars.json. "
|
||||||
|
"For more information about the variables that "
|
||||||
|
"can be passed, visit: https://opendev.org/openstack/"
|
||||||
|
"tripleo-ansible/src/branch/master/tripleo_ansible/"
|
||||||
|
"roles/backup_and_restore/defaults/main.yml.")
|
||||||
)
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def _run_backup_Overcloud(self, parsed_args):
|
def _parse_extra_vars(self, raw_extra_vars):
|
||||||
|
|
||||||
|
if raw_extra_vars is None:
|
||||||
|
return {}
|
||||||
|
elif os.path.exists(raw_extra_vars):
|
||||||
|
with open(raw_extra_vars, 'r') as fp:
|
||||||
|
extra_vars = yaml.safe_load(fp.read())
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
extra_vars = yaml.safe_load(raw_extra_vars)
|
||||||
|
except yaml.YAMLError as exc:
|
||||||
|
raise RuntimeError(
|
||||||
|
_('--extra-vars is not an existing file and cannot be '
|
||||||
|
'parsed as YAML / JSON: %s') % exc)
|
||||||
|
|
||||||
|
return extra_vars
|
||||||
|
|
||||||
|
def _run_backup_overcloud(self, parsed_args):
|
||||||
"""Backup defined overcloud nodes."""
|
"""Backup defined overcloud nodes."""
|
||||||
|
|
||||||
if parsed_args.init is False:
|
extra_vars = self._parse_extra_vars(parsed_args.extra_vars)
|
||||||
playbook = 'cli-overcloud-backup.yaml'
|
|
||||||
skip_tags = None
|
|
||||||
elif parsed_args.init is True:
|
|
||||||
playbook = 'prepare-overcloud-backup.yaml'
|
|
||||||
skip_tags = 'bar_create_recover_image, bar_setup_nfs_server'
|
|
||||||
|
|
||||||
if parsed_args.storage_ip:
|
if parsed_args.storage_ip:
|
||||||
extra_vars = {
|
storage_ip = parsed_args.storage_ip
|
||||||
"tripleo_backup_and_restore_nfs_server": parsed_args.storage_ip
|
|
||||||
}
|
extra_vars[
|
||||||
else:
|
'tripleo_backup_and_restore_nfs_server'
|
||||||
extra_vars = None
|
] = storage_ip
|
||||||
|
|
||||||
|
if parsed_args.setup_nfs is True or parsed_args.init == 'nfs':
|
||||||
|
|
||||||
|
LOG.debug(_('Setting up NFS Backup node'))
|
||||||
|
self._run_ansible_playbook(
|
||||||
|
playbook='prepare-nfs-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
|
||||||
|
if parsed_args.setup_rear is True or parsed_args.init == 'rear':
|
||||||
|
|
||||||
|
LOG.debug(_('Installing ReaR on controller nodes'))
|
||||||
|
self._run_ansible_playbook(
|
||||||
|
playbook='prepare-overcloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
|
||||||
|
if (parsed_args.setup_nfs is False and
|
||||||
|
parsed_args.setup_rear is False and
|
||||||
|
parsed_args.init is None):
|
||||||
|
|
||||||
|
LOG.debug(_('Starting Overcloud Backup'))
|
||||||
|
self._run_ansible_playbook(
|
||||||
|
playbook='cli-overcloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
|
||||||
|
def _run_ansible_playbook(self,
|
||||||
|
playbook,
|
||||||
|
inventory,
|
||||||
|
tags,
|
||||||
|
skip_tags,
|
||||||
|
extra_vars):
|
||||||
|
"""Run ansible playbook"""
|
||||||
|
|
||||||
LOG.debug(_('Starting Overcloud Backup'))
|
|
||||||
with utils.TempDirs() as tmp:
|
with utils.TempDirs() as tmp:
|
||||||
utils.run_ansible_playbook(
|
utils.run_ansible_playbook(
|
||||||
playbook=playbook,
|
playbook=playbook,
|
||||||
inventory=parsed_args.inventory,
|
inventory=inventory,
|
||||||
workdir=tmp,
|
workdir=tmp,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
tags=tags,
|
||||||
skip_tags=skip_tags,
|
skip_tags=skip_tags,
|
||||||
verbosity=utils.playbook_verbosity(self=self),
|
verbosity=utils.playbook_verbosity(self=self),
|
||||||
extra_vars=extra_vars
|
extra_vars=extra_vars
|
||||||
)
|
)
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
|
|
||||||
self._run_backup_Overcloud(parsed_args)
|
if parsed_args.init:
|
||||||
|
|
||||||
|
LOG.warning("The following flags will be deprecated:"
|
||||||
|
"[--init, --storage-ip]")
|
||||||
|
|
||||||
|
self._run_backup_overcloud(parsed_args)
|
||||||
print(
|
print(
|
||||||
'\n'
|
'\n'
|
||||||
' #############################################################\n'
|
' #############################################################\n'
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import yaml
|
||||||
|
|
||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
from osc_lib.i18n import _
|
from osc_lib.i18n import _
|
||||||
|
@ -35,14 +37,40 @@ class BackupUndercloud(command.Command):
|
||||||
add_help=False
|
add_help=False
|
||||||
)
|
)
|
||||||
|
|
||||||
# New flags for tripleo-ansible backup and restore role.
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--init',
|
'--init',
|
||||||
|
const='rear',
|
||||||
|
nargs='?',
|
||||||
|
action='store',
|
||||||
|
help=_("Initialize environment for backup,"
|
||||||
|
"using 'rear' or 'nfs' as args "
|
||||||
|
"which will check for package install "
|
||||||
|
"and configured ReaR or NFS server. "
|
||||||
|
"Defaults to: rear. "
|
||||||
|
"i.e. --init rear. "
|
||||||
|
"WARNING: This flag will be deprecated"
|
||||||
|
"and replaced by '--setup-rear' and"
|
||||||
|
"'--setup-nfs'.")
|
||||||
|
)
|
||||||
|
|
||||||
|
# New flags for tripleo-ansible backup and restore role.
|
||||||
|
parser.add_argument(
|
||||||
|
'--setup-nfs',
|
||||||
default=False,
|
default=False,
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help=_("Initialize enviornment for backup,"
|
help=_("Setup the NFS server on the backup node"
|
||||||
"which will check for package install"
|
"which will install required packages"
|
||||||
"status and configured ReaR.")
|
"and configuration on the host 'BackupNode' "
|
||||||
|
"in the ansible inventory.")
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--setup-rear',
|
||||||
|
default=False,
|
||||||
|
action='store_true',
|
||||||
|
help=_("Setup ReaR on the 'Undercloud' host which will"
|
||||||
|
"install and configure ReaR.")
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
@ -50,7 +78,8 @@ class BackupUndercloud(command.Command):
|
||||||
action='store',
|
action='store',
|
||||||
default='/home/stack/tripleo-inventory.yaml',
|
default='/home/stack/tripleo-inventory.yaml',
|
||||||
help=_("Tripleo inventory file generated with"
|
help=_("Tripleo inventory file generated with"
|
||||||
"tripleo-ansible-inventory command.")
|
"tripleo-ansible-inventory command. "
|
||||||
|
"Defaults to: /home/stack/tripleo-inventory.yaml.")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Parameter to choose the files to backup
|
# Parameter to choose the files to backup
|
||||||
|
@ -61,8 +90,9 @@ class BackupUndercloud(command.Command):
|
||||||
help=_("Add additional files to backup. "
|
help=_("Add additional files to backup. "
|
||||||
"Defaults to: /home/stack/ "
|
"Defaults to: /home/stack/ "
|
||||||
"i.e. --add-path /this/is/a/folder/ "
|
"i.e. --add-path /this/is/a/folder/ "
|
||||||
" --add-path /this/is/a/texfile.txt")
|
" --add-path /this/is/a/texfile.txt.")
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--exclude-path",
|
"--exclude-path",
|
||||||
default=[],
|
default=[],
|
||||||
|
@ -71,8 +101,9 @@ class BackupUndercloud(command.Command):
|
||||||
"this option can be specified multiple times. "
|
"this option can be specified multiple times. "
|
||||||
"Defaults to: none "
|
"Defaults to: none "
|
||||||
"i.e. --exclude-path /this/is/a/folder/ "
|
"i.e. --exclude-path /this/is/a/folder/ "
|
||||||
" --exclude-path /this/is/a/texfile.txt")
|
" --exclude-path /this/is/a/texfile.txt.")
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--save-swift',
|
'--save-swift',
|
||||||
default=False,
|
default=False,
|
||||||
|
@ -81,26 +112,79 @@ class BackupUndercloud(command.Command):
|
||||||
"Defaults to: False "
|
"Defaults to: False "
|
||||||
"Special attention should be taken that "
|
"Special attention should be taken that "
|
||||||
"Swift itself is backed up if you call this multiple times "
|
"Swift itself is backed up if you call this multiple times "
|
||||||
"the backup size will grow exponentially")
|
"the backup size will grow exponentially.")
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--extra-vars',
|
||||||
|
default=None,
|
||||||
|
action='store',
|
||||||
|
help=_("Set additional variables as Dict or as "
|
||||||
|
"an absolute path of a JSON or YAML file type. "
|
||||||
|
"i.e. --extra-vars '{\"key\": \"val\", "
|
||||||
|
"\"key2\": \"val2\"}' "
|
||||||
|
"i.e. --extra-vars /path/to/my_vars.yaml "
|
||||||
|
"i.e. --extra-vars /path/to/my_vars.json. "
|
||||||
|
"For more information about the variables that "
|
||||||
|
"can be passed, visit: https://opendev.org/openstack/"
|
||||||
|
"tripleo-ansible/src/branch/master/tripleo_ansible/"
|
||||||
|
"roles/backup_and_restore/defaults/main.yml.")
|
||||||
)
|
)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
def _parse_extra_vars(self, raw_extra_vars):
|
||||||
|
|
||||||
|
if raw_extra_vars is None:
|
||||||
|
return raw_extra_vars
|
||||||
|
elif os.path.exists(raw_extra_vars):
|
||||||
|
with open(raw_extra_vars, 'r') as fp:
|
||||||
|
extra_vars = yaml.safe_load(fp.read())
|
||||||
|
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
extra_vars = yaml.safe_load(raw_extra_vars)
|
||||||
|
except yaml.YAMLError as exc:
|
||||||
|
raise RuntimeError(
|
||||||
|
_('--extra-vars is not an existing file and cannot be '
|
||||||
|
'parsed as YAML / JSON: %s') % exc)
|
||||||
|
|
||||||
|
return extra_vars
|
||||||
|
|
||||||
def _run_backup_undercloud(self, parsed_args):
|
def _run_backup_undercloud(self, parsed_args):
|
||||||
|
|
||||||
if parsed_args.init is False:
|
extra_vars = self._parse_extra_vars(parsed_args.extra_vars)
|
||||||
playbook = 'cli-undercloud-backup.yaml'
|
|
||||||
skip_tags = None
|
|
||||||
elif parsed_args.init is True:
|
|
||||||
playbook = 'prepare-undercloud-backup.yaml'
|
|
||||||
skip_tags = 'bar_create_recover_image'
|
|
||||||
|
|
||||||
self._run_ansible_playbook(
|
if parsed_args.setup_nfs is True or parsed_args.init == 'nfs':
|
||||||
playbook=playbook,
|
|
||||||
inventory=parsed_args.inventory,
|
self._run_ansible_playbook(
|
||||||
skip_tags=skip_tags,
|
playbook='prepare-nfs-backup.yaml',
|
||||||
extra_vars=None
|
inventory=parsed_args.inventory,
|
||||||
)
|
tags='bar_setup_nfs_server',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
if parsed_args.setup_rear is True or parsed_args.init == 'rear':
|
||||||
|
|
||||||
|
self._run_ansible_playbook(
|
||||||
|
playbook='prepare-undercloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_setup_rear',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
|
||||||
|
if (parsed_args.setup_nfs is False and
|
||||||
|
parsed_args.setup_rear is False and
|
||||||
|
parsed_args.init is None):
|
||||||
|
|
||||||
|
self._run_ansible_playbook(
|
||||||
|
playbook='cli-undercloud-backup.yaml',
|
||||||
|
inventory=parsed_args.inventory,
|
||||||
|
tags='bar_create_recover_image',
|
||||||
|
skip_tags=None,
|
||||||
|
extra_vars=extra_vars
|
||||||
|
)
|
||||||
|
|
||||||
def _legacy_backup_undercloud(self, parsed_args):
|
def _legacy_backup_undercloud(self, parsed_args):
|
||||||
"""Legacy backup undercloud.
|
"""Legacy backup undercloud.
|
||||||
|
@ -127,6 +211,7 @@ class BackupUndercloud(command.Command):
|
||||||
self._run_ansible_playbook(
|
self._run_ansible_playbook(
|
||||||
playbook='cli-undercloud-backup-legacy.yaml',
|
playbook='cli-undercloud-backup-legacy.yaml',
|
||||||
inventory='localhost, ',
|
inventory='localhost, ',
|
||||||
|
tags=None,
|
||||||
skip_tags=None,
|
skip_tags=None,
|
||||||
extra_vars=extra_vars
|
extra_vars=extra_vars
|
||||||
)
|
)
|
||||||
|
@ -134,6 +219,7 @@ class BackupUndercloud(command.Command):
|
||||||
def _run_ansible_playbook(self,
|
def _run_ansible_playbook(self,
|
||||||
playbook,
|
playbook,
|
||||||
inventory,
|
inventory,
|
||||||
|
tags,
|
||||||
skip_tags,
|
skip_tags,
|
||||||
extra_vars):
|
extra_vars):
|
||||||
"""Run ansible playbook"""
|
"""Run ansible playbook"""
|
||||||
|
@ -144,6 +230,7 @@ class BackupUndercloud(command.Command):
|
||||||
inventory=inventory,
|
inventory=inventory,
|
||||||
workdir=tmp,
|
workdir=tmp,
|
||||||
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
|
||||||
|
tags=tags,
|
||||||
skip_tags=skip_tags,
|
skip_tags=skip_tags,
|
||||||
verbosity=utils.playbook_verbosity(self=self),
|
verbosity=utils.playbook_verbosity(self=self),
|
||||||
extra_vars=extra_vars
|
extra_vars=extra_vars
|
||||||
|
@ -154,7 +241,7 @@ class BackupUndercloud(command.Command):
|
||||||
if len(parsed_args.add_path) > 1 or parsed_args.save_swift:
|
if len(parsed_args.add_path) > 1 or parsed_args.save_swift:
|
||||||
|
|
||||||
LOG.warning("The following flags will be deprecated:"
|
LOG.warning("The following flags will be deprecated:"
|
||||||
"[--add-path, --exclude-path, --save-swift]")
|
"[--add-path, --exclude-path, --init, --save-swift]")
|
||||||
|
|
||||||
self._legacy_backup_undercloud(parsed_args)
|
self._legacy_backup_undercloud(parsed_args)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue