diff --git a/awx/main/tasks.py b/awx/main/tasks.py index f9183d4a70..719e819bbe 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1763,7 +1763,7 @@ class RunInventoryUpdate(BaseTask): cp.set(section, 'ssl_verify', "false") cloudforms_opts = dict(inventory_update.source_vars_dict.items()) - for opt in ['version', 'purge_actions', 'clean_group_keys', 'nest_tags']: + for opt in ['version', 'purge_actions', 'clean_group_keys', 'nest_tags', 'suffix']: if opt in cloudforms_opts: cp.set(section, opt, cloudforms_opts[opt]) diff --git a/awx/plugins/inventory/cloudforms.ini.example b/awx/plugins/inventory/cloudforms.ini.example index 142514a65e..dc055c1fb7 100644 --- a/awx/plugins/inventory/cloudforms.ini.example +++ b/awx/plugins/inventory/cloudforms.ini.example @@ -27,6 +27,10 @@ clean_group_keys = True # Explode tags into nested groups / subgroups nest_tags = False +# If set, ensure host name are suffixed with this value +# Note: This suffix *must* include the leading '.' as it is appended to the hostname as is +# suffix = .example.org + [cache] # Maximum time to trust the cache in seconds diff --git a/awx/plugins/inventory/cloudforms.py b/awx/plugins/inventory/cloudforms.py index 69c149bfc5..25b8d23159 100755 --- a/awx/plugins/inventory/cloudforms.py +++ b/awx/plugins/inventory/cloudforms.py @@ -29,6 +29,7 @@ from time import time import requests from requests.auth import HTTPBasicAuth import warnings +from ansible.errors import AnsibleError try: import json @@ -174,6 +175,13 @@ class CloudFormsInventory(object): else: self.cloudforms_nest_tags = False + if config.has_option('cloudforms', 'suffix'): + self.cloudforms_suffix = config.get('cloudforms', 'suffix') + if self.cloudforms_suffix[0] != '.': + raise AnsibleError('Leading fullstop is required for Cloudforms suffix') + else: + self.cloudforms_suffix = None + # Ansible related try: group_patterns = config.get('ansible', 'group_patterns') @@ -280,6 +288,9 @@ class CloudFormsInventory(object): print("Updating cache...") for host in self._get_hosts(): + if self.cloudforms_suffix is not None and not host['name'].endswith(self.cloudforms_suffix): + host['name'] = host['name'] + self.cloudforms_suffix + # Ignore VMs that are not powered on if host['power_state'] != 'on': if self.args.debug: