Skip to content

Commit

Permalink
Idempotence errors if not already converged (#698)
Browse files Browse the repository at this point in the history
Idempotence should only be run when instances have already
been converged.

Fixes: #694
  • Loading branch information
retr0h committed Jan 7, 2017
1 parent 5d1066f commit c9f8989
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 17 deletions.
12 changes: 7 additions & 5 deletions molecule/command/idempotence.py
Expand Up @@ -54,6 +54,11 @@ def execute(self):
os.path.basename(self._config.scenario.converge))
util.print_info(msg)

if not self._config.state.converged:
msg = 'Instances not converged. Please converge instances first.'
util.print_error(msg)
util.sysexit()

output = self._config.provisioner.converge(
self._config.provisioner.inventory_file,
self._config.scenario.converge,
Expand Down Expand Up @@ -129,8 +134,5 @@ def idempotence(ctx, scenario_name): # pragma: no cover
command_args = {'subcommand': __name__, 'scenario_name': scenario_name}

for config in base.get_configs(args, command_args):
for task in config.scenario.idempotence_sequence:
command_module = getattr(molecule.command, task)
command = getattr(command_module, task.capitalize())
c = command(config)
c.execute()
i = Idempotence(config)
i.execute()
1 change: 0 additions & 1 deletion molecule/config.py
Expand Up @@ -166,7 +166,6 @@ def _get_defaults(self):
'converge_sequence': ['create', 'converge'],
'test_sequence':
['destroy', 'create', 'converge', 'lint', 'verify', 'destroy'],
'idempotence_sequence': ['create', 'converge', 'idempotence'],
},
'verifier': {
'name': 'testinfra',
Expand Down
4 changes: 0 additions & 4 deletions molecule/scenario.py
Expand Up @@ -94,7 +94,3 @@ def converge_sequence(self):
@property
def test_sequence(self):
return self._config.config['scenario']['test_sequence']

@property
def idempotence_sequence(self):
return self._config.config['scenario']['idempotence_sequence']
15 changes: 14 additions & 1 deletion test/unit/command/test_idempotence.py
Expand Up @@ -28,6 +28,7 @@
def idempotence_instance(molecule_file, platforms_data):
configs = [platforms_data]
c = config.Config(molecule_file, configs=configs)
c.state.change_state('converged', True)

return idempotence.Idempotence(c)

Expand Down Expand Up @@ -56,7 +57,19 @@ def test_execute(mocker, patched_print_info, patched_ansible_converge,
patched_print_success.assert_called_once_with(msg)


def test_execute_fails_idempotence(
def test_execute_raises_when_not_converged(
patched_print_error, patched_ansible_converge, idempotence_instance):
idempotence_instance._config.state.change_state('converged', False)
with pytest.raises(SystemExit) as e:
idempotence_instance.execute()

assert 1 == e.value.code

msg = 'Instances not converged. Please converge instances first.'
patched_print_error.assert_called_with(msg)


def test_execute_raises_when_fails_idempotence(
mocker, patched_print_error, patched_ansible_converge,
patched_command_idempotence_is_idempotent, idempotence_instance):
patched_command_idempotence_is_idempotent.return_value = False
Expand Down
6 changes: 0 additions & 6 deletions test/unit/test_scenario.py
Expand Up @@ -74,9 +74,3 @@ def test_test_sequence_property(scenario_instance):
x = ['destroy', 'create', 'converge', 'lint', 'verify', 'destroy']

assert x == scenario_instance.test_sequence


def test_idempotence_sequence_property(scenario_instance):
x = ['create', 'converge', 'idempotence']

assert x == scenario_instance.idempotence_sequence

0 comments on commit c9f8989

Please sign in to comment.