From a7e27b74c96a60d1ffcea555d10e7a822920afa9 Mon Sep 17 00:00:00 2001 From: Richard Bywater Date: Thu, 18 Jan 2018 03:36:17 +1300 Subject: [PATCH] Add ability to append suffix to host names for Cloudforms Inventory (#33565) * Add ability to append suffix to host names for Cloudforms Inventory Allows for use of a suffix that will be appended to host names returned from Cloudforms API if that suffix is not present. For example with a suffix of 'example.org', the following results would be shown for a particular Cloudforms host name: someexample -> someexample.example.org someexample.example.org -> someexample.example.org The main use-case for this is when Cloudforms has short names rather than FQDN and there is a desire to to use the FQDN as the name. * Add example line into Cloudforms INI file * Clarify that leading fullstop needed * Add validation to ensure leading fullstop for suffix --- contrib/inventory/cloudforms.ini | 4 ++++ contrib/inventory/cloudforms.py | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/contrib/inventory/cloudforms.ini b/contrib/inventory/cloudforms.ini index 142514a65ed..dc055c1fb74 100644 --- a/contrib/inventory/cloudforms.ini +++ b/contrib/inventory/cloudforms.ini @@ -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/contrib/inventory/cloudforms.py b/contrib/inventory/cloudforms.py index ecf10a4119b..82fbb6a50a5 100755 --- a/contrib/inventory/cloudforms.py +++ b/contrib/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: