From 1dd9772e4163c437b855a026676a52de31fbe7f9 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Thu, 4 Apr 2019 12:20:35 -0400 Subject: [PATCH 1/4] Allow use of fallback instance_ids --- .../management/commands/inventory_import.py | 22 +++++++++++++------ awx/settings/defaults.py | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py index 9dad2c9a39..c5d1491365 100644 --- a/awx/main/management/commands/inventory_import.py +++ b/awx/main/management/commands/inventory_import.py @@ -271,7 +271,7 @@ class Command(BaseCommand): logging.DEBUG, 0])) logger.setLevel(log_levels.get(self.verbosity, 0)) - def _get_instance_id(self, from_dict, default=''): + def _get_instance_id(self, variables, default=''): ''' Retrieve the instance ID from the given dict of host variables. @@ -279,15 +279,23 @@ class Command(BaseCommand): the lookup will traverse into nested dicts, equivalent to: from_dict.get('foo', {}).get('bar', default) + + Multiple ID variables may be specified as 'foo.bar,foobar', so that + it will first try to find 'bar' inside of 'foo', and if unable, + will try to find 'foobar' as a fallback ''' instance_id = default if getattr(self, 'instance_id_var', None): - for key in self.instance_id_var.split('.'): - if not hasattr(from_dict, 'get'): - instance_id = default + for single_instance_id in self.instance_id_var.split(','): + from_dict = variables + for key in single_instance_id.split('.'): + if not hasattr(from_dict, 'get'): + instance_id = default + break + instance_id = from_dict.get(key, default) + from_dict = instance_id + if instance_id: break - instance_id = from_dict.get(key, default) - from_dict = instance_id return smart_text(instance_id) def _get_enabled(self, from_dict, default=None): @@ -422,7 +430,7 @@ class Command(BaseCommand): for mem_host in self.all_group.all_hosts.values(): instance_id = self._get_instance_id(mem_host.variables) if not instance_id: - logger.warning('Host "%s" has no "%s" variable', + logger.warning('Host "%s" has no "%s" variable(s)', mem_host.name, self.instance_id_var) continue mem_host.instance_id = instance_id diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 57d30bc23f..f35a8983bc 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -708,7 +708,7 @@ EC2_ENABLED_VAR = 'ec2_state' EC2_ENABLED_VALUE = 'running' # Inventory variable name containing unique instance ID. -EC2_INSTANCE_ID_VAR = 'ec2_id' +EC2_INSTANCE_ID_VAR = 'ec2_id,instance_id' # Filter for allowed group/host names when importing inventory from EC2. EC2_GROUP_FILTER = r'^.+$' From 17eaeb28a8e9028e192e6d9eccbbb19f864ba8bf Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Wed, 10 Jun 2020 13:30:05 -0700 Subject: [PATCH 2/4] update VMWARE_INSTANCE_ID_VAR * Favor instanceUuid * .. but fall back to instanceuuid if necessary --- awx/settings/defaults.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index f35a8983bc..46b5e454c3 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -727,7 +727,7 @@ VMWARE_ENABLED_VAR = 'guest.gueststate' VMWARE_ENABLED_VALUE = 'running' # Inventory variable name containing the unique instance ID. -VMWARE_INSTANCE_ID_VAR = 'config.instanceuuid' +VMWARE_INSTANCE_ID_VAR = 'config.instanceUuid, config.instanceuuid' # Filter for allowed group and host names when importing inventory # from VMware. From 9514adaf3ae3396104a54f78e6c5ec983a90f3c9 Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Wed, 10 Jun 2020 13:55:54 -0700 Subject: [PATCH 3/4] wrap --instance-id-var in quotes --- awx/main/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 5a287a1444..09014d9da6 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -2554,7 +2554,7 @@ class RunInventoryUpdate(BaseTask): args.append('--exclude-empty-groups') if getattr(settings, '%s_INSTANCE_ID_VAR' % src.upper(), False): args.extend(['--instance-id-var', - getattr(settings, '%s_INSTANCE_ID_VAR' % src.upper()),]) + "'{}'".format(getattr(settings, '%s_INSTANCE_ID_VAR' % src.upper())),]) # Add arguments for the source inventory script args.append('--source') args.append(self.pseudo_build_inventory(inventory_update, private_data_dir)) From 8eee0d40dd0d673ab99f7839cd5b7f0baa1a331f Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Thu, 11 Jun 2020 09:52:54 -0700 Subject: [PATCH 4/4] revert EC2_INSTANCE_ID_VAR --- awx/settings/defaults.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 46b5e454c3..ba7c481df0 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -708,7 +708,7 @@ EC2_ENABLED_VAR = 'ec2_state' EC2_ENABLED_VALUE = 'running' # Inventory variable name containing unique instance ID. -EC2_INSTANCE_ID_VAR = 'ec2_id,instance_id' +EC2_INSTANCE_ID_VAR = 'ec2_id' # Filter for allowed group/host names when importing inventory from EC2. EC2_GROUP_FILTER = r'^.+$'