diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index b6b0cfb7d4..c3e447e10a 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -2334,6 +2334,12 @@ class gce(PluginFileInjector): ini_env_reference = 'GCE_INI_PATH' base_injector = 'managed' + def get_plugin_env(self, *args, **kwargs): + ret = super(gce, self).get_plugin_env(*args, **kwargs) + # We need native jinja2 types so that ip addresses can give JSON null value + ret['ANSIBLE_JINJA2_NATIVE'] = str(True) + return ret + def get_script_env(self, inventory_update, private_data_dir, private_data_files): env = super(gce, self).get_script_env(inventory_update, private_data_dir, private_data_files) cred = inventory_update.get_cloud_credential() @@ -2354,7 +2360,7 @@ class gce(PluginFileInjector): 'gce_name': 'name', 'gce_network': 'networkInterfaces[0].network.name', 'gce_private_ip': 'networkInterfaces[0].networkIP', - 'gce_public_ip': 'networkInterfaces[0].accessConfigs[0].natIP', + 'gce_public_ip': 'networkInterfaces[0].accessConfigs[0].natIP | default(None)', 'gce_status': 'status', 'gce_subnetwork': 'networkInterfaces[0].subnetwork.name', 'gce_tags': 'tags.get("items", [])', @@ -2364,7 +2370,7 @@ class gce(PluginFileInjector): 'gce_image': 'image', # We need this as long as hostnames is non-default, otherwise hosts # will not be addressed correctly, was returned in script - 'ansible_ssh_host': 'networkInterfaces[0].accessConfigs[0].natIP' + 'ansible_ssh_host': 'networkInterfaces[0].accessConfigs[0].natIP | default(networkInterfaces[0].networkIP)' } def inventory_as_dict(self, inventory_update, private_data_dir): diff --git a/awx/main/tests/data/inventory/plugins/gce/env.json b/awx/main/tests/data/inventory/plugins/gce/env.json index 377537bc48..0b41b7e4e3 100644 --- a/awx/main/tests/data/inventory/plugins/gce/env.json +++ b/awx/main/tests/data/inventory/plugins/gce/env.json @@ -1,4 +1,5 @@ { + "ANSIBLE_JINJA2_NATIVE": "True", "ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS": "never", "GCE_CREDENTIALS_FILE_PATH": "{{ file_reference }}", "GCP_AUTH_KIND": "serviceaccount", diff --git a/awx/main/tests/data/inventory/plugins/gce/files/gcp_compute.yml b/awx/main/tests/data/inventory/plugins/gce/files/gcp_compute.yml index 17ee2f3b62..9f1ea11c36 100644 --- a/awx/main/tests/data/inventory/plugins/gce/files/gcp_compute.yml +++ b/awx/main/tests/data/inventory/plugins/gce/files/gcp_compute.yml @@ -1,6 +1,6 @@ auth_kind: serviceaccount compose: - ansible_ssh_host: networkInterfaces[0].accessConfigs[0].natIP + ansible_ssh_host: networkInterfaces[0].accessConfigs[0].natIP | default(networkInterfaces[0].networkIP) gce_description: description if description else None gce_id: id gce_image: image @@ -9,7 +9,7 @@ compose: gce_name: name gce_network: networkInterfaces[0].network.name gce_private_ip: networkInterfaces[0].networkIP - gce_public_ip: networkInterfaces[0].accessConfigs[0].natIP + gce_public_ip: networkInterfaces[0].accessConfigs[0].natIP | default(None) gce_status: status gce_subnetwork: networkInterfaces[0].subnetwork.name gce_tags: tags.get("items", [])