Merge "Add --baremetal-deployment to overcloud deploy cmd"

This commit is contained in:
Zuul 2019-08-16 02:59:12 +00:00 committed by Gerrit Code Review
commit 6c12ce6d7c
2 changed files with 93 additions and 0 deletions

View File

@ -1472,6 +1472,62 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
self.cmd.take_action, self.cmd.take_action,
parsed_args) parsed_args)
@mock.patch('tripleoclient.workflows.baremetal.deploy_roles',
autospec=True)
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
'_write_user_environment', autospec=True)
def test_provision_baremetal(self, mock_write, mock_deploy_roles):
mock_write.return_value = (
'/tmp/tht/user-environments/baremetal-deployed.yaml',
'overcloud/user-environments/baremetal-deployed.yaml'
)
mock_deploy_roles.return_value = {
'parameter_defaults': {'foo': 'bar'}
}
bm_deploy_path = self.tmp_dir.join('bm_deploy.yaml')
deploy_data = [
{'name': 'Compute', 'count': 10},
{'name': 'Controller', 'count': 3},
]
with open(bm_deploy_path, 'w') as temp_file:
yaml.safe_dump(deploy_data, temp_file)
ssh_key_path = self.tmp_dir.join('id_rsa.pub')
with open(ssh_key_path, 'w') as temp_file:
temp_file.write('sekrit')
arglist = [
'--baremetal-deployment', bm_deploy_path,
'--overcloud-ssh-key', ssh_key_path
]
verifylist = [
('baremetal_deployment', bm_deploy_path),
('overcloud_ssh_key', ssh_key_path),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
tht_root = '/tmp/tht'
result = self.cmd._provision_baremetal(parsed_args, tht_root)
self.assertEqual(
['/tmp/tht/user-environments/baremetal-deployed.yaml'],
result
)
mock_deploy_roles.assert_called_once_with(
self.app.client_manager,
roles=deploy_data,
ssh_keys=['sekrit'],
ssh_user_name='heat-admin'
)
mock_write.assert_called_once_with(
self.cmd,
{'parameter_defaults': {'foo': 'bar'}},
'baremetal-deployed.yaml',
'/tmp/tht',
'overcloud'
)
class TestArgumentValidation(fakes.TestDeployOvercloud): class TestArgumentValidation(fakes.TestDeployOvercloud):

View File

@ -45,6 +45,7 @@ from tripleoclient import command
from tripleoclient import constants from tripleoclient import constants
from tripleoclient import exceptions from tripleoclient import exceptions
from tripleoclient import utils from tripleoclient import utils
from tripleoclient.workflows import baremetal
from tripleoclient.workflows import deployment from tripleoclient.workflows import deployment
from tripleoclient.workflows import parameters as workflow_params from tripleoclient.workflows import parameters as workflow_params
from tripleoclient.workflows import plan_management from tripleoclient.workflows import plan_management
@ -394,6 +395,9 @@ class DeployOvercloud(command.Command):
env = {} env = {}
created_env_files = [] created_env_files = []
created_env_files.extend(
self._provision_baremetal(parsed_args, tht_root))
if parsed_args.environment_directories: if parsed_args.environment_directories:
created_env_files.extend(utils.load_environment_directories( created_env_files.extend(utils.load_environment_directories(
parsed_args.environment_directories)) parsed_args.environment_directories))
@ -560,6 +564,12 @@ class DeployOvercloud(command.Command):
"Error: The following files were not found: {0}".format( "Error: The following files were not found: {0}".format(
", ".join(nonexisting_envs))) ", ".join(nonexisting_envs)))
if (parsed_args.baremetal_deployment
and not parsed_args.deployed_server):
raise oscexc.CommandError(
"Error: --deployed-server must be used when using "
"--baremetal-deployment")
if parsed_args.deployed_server and (parsed_args.run_validations if parsed_args.deployed_server and (parsed_args.run_validations
or not parsed_args.disable_validations): or not parsed_args.disable_validations):
raise oscexc.CommandError( raise oscexc.CommandError(
@ -607,6 +617,29 @@ class DeployOvercloud(command.Command):
return default_role_counts return default_role_counts
def _provision_baremetal(self, parsed_args, tht_root):
if not parsed_args.baremetal_deployment:
return []
with open(parsed_args.baremetal_deployment, 'r') as fp:
roles = yaml.safe_load(fp)
with open(parsed_args.overcloud_ssh_key, 'rt') as fp:
ssh_key = fp.read()
parameter_defaults = baremetal.deploy_roles(
self.app.client_manager,
roles=roles, ssh_keys=[ssh_key],
ssh_user_name=parsed_args.overcloud_ssh_user)
env_path, swift_path = self._write_user_environment(
parameter_defaults,
'baremetal-deployed.yaml',
tht_root,
parsed_args.stack)
return [env_path]
def get_parser(self, prog_name): def get_parser(self, prog_name):
# add_help doesn't work properly, set it to False: # add_help doesn't work properly, set it to False:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
@ -835,6 +868,10 @@ class DeployOvercloud(command.Command):
'the deployment actions. This may need to ' 'the deployment actions. This may need to '
'be used if deploying on a python2 host ' 'be used if deploying on a python2 host '
'from a python3 system or vice versa.')) 'from a python3 system or vice versa.'))
parser.add_argument('-b', '--baremetal-deployment',
metavar='<baremetal_deployment.yaml>',
help=_('Configuration file describing the '
'baremetal deployment'))
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):