Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

whoami

Slide 3

Slide 3 text

What to expect from this talk 1. Vagrant: quick recap 2. Ansible Overview 3. Playbook crash-course 4. Standalone Ansible

Slide 4

Slide 4 text

VAGRANT: QUICK RECAP

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ANSIBLE OVERVIEW

Slide 7

Slide 7 text

Ansible Overview ● Simple and Straightforward ● Human-readable automation language ● Agentless - needs only SSH ● Extensive list of built-in modules ● Used by Twitter, Atlassian, EA, Spotify, even NASA!

Slide 8

Slide 8 text

Installation $ brew update $ brew install ansible $ sudo apt-add-repository -y ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install -y ansible Detailed installation instructions: do.co/ansible-docs Mac OSX Ubuntu *Windows is not officially supported as controller machine.

Slide 9

Slide 9 text

A Simple Playbook # playbook.yml --- - hosts: all sudo: true tasks: - name: Update apt-cache apt: update_cache=yes - name: Install Nginx apt: pkg=nginx state=latest

Slide 10

Slide 10 text

Ansible Output

Slide 11

Slide 11 text

Ansible Output (with cowsay)

Slide 12

Slide 12 text

Ansible as Provisioner #Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" end end

Slide 13

Slide 13 text

DEMO

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

WRITING PLAYBOOKS

Slide 16

Slide 16 text

Variables --- - hosts: all sudo: yes vars: web_server: nginx tasks: - name: Install {{ web_server }} apt: pkg={{ web_server }} state=latest

Slide 17

Slide 17 text

Facts

Slide 18

Slide 18 text

Conditionals - name: "shutdown Debian flavored systems" command: /sbin/shutdown -t now when: ansible_os_family == "Debian" - name: foo is not defined fail: msg="Bailing out. this play requires 'bar'" when: bar is not defined

Slide 19

Slide 19 text

Looping: with_items tasks: - name: Install Packages apt: pkg={{ item }} state=latest with_items: - nginx - php5-fpm - git

Slide 20

Slide 20 text

Looping: with_items --- - hosts: all sudo: yes vars: sys_packages: [ 'nginx', 'php5-fpm', 'git' ] tasks: - name: Install Packages apt: pkg={{ item }} state=latest with_items: sys_packages

Slide 21

Slide 21 text

Templates ServerAdmin webmaster@localhost DocumentRoot {{ doc_root }} AllowOverride All Require all granted

Slide 22

Slide 22 text

Templates - Usage - name: Change default apache vhost template: src=templates/apache.tpl dest=/etc/apache2/sites-available/000-default.conf

Slide 23

Slide 23 text

Handlers (services) --- - hosts: all sudo: yes vars: - doc_root: /vagrant tasks: - name: Change default apache vhost template: src=templates/apache.tpl dest=/etc/apache2/sites- available/000-default.conf notify: restart apache handlers: - name: restart apache service: name=apache2 state=restarted

Slide 24

Slide 24 text

Handlers (services) --- - hosts: all sudo: yes vars: - doc_root: /vagrant tasks: - name: Change default apache vhost template: src=templates/apache.tpl dest=/etc/apache2/sites- available/000-default.conf notify: restart apache handlers: - name: restart apache service: name=apache2 state=restarted

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

ORGANIZING PLAYBOOKS

Slide 27

Slide 27 text

Including Tasks --- - hosts: all sudo: true vars: doc_root: /vagrant/web tasks: - include: tasks/init.yml - include: tasks/nginxphp.yml handlers: - name: restart nginx service: name=nginx state=restarted

Slide 28

Slide 28 text

Roles . ├── playbook.yml └── roles ├── init │ └── tasks │ └── main.yml └── nginxphp ├── handlers │ └── main.yml ├── tasks │ └── main.yml └── templates └── vhost.tpl #playbook.yml --- - hosts: all sudo: true vars: doc_root: /vagrant/web roles: - init - nginxphp

Slide 29

Slide 29 text

STANDALONE ANSIBLE

Slide 30

Slide 30 text

Let's talk inventories! #/etc/ansible/hosts [webservers] erikaheidi.com dev-human.com [testservers] 178.62.192.53 95.85.35.248 178.62.221.111

Slide 31

Slide 31 text

Vagrant auto-generated inventory # Generated by Vagrant default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

Slide 32

Slide 32 text

ad-hoc commands

Slide 33

Slide 33 text

ad-hoc commands

Slide 34

Slide 34 text

Running playbooks $ ansible-playbook -i staging -l webservers playbook.yml $ ansible-playbook playbook.yml --list-hosts $ ansible-playbook playbook.yml --list-tasks ansible-playbook [-i inventory] [-l group] playbook.yml

Slide 35

Slide 35 text

Running Ansible on Vagrant vms $ ansible all -i [inventory] -u vagrant --private-key=[key] -a "php -v" $ ansible-playbook -i [inventory] -u vagrant --private- key=[key] demo01.yml .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory .vagrant/machines/default/virtualbox/private_key

Slide 36

Slide 36 text

Running Ansible on Vagrant vms

Slide 37

Slide 37 text

DEMO

Slide 38

Slide 38 text

RESOURCES

Slide 39

Slide 39 text

phansible.com

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

Vagrant Cookbook - Leanpub leanpub.com/vagrantcookbook/c/phpsc15 Also available on Amazon (paperback)

Slide 42

Slide 42 text

QUESTIONS?

Slide 43

Slide 43 text

Ansible Tutorials: http://do.co/ansible Please rate this talk: https://joind.in/13588