Allow providing --ssh-user for update/upgrade run commands

When config-download becomes our only way of deploying, we'll be able
to assume that tripleo-admin user always exists. Until then it's not a
given, so we need to allow using custom user names for running updates
and upgrades playbooks. We default to heat-admin for now, as that's
expected to work on majority of current production environments.

Change-Id: I0df57002b2305c1e2504c9f7a7d0c326d8ffcaf7
Closes-Bug: #1759845
This commit is contained in:
Jiri Stransky 2018-03-29 18:05:21 +02:00
parent 62a7bb1df1
commit 17cd14114f
5 changed files with 41 additions and 14 deletions

View File

@ -120,11 +120,12 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
@mock.patch('os.path.expanduser')
@mock.patch('oslo_concurrency.processutils.execute')
@mock.patch('six.moves.builtins.open')
def test_update_with_playbook(self, mock_open, mock_execute,
mock_expanduser, update_ansible):
def test_update_with_playbook_and_user(self, mock_open, mock_execute,
mock_expanduser, update_ansible):
mock_expanduser.return_value = '/home/fake/'
argslist = ['--nodes', 'Compute', '--playbook',
'fake-playbook.yaml']
argslist = ['--nodes', 'Compute',
'--playbook', 'fake-playbook.yaml',
'--ssh-user', 'tripleo-admin']
verifylist = [
('nodes', 'Compute'),
('static_inventory', None),
@ -141,6 +142,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
inventory_file=mock_open().read(),
playbook='fake-playbook.yaml',
ansible_queue_name=constants.UPDATE_QUEUE,
node_user='tripleo-admin',
skip_tags=''
)
@ -170,6 +172,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
inventory_file=mock_open().read(),
playbook=book,
ansible_queue_name=constants.UPDATE_QUEUE,
node_user='heat-admin',
skip_tags=''
)
@ -198,6 +201,7 @@ class TestOvercloudUpdateRun(fakes.TestOvercloudUpdateRun):
inventory_file=mock_open().read(),
playbook=book,
ansible_queue_name=constants.UPDATE_QUEUE,
node_user='heat-admin',
skip_tags=''
)

View File

@ -120,11 +120,12 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
@mock.patch('os.path.expanduser')
@mock.patch('oslo_concurrency.processutils.execute')
@mock.patch('six.moves.builtins.open')
def test_upgrade_roles_with_playbook(
def test_upgrade_roles_with_playbook_and_user(
self, mock_open, mock_execute, mock_expanduser, upgrade_ansible):
mock_expanduser.return_value = '/home/fake/'
argslist = ['--roles', 'Compute, Controller',
'--playbook', 'fake-playbook.yaml']
'--playbook', 'fake-playbook.yaml',
'--ssh-user', 'tripleo-admin']
verifylist = [
('roles', 'Compute, Controller'),
('static_inventory', None),
@ -141,6 +142,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
inventory_file=mock_open().read(),
playbook='fake-playbook.yaml',
ansible_queue_name=constants.UPGRADE_QUEUE,
node_user='tripleo-admin',
skip_tags=''
)
@ -172,6 +174,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
inventory_file=mock_open().read(),
playbook=book,
ansible_queue_name=constants.UPGRADE_QUEUE,
node_user='heat-admin',
skip_tags='validation'
)
@ -201,6 +204,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
inventory_file=mock_open().read(),
playbook='fake-playbook.yaml',
ansible_queue_name=constants.UPGRADE_QUEUE,
node_user='heat-admin',
skip_tags=''
)
@ -230,6 +234,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
inventory_file=mock_open().read(),
playbook=book,
ansible_queue_name=constants.UPGRADE_QUEUE,
node_user='heat-admin',
skip_tags=''
)
@ -261,6 +266,7 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun):
inventory_file=mock_open().read(),
playbook=book,
ansible_queue_name=constants.UPGRADE_QUEUE,
node_user='heat-admin',
skip_tags='pre-upgrade,validation'
)

View File

@ -816,14 +816,14 @@ def load_environment_directories(directories):
return environments
def get_tripleo_ansible_inventory(inventory_file=''):
def get_tripleo_ansible_inventory(inventory_file='', ssh_user='heat-admin'):
if not inventory_file:
inventory_file = '%s/%s' % (os.path.expanduser('~'),
'tripleo-ansible-inventory.yaml')
try:
processutils.execute(
'/usr/bin/tripleo-ansible-inventory',
'--ansible_ssh_user', 'tripleo-admin',
'--ansible_ssh_user', ssh_user,
'--static-yaml-inventory', inventory_file)
except processutils.ProcessExecutionError as e:
message = "Failed to generate inventory: %s" % str(e)
@ -919,7 +919,8 @@ def process_multiple_environments(created_env_files, tht_root,
def run_update_ansible_action(log, clients, nodes, inventory, playbook,
queue, all_playbooks, action, skip_tags=''):
queue, all_playbooks, action, ssh_user,
skip_tags=''):
playbooks = [playbook]
if playbook == "all":
playbooks = all_playbooks
@ -927,4 +928,4 @@ def run_update_ansible_action(log, clients, nodes, inventory, playbook,
log.debug("Running ansible playbook %s " % book)
action.update_ansible(clients, nodes=nodes, inventory_file=inventory,
playbook=book, ansible_queue_name=queue,
skip_tags=skip_tags)
node_user=ssh_user, skip_tags=skip_tags)

View File

@ -132,6 +132,13 @@ class UpdateRun(command.Command):
"that all services are updated and running "
"with the target version configuration.")
)
parser.add_argument("--ssh-user",
dest="ssh_user",
action="store",
default="heat-admin",
help=_("The ssh user name for connecting to "
"the overcloud nodes.")
)
parser.add_argument('--static-inventory',
dest='static_inventory',
action="store",
@ -154,8 +161,9 @@ class UpdateRun(command.Command):
nodes = None
playbook = parsed_args.playbook
inventory = oooutils.get_tripleo_ansible_inventory(
parsed_args.static_inventory)
parsed_args.static_inventory, parsed_args.ssh_user)
oooutils.run_update_ansible_action(self.log, clients, nodes, inventory,
playbook, constants.UPDATE_QUEUE,
constants.MINOR_UPDATE_PLAYBOOKS,
package_update)
package_update,
parsed_args.ssh_user)

View File

@ -153,6 +153,13 @@ class UpgradeRun(command.Command):
'generated in '
'~/tripleo-ansible-inventory.yaml')
)
parser.add_argument("--ssh-user",
dest="ssh_user",
action="store",
default="heat-admin",
help=_("The ssh user name for connecting to "
"the overcloud nodes.")
)
parser.add_argument('--skip-tags',
dest='skip_tags',
action="store",
@ -188,13 +195,14 @@ class UpgradeRun(command.Command):
limit_hosts = roles or nodes
playbook = parsed_args.playbook
inventory = oooutils.get_tripleo_ansible_inventory(
parsed_args.static_inventory)
parsed_args.static_inventory, parsed_args.ssh_user)
skip_tags = self._validate_skip_tags(parsed_args.skip_tags)
oooutils.run_update_ansible_action(self.log, clients, limit_hosts,
inventory, playbook,
constants.UPGRADE_QUEUE,
constants.MAJOR_UPGRADE_PLAYBOOKS,
package_update, skip_tags)
package_update,
parsed_args.ssh_user, skip_tags)
class UpgradeConvergeOvercloud(DeployOvercloud):