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