diff --git a/molecule/command/converge.py b/molecule/command/converge.py index 2b4c87500..3b2e1bf8b 100644 --- a/molecule/command/converge.py +++ b/molecule/command/converge.py @@ -57,6 +57,8 @@ def execute(self): self._config.provisioner.inventory_file, self._config.scenario.converge) + self._config.state.change_state('converged', True) + @click.command() @click.pass_context diff --git a/molecule/command/create.py b/molecule/command/create.py index 2c9aab1ee..4690d6a7b 100644 --- a/molecule/command/create.py +++ b/molecule/command/create.py @@ -56,6 +56,8 @@ def execute(self): self._config.provisioner.inventory_file, self._config.scenario.setup) + self._config.state.change_state('created', True) + @click.command() @click.pass_context diff --git a/molecule/command/destroy.py b/molecule/command/destroy.py index d7083cbe0..e0e8feea3 100644 --- a/molecule/command/destroy.py +++ b/molecule/command/destroy.py @@ -56,6 +56,8 @@ def execute(self): self._config.provisioner.inventory_file, self._config.scenario.teardown) + self._config.state.reset() + @click.command() @click.pass_context diff --git a/molecule/state.py b/molecule/state.py index cbf6d7f7d..d768bc1b0 100644 --- a/molecule/state.py +++ b/molecule/state.py @@ -24,7 +24,10 @@ from molecule import util -VALID_KEYS = ['created', ] +VALID_KEYS = [ + 'created', + 'converged', +] class InvalidState(Exception): @@ -66,6 +69,10 @@ def wrapper(self, *args, **kwargs): def state_file(self): return self._state_file + @property + def converged(self): + return self._data.get('converged') + @property def created(self): return self._data.get('created') @@ -96,7 +103,10 @@ def _get_data(self): return self._default_data() def _default_data(self): - return {"created": None, } + return { + 'converged': None, + 'created': None, + } def _load_file(self): with open(self.state_file) as stream: diff --git a/test/unit/command/test_converge.py b/test/unit/command/test_converge.py index 6b0b7e756..f2b9e1cd2 100644 --- a/test/unit/command/test_converge.py +++ b/test/unit/command/test_converge.py @@ -36,3 +36,5 @@ def test_execute(mocker, patched_print_info, patched_ansible_converge, patched_ansible_converge.assert_called_once_with( config_instance.provisioner.inventory_file, config_instance.scenario.converge) + + assert config_instance.state.converged diff --git a/test/unit/command/test_create.py b/test/unit/command/test_create.py index 2f625d5cb..61e1d48cf 100644 --- a/test/unit/command/test_create.py +++ b/test/unit/command/test_create.py @@ -36,3 +36,5 @@ def test_execute(mocker, patched_print_info, patched_ansible_converge, patched_ansible_converge.assert_called_once_with( config_instance.provisioner.inventory_file, config_instance.scenario.setup) + + assert config_instance.state.created diff --git a/test/unit/command/test_destroy.py b/test/unit/command/test_destroy.py index 4a457041d..091f1251d 100644 --- a/test/unit/command/test_destroy.py +++ b/test/unit/command/test_destroy.py @@ -36,3 +36,6 @@ def test_execute(mocker, patched_print_info, patched_ansible_converge, patched_ansible_converge.assert_called_once_with( config_instance.provisioner.inventory_file, config_instance.scenario.teardown) + + assert not config_instance.state.converged + assert not config_instance.state.created diff --git a/test/unit/test_state.py b/test/unit/test_state.py index 8ef256970..749aa9837 100644 --- a/test/unit/test_state.py +++ b/test/unit/test_state.py @@ -41,39 +41,43 @@ def test_state_file_property(state_instance): assert x == state_instance.state_file +def test_converged(state_instance): + assert not state_instance.converged + + def test_created(state_instance): assert not state_instance.created def test_reset(state_instance): - assert not state_instance.created + assert not state_instance.converged - state_instance.change_state('created', True) - assert state_instance.created + state_instance.change_state('converged', True) + assert state_instance.converged state_instance.reset() - assert not state_instance.created + assert not state_instance.converged def test_reset_persists(state_instance): - assert not state_instance.created + assert not state_instance.converged - state_instance.change_state('created', True) - assert state_instance.created + state_instance.change_state('converged', True) + assert state_instance.converged state_instance.reset() - assert not state_instance.created + assert not state_instance.converged with open(state_instance.state_file) as stream: d = yaml.safe_load(stream) - assert not d.get('created') + assert not d.get('converged') def test_change_state(state_instance): - state_instance.change_state('created', True) + state_instance.change_state('converged', True) - assert state_instance.created + assert state_instance.converged def test_change_state_raises(state_instance): @@ -91,10 +95,11 @@ def test_get_data_loads_existing_state_file(temp_dir): os.makedirs(ephemeral_directory) - data = {'created': True} + data = {'converged': False, 'created': True} util.write_file(state_file, yaml.safe_dump(data)) c = config.Config(molecule_file) s = state.State(c) + assert not s.converged assert s.created