Introduction to Ansible

Ansible is an open source tool that makes it easy to automate deployment with only a few lines of code and doesn’t require an agent installed on the remote host.

Setting up an environment to work with Ansible

While Ansible is available on most Linux distributions, it can also be installed within a virtual environment. The only requirement is that you have a recent Python 3 installed.

$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install ansible
Collecting ansible
  Downloading ansible-5.6.0.tar.gz (35.5 MB)
 |████████████████████████████████| 35.5 MB 10.4 MB/s
Collecting ansible-core~=2.12.4
  Downloading ansible-core-2.12.4.tar.gz (7.8 MB)
 |████████████████████████████████| 7.8 MB 17.8 MB/s
...
(venv) $ ansible --version
ansible [core 2.12.4]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/workspace/mastering-linux.com/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /workspace/mastering-linux.com/venv/lib64/python3.10/site-packages/ansible
  ansible collection location = /workspace/mastering-linux.com/.ansible/collections:/usr/share/ansible/collections
  executable location = /workspace/mastering-linux.com/venv/bin/ansible
  python version = 3.10.4 (main, Mar 25 2022, 00:00:00) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)]
  jinja version = 3.1.1
  libyaml = True
(venv) $ ansible-config dump
ACTION_WARNINGS(default) = True
AGNOSTIC_BECOME_PROMPT(default) = True
ALLOW_WORLD_READABLE_TMPFILES(default) = False
ANSIBLE_CONNECTION_PATH(default) = None

Configuring Ansible

/etc/ansible/ansible.cfg is a configuration file that contains the default settings for Ansible. These settings can be overridden by specifying a different configuration file in the current working directory or by specifying a different configuration file in the ANSIBLE_CONFIG environment variable. In the example below the checking of the SSH host key is disabled.

(venv) $ cat ansible.cfg
[defaults]
host_key_checking = False

With ansible --version you can see which configuration file is used.

(venv) $ ansible --version
ansible [core 2.12.4]
  config file = /workspace/mastering-linux.com/ansible.cfg
  configured module search path = ['/workspace/mastering-linux.com/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /workspace/mastering-linux.com/venv/lib64/python3.10/site-packages/ansible
  ansible collection location = /workspace/mastering-linux.com/.ansible/collections:/usr/share/ansible/collections
  executable location = /workspace/mastering-linux.com/venv/bin/ansible
  python version = 3.10.4 (main, Mar 25 2022, 00:00:00) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)]

Documentation

(venv) $ ansible-doc user
(venv) $ ansible-doc --list | wc -l
(venv) $ ansible-doc -s user

Adhoc commands

(venv) $ ansible localhost -m ping
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Using ansible-console REPL Shell

(venv) $ ansible-console --help
(venv) $ ansible-console -i environment/prod
(venv) $ ansible-console -b