Merge pull request #13267 from philipsd6/feature/complex_extra_vars

Enable support for injecting complex extra vars
This commit is contained in:
Alan Rominger
2023-02-02 10:13:49 -05:00
committed by GitHub
4 changed files with 85 additions and 22 deletions

View File

@@ -528,9 +528,13 @@ class CredentialType(CommonModelNameNotUnique):
if 'INVENTORY_UPDATE_ID' not in env:
# awx-manage inventory_update does not support extra_vars via -e
extra_vars = {}
for var_name, tmpl in self.injectors.get('extra_vars', {}).items():
extra_vars[var_name] = sandbox_env.from_string(tmpl).render(**namespace)
def build_extra_vars(node):
if isinstance(node, dict):
return {build_extra_vars(k): build_extra_vars(v) for k, v in node.items()}
elif isinstance(node, list):
return [build_extra_vars(x) for x in node]
else:
return sandbox_env.from_string(node).render(**namespace)
def build_extra_vars_file(vars, private_dir):
handle, path = tempfile.mkstemp(dir=os.path.join(private_dir, 'env'))
@@ -540,6 +544,7 @@ class CredentialType(CommonModelNameNotUnique):
os.chmod(path, stat.S_IRUSR)
return path
extra_vars = build_extra_vars(self.injectors.get('extra_vars', {}))
if extra_vars:
path = build_extra_vars_file(extra_vars, private_data_dir)
container_path = to_container_path(path, private_data_dir)