Ansible - A 'crowd' introduction

Preview:

Citation preview

SOFTWARE CRAFTSMANSHIP TOLEDO

A “crowd” introduction

SOFTWARE CRAFTSMANSHIP TOLEDO

Software Craftsmanship Toledo• Pasión por la ingeniería software y el desarrollo de

software en la comunidad de Castilla-La Mancha. • Clara vocación por aprender, fomentar y compartir las

metodologías ágiles en la región.• Grupo totalmente abierto: http://www.meetup.com/es/

Software-Craftsmanship-Toledo-ES• Miembros profesionales y/o apasionados del desarrollo

software.• Tenemos un canal de Slack… Apúntante!

SOFTWARE CRAFTSMANSHIP TOLEDO

Meet me• Manuel de la Peña

• @mdelapenya

• Support > Engineering > Testing > IT … at Liferay, Inc.

• DEVOPS?

Meet the team

Meet our server room

OK, THIS server room

SOFTWARE CRAFTSMANSHIP TOLEDO

This was my first day at work…

moss@itcrowd1:~$ ssh root@server1password:root@server1:~$ apt-get updateroot@server1:~$ apt-get install apache2root@server1:~$ apt-get install htoproot@server1:~$ vi /etc/fstabroot@server1:~$ mount /mnt/devopsroot@server1:~$ exitmoss@itcrowd1:~$

server2, server3, server4, server5 … server30buzz, scar, ariel, mickey, mulan … goofieares, odin, hera, atenea, loki … melkart

logan, natasha, clark, peter, bruceW … bruceB

And all these following servers too:

WTF

Every task,every day.

SOFTWARE CRAFTSMANSHIP TOLEDO

Why don’t you automate THIS?

Why don’t you automate THIS?

Automateserver

management???

SOFTWARE CRAFTSMANSHIP TOLEDO

AUTOMATION FOR EVERYONEDeploy apps. Manage systems. Crush complexity.

Ansible helps you build a strong foundation for DevOps.

SOFTWARE CRAFTSMANSHIP TOLEDO

How it works• It uses a very simple language (YAML, in the form

of Ansible Playbooks)

• Plain English!

• By default manages machines over the SSH protocol.

• It uses no agents and no additional custom security infrastructure.

SOFTWARE CRAFTSMANSHIP TOLEDO

SSH Keys

• SSH keys with ssh-agent are recommended.

• Root logins are not required, you can login as any user, and then su or sudo to any user.

SOFTWARE CRAFTSMANSHIP TOLEDO

Installation

• No database, and no running daemons!

• Install it on only one machine (a laptop?) as central point.

• It does not leave software installed or running on remote machines —> upgrades super easy :D

SOFTWARE CRAFTSMANSHIP TOLEDO

Control Machine

• “Any” machine with Python 2.6 or 2.7 installed.

• This includes Red Hat, Debian, CentOS, OS X, any of the BSDs, and so on.

• Windows isn’t supported for the control machine.

SOFTWARE CRAFTSMANSHIP TOLEDO

Managed Nodes

• You need a way to communicate, normally ssh.

• SSH uses sftp. If not available, switch to scp.

• Python 2.4 or later. (If Python < 2.5 also need python-simplejson)

SOFTWARE CRAFTSMANSHIP TOLEDO

Remote connection• Native OpenSSH for remote communication when

possible.

• If OpenSSH is too old in control machine (Enterprise Linux 6 OS)—> Fallback to Paramiko: a Python implementation.

• SSH keys are encouraged but password authentication can also be used (--ask-pass).

SOFTWARE CRAFTSMANSHIP TOLEDO

sudo

Ansible Inventory

SOFTWARE CRAFTSMANSHIP TOLEDO

Inventory

• What machines/hosts you are managing using a very simple INI file.

• Managed machines/hosts in groups of your own choosing.

• Define variables by scope.

Groups

SOFTWARE CRAFTSMANSHIP TOLEDO

Inventory variables

• Host variables

• Group variables

• Advanced variables

SOFTWARE CRAFTSMANSHIP TOLEDO

Inventory: Host vars

SOFTWARE CRAFTSMANSHIP TOLEDO

Inventory: Group vars

SOFTWARE CRAFTSMANSHIP TOLEDO

Inventory: Advanced vars

Affects to groups

Specific group of servers

Arbitrary criterium

SOFTWARE CRAFTSMANSHIP TOLEDO

Host matching: Patterns

• all

• *

• 192.168.1.*, *.example.com

• OR —> webservers:dbservers

• AND —> webservers:&staging

SOFTWARE CRAFTSMANSHIP TOLEDO

Host matching: Patterns

• Exclusions —> webservers:!phoenix

• Combinations —> webservers:dbservers:&staging:!phoenix

• Host selection —> webservers[0], webservers[0:1], webservers[1:]

• Regexp —> ~(web|db).*\example\.com

SOFTWARE CRAFTSMANSHIP TOLEDO

Host matching: Limit

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible Modules

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible modules

• copy

• file

• yum

• user

• service

• git

• apache

• apt

• azure

• bower

• cron

• mysql_db

• npm

• puppet

• django

• ec2And many more!

SOFTWARE CRAFTSMANSHIP TOLEDO

Modules

SOFTWARE CRAFTSMANSHIP TOLEDO

git module

SOFTWARE CRAFTSMANSHIP TOLEDO

Ad-hoc commands

Fork 10 parallel threads

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible Variables

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables• Should be letters, numbers, and

underscores.

• Variables should always start with a letter.

• YAML also supports dictionaries which map keys to values.

• There are reserved Python-related keywords.

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables

• Defined in Inventory.

• Defined in Playbooks.

• Defined in includes.

• Defined in Roles.

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables: Jinja2

• Jinja2 —> Template system

• How to use a variable? —> {{ variable_name }}

• Safer —> “{{ variable_name }}”

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables: register• Run a command and save its result into a

variable.

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables: external

• Private information?? Hide them in variables!

• In a task list —>

vars_files: /opt/private/my_vars.yml

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables: command• Directly pass variables to command line:

• --extra-vars “version=1.3 my_var=foo”

• --extra-vars ‘{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'

• --extra-vars "@some_file.json"

SOFTWARE CRAFTSMANSHIP TOLEDO

Variables: precedence• role defaults < inventory vars < inventory

group_vars < inventory host_vars < playbook group_vars < playbook host_vars < host facts < registered vars < set_facts < play vars < play vars_prompt < play vars_files < role and include vars < block vars (only for tasks in block) < task vars (only for the task) < extra vars

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible Playbooks

SOFTWARE CRAFTSMANSHIP TOLEDO

Playbooks• Orchestrate steps/tasks of any

manual ordered process.

• Executed a/synchronously.

• YAML format.

• Minimum syntax —> not a language but a model.

SOFTWARE CRAFTSMANSHIP TOLEDO

Playbooks: Tasks

• Should have a name: included in output and readable by humans.

• Accept variables:

template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}

SOFTWARE CRAFTSMANSHIP TOLEDO

Playbooks: Tasks lists• Each play contains a list of tasks.

• Tasks are executed in order, one at a time, against all machines matched by the host pattern.

• Important! Same task directives to all hosts.

• Tasks goal? execute a module, with arguments.

• Modules are idempotent.

SOFTWARE CRAFTSMANSHIP TOLEDO

Playbooks:Hosts&Users• For each play, choose machines to

target and remote user to complete the steps/tasks as.

• Define remote users per task.

• Use sudo on a particular task instead of the whole play.

SOFTWARE CRAFTSMANSHIP TOLEDO

Playbooks: Handlers• Playbooks respond to change.

• Can notify at the end of each block of tasks.

• Triggered only once, even if notified by multiple tasks.

• Best used to restart services and trigger reboots.

SOFTWARE CRAFTSMANSHIP TOLEDO

ansible-playbook playbook.yml

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible Roles

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles• Reuse playbooks.

• Combine files to form clean, reusable abstractions.

• Grouping allows easy sharing of roles with other users.

• include directive —> Include files.

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles: structure

• Automatically loads certain vars_files, tasks, and handlers based on a known file structure.

• Where is the magic? Improvements to search paths for referenced files.

SOFTWARE CRAFTSMANSHIP TOLEDO

‘common’ role structure

‘webservers’ role structure

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles: main.yml• roles/x/tasks/main.yml —> Add tasks to the

play.

• roles/x/handlers/main.yml —> Add handlers to the play.

• roles/x/vars/main.yml —> Add variables to the play.

• roles/x/meta/main.yml —>, Add roles as dependency (1.3 and later).

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles: paths

• Any copy, script, template or include tasks (in the role) can reference files in roles/x/{files,templates,tasks}/ without having to path them relatively or absolutely

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles:parameters

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles:defaults• Add a defaults/main.yml file in your role

directory.

• Set default variables for included or dependent roles.

• Lowest priority of any variables available, so they are easily overridden, including inventory variables!

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles:dependencies• A list of roles and parameters to

insert and execute before the specified role.

• Automatically pull in other roles.

• meta/main.yml within the role.

• Executed recursively.

SOFTWARE CRAFTSMANSHIP TOLEDO

Roles:dependencies

SOFTWARE CRAFTSMANSHIP TOLEDO

https://galaxy.ansible.com

Where can I findready to use Roles?

Ansible Galaxy

SOFTWARE CRAFTSMANSHIP TOLEDO

https://github.com/ansible/ansible-examples/tree/master/lamp_haproxy

Ansible Real Example (1)

SOFTWARE CRAFTSMANSHIP TOLEDO

Ansible Real Example (2):LELK

SOFTWARE CRAFTSMANSHIP TOLEDO

LELK

• Liferay Portal

• Elasticsearch

• Logstash

• Kibana

• generate

• index

• process

• display

SOFTWARE CRAFTSMANSHIP TOLEDO

Liferay + Tomcat Liferay + Tomcat

Liferay + Tomcat Liferay + Tomcat

LELK

SOFTWARE CRAFTSMANSHIP TOLEDO

SOFTWARE CRAFTSMANSHIP TOLEDO

LELK: Roles

• Server —> ElasticSearch + Logstash + Kibana

• Clients -> Liferay Deployment

SOFTWARE CRAFTSMANSHIP TOLEDO

Role: liferay-deployment• Ansible Role: liferay-users (add liferay

user with UID=1000)

• Ansible Role: liferay-os-tools (vim, htop, curl, rsync, tree, zip)

• Ansible Role: liferay-dev-tools (java)

• Ansible Role: liferay-logstash-forwarder

SOFTWARE CRAFTSMANSHIP TOLEDO

Role: logstash-forwarder

• Copy SSL certificate

• Copy init.d startup

• Copy logstash-forwarder configuration

logstash-forwarder.conf.j2

SOFTWARE CRAFTSMANSHIP TOLEDO

Role: logstash-forwarder

SOFTWARE CRAFTSMANSHIP TOLEDO

Role: elastic-search-server

• Install Logstash

• Install ElasticSearch

• Install Kibana

• Install Nginx

SOFTWARE CRAFTSMANSHIP TOLEDO

Role: elastic-search-serverlogstash-input.conf.j2

logstash-output.conf.j2

SOFTWARE CRAFTSMANSHIP TOLEDO

LELK Next??

• Applied logstash-forwarder role to more machines, setting log_paths and tags variable to the desired file.

• Add more client types —> Apache Server, Firewall

SOFTWARE CRAFTSMANSHIP TOLEDO

With tests!!!

SOFTWARE CRAFTSMANSHIP TOLEDO

SOFTWARE CRAFTSMANSHIP TOLEDO

Recap• Server are hard to maintain up-to-date

• Automation over infrastructure

• Infrastructure as code

• Ansible Inventory & Modules

• Variables & template system

• Playbooks & Roles & Galaxy

SOFTWARE CRAFTSMANSHIP TOLEDO

What about using GITto version

Inventory and Roles??

Meet OUR server room

Thanks!

Recommended