mirror of
https://github.com/ZwareBear/awx.git
synced 2026-05-06 00:11:50 -05:00
Merge pull request #8185 from AlanCoding/sniff_files_final
Use inventory and env private_data_dir subfolders SUMMARY This is another part of trying to get AWX to follow ansible-runner best practices. See docs: https://ansible-runner.readthedocs.io/en/stable/intro.html#runner-input-directory-hierarchy So what runner & people expect is: . ├── env │ ├── envvars │ ├── extravars │ ├── passwords │ ├── cmdline │ ├── settings │ └── ssh_key ├── inventory │ └── hosts └── project ├── test.yml └── roles └── testrole ├── defaults ├── handlers ├── meta ├── README.md ├── tasks ├── tests └── vars What we were producing was something more like ├── cp ├── env │ ├── cmdline │ ├── envvars │ ├── extravars │ ├── passwords │ ├── settings │ └── ssh_key ├── project │ ├── ansible.cfg │ ├── ansible_env.yml │ ├── async_tasks.yml <snip> │ └── vault.yml └── tmp3evnorsu There was no inventory folder, and inventory was stored in tmp3evnorsu as a top-level file. Any credential files were also saved in that same structure. With this change, it's more like: ├── cp ├── env │ ├── cmdline │ ├── envvars │ ├── extravars │ ├── passwords │ └── settings ├── inventory │ └── tmp94xjm0d7 └── project ├── ansible.cfg ├── ansible_env.yml ├── async_tasks.yml <snip> └── vault.yml and any credential files (starting with tmp) are dumped into the env folder. ISSUE TYPE Feature Pull Request COMPONENT NAME API AWX VERSION 14.1.0 ADDITIONAL INFORMATION The motivation for this is that ansible-runner may require specific mounts for every file of directory in the private_data_dir. As such, we really don't want randomized filenames in the top level directory. I don't know for sure this is the direction we are going to go, but this seems like a defensible change on its own, to better adhere to the practices someone familiar with ansible-runner would expect. Reviewed-by: Alan Rominger <arominge@redhat.com> Reviewed-by: Chris Meyers <None>
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
from awx.main.models.execution_environments import ExecutionEnvironment
|
||||
@@ -25,3 +28,32 @@ def get_default_pod_spec():
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
# this is the root of the private data dir as seen from inside
|
||||
# of the container running a job
|
||||
CONTAINER_ROOT = '/runner'
|
||||
|
||||
|
||||
def to_container_path(path, private_data_dir):
|
||||
"""Given a path inside of the host machine filesystem,
|
||||
this returns the expected path which would be observed by the job running
|
||||
inside of the EE container.
|
||||
This only handles the volume mount from private_data_dir to /runner
|
||||
"""
|
||||
if not os.path.isabs(private_data_dir):
|
||||
raise RuntimeError('The private_data_dir path must be absolute')
|
||||
if private_data_dir != path and Path(private_data_dir) not in Path(path).resolve().parents:
|
||||
raise RuntimeError(f'Cannot convert path {path} unless it is a subdir of {private_data_dir}')
|
||||
return path.replace(private_data_dir, CONTAINER_ROOT, 1)
|
||||
|
||||
|
||||
def to_host_path(path, private_data_dir):
|
||||
"""Given a path inside of the EE container, this gives the absolute path
|
||||
on the host machine within the private_data_dir
|
||||
"""
|
||||
if not os.path.isabs(private_data_dir):
|
||||
raise RuntimeError('The private_data_dir path must be absolute')
|
||||
if CONTAINER_ROOT != path and Path(CONTAINER_ROOT) not in Path(path).resolve().parents:
|
||||
raise RuntimeError(f'Cannot convert path {path} unless it is a subdir of {CONTAINER_ROOT}')
|
||||
return path.replace(CONTAINER_ROOT, private_data_dir, 1)
|
||||
|
||||
Reference in New Issue
Block a user