diff --git a/lib/ansible/plugins/__init__.py b/lib/ansible/plugins/__init__.py index 92e99c39e4..87c7ba446d 100644 --- a/lib/ansible/plugins/__init__.py +++ b/lib/ansible/plugins/__init__.py @@ -67,7 +67,7 @@ class AnsiblePlugin(with_metaclass(ABCMeta, object)): Sets the _options attribute with the configuration/keyword information for this plugin :arg task_keys: Dict with playbook keywords that affect this option - :arg var_options: Dict with either 'conneciton variables' + :arg var_options: Dict with either 'connection variables' :arg direct: Dict with 'direct assignment' ''' self._options = C.config.get_plugin_options(get_plugin_class(self), self._load_name, keys=task_keys, variables=var_options, direct=direct) diff --git a/test/integration/targets/inventory_plugin_config/aliases b/test/integration/targets/inventory_plugin_config/aliases new file mode 100644 index 0000000000..79d8b9285e --- /dev/null +++ b/test/integration/targets/inventory_plugin_config/aliases @@ -0,0 +1 @@ +posix/ci/group3 diff --git a/test/integration/targets/inventory_plugin_config/config_with_parameter.yml b/test/integration/targets/inventory_plugin_config/config_with_parameter.yml new file mode 100644 index 0000000000..8ff39884be --- /dev/null +++ b/test/integration/targets/inventory_plugin_config/config_with_parameter.yml @@ -0,0 +1,3 @@ +plugin: test_inventory +departments: + - paris diff --git a/test/integration/targets/inventory_plugin_config/config_without_parameter.yml b/test/integration/targets/inventory_plugin_config/config_without_parameter.yml new file mode 100644 index 0000000000..787cf967a0 --- /dev/null +++ b/test/integration/targets/inventory_plugin_config/config_without_parameter.yml @@ -0,0 +1 @@ +plugin: test_inventory diff --git a/test/integration/targets/inventory_plugin_config/runme.sh b/test/integration/targets/inventory_plugin_config/runme.sh new file mode 100755 index 0000000000..119a073ac5 --- /dev/null +++ b/test/integration/targets/inventory_plugin_config/runme.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -o errexit -o nounset -o xtrace + +export ANSIBLE_INVENTORY_PLUGINS=./ +export ANSIBLE_INVENTORY_ENABLED=test_inventory + +# check default values +ansible-inventory --list -i ./config_without_parameter.yml --export | \ + env python -c "import json, sys; inv = json.loads(sys.stdin.read()); \ + assert set(inv['_meta']['hostvars']['test_host']['departments']) == set(['seine-et-marne', 'haute-garonne'])" + +# check values +ansible-inventory --list -i ./config_with_parameter.yml --export | \ + env python -c "import json, sys; inv = json.loads(sys.stdin.read()); \ + assert set(inv['_meta']['hostvars']['test_host']['departments']) == set(['paris'])" diff --git a/test/integration/targets/inventory_plugin_config/test_inventory.py b/test/integration/targets/inventory_plugin_config/test_inventory.py new file mode 100644 index 0000000000..009caf75a1 --- /dev/null +++ b/test/integration/targets/inventory_plugin_config/test_inventory.py @@ -0,0 +1,51 @@ +from __future__ import (absolute_import, division, print_function) + +__metaclass__ = type + +DOCUMENTATION = ''' + name: test_inventory + plugin_type: inventory + authors: + - Pierre-Louis Bonicoli (@pilou-) + short_description: test inventory + description: + - test inventory (fetch parameters using config API) + options: + departments: + description: test parameter + type: list + default: + - seine-et-marne + - haute-garonne + required: False +''' + +EXAMPLES = ''' +# Example command line: ansible-inventory --list -i test_inventory.yml + +plugin: test_inventory +departments: + - paris +''' + +from ansible.plugins.inventory import BaseInventoryPlugin + + +class InventoryModule(BaseInventoryPlugin): + NAME = 'test_inventory' + + def verify_file(self, path): + return True + + def parse(self, inventory, loader, path, cache=True): + super(InventoryModule, self).parse(inventory, loader, path) + self._read_config_data(path=path) + + departments = self.get_option('departments') + + group = 'test_group' + host = 'test_host' + + self.inventory.add_group(group) + self.inventory.add_host(group=group, host=host) + self.inventory.set_variable(host, 'departments', departments)