Add --db-only option in undercloud_backup.

This patch adds a new option --db-only which will perform a DB backup
of the Undercloud node. This option will have precedence to --init, --setup-nfs
or --setup-rear, but it won't complain. If the --db-only option is being
passed then only the play in charge of performing the Undercloud's DB backup
will be triggered.

Change-Id: Idd905e32dc70728abdb4cea1a14f43c7f11ff311
Resolves: rhbz#1977392
Depends-On: I62cadfd95c514edf0b982fa652a53feadb24f2b7
(cherry picked from commit a792bbd874)
(cherry picked from commit 579b5c5e1e)
(cherry picked from commit 66e61a3408)
This commit is contained in:
Jose Luis Franco Arza 2021-05-26 15:06:38 +02:00 committed by Jose Luis Franco
parent 25adb4b85d
commit 134ca3910c
2 changed files with 101 additions and 21 deletions

View File

@ -261,6 +261,35 @@ class TestUndercloudBackup(utils.TestCommand):
extra_vars=None
)
@mock.patch('os.path.isfile')
@mock.patch('os.access')
@mock.patch('tripleoclient.utils.run_ansible_playbook',
autospec=True)
def test_undercloud_backup_db_only(self,
mock_playbook,
mock_access,
mock_isfile):
arglist = [
'--db-only'
]
verifylist = []
mock_isfile.return_value = True
mock_access.return_value = True
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='cli-undercloud-db-backup.yaml',
inventory=parsed_args.inventory,
tags=None,
skip_tags=None,
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
verbosity=3,
extra_vars=None
)
@mock.patch('os.path.isfile')
@mock.patch('os.access')
@mock.patch('tripleoclient.utils.run_ansible_playbook',
@ -322,6 +351,37 @@ class TestUndercloudBackup(utils.TestCommand):
extra_vars=extra_vars_dict
)
@mock.patch('os.path.isfile')
@mock.patch('os.access')
@mock.patch('tripleoclient.utils.run_ansible_playbook',
autospec=True)
def test_undercloud_backup_db_only_with_setup_options(self,
mock_playbook,
mock_access,
mock_isfile):
arglist = [
'--db-only',
'--setup-nfs',
'--setup-rear'
]
verifylist = []
mock_isfile.return_value = True
mock_access.return_value = True
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='cli-undercloud-db-backup.yaml',
inventory=parsed_args.inventory,
tags=None,
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_rear_with_inventory(self,
mock_playbook):

View File

@ -73,6 +73,15 @@ class BackupUndercloud(command.Command):
"install and configure ReaR.")
)
parser.add_argument(
'--db-only',
default=False,
action='store_true',
help=_("Perform a DB backup of the 'Undercloud' host. "
"The DB backup file will be stored in /home/stack "
"with the name openstack-backup-mysql-<timestamp>.sql.")
)
parser.add_argument(
'--inventory',
action='store',
@ -161,36 +170,47 @@ class BackupUndercloud(command.Command):
_('The inventory file {} does not exist or is not '
'readable'.format(parsed_args.inventory)))
if parsed_args.setup_nfs is True or parsed_args.init == 'nfs':
if parsed_args.db_only is True:
self._run_ansible_playbook(
playbook='prepare-nfs-backup.yaml',
playbook='cli-undercloud-db-backup.yaml',
inventory=parsed_args.inventory,
tags='bar_setup_nfs_server',
tags=None,
skip_tags=None,
extra_vars=extra_vars
)
if parsed_args.setup_rear is True or parsed_args.init == 'rear':
else:
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 True or parsed_args.init == 'nfs':
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='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':
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
)
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):
"""Legacy backup undercloud.