af749d1a6a
The provision command was defaulting to id_rsa.pub, however the deploy command uses id_rsa_tripleo for initial setup. When using the deploy command for provision as well, use the public key, not the private id_rsa_tripleo. This option was being processed in several different ways, this change normalize it by creating a single function in the Command class, which all inheriting methods will consume. Tests have been updated to accomodate this change. Related-Bug: #1863920 Change-Id: I221480f3cfc77545a8fcbef777829239c3bad0a0 Signed-off-by: Kevin Carter <kecarter@redhat.com>
123 lines
3.8 KiB
Python
123 lines
3.8 KiB
Python
# Copyright 2017 Red Hat, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from argparse import _StoreAction
|
|
import logging
|
|
|
|
from osc_lib.command import command
|
|
from osc_lib import exceptions as oscexc
|
|
|
|
from tripleo_common.utils import config
|
|
|
|
from tripleoclient import exceptions
|
|
from tripleoclient import utils
|
|
|
|
|
|
class Command(command.Command):
|
|
|
|
log = logging.getLogger(__name__ + ".Command")
|
|
|
|
def run(self, parsed_args):
|
|
utils.store_cli_param(self.cmd_name, parsed_args)
|
|
try:
|
|
super(Command, self).run(parsed_args)
|
|
except (oscexc.CommandError, exceptions.Base):
|
|
raise
|
|
except Exception:
|
|
self.log.exception("Exception occured while running the command")
|
|
raise
|
|
|
|
@staticmethod
|
|
def get_ansible_key_and_dir(no_workflow, stack, orchestration):
|
|
"""Return the ansible directory and key path.
|
|
|
|
:param no_workflow: Enable or disable the mistral workflow code path.
|
|
:type no_workflow: Boolean
|
|
|
|
:oaram stack: Name of a given stack to run against.
|
|
:type stack: String
|
|
|
|
:param orchestration: Orchestration client object.
|
|
:type orchestration: Object
|
|
|
|
:returns: Tuple
|
|
"""
|
|
|
|
if no_workflow:
|
|
key = utils.get_key(stack=stack)
|
|
stack_config = config.Config(orchestration)
|
|
with utils.TempDirs(chdir=False) as tmp:
|
|
stack_config.write_config(
|
|
stack_config.fetch_config(stack),
|
|
stack,
|
|
tmp
|
|
)
|
|
return key, tmp
|
|
else:
|
|
# Assumes execution will take place from within a mistral
|
|
# container.
|
|
key = '.ssh/tripleo-admin-rsa'
|
|
return key, None
|
|
|
|
def get_key_pair(self, parsed_args):
|
|
"""Autodetect or return a user defined key file.
|
|
|
|
:param parsed_args: An argparse object.
|
|
:type parsed_args: Object
|
|
|
|
:returns: String
|
|
"""
|
|
|
|
if not parsed_args.overcloud_ssh_key:
|
|
key = utils.get_key(
|
|
stack=parsed_args.stack,
|
|
needs_pair=True
|
|
)
|
|
if not key:
|
|
raise oscexc.CommandError(
|
|
'No key pair found, set the ssh key using'
|
|
'the --overcloud-ssh-key switch.'
|
|
)
|
|
return key
|
|
else:
|
|
return parsed_args.overcloud_ssh_key
|
|
|
|
|
|
class Lister(Command, command.Lister):
|
|
pass
|
|
|
|
|
|
class ShowOne(Command, command.ShowOne):
|
|
pass
|
|
|
|
|
|
class DeprecatedActionStore(_StoreAction):
|
|
"""To deprecated an option an store the value"""
|
|
log = logging.getLogger(__name__)
|
|
|
|
def __call__(self, parser, namespace, values, option_string=None):
|
|
"""Display the warning message"""
|
|
if len(self.option_strings) == 1:
|
|
message = 'The option {option} is deprecated, it will be removed'\
|
|
' in a future version'.format(
|
|
option=self.option_strings[0])
|
|
else:
|
|
option = ', '.join(self.option_strings)
|
|
message = 'The options {option} is deprecated, it will be removed'\
|
|
' in a future version'.format(option=option)
|
|
|
|
self.log.warning(message)
|
|
super(DeprecatedActionStore, self).__call__(
|
|
parser, namespace, values, option_string)
|