Fix large bm deploy file, ansible arugment to long

When using a very large baremetal deployment definition yaml
file ansible-playbook fails with "too large argument".

Instead of parsing the yaml file and passing the potentially large
list to ansible use ansible's lookup plugin instead.

Resolves rhbz#2249593

Change-Id: I02ffb9964b5758de396c8c9c686c1e21a0ba9cd0
This commit is contained in:
Harald Jensås 2023-11-21 14:40:14 +01:00
parent b6fb1e58b1
commit e4562bc876
3 changed files with 21 additions and 22 deletions

View File

@ -327,6 +327,7 @@ class TestProvisionNode(fakes.TestOvercloudNode):
with tempfile.NamedTemporaryFile() as inp:
with tempfile.NamedTemporaryFile() as outp:
with tempfile.NamedTemporaryFile() as keyf:
roles_file_path = inp.name
inp.write(b'- name: Compute\n- name: Controller\n')
inp.flush()
keyf.write(b'I am a key')
@ -351,10 +352,9 @@ class TestProvisionNode(fakes.TestOvercloudNode):
mock_playbook.assert_called_once_with(
extra_vars={
'stack_name': 'overcloud',
'baremetal_deployment': [
{'name': 'Compute'},
{'name': 'Controller'}
],
"baremetal_deployment": (
'{{ lookup("file", "%s") | from_yaml }}'
% roles_file_path),
'baremetal_deployed_path': mock.ANY,
'ssh_public_keys': 'I am a key',
'ssh_user_name': 'tripleo-admin',
@ -408,6 +408,7 @@ class TestUnprovisionNode(fakes.TestOvercloudNode):
]))
with tempfile.NamedTemporaryFile() as inp:
roles_file_path = inp.name
inp.write(b'- name: Compute\n- name: Controller\n')
inp.flush()
argslist = ['--all', inp.name]
@ -420,10 +421,9 @@ class TestUnprovisionNode(fakes.TestOvercloudNode):
mock.call(
extra_vars={
'stack_name': 'overcloud',
'baremetal_deployment': [
{'name': 'Compute'},
{'name': 'Controller'}
],
'baremetal_deployment': (
'{{ lookup("file", "%s") | from_yaml }}'
% roles_file_path),
'all': True,
'prompt': True,
'unprovision_confirm': unprovision_confirm,
@ -438,10 +438,9 @@ class TestUnprovisionNode(fakes.TestOvercloudNode):
mock.call(
extra_vars={
'stack_name': 'overcloud',
'baremetal_deployment': [
{'name': 'Compute'},
{'name': 'Controller'}
],
'baremetal_deployment': (
'{{ lookup("file", "%s") | from_yaml }}'
% roles_file_path),
'all': True,
'prompt': False,
'manage_network_ports': True,

View File

@ -126,9 +126,6 @@ class DeleteOvercloud(command.Command):
)
if parsed_args.baremetal_deployment:
with open(parsed_args.baremetal_deployment, 'r') as fp:
roles = yaml.safe_load(fp)
with utils.TempDirs() as tmp:
utils.run_ansible_playbook(
playbook='cli-overcloud-node-unprovision.yaml',
@ -138,7 +135,8 @@ class DeleteOvercloud(command.Command):
verbosity=utils.playbook_verbosity(self=self),
extra_vars={
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"baremetal_deployment": ('{{ lookup("file", "%s") | from_yaml }}'
% parsed_args.baremetal_deployment),
"all": True,
"prompt": False,
"manage_network_ports": parsed_args.network_ports,

View File

@ -324,7 +324,8 @@ class ProvisionNode(command.Command):
extra_vars = {
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"baremetal_deployment": ('{{ lookup("file", "%s") | from_yaml }}'
% roles_file_path),
"baremetal_deployed_path": output_path,
"ssh_public_keys": ssh_key,
"ssh_private_key_file": key,
@ -398,9 +399,6 @@ class UnprovisionNode(command.Command):
'This option is no longer used, network ports '
'are always managed.')
with open(parsed_args.input, 'r') as fp:
roles = yaml.safe_load(fp)
with oooutils.TempDirs() as tmp:
unprovision_confirm = os.path.join(tmp, 'unprovision_confirm.json')
@ -413,7 +411,9 @@ class UnprovisionNode(command.Command):
verbosity=oooutils.playbook_verbosity(self=self),
extra_vars={
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"baremetal_deployment": (
'{{ lookup("file", "%s") | from_yaml }}'
% parsed_args.input),
"all": parsed_args.all,
"prompt": True,
"unprovision_confirm": unprovision_confirm,
@ -464,7 +464,9 @@ class UnprovisionNode(command.Command):
verbosity=oooutils.playbook_verbosity(self=self),
extra_vars={
"stack_name": parsed_args.stack,
"baremetal_deployment": roles,
"baremetal_deployment": (
'{{ lookup("file", "%s") | from_yaml }}'
% parsed_args.input),
"all": parsed_args.all,
"prompt": False,
"manage_network_ports": True,