overcloud deploy - net ports with baremetal deploy

--network-ports
  Deploy network ports during baremetal node provisioning.

--network-config (implies --network-ports)
  Deploy network ports and apply the network configuration
  by applying the tripleo_network_config role on the nodes.

Change-Id: Ib0c57e57fe5771d914ffd2a93c911cb325152f8b
This commit is contained in:
Harald Jensås 2021-05-27 13:06:35 +02:00
parent c3a8abfdc1
commit 05b47bc07e
2 changed files with 39 additions and 24 deletions

View File

@ -1449,12 +1449,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
verbosity=3, workdir=mock.ANY, forks=None)],
utils_fixture2.mock_run_ansible_playbook.mock_calls)
@mock.patch('tripleoclient.utils.write_user_environment', autospec=True)
def test_provision_baremetal(self, mock_write):
mock_write.return_value = (
'/tmp/tht/user-environments/baremetal-deployed.yaml',
'overcloud/user-environments/baremetal-deployed.yaml'
)
def test_provision_baremetal(self):
baremetal_deployed = {
'parameter_defaults': {'foo': 'bar'}
}
@ -1492,6 +1487,7 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
with open(env_path, 'w') as f:
yaml.safe_dump(baremetal_deployed, f)
self.cmd.working_dir = self.tmp_dir.join('working_dir')
result = self.cmd._provision_baremetal(parsed_args, tht_root)
self.cmd._unprovision_baremetal(parsed_args)
self.assertEqual([env_path], result)
@ -1505,7 +1501,11 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
],
'baremetal_deployed_path': env_path,
'ssh_public_keys': 'sekrit',
'ssh_user_name': 'heat-admin'
'ssh_user_name': 'heat-admin',
'ssh_private_key_file': self.tmp_dir.join('id_rsa.pub'),
'manage_network_ports': False,
'configure_networking': False,
'working_dir': self.tmp_dir.join('working_dir')
},
inventory='localhost,',
playbook='cli-overcloud-node-provision.yaml',
@ -1520,7 +1520,8 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
{'count': 10, 'name': 'Compute'},
{'count': 3, 'name': 'Controller'}
],
'prompt': False
'prompt': False,
'manage_network_ports': False,
},
inventory='localhost,',
playbook='cli-overcloud-node-unprovision.yaml',
@ -1529,12 +1530,6 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud):
workdir=mock.ANY
)
])
mock_write.assert_called_once_with(
{'parameter_defaults': {'foo': 'bar'}},
'baremetal-deployed.yaml',
tht_root,
'overcloud'
)
def test__provision_networks(self):
networks_file_path = self.tmp_dir.join('networks.yaml')

View File

@ -84,6 +84,12 @@ def _validate_args(parsed_args):
"Error: --config-download-only/--setup-only must not be used when "
"using --baremetal-deployment")
if ((parsed_args.network_ports or parsed_args.network_config)
and not parsed_args.baremetal_deployment):
raise oscexc.CommandError(
"Error: --baremetal-deployment must be used when using "
"--network-ports or --network-config")
if parsed_args.environment_directories:
_validate_args_environment_dir(parsed_args.environment_directories)
@ -422,9 +428,13 @@ class DeployOvercloud(command.Command):
if not parsed_args.baremetal_deployment:
return []
roles_file_path = os.path.abspath(parsed_args.baremetal_deployment)
roles_file_dir = os.path.dirname(roles_file_path)
with open(parsed_args.baremetal_deployment, 'r') as fp:
roles = yaml.safe_load(fp)
utils.validate_roles_playbooks(roles_file_dir, roles)
key = self.get_key_pair(parsed_args)
with open('{}.pub'.format(key), 'rt') as fp:
ssh_key = fp.read()
@ -437,8 +447,13 @@ class DeployOvercloud(command.Command):
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"baremetal_deployed_path": output_path,
"ssh_private_key_file": key,
"ssh_public_keys": ssh_key,
"ssh_user_name": parsed_args.overcloud_ssh_user
"ssh_user_name": parsed_args.overcloud_ssh_user,
"manage_network_ports": (parsed_args.network_ports
or parsed_args.network_config),
"configure_networking": parsed_args.network_config,
"working_dir": self.working_dir
}
with utils.TempDirs() as tmp:
@ -450,15 +465,9 @@ class DeployOvercloud(command.Command):
verbosity=utils.playbook_verbosity(self=self),
extra_vars=extra_vars,
)
with open(output_path, 'r') as fp:
parameter_defaults = yaml.safe_load(fp)
utils.write_user_environment(
parameter_defaults,
'baremetal-deployed.yaml',
tht_root,
parsed_args.stack)
if parsed_args.network_config:
utils.run_role_playbooks(self, self.working_dir, roles_file_dir,
roles)
return [output_path]
@ -481,6 +490,8 @@ class DeployOvercloud(command.Command):
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"prompt": False,
"manage_network_ports": (parsed_args.network_ports
or parsed_args.network_config),
}
)
@ -850,6 +861,15 @@ class DeployOvercloud(command.Command):
metavar='<baremetal_deployment.yaml>',
help=_('Configuration file describing the '
'baremetal deployment'))
parser.add_argument('--network-ports',
help=_('Enable provisioning of network ports'),
default=False,
action="store_true")
parser.add_argument('--network-config',
help=_('Apply network config to provisioned '
'nodes. (Implies "--network-ports")'),
default=False,
action="store_true")
parser.add_argument(
'--limit',
action='store',