cherrypick for #46786

This commit is contained in:
Sloane Hertel 2018-10-11 12:06:52 -04:00 committed by Toshio Kuratomi
parent ed5f0d5c45
commit 68aa3e24a8
8 changed files with 19 additions and 20 deletions

View file

@ -102,11 +102,11 @@ This method is used by Ansible to make a quick determination if the inventory so
valid = False valid = False
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
# base class verifies that file exists and is readable by current user # base class verifies that file exists and is readable by current user
if path.endswith(('.vbox.yaml', '.vbox.yml')): if path.endswith(('virtualbox.yaml', 'virtualbox.yml', 'vbox.yaml', 'vbox.yml')):
valid = True valid = True
return valid return valid
In this case, from the :ref:`virtualbox inventory plugin <virtualbox_inventory>`, we screen for specific file name patterns to avoid attempting to consume any valid yaml file. You can add any type of condition here, but the most common one is 'extension matching' In this case, from the :ref:`virtualbox inventory plugin <virtualbox_inventory>`, we screen for specific file name patterns to avoid attempting to consume any valid yaml file. You can add any type of condition here, but the most common one is 'extension matching'. If you implement extension matching for YAML configuration files the path suffix <plugin_name>.<yml|yaml> should be accepted. All valid extensions should be documented in the plugin description.
Another example that actually does not use a 'file' but the inventory source string itself, Another example that actually does not use a 'file' but the inventory source string itself,
from the :ref:`host list <host_list_inventory>` plugin: from the :ref:`host list <host_list_inventory>` plugin:

View file

@ -16,7 +16,7 @@ DOCUMENTATION = '''
- constructed - constructed
description: description:
- Get inventory hosts from Amazon Web Services EC2. - Get inventory hosts from Amazon Web Services EC2.
- Uses a <name>.aws_ec2.yaml (or <name>.aws_ec2.yml) YAML configuration file. - Uses a YAML configuration file that ends with aws_ec2.(yml|yaml).
options: options:
plugin: plugin:
description: token that ensures this is a source file for the 'aws_ec2' plugin. description: token that ensures this is a source file for the 'aws_ec2' plugin.
@ -484,9 +484,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
:return the contents of the config file :return the contents of the config file
''' '''
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if path.endswith('.aws_ec2.yml') or path.endswith('.aws_ec2.yaml'): if path.endswith(('aws_ec2.yml', 'aws_ec2.yaml')):
return True return True
display.debug("aws_ec2 inventory filename must end with '*.aws_ec2.yml' or '*.aws_ec2.yaml'") display.debug("aws_ec2 inventory filename must end with 'aws_ec2.yml' or 'aws_ec2.yaml'")
return False return False
def _get_query_options(self, config_data): def _get_query_options(self, config_data):

View file

@ -10,7 +10,7 @@ DOCUMENTATION = '''
short_description: rds instance source short_description: rds instance source
description: description:
- Get instances and clusters from Amazon Web Services RDS. - Get instances and clusters from Amazon Web Services RDS.
- Uses a <name>.aws_rds.yaml (or <name>.aws_rds.yml) YAML configuration file. - Uses a YAML configuration file that ends with aws_rds.(yml|yaml).
options: options:
boto_profile: boto_profile:
description: The boto profile to use. The plugin will look for an instance role if no credentials description: The boto profile to use. The plugin will look for an instance role if no credentials
@ -301,7 +301,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
:return the contents of the config file :return the contents of the config file
''' '''
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if path.endswith('.aws_rds.yml') or path.endswith('.aws_rds.yaml'): if path.endswith(('aws_rds.yml', 'aws_rds.yaml')):
return True return True
return False return False

View file

@ -12,7 +12,7 @@ DOCUMENTATION = r'''
- azure - azure
description: description:
- Query VM details from Azure Resource Manager - Query VM details from Azure Resource Manager
- Requires a YAML configuration file whose name ends with '.azure_rm.yaml' - Requires a YAML configuration file whose name ends with 'azure_rm.(yml|yaml)'
- By default, sets C(ansible_host) to the first public IP address found (preferring the primary NIC). If no - By default, sets C(ansible_host) to the first public IP address found (preferring the primary NIC). If no
public IPs are found, the first private IP (also preferring the primary NIC). The default may be overridden public IPs are found, the first private IP (also preferring the primary NIC). The default may be overridden
via C(hostvar_expressions); see examples. via C(hostvar_expressions); see examples.
@ -216,9 +216,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable):
:return the contents of the config file :return the contents of the config file
''' '''
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if re.match(r'.+\.azure_rm\.y(a)?ml$', path): if re.match(r'.{0,}azure_rm\.y(a)?ml$', path):
return True return True
# display.debug("azure_rm inventory filename must match '*.azure_rm.yml' or '*.azure_rm.yaml'") # display.debug("azure_rm inventory filename must end with 'azure_rm.yml' or 'azure_rm.yaml'")
return False return False
def parse(self, inventory, loader, path, cache=True): def parse(self, inventory, loader, path, cache=True):

View file

@ -100,7 +100,7 @@ class InventoryModule(BaseInventoryPlugin, Cacheable):
valid = False valid = False
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if path.endswith('.foreman.yaml') or path.endswith('.foreman.yml'): if path.endswith(('foreman.yaml', 'foreman.yml')):
valid = True valid = True
else: else:
self.display.vvv('Skipping due to inventory source not ending in "foreman.yaml" nor "foreman.yml"') self.display.vvv('Skipping due to inventory source not ending in "foreman.yaml" nor "foreman.yml"')

View file

@ -16,7 +16,7 @@ DOCUMENTATION = '''
- inventory_cache - inventory_cache
description: description:
- Get inventory hosts from Google Cloud Platform GCE. - Get inventory hosts from Google Cloud Platform GCE.
- Uses a <name>.gcp.yaml (or <name>.gcp.yml) YAML configuration file. - Uses a YAML configuration file that ends with gcp_compute.(yml|yaml) or gcp.(yml|yaml).
options: options:
plugin: plugin:
description: token that ensures this is a source file for the 'gcp_compute' plugin. description: token that ensures this is a source file for the 'gcp_compute' plugin.
@ -110,9 +110,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
:return the contents of the config file :return the contents of the config file
''' '''
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if path.endswith('.gcp.yml') or path.endswith('.gcp.yaml'): if path.endswith(('gcp.yml', 'gcp.yaml')):
return True return True
elif path.endswith('.gcp_compute.yml') or path.endswith('.gcp_compute.yaml'): elif path.endswith(('gcp_compute.yml', 'gcp_compute.yaml')):
return True return True
return False return False
@ -307,8 +307,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
super(InventoryModule, self).parse(inventory, loader, path) super(InventoryModule, self).parse(inventory, loader, path)
config_data = {} config_data = {}
if self.verify_file(path): config_data = self._read_config_data(path)
config_data = self._read_config_data(path)
# get user specifications # get user specifications
if 'zones' in config_data: if 'zones' in config_data:

View file

@ -16,7 +16,7 @@ DOCUMENTATION = '''
description: description:
- Reads inventories from Ansible Tower. - Reads inventories from Ansible Tower.
- Supports reading configuration from both YAML config file and environment variables. - Supports reading configuration from both YAML config file and environment variables.
- If reading from the YAML file, the file name must end with tower_inventory.(yml|yaml), - If reading from the YAML file, the file name must end with tower.(yml|yaml) or tower_inventory.(yml|yaml),
the path in the command would be /path/to/tower_inventory.(yml|yaml). If some arguments in the config file the path in the command would be /path/to/tower_inventory.(yml|yaml). If some arguments in the config file
are missing, this plugin will try to fill in missing arguments by reading from environment variables. are missing, this plugin will try to fill in missing arguments by reading from environment variables.
- If reading configurations from environment variables, the path in the command must be @tower_inventory. - If reading configurations from environment variables, the path in the command must be @tower_inventory.
@ -143,7 +143,7 @@ class InventoryModule(BaseInventoryPlugin):
self.no_config_file_supplied = True self.no_config_file_supplied = True
return True return True
elif super(InventoryModule, self).verify_file(path): elif super(InventoryModule, self).verify_file(path):
return path.endswith('tower_inventory.yml') or path.endswith('tower_inventory.yaml') return path.endswith(('tower_inventory.yml', 'tower_inventory.yaml', 'tower.yml', 'tower.yaml'))
else: else:
return False return False

View file

@ -10,7 +10,7 @@ DOCUMENTATION = '''
short_description: virtualbox inventory source short_description: virtualbox inventory source
description: description:
- Get inventory hosts from the local virtualbox installation. - Get inventory hosts from the local virtualbox installation.
- Uses a <name>.vbox.yaml (or .vbox.yml) YAML configuration file. - Uses a YAML configuration file that ends with virtualbox.(yml|yaml) or vbox.(yml|yaml).
- The inventory_hostname is always the 'Name' of the virtualbox instance. - The inventory_hostname is always the 'Name' of the virtualbox instance.
extends_documentation_fragment: extends_documentation_fragment:
- constructed - constructed
@ -210,7 +210,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
valid = False valid = False
if super(InventoryModule, self).verify_file(path): if super(InventoryModule, self).verify_file(path):
if path.endswith(('.vbox.yaml', '.vbox.yml')): if path.endswith(('virtualbox.yaml', 'virtualbox.yml', 'vbox.yaml', 'vbox.yml')):
valid = True valid = True
return valid return valid