Ansible Hands On Introduction
Ansible Hands On Introduction
Hands-on Introduction
Jon Jozwiak, Sr. Cloud Solutions Architect
Minneapolis RHUG - April 13, 2017
What is Ansible?
It's a simple automation language that can perfectly describe
an IT application infrastructure in Ansible Playbooks.
http://ansible.com/community
Installing Ansible
How Ansible Works
Modules
Modules are bits of code transferred to the target system and
executed to satisfy the task declaration. Ansible ships with
several hundred today!
apt/yum
copy
file
get_url
git
ping
debug
service
synchronize
Modules Documentation
http://docs.ansible.com/
Modules Documentation
# List out all modules installed
$ ansible-doc -l
...
copy
cron
...
The [copy] module copies a file on the local box to remote locations. Use the [fetch] module to copy files from remote locations to the local
box. If you need variable interpolation in copied files, use the [template] module.
Options (= is mandatory):
...
Modules: Run Commands
If Ansible doesnt have a module that suits your needs there are the run
command modules:
command: Takes the command and executes it on the host. The most
secure and predictable.
shell: Executes through a shell like /bin/sh so you can use pipes etc. Be
careful.
script: Runs a local script on a remote node after transferring it.
raw: Executes a command without going through the Ansible module
subsystem.
[web]
node-[1:3] ansible_host=10.42.0.[6:8]
[haproxy]
haproxy ansible_host=10.42.0.100
[all:vars]
ansible_user=vagrant
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
Ad-Hoc Commands
An ad-hoc command is a single Ansible task to perform quickly, but dont want
to save for later.
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
Plays & Playbooks
Plays are ordered sets of tasks to execute against host selections from your
inventory. A playbook is a file containing one or more plays.
Playbook Example
---
- name: install and start apache
hosts: web
become: yes
vars:
http_port: 80
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
tasks:
- name: latest httpd package is present
yum:
name: httpd
state: latest
- yum:
name: "{{ item }}"
state: latest
with_items:
- httpd
- mod_wsgi
Conditionals
Ansible supports the conditional execution of a task based on the run-time
evaluation of variable, fact, or previous task result.
- yum:
name: httpd
state: latest
when: ansible_os_family == "RedHat"
Tags
Tags are useful to be able to run a subset of a playbook on-demand.
- yum:
name: "{{ item }}"
state: latest
with_items:
- httpd
- mod_wsgi
tags:
- packages
- template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
tags:
- configuration
Blocks
Blocks cut down on repetitive task directives, allow for logical grouping of tasks
and even in play error handling.
- block:
- yum:
name: "{{ item }}"
state: latest
with_items:
- httpd
- mod_wsgi
- template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
when: ansible_os_family == "RedHat"
Roles
Roles are a packages of closely related Ansible content that can be shared more
easily than plays alone.
Improves readability and maintainability of complex plays
Eases sharing, reuse and standardization of automation processes
Enables Ansible content to exist independently of playbooks, projects --
even organizations
Provides functional conveniences such as file path resolution and default
values
Project with Embedded Roles Example
site.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
apache/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
Project with Embedded Roles Example
# site.yml
---
- hosts: web
roles:
- common
- apache
Ansible Galaxy
http://galaxy.ansible.com
Ansible Galaxy is a hub for finding, reusing and sharing Ansible content.