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.

Reply via email to