Skip to content

Commit

Permalink
Reworked scenario name
Browse files Browse the repository at this point in the history
The scenario name cannot be configured through`molecule.yml`.
It is determined by the directory name of the scenario.  The
config value references a `MOLECULE_SCENARIO_NAME` environment
variable, which is correctly interpolated.  However, it provided
so that the config is symmetrical.  It may be removed in the future,
if the source of much confusion.
  • Loading branch information
retr0h committed May 19, 2017
1 parent 1771dbf commit 0c6a033
Show file tree
Hide file tree
Showing 32 changed files with 77 additions and 50 deletions.
9 changes: 6 additions & 3 deletions molecule/config.py
Expand Up @@ -75,10 +75,12 @@ def __init__(self, molecule_file, args={}, command_args={}):
the CLI.
:returns: None
"""
# TODO(retr0h): This file should be merged.
self.molecule_file = molecule_file
self.args = args
self.command_args = command_args
# NOTE(retr0h): Crude way to determine sceanrio name, before the
# scenario instance has been initialized.
self._scenario_name = scenario.name(scenario.directory(molecule_file))
self.config = self._combine()

@property
Expand Down Expand Up @@ -213,8 +215,9 @@ def _combine(self):
:return: dict
"""
i = interpolation.Interpolator(interpolation.TemplateWithDefaults,
os.environ)
env = self.merge_dicts(os.environ.copy(),
{'MOLECULE_SCENARIO_NAME': self._scenario_name})
i = interpolation.Interpolator(interpolation.TemplateWithDefaults, env)

base = self._get_defaults()
with open(self.molecule_file, 'r') as stream:
Expand Down
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
Expand Up @@ -10,6 +10,6 @@ platforms:
provisioner:
name: {{ cookiecutter.provisioner_name }}
scenario:
name: {{ cookiecutter.scenario_name }}
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: {{ cookiecutter.verifier_name }}
20 changes: 18 additions & 2 deletions molecule/scenario.py
Expand Up @@ -53,6 +53,15 @@ class Scenario(object):
A good source of examples are the `scenario`_ functional tests.
.. important::
The scenario name cannot be configured through `molecule.yml`. It is
determined by the directory name of the scenario. The config value
references a `MOLECULE_SCENARIO_NAME` environment variable, which is
correctly interpolated. However, it provided so that the config is
symmetrical. It may be removed in the future, if the source of much
confusion.
.. _`scenario`: https://github.com/metacloud/molecule/tree/v2/test/scenarios/driver
""" # noqa

Expand All @@ -67,11 +76,11 @@ def __init__(self, config):

@property
def name(self):
return self._config.config['scenario']['name']
return name(self.directory)

@property
def directory(self):
return os.path.dirname(self._config.molecule_file)
return directory(self._config.molecule_file)

@property
def check_sequence(self):
Expand All @@ -84,3 +93,10 @@ def converge_sequence(self):
@property
def test_sequence(self):
return self._config.config['scenario']['test_sequence']


def name(path):
return os.path.basename(path)

def directory(path):
return os.path.dirname(path)
18 changes: 9 additions & 9 deletions test/scenarios/dependency/molecule/ansible-galaxy/molecule.yml
@@ -1,18 +1,18 @@
---
dependency:
name: galaxy
name: galaxy
driver:
name: docker
name: docker
lint:
name: ansible-lint
name: ansible-lint
platforms:
- name: instance-1
provisioner:
name: ansible
playbooks:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
name: ansible
playbooks:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: ansible-galaxy
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
name: testinfra
18 changes: 9 additions & 9 deletions test/scenarios/dependency/molecule/gilt/molecule.yml
@@ -1,18 +1,18 @@
---
dependency:
name: gilt
name: gilt
driver:
name: docker
name: docker
lint:
name: ansible-lint
name: ansible-lint
platforms:
- name: instance-1
provisioner:
name: ansible
playbooks:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
name: ansible
playbooks:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: gilt
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/docker/molecule/default/molecule.yml
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/ec2/molecule/default/molecule.yml
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/ec2/molecule/multi-node/molecule.yml
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/lxc/molecule/default/molecule.yml
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/lxc/molecule/multi-node/molecule.yml
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/lxd/molecule/default/molecule.yml
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/lxd/molecule/multi-node/molecule.yml
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/static/molecule/docker/molecule.yml
Expand Up @@ -16,6 +16,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: docker
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/static/molecule/ec2/molecule.yml
Expand Up @@ -18,6 +18,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: ec2
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -18,6 +18,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: openstack
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/driver/static/molecule/vagrant/molecule.yml
Expand Up @@ -18,6 +18,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: vagrant
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -15,6 +15,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -22,6 +22,6 @@ provisioner:
env:
ANSIBLE_ROLES_PATH: ../../../../../../resources/roles/
scenario:
name: multi-node
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
Expand Up @@ -26,6 +26,6 @@ provisioner:
example_1:
host_group_vars_example_1_child_group_molecule_yml: True
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/interpolation/molecule/default/molecule.yml
Expand Up @@ -13,6 +13,6 @@ provisioner:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: ${VERIFIER_NAME}
Expand Up @@ -15,6 +15,6 @@ provisioner:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: default
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
2 changes: 1 addition & 1 deletion test/scenarios/verifier/molecule/goss/molecule.yml
Expand Up @@ -13,6 +13,6 @@ provisioner:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: goss
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: goss
2 changes: 1 addition & 1 deletion test/scenarios/verifier/molecule/testinfra/molecule.yml
Expand Up @@ -13,6 +13,6 @@ provisioner:
setup: ../../../../resources/playbooks/docker/create.yml
teardown: ../../../../resources/playbooks/docker/destroy.yml
scenario:
name: testinfra
name: ${MOLECULE_SCENARIO_NAME}
verifier:
name: testinfra
8 changes: 8 additions & 0 deletions test/unit/test_scenario.py
Expand Up @@ -55,3 +55,11 @@ def test_test_sequence_property(scenario_instance):
]

assert x == scenario_instance.test_sequence


def test_name():
assert 'baz' == scenario.name('/foo/bar/baz')


def test_directory():
assert '/foo/bar' == scenario.directory('/foo/bar/baz')

0 comments on commit 0c6a033

Please sign in to comment.