mirror of
https://github.com/ansible/awx.git
synced 2026-02-22 05:30:18 -03:30
refactor inventory Loaders for ansible-inventory
* remove support for loading from executable and static files * instead use ansible-inventory with fallback to backport * provide private file dir in task manager for cred injection * durable management of tmp dirs for user scripts * new 'scm' source choice for scm-type * update SCM inventory docs to new reality
This commit is contained in:
@@ -11,6 +11,12 @@ Fields that should be specified on creation of SCM inventory source:
|
||||
- `source_path` - relative path inside of the project indicating a
|
||||
directory or a file, if left blank, "" is still a relative path
|
||||
indicating the root directory of the project
|
||||
- the `source` field should be set to "scm"
|
||||
|
||||
Additionally:
|
||||
|
||||
- `source_vars` - if these are set on a "file" type inventory source
|
||||
then they will be passed to the environment vars when running
|
||||
|
||||
A user should not be able to update this inventory source via through
|
||||
the endpoint `/inventory_sources/N/update/`. Instead, they should update
|
||||
@@ -40,18 +46,26 @@ update the project.
|
||||
|
||||
> Any Inventory Ansible supports should be supported by this feature
|
||||
|
||||
This statement is the overall goal and should hold true absolutely for
|
||||
Ansible version 2.4 and beyond due to the use of `ansible-inventory`.
|
||||
Versions of Ansible before that may not support all valid inventory syntax
|
||||
because the internal mechanism is different.
|
||||
This is accomplished by making use of the `ansible-inventory` command.
|
||||
the inventory import tower-manage command will check for the existnce
|
||||
of `ansible-inventory` and if it is not present, it will call a backported
|
||||
version of it. The backport is maintained as its own GPL3 licensed
|
||||
repository.
|
||||
|
||||
Documentation should reflect the limitations of inventory file syntax
|
||||
support in old Ansible versions.
|
||||
https://github.com/ansible/ansible-inventory-backport
|
||||
|
||||
# Acceptance Criteria Notes
|
||||
Because the internal mechanism is different, we need some coverage
|
||||
testing with Ansible versions pre-2.4 and after.
|
||||
|
||||
# Acceptance Criteria Use Cases
|
||||
|
||||
Some test scenarios to look at:
|
||||
- Obviously use a git repo with examples of host patterns, etc.
|
||||
- Test projects that use scripts
|
||||
- Test projects that have multiple inventory files in a directory,
|
||||
group_vars, host_vars, etc.
|
||||
- Test scripts in the project repo
|
||||
- Test scripts that use environment variables provided by a credential
|
||||
in Tower
|
||||
- Test multiple inventories that use the same project, pointing to different
|
||||
files / directories inside of the project
|
||||
- Feature works correctly even if project doesn't have any playbook files
|
||||
@@ -61,3 +75,43 @@ Some test scenarios to look at:
|
||||
- If the project SCM update encounters errors, it should not run the
|
||||
inventory updates
|
||||
|
||||
# Notes for Official Documentation
|
||||
|
||||
The API guide should summarize what is in the use details.
|
||||
Once the UI implementation is done, the product docs should cover its
|
||||
standard use.
|
||||
|
||||
## Update-on-launch
|
||||
|
||||
This type of inventory source will not allow the `update_on_launch` field
|
||||
to be set to True. This is because of concerns related to the task
|
||||
manager job dependency tree.
|
||||
|
||||
We should document the alternatives for a user to accomplish the same thing
|
||||
through in a different way.
|
||||
|
||||
### Alternative 1: Use same project for playbook
|
||||
|
||||
You can make a job template that uses a project as well as an inventory
|
||||
that updates from that same project. In this case, you can set the project
|
||||
to `update_on_launch`, in which case it will trigger an inventory update
|
||||
if needed.
|
||||
|
||||
### Alternative 2: Use the project in a workflow
|
||||
|
||||
If you must use a different project for the playbook than for the inventory
|
||||
source, then you can still place the project in a workflow and then have
|
||||
a job template run on success of the project update.
|
||||
|
||||
This is guaranteed to have the inventory update "on time" (by this we mean
|
||||
that the inventory changes are complete before the job template is launched),
|
||||
because the project does not transition to the completed state
|
||||
until the inventory update is finished.
|
||||
|
||||
Note that a failed inventory update does not mark the project as failed.
|
||||
|
||||
## Lazy inventory updates
|
||||
|
||||
It should also be noted that not every project update will trigger a
|
||||
corresponding inventory update. If the project revision has not changed
|
||||
and the inventory has not been edited, the inventory update will not fire.
|
||||
|
||||
Reference in New Issue
Block a user