Ansible Automation
Ansible Automation
Prerequisites 1
Linux 1
Installation 1
What is Ansible? 1
Inventories 2
Modules 2
Variables 3
Ansible Facts 3
Templates 3
Handlers 4
Roles 4
ansible-vault 5
Repositories 5
Static Repositories 5
Dynamic Repositories 6
Modules 6
About Modules 6
Templates 10
Roles 11
Ansible Galaxy 12
Parallelism 14
How to Change It 14
Ansible Vault 14
Ansible Tower 15
Further Information 15
Prerequisites
Linux
• You can use 2.6.x or newer kernels
Installation
• On CentOS 7
• yum update
What is Ansible?
• Ansible is automated provisioning system for your environments. It doesn't require agents or
additional security infrastructure, so it is easy to deploy. You require an SSH connection to the
server and ability to use sudo.
• It uses a language (YAML) in playbooks that allow you to describe your automated jobs in a
method to plain English.
-1-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• Playbook must start with --- at the top, comment may also be on the same line
Inventories
• Inventory format
• Static
• Inventories can
• Static inventories can be located anywhere use the -i option to include file. A path
should included. An example is :
• Can include variable data for use with hosts or groups of hosts
• Dynamic inventories
Modules
• Modules are used to perform the tasks you require
• Ansible ships with many of the modules you require and they can be used with the Ansible ad-hoc
command or through Ansible plays and playbooks
• You can write your own and documentation can be found at:
• http://docs.ansible.com/ansible/dev_guide/developing_modules.html
-2-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Variables
• Allow you to customize behavior for systems, since not all systems are the same
Ansible Facts
• Ansible systems
• They
• /etc/ansible/ansible.cfg
Templates
• Templates are used with variable substitution
• http://jinja.pocoo.org/docs/
• Useful for creating premade config files and then substituting the variables when the playbook runs
-3-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Handlers
• Tasks can trigger handlers
Roles
• A playbook is a file that Ansible runs and Roles can be thought of as a playbook
that's split up into multiple
• The format of a
Roles/
└── apache
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
• In the example the role itself is called apache and it sits in a folder Roles.
• The folders located apache are where files, handlers, meta templates and variables
should be located. Ansible expects the required portions of the playbook to be inside the main.yml
files.
---
- hosts: local
become: yes
roles:
- Roles/apache
-4-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
ansible-vault
• ansible-vault is an encrypted store
• When using an encrypted file in a playbook you need to use the following options when running the
playbook:
• --ask-vault-pass
• --vault-password-file
Repositories
Static Repositories
• Static repositories hold the information are being managed Ansible and under
which groups they belong.
• You can your own file as a repository, and select it with the -i option when command such as
the ad-hoc command is run
• The portions with the [ ] are defining the group name of those servers. So the servers under the
[labservers] are in the labserver group and would be used with an ad-hoc command via
something like the following:
• The servers defined by www[01:11] are a way of selecting multiple servers without typing in their
names. This will select put all servers with the hostnames of www01.linuxacademy.com to www11.
linuxacademy.com into the webserver-group
-5-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• Variables can also be defined for groups of servers as well as individual servers
Dynamic Repositories
• Dynamic repositories allow you to pull inventories via a more dynamic process than allowed for
with a ini based file
• Many cloud platforms are supported in Ansible and those providers have instructions on whats
required to use their service with Ansible
• More
Modules
About Modules
• Modules what makes Ansible powerful. Modules control systems and perform the actions or
tasks you
• Modules what perform the actual work Ansible and are what gets run with playbooks or ad-
hoc tasks
• Some modules arguments e.g the shell module takes a string of command you want to
run
• To find out the information what a module needs to view this URL: http://docs.ansible.
com/ansible/modules_by_category
• You can write your own modules and the documentation for that can be found at this URL: http://
docs.ansible.com/ansible/dev_guide/developing_modules.html
-6-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• They are a great place to get started with Ansible if you're not familiar with it
• An example of an ad-hoc command to all servers in the group called centos would be
the following:
• ansible centos -b -m yum -a 'name=php state=latest'
• setup module to pull information about the server, then only the
ansible_default_ipv4 section
• Installs elinks onto hosts in the webhosts group that are in the myhosts inventory file
-7-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• They can
• Playbooks
• Uses standard AML but without the metadata the start. Because of this, define the start of
the YAMl with 3 dashes on the first line like this:
• ---
• Playbooks should be idempotent. So you should be able to rerun them multiple times without
problems. instance, if a file is going overwritten and cause problems should check
first and change it
• The playbook above first restricts the actions to the servers in the local group
• Then it uses become: yes to perform the actions on the target server as the root user
• Then it sets up the tasks that are required to be performed with the tasks
• Then it uses the yum module and passes the required parameters of name=httpd (which is the
-8-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Apache package on Red Hat) and state=latest. There are several different choices of state.
• It has
• Then it the debug module that the shell command sent to the stdout and
shows on the info sent back by the running playbook
• The next debug command will echo to the responses from the running playbook, MOTD is
EMPTY only when the modt_contents is empty
• Here is what the response from running that playbook looks like:
-9-
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Templates
What are Ansible Templates?
• Templates use the template module. The take variables that you have defined and
replace those in files. The use is then send that information to the
target server.
<p>
Hello there <p>
ServerName = {{description}}
---
- hosts: databases
become: yes
vars:
description: "{{ ansible_hostname }}"
tasks:
- nam e: write the index file
template: src=template.j2 dest=/var/www/html/index.ht ml
notify:
- restart httpd
- nam e: ensure apache is running
service: name=httpd state=running
handlers:
- nam e: restart httpd
service: name=httpd state=restarted
• Here is the contents of the /var/www/html/index.ht ml file once the playbook has run:
<p>
Hello there <p>
ServerName = server
- 10 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Roles
What are Roles in Ansible
• Roles in Ansible use the idea of using include files and combines them to form reusable sections
• It allows you to reuse portions of your code easier. You break up the playbook into sections and
when the playbook is run it pulls all the sections together and runs against your target hosts
• Ansible roles must be in a particular expected. You need a folder and subfolders
to be in a specified format.
apache/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
• We would edit the files as required our project needs. For instance, we would
edit the apache/tasks/main.yml file to put in the tasks that are required. We would edit the
apache/vars/main.yml to put in any variables that are needed and so on.
• If you don't need a section then it's not used. So, for instance, if we put no data into handlers/
main.yml, then it would be ignored when the role is run
- 11 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
example. Here is the file system tree with only the files that are needed:
.
└── apache
└── tasks
└── main.yml
---
- hosts: local
become: yes
roles:
- Roles/apache
ansible-playbook playbook.yml
• When the playbook is run it includes the tasks in apache/tasks/main.yml and runs them
Ansible Galaxy
What is Ansible Galaxy
• Ansible a website where users can share roles.
• By default, roles are downloaded to the /etc/ansible/roles folder. If you want to store them
there you may need to preface the command with sudo
• You can change where the role is installed by useing the -p option when you use the command
• You don't need an Ansible Galaxy profile to download. If you wish to contribute roles, then you will
need a profile on the site.
- 12 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• You can use ansible-galaxy search to search for roles or you can search from the Ansible
Galaxy website
• To install a role from Ansible Galaxy you specify the download option
• Here is an example:
• The output
• The command installed the role into the Here is the tree to show you format:
└── Roles
├── bennojoy.nginx
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ │ └── epel.repo
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ ├── default.conf.j2
│ │ ├── default.j2
│ │ ├── nginx.conf.j2
│ │ └── site.j2
│ └── vars
│ └── main.yml
• You would use the role in a playbook the same as a normal role.
- 13 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
Parallelism
What is Parallelism in Ansible?
• It's how many processes that Ansible uses to talk to the server to perform its tasks. By default, it's 5,
but that can be changed
• You can change it in the config file, on the command line or in a playbook.
How to Change It
• Ansible calls its forks; here changed to 20:
• In a config file:
• forks = 20
• On the command
• In a playbook:
---
- hosts: ec2
serial: 20
Ansible Vault
What is Ansible Vault?
• Ansible V encrypted store
• When using an encrypted file in a playbook, you need to use the following options when running
the playbook:
• --ask-vault-pass
• --vault-password-file
- 14 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
ansible-playbook testplay1.yml
ERROR! Decryption failed on /home/ansible/roles/Roles/apache-install/
vars/main.yml
Ansible Tower
What is Ansible Tower?
• Ansible T is a web-based solution that designed to help you manage your Ansible
installation.
• Ansible T provides access control over playbooks, inventory, SSH credentials. It can
manage access to those credentials. has logging that helps you your systems.
• Find out Tower features and how to download it on the Ansible webpage. Tower
is free for to 10 nodes.
• https://ansible.com/tower
Further Information
Where Can You Go from Here
• If you want to learn more about Ansible, Linux Academy has several other courses about Ansible
you may be interested in:
- 15 -
QUALITY THOUGHT TECHNOLOGIES ANSIBLE MATERIAL
• Information .html
- 16 -