Skip to content

Commit

Permalink
Use zaza.model.run_on_unit for ca checks
Browse files Browse the repository at this point in the history
Existing code uses the python libjuju unit.run in order to execute
a wait check for ca readiness across the units. The behavior of libjuju
changed between 2.x and 3.x and causes this functionality to break. This
is abstracted and handled in the zaza library, so use that code instead
as it properly handles the differences.

Signed-off-by: Billy Olsen <[email protected]>
  • Loading branch information
wolsen committed Mar 18, 2024
1 parent 40a5919 commit a64d2c6
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
13 changes: 9 additions & 4 deletions unit_tests/utilities/test_zaza_utilities_openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -1700,19 +1700,24 @@ def _get_action_output(stdout, code, stderr=None):
'Stderr': stderr,
'Stdout': stdout}}
return action

results = {
'/tmp/missing.cert': _get_action_output(
'',
'1',
'cat: /tmp/missing.cert: No such file or directory'),
'/tmp/good.cert': _get_action_output('CERTIFICATE', '0')}

async def _run(command, timeout=None):
return results[command.split()[-1]]
self.patch_object(openstack_utils.zaza.model, "async_run_on_unit")

async def _run_on_unit(unit_name, command, model_name=None,
timeout=None):
return results[command.split()[-1]].data.get('results')

self.async_run_on_unit.side_effect = _run_on_unit

self.unit1 = mock.MagicMock()
self.unit2 = mock.MagicMock()
self.unit2.run.side_effect = _run
self.unit1.run.side_effect = _run
self.units = [self.unit1, self.unit2]
_units = mock.MagicMock()
_units.units = self.units
Expand Down
8 changes: 6 additions & 2 deletions zaza/openstack/utilities/openstack.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,12 @@ async def _check_ca_present(model, ca_files):
for ca_file in ca_files:
for unit in units:
try:
output = await unit.run('cat {}'.format(ca_file))
contents = output.data.get('results').get('Stdout', '')
output = await zaza.model.async_run_on_unit(
unit.name,
'cat {}'.format(ca_file),
model_name=model_name
)
contents = output.get('Stdout', '')
if ca_cert not in contents:
break
# libjuju throws a generic error for connection failure. So we
Expand Down

0 comments on commit a64d2c6

Please sign in to comment.