You don't need to have that Yaml file parsed/verified from within your plugin.
On Fri, Jan 12, 2024 at 04:50:01-0800, Kai Pistorius wrote:
> I am trying to develop a Ansible Inventory Plugin based on some examples I
> found on Github.
> This is my Yaml File:
> ---
> plugin: oracle_inventory
> oem_db_server: myoem.domain.com
> oem_db_port: 1521
> oem_db_sid: OEM
> oem_schema_owner: SYSMAN
> oem_owner_password: password
> oem_target_read_user: READ_ONLY_USER
> oem_target_read_password: password
> And this is my implementation of the Plugin:
> from __future__ import (absolute_import, division, print_function)
>
> from loguru import logger
>
> __metaclass__ = type
>
> DOCUMENTATION = r'''
> name: oracle_inventory
> plugin_type: inventory
> short_description: Returns Ansible inventory from Oracle databases
> description: Returns Ansible inventory from Oracle databases which are
> registered in Oracle Enterprise Manager (OEM)
> options:
> plugin:
> description: Name of the plugin
> required: true
> choices: ['oracle_inventory']
> oem_db_server:
> description: The OEM repository database server
> required: true
> oem_db_port:
> description: The Port of the OEM repository database
> required: true
> oem_db_sid:
> description: The ORACLE_SID of the OEM repository database
> required: true
> oem_schema_owner:
> description: The owner of the OEM repository schema
> required: true
> oem_owner_password:
> description: The password of the OEM repository schema owner
> required: true
> oem_target_read_user:
> description: The user which is allowed to query the host,
> agent, and database OEM targets and its properties
> required: true
> oem_target_read_password:
> description: The password of the OEM target read user
> required: true
> '''
>
> from ansible.plugins.inventory import BaseInventoryPlugin
> from ansible.errors import AnsibleError, AnsibleParserError
>
>
> class InventoryModule(BaseInventoryPlugin):
> NAME = 'oracle_inventory'
>
> def __init__(self):
> super(InventoryModule, self).__init__()
>
> def verify_file(self, path):
> '''Return true/false if this is possibly a valid file for this
> plugin to consume
> '''
> valid = False
> if super(InventoryModule, self).verify_file(path):
> logger.info(path)
> if path.endswith(('oracle_inventory.yaml',
> 'oracle_inventory.yml')):
> valid = True
> return valid
>
> def parse(self, inventory, loader, path, cache):
> '''Return dynamic inventory from source '''
> super(InventoryModule, self).parse(inventory, loader, path, cache)
>
> try:
> pass
> # self.oem_db_server = self.get_option("oem_db_server")
> # self.oem_db_sid = self.get_option("oem_db_port")
> # self.oem_db_port = self.get_option("oem_db_port")
> # self.oem_schema_owner = self.get_option("oem_schema_owner")
> # self.oem_schema_password =
> self.get_option("oem_owner_password")
> # self.oem_target_reader_user =
> self.get_option("oem_target_read_user")
> # self.oem_target_reader_password =
> self.get_option("oem_target_read_password")
> except Exception as e:
> raise AnsibleError(f"Options required: {e}")
> self._populate()
>
> def _populate(self):
> '''Return the hosts and groups'''
> self.inventory.add_group("MY_DEPARTMENT")
> self.inventory.add_host(host = "myserver.domain", group=
> "MY_DEPARTMENT")
> self.inventory.set_variable("myserver.domain", 'ansible_host',
> "myserver.domain")
>
>
> Both files are located in /home/kai/inventory_plugins
>
> When I execute
> ansible-inventory -vvv -i oracle_inventory.yml --list
>
> I get this warnings:
> kai@myserver:/home/kai/inventory_plugins:ansible-inventory -vvv -i
> oracle_inventory.yml --list
> ansible-inventory [core 2.16.2]
> config file = /etc/ansible/ansible.cfg
> configured module search path = ['/home/kai/.ansible/plugins/modules',
> '/usr/share/ansible/plugins/modules']
> ansible python module location =
> /usr/local/lib/python3.11/site-packages/ansible
> ansible collection location =
> /home/kai/.ansible/collections:/usr/share/ansible/collections
> executable location = /usr/local/bin/ansible-inventory
> python version = 3.11.0 (main, Apr 4 2023, 13:20:21) [GCC 4.8.5]
> (/usr/local/bin/python3.11)
> jinja version = 3.1.2
> libyaml = True
> Using /etc/ansible/ansible.cfg as config file
> redirecting (type: inventory) ansible.builtin.virtualbox to
> community.general.virtualbox
> host_list declined parsing /home/kai/inventory_plugins/oracle_inventory.yml
> as it did not pass its verify_file() method
> ansible_collections.community.general.plugins.inventory.virtualbox declined
> parsing /home/kai/inventory_plugins/oracle_inventory.yml as it did not pass
> its verify_file() method
> [WARNING]: * Failed to parse
> /home/kai/inventory_plugins/oracle_inventory.yml with yaml plugin: Plugin
> configuration YAML file, not YAML inventory
> File
> "/usr/local/lib/python3.11/site-packages/ansible/inventory/manager.py",
> line 293, in parse_source
> plugin.parse(self._inventory, self._loader, source, cache=cache)
> File
> "/usr/local/lib/python3.11/site-packages/ansible/plugins/inventory/yaml.py",
> line 114, in parse
> raise AnsibleParserError('Plugin configuration YAML file, not YAML
> inventory')
> [WARNING]: * Failed to parse
> /home/kai/inventory_plugins/oracle_inventory.yml with constructed plugin:
> Incorrect plugin name in file: oracle_inventory
> File
> "/usr/local/lib/python3.11/site-packages/ansible/inventory/manager.py",
> line 293, in parse_source
> plugin.parse(self._inventory, self._loader, source, cache=cache)
> File
> "/usr/local/lib/python3.11/site-packages/ansible/plugins/inventory/constructed.py",
>
> line 142, in parse
> self._read_config_data(path)
> File
> "/usr/local/lib/python3.11/site-packages/ansible/plugins/inventory/__init__.py",
>
> line 235, in _read_config_data
> raise AnsibleParserError("Incorrect plugin name in file: %s" %
> config.get('plugin', 'none found'))
> [WARNING]: Unable to parse /home/kai/inventory_plugins/oracle_inventory.yml
> as an inventory source
> [WARNING]: No inventory was parsed, only implicit localhost is available
> {
> "_meta": {
> "hostvars": {}
> },
> "all": {
> "children": [
> "ungrouped"
> ]
> }
> }
>
> Could anyone help me solving this?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/796159e7-e791-43da-b486-096213a2cb7cn%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/bc11fbf0ae35686fdf38c7e33a3fca7d%40ansible-project-khibzsw.rediremail.com.