Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactoring: verifiers should expose their own linters #2292

Merged
merged 1 commit into from
Sep 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions molecule/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ def __getitem__(self, i):
else:
return self.__dict__[i]

def get(self, key, default):
return self.__dict__.get(key, default)

def append(self, element):
self.__dict__[str(element)] = element
return super(UserListMap, self).append(element)
Expand All @@ -47,7 +50,7 @@ def drivers(config=None):


@lru_cache()
def verifiers():
def verifiers(config=None):
# type: (object) -> UserListMap[Verifier]
plugins = UserListMap()
pm = pluggy.PluginManager("molecule.verifier")
Expand All @@ -59,7 +62,7 @@ def verifiers():
LOG.error("Failed to load verifier entry point %s", traceback.format_exc())
for p in pm.get_plugins():
try:
plugins.append(p())
plugins.append(p(config))
except Exception as e:
LOG.error("Failed to load %s driver: %s", pm.get_name(p), str(e))
plugins.sort()
Expand Down
16 changes: 4 additions & 12 deletions molecule/command/init/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@

import click

from molecule import api
from molecule import logger
from molecule import util
from molecule.api import drivers
from molecule.api import verifiers
from molecule.command import base as command_base
from molecule.command.init import base

Expand Down Expand Up @@ -106,7 +105,7 @@ def execute(self):
@click.option(
'--driver-name',
'-d',
type=click.Choice(drivers()),
type=click.Choice(api.drivers()),
default='docker',
help='Name of driver to initialize. (docker)',
)
Expand All @@ -125,7 +124,7 @@ def execute(self):
@click.option('--role-name', '-r', required=True, help='Name of the role to create.')
@click.option(
'--verifier-name',
type=click.Choice(verifiers()),
type=click.Choice(api.verifiers()),
default='testinfra',
help='Name of verifier to initialize. (testinfra)',
)
Expand Down Expand Up @@ -158,14 +157,7 @@ def role(
'verifier_name': verifier_name,
}

if verifier_name == 'inspec':
command_args['verifier_lint_name'] = 'rubocop'

if verifier_name == 'goss':
command_args['verifier_lint_name'] = 'yamllint'

if verifier_name == 'ansible':
command_args['verifier_lint_name'] = 'ansible-lint'
command_args['verifier_lint_name'] = api.verifiers()[verifier_name].default_linter

if template is not None:
command_args['template'] = template
Expand Down
16 changes: 4 additions & 12 deletions molecule/command/init/scenario.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@

import click

from molecule import api
from molecule import config
from molecule import logger
from molecule import util
from molecule.api import drivers
from molecule.api import verifiers
from molecule.command import base as command_base
from molecule.command.init import base

Expand Down Expand Up @@ -154,7 +153,7 @@ def _default_scenario_exists(ctx, param, value): # pragma: no cover
@click.option(
'--driver-name',
'-d',
type=click.Choice(drivers()),
type=click.Choice(api.drivers()),
default='docker',
help='Name of driver to initialize. (docker)',
)
Expand Down Expand Up @@ -189,7 +188,7 @@ def _default_scenario_exists(ctx, param, value): # pragma: no cover
)
@click.option(
'--verifier-name',
type=click.Choice(verifiers()),
type=click.Choice(api.verifiers()),
default='testinfra',
help='Name of verifier to initialize. (testinfra)',
)
Expand Down Expand Up @@ -223,14 +222,7 @@ def scenario(
'verifier_name': verifier_name,
}

if verifier_name == 'inspec':
command_args['verifier_lint_name'] = 'rubocop'

if verifier_name == 'goss':
command_args['verifier_lint_name'] = 'yamllint'

if verifier_name == 'ansible':
command_args['verifier_lint_name'] = 'ansible-lint'
command_args['verifier_lint_name'] = api.verifiers()[verifier_name].default_linter

driver_template = driver_template or os.environ.get(
'MOLECULE_SCENARIO_DRIVER_TEMPLATE', None
Expand Down
14 changes: 1 addition & 13 deletions molecule/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@
from molecule.lint import yamllint
from molecule.model import schema_v2
from molecule.provisioner import ansible
from molecule.verifier import ansible as ansible_verifier
from molecule.verifier import goss
from molecule.verifier import inspec
from molecule.verifier import testinfra


LOG = logger.get_logger(__name__)
Expand Down Expand Up @@ -223,15 +219,7 @@ def state(self):
@property
@util.lru_cache()
def verifier(self):
verifier_name = self.config['verifier']['name']
if verifier_name == 'testinfra':
return testinfra.Testinfra(self)
elif verifier_name == 'inspec':
return inspec.Inspec(self)
elif verifier_name == 'goss':
return goss.Goss(self)
elif verifier_name == 'ansible':
return ansible_verifier.Ansible(self)
return api.verifiers(self).get(self.config['verifier']['name'], None)

def _get_driver_name(self):
driver_from_state_file = self.state.driver
Expand Down
1 change: 1 addition & 0 deletions molecule/verifier/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def __init__(self, config=None):
:returns: None
"""
self._config = config
self.default_linter = 'ansible-lint'
decentral1se marked this conversation as resolved.
Show resolved Hide resolved

@abc.abstractproperty
def name(self): # pragma: no cover
Expand Down
1 change: 1 addition & 0 deletions molecule/verifier/goss.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def __init__(self, config=None):
:return: None
"""
super(Goss, self).__init__(config)
self.default_linter = 'yamllint'
if config:
self._tests = self._get_tests()

Expand Down
1 change: 1 addition & 0 deletions molecule/verifier/inspec.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ def __init__(self, config=None):
:return: None
"""
super(Inspec, self).__init__(config)
self.default_linter = 'rubocop'
if config:
self._tests = self._get_tests()

Expand Down
1 change: 1 addition & 0 deletions molecule/verifier/testinfra.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ def __init__(self, config=None):
:return: None
"""
super(Testinfra, self).__init__(config)
self.default_linter = 'flake8'
self._testinfra_command = None
if config:
self._tests = self._get_tests()
Expand Down