Ansible role for installing an Ansible Controller into a Python3 VirtualEnv.
This role requires an existing installation of Ansible. A temporary installation can be created by running the following bootstrap script.
This role has been tested on Ansible 2.6.0+ against the following Linux Distributions:
- Amazon Linux 2
- CentOS 8
- CentOS 7
- Debian 10
- Fedora 29
- Fedora 30
- Fedora 31
- Ubuntu 18.04 LTS
If you have any problems please create a GitHub issue, I maintain this role in my spare time so I cannot promise a speedy fix delivery.
Variable | Description | Default Value |
---|---|---|
controller_ansible_version |
Use a specific version of Ansible, eg. 2.9.0 . Specify false for latest. |
false |
controller_ansible_support_packages |
Install molecule support packages (eg. Azure) | [] |
controller_ansible_install_dir |
Installation directory to put Ansible virtual environments. | $HOME/.virtualenvs |
controller_ansible_venv_name |
Name for the Ansible Virtualenv. | ansible |
controller_ansible_venv_suffix |
Add a custom suffix to virtualenv. | controller_ansible_version |
controller_ansible_venv_site_packages |
Allow venv to inherit packages from global site-packages. | false |
controller_ansible_install_venv_helper |
Install a venv helper to launch venv executables from a "bin" directory. | true |
controller_ansible_bin_dir |
"bin" directory to install venv-helpers to. | $HOME/bin |
controller_ansible_config_path |
Path to the default ansible.cfg file to use. | $HOME/.ansible.cfg |
controller_ansible_inventory_path |
Path to the default ansible inventory file. | $HOME/.ansible/hosts.yml |
controller_ansible_projects_dir |
Directory to put Ansible projects. | $HOME/projects |
controller_ansible_roles_dir |
Directory to install Ansible Galaxy roles to. | $HOME/.ansible/roles |
controller_install_os_dependencies |
Allow role to install OS dependencies. | false |
controller_python3_path |
Specify a path to a specific python version to use in virtualenv. | NULL |
controller_ansible_galaxy_roles |
List of Ansible roles to be installed with ansible-galaxy . See notes. |
NULL |
controller_ansible_projects |
List of Ansible projects to be cloned with git . See notes. |
NULL |
controller_ansible_projects_install_roles |
Install Ansible roles defined in project requirements.yml file. (boolean) | false |
No dependencies on other roles.
Example playbook for installing to single user:
- hosts: control_hosts
roles:
- { role: xanmanning.controller, controller_ansible_version: 2.6.5 }
Example playbook for installing the latest Ansible version globally:
---
- hosts: control_hosts
become: true
vars:
controller_install_os_dependencies: true
controller_ansible_install_dir: /opt/ansible/bin
controller_ansible_config_path: /etc/ansible/ansible.cfg
controller_ansible_inventory_path: /etc/ansible/hosts
controller_ansible_projects_dir: /opt/ansible/projects
controller_ansible_roles_dir: /opt/ansible/roles
controller_ansible_bin_dir: /usr/bin
controller_ansible_venv_name: current
controller_ansible_support_packages:
- azure
controller_ansible_galaxy_roles:
- name: controller
src: xanmanning.controller
- name: git
src: https://github.com/geerlingguy/ansible-role-git
scm: git
version: 2.1.0
roles:
- role: xanmanning.controller
Once logged into the controller, you need to activate the python3 virtual environment to be able to access Ansible. This is done as per the below:
source {{ controller_ansible_install_dir }}/{{ controller_ansible_venv_name }}/bin/activate
In the above example global installation playbook, this would look like the following:
source /opt/ansible/bin/current/bin/activate
This is a list of Ansible roles to be installed using ansible-galaxy
. This
variable needs to be structured as per the below example:
controller_ansible_galaxy_roles:
# Install the latest xanmanning.k3s role
- src: xanmanning.k3s
# Install the latest xanmanning.controller role as "controller"
- name: controller
src: xanmanning.controller
# Install geerlingguy.jenkins version 3.8.1 from github as "jenkins"
- name: jenkins
src: https://github.com/geerlingguy/ansible-role-jenkins
scm: git
version: 3.8.1
This is a list of git repositories to be cloned into the projects directory. If this is empty, no projects will be cloned.
Below is an example of a project:
controller_ansible_projects:
- name: mac-dev-workstation # Directory name to clone into
repo: [email protected]:geerlingguy/mac-dev-playbook # Repository to clone
update_repo: true # Always update local copy of repo
version: master # Check out this version of the repo
force: false # Discard any existing working copy of the repo
key_file: "{{ ansible_user_dir }}/.ssh/id_rsa" # Key file to use to clone the repo
recursive: true # Include submodules in clone