Ansible role to add users to system groups.
Full documentation on Readthedocs.
Source code on:
Ingredients
Ansible role to add users to system groups.
This role performs the following actions:
- Ensure the requirements are installed.
- Ensure the current user can obtain administrative (root)
- permissions.
- If the users variable is defined and the groups variable is
- defined, add all users to the specified groups.
- If the configuration variable is defined, add all users listed
- on it to the specified groups.
- To install and execute:
ansible-galaxy install constrict0r.groups ansible localhost -m include_role -a name=constrict0r.groups -K
- Passing variables:
ansible localhost -m include_role -a name=constrict0r.groups -K \ -e "{group: [disk, sudo]}"
- To include the role on a playbook:
- hosts: servers roles: - {role: constrict0r.groups}
- To include the role as dependency on another role:
dependencies: - role: constrict0r.groups group: [disk, sudo]
- To use the role from tasks:
- name: Execute role task. import_role: name: constrict0r.groups vars: group: [disk, sudo]
To run tests:
cd groups chmod +x testme.sh ./testme.sh
On some tests you may need to use sudo to succeed.
The following variables are supported:
List of users to be created. Each non-empty username listed on users will be created.
This list can be modified by passing an users array when including the role on a playbook or via –extra-vars from a terminal.
This variable is empty by default.
# Including from terminal. ansible localhost -m include_role -a name=constrict0r.groups -K -e \ "{users: [mary, jhon]}" # Including on a playbook. - hosts: servers roles: - role: constrict0r.groups users: - mary - jhon # To a playbook from terminal. ansible-playbook -i inventory my-playbook.yml -K -e \ "{users: [mary, jhon]}"
List of groups to add all users into. Each non-empty username will be added to the groups specified on this variable.
This list can be modified by passing an groups array when including the role on a playbook or via –extra-vars from a terminal.
This variable is empty by default.
# Including from terminal. ansible localhost -m include_role -a name=constrict0r.groups -K -e \ "{group: [disk, sudo]}" # Including on a playbook. - hosts: servers roles: - role: constrict0r.groups group: - disk - sudo # To a playbook from terminal. ansible-playbook -i inventory my-playbook.yml -K -e \ "{group: [disk, sudo]}"
Absolute file path or URL to a .yml file that contains all or some of the variables supported by this role.
It is recommended to use a .yml or .yaml extension for the configuration file.
This variable is empty by default.
# Using file path. ansible localhost -m include_role -a name=constrict0r.groups -K -e \ "configuration=/home/username/my-config.yml" # Using URL. ansible localhost -m include_role -a name=constrict0r.groups -K -e \ "configuration=https://my-url/my-config.yml"
To see how to write a configuration file see the YAML file format section.
When passing configuration files to this role as parameters, it’s recommended to add a .yml or .yaml extension to the each file.
It is also recommended to add three dashes at the top of each file:
---
You can include in the file the variables required for your tasks:
--- group: - [disk, sudo]
If you want this role to load list of items from files and URLs you can set the expand variable to true:
--- group: /home/username/my-config.yml expand: true
If the expand variable is false, any file path or URL found will be treated like plain text.
On the item level you can use attributes to configure how this role handles the items data.
The attributes supported by this role are:
Name of the item to load or create.
--- group: - item_name: my-item-name
Boolean value indicating if treat this item as a file path or URL or just treat it as plain text.
--- group: - item_expand: true item_path: /home/username/my-config.yml
Absolute file path or URL to a .yml file.
--- group: - item_path: /home/username/my-config.yml
This attribute also works with URLs.
If you want to run the tests, you will also need:
MIT. See the LICENSE file for more details.
The full project structure is shown below:
The project data flow is shown below:
The Travelling Vaudeville Villain.
Enjoy!!!