mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Proposal for auto updating roles
Reflects discussion on ansible-devel.
This commit is contained in:
parent
f9526b2ab2
commit
80ec66f64a
1 changed files with 106 additions and 0 deletions
106
docs/proposals/auto-install-roles.md
Normal file
106
docs/proposals/auto-install-roles.md
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
# Auto Install Ansible roles
|
||||||
|
|
||||||
|
*Author*: Will Thames <@willthames>
|
||||||
|
|
||||||
|
*Date*: 19/02/2016
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
To use the latest (or even a specific) version of a playbook with the
|
||||||
|
appropriate roles, the following steps are typically required:
|
||||||
|
|
||||||
|
```
|
||||||
|
git pull upstream branch
|
||||||
|
ansible-galaxy install -r path/to/rolesfile.yml -p path/to/rolesdir -f
|
||||||
|
ansible-playbook run-the-playbook.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
The most likely step in this process to be forgotten is the middle step. While
|
||||||
|
we can improve processes and documentation to try and ensure that this step is
|
||||||
|
not skipped, we can improve ansible-playbook so that the step is not required.
|
||||||
|
|
||||||
|
## Approaches
|
||||||
|
|
||||||
|
### Approach 1: Specify rolesfile and rolesdir in playbook
|
||||||
|
|
||||||
|
Provide new `rolesdir` and `rolesfile` keywords:
|
||||||
|
|
||||||
|
```
|
||||||
|
- hosts: application-env
|
||||||
|
become: True
|
||||||
|
rolesfile: path/to/rolesfile.yml
|
||||||
|
rolesdir: path/to/rolesdir
|
||||||
|
roles:
|
||||||
|
- roleA
|
||||||
|
- { role: roleB, tags: role_roleB }
|
||||||
|
```
|
||||||
|
|
||||||
|
Running ansible-playbook against such a playbook would cause the roles listed in
|
||||||
|
`rolesfile` to be installed in `rolesdir`.
|
||||||
|
|
||||||
|
Add new configuration to allow default rolesfile, default rolesdir and
|
||||||
|
whether or not to auto update roles (defaulting to False)
|
||||||
|
|
||||||
|
#### Advantages
|
||||||
|
|
||||||
|
- Existing mechanism for roles management is maintained
|
||||||
|
- Playbooks are not polluted with roles 'meta' information (version, source)
|
||||||
|
|
||||||
|
#### Disadvantage
|
||||||
|
|
||||||
|
- Adds two new keywords
|
||||||
|
- Adds three new configuration variables for defaults
|
||||||
|
|
||||||
|
### Approach 2: Allow rolesfile inclusion
|
||||||
|
|
||||||
|
Allow the `roles` section to include a roles file:
|
||||||
|
|
||||||
|
```
|
||||||
|
- hosts: application-env
|
||||||
|
become: True
|
||||||
|
roles:
|
||||||
|
- include: path/to/rolesfile.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Running this playbook would cause the roles to be updated from the included
|
||||||
|
roles file.
|
||||||
|
|
||||||
|
This would also be functionally equivalent to specifying the roles file
|
||||||
|
content within the playbook:
|
||||||
|
|
||||||
|
```
|
||||||
|
- hosts: application-env
|
||||||
|
become: True
|
||||||
|
roles:
|
||||||
|
- src: https://git.example.com/roleA.git
|
||||||
|
scm: git
|
||||||
|
version: 0.1
|
||||||
|
- src: https://git.example.com/roleB.git
|
||||||
|
scm: git
|
||||||
|
version: 0.3
|
||||||
|
tags: role_roleB
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Advantages
|
||||||
|
|
||||||
|
- The existing rolesfile mechanism is maintained
|
||||||
|
- Uses familiar inclusion mechanism
|
||||||
|
|
||||||
|
#### Disadvantage
|
||||||
|
|
||||||
|
- Separate playbooks would need separate rolesfiles. For example, a provision
|
||||||
|
playbook and upgrade playbook would likely have some overlap - currently
|
||||||
|
you can use the same rolesfile with ansible-galaxy so that the same
|
||||||
|
roles are available but only a subset of roles is used by the smaller
|
||||||
|
playbook.
|
||||||
|
- The roles file would need to be able to include playbook features such
|
||||||
|
as role tagging.
|
||||||
|
- New configuration defaults would likely still be required (and possibly
|
||||||
|
an override keyword for rolesdir and role auto update)
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
The author's preferred approach is currently Approach 1.
|
||||||
|
|
||||||
|
Feedback is requested to improve either approach, or provide further
|
||||||
|
approaches to solve this problem.
|
Loading…
Reference in a new issue