Slide 1

Slide 1 text

Keep Simple you infrastructure with Ansible

Slide 2

Slide 2 text

Javier López López < Software Architect PHP > Aurea Inc. PHP, LEADING, GO, ARCHITECTURE, TESTING, SCRUM Javier López López | PHPConfMX 2016

Slide 3

Slide 3 text

Ansible Javier López López | PHPConMX 2016 What is Ansible? Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs. ORCHESTRATION ENGINE

Slide 4

Slide 4 text

How it works? Javier López López | PHPConMX 2016

Slide 5

Slide 5 text

How it works? Javier López López | PHPConMX 2016 Vagrant Test Servers Production Servers SSH SSH SSH Ansible

Slide 6

Slide 6 text

Installation Javier López López | PHPConMX 2016 1. Install Homebrew 2. Install Python 2.7.x 3. Install Ansible $ sudo pip install ansible #or $brew install ansible OSX $ sudo apt-add-repository -y ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install -y ansible LINUX Download and install Cygwin install separately PyYAML and Jinja2 Extra instructions: http://www.jeffgeerling.com/blog/ running-ansible-within-windows WINDOWS

Slide 7

Slide 7 text

Javier López López | PHPConMX 2016 Ansible Installation Ansible Installation

Slide 8

Slide 8 text

Javier López López | PHPConMX 2016 Ansible Concepts Inventory file Playbook Modules

Slide 9

Slide 9 text

Javier López López | PHPConMX 2016 Ansible Concepts Inventory file List of server to connect using Ansible [develop] localhost ansible_connection=local [testing] other1.example.com ansible_connection=ssh ansible_user=javier other2.example.com ansible_connection=ssh ansible_user=root [production] 123.321.123.111 ansible_user=root ansible_ssh_pass=itWorks

Slide 10

Slide 10 text

Ansible Concepts Javier López López | PHPConMX 2016 Modules Ansible ships with a number of modules (called the ‘module library’) that can be executed directly on remote hosts or through Playbooks. Users can also write their own modules. These modules can control system resources, like services, packages, or files (anything really), or handle executing system commands. http://docs.ansible.com/ansible/list_of_all_modules.html ‣ MySQL ‣ Redis ‣ Mongo ‣ Copy ‣ Replace ‣ RabbitMQ ‣ Azure ‣ CloudFormation Amazon ‣ Composer ‣ Amazon EC2 ‣ Git ‣ New Relic ‣ Amazon S3 ‣ Etc……..

Slide 11

Slide 11 text

Ansible Concepts Javier López López | PHPConMX 2016 Playbook Playbooks are Ansible’s configuration, deployment, and orchestration language. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process. http://docs.ansible.com/ansible/playbooks.html

Slide 12

Slide 12 text

Getting Started Javier López López | PHPConMX 2016 $ ansible hosts -i inventory_file —m module -a arguments $ ansible all -i “localhost,” —m ping

Slide 13

Slide 13 text

Javier López López | PHPConMX 2016 Getting Started ansible ssh connection

Slide 14

Slide 14 text

Javier López López | PHPConMX 2016 Playbook --- hosts: all remote_user: root tasks: - name: install apache2 apt: name=apache2 update_cache=yes state=latest notify: - restart apache handlers: - name: restart apache service: name=apache state=restarted playbook.yml Hosts User Description Command Task List Handlers List Description Command Notification Handler Name

Slide 15

Slide 15 text

Javier López López | PHPConMX 2016 Running Ansible playbook $ ansible-playbook playbook.yml -i inventory

Slide 16

Slide 16 text

Javier López López | PHPConMX 2016 Installing Apache Demo

Slide 17

Slide 17 text

Javier López López | PHPConMX 2016 Installing Apache

Slide 18

Slide 18 text

IDEMPOTENCE Javier López López | PHPConMX 2016

Slide 19

Slide 19 text

IDEMPOTENCE Javier López López | PHPConMX 2016 In computer science, the term idempotent is used more comprehensively to describe an operation that will produce the same results if executed once or multiple times https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning

Slide 20

Slide 20 text

Javier López López | PHPConMX 2016 Uninstalling Apache Demo

Slide 21

Slide 21 text

Javier López López | PHPConMX 2016 PHP Stack ✦Linux ✦Nginx ✦Configuration ✦PHP ✦Configuration ✦Modules ✦Composer

Slide 22

Slide 22 text

Javier López López | PHPConMX 2016 Ansible playbooks

Slide 23

Slide 23 text

Ansible Javier López López | PHPConMX 2016 ‣ Roles ‣ Tasks ‣ Handlers ‣ Loops ‣ Variables ‣ Conditionals ‣ Templates ‣ Etc… http://docs.ansible.com/ansible/playbooks.html

Slide 24

Slide 24 text

Ansible Roles Javier López López | PHPConMX 2016 Roles in Ansible build on the idea of include files and combine them to form clean, reusable abstractions – they allow you to focus more on the big picture and only dive down into the details when needed http://docs.ansible.com/ansible/playbooks_roles.html

Slide 25

Slide 25 text

Ansible Roles Javier López López | PHPConMX 2016 ├── defaults │ └── main.yml ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates │ └── apache2_php.ini.j2 └── vars └── main.yml Variables PHP Role Dependencies Handlers Templates Tasks Variables

Slide 26

Slide 26 text

Loops Javier López López | PHPConMX 2016 http://docs.ansible.com/ansible/playbooks_loops.html - name: add several users user: name={{ item }} state=present groups=wheel with_items: - alice - bob - charlie Task Name Module Array Items REPLACE user: name=alice state=present groups=wheel user: name=bob state=present groups=wheel user: name=charlie state=present groups=wheel

Slide 27

Slide 27 text

Nested Loops Javier López López | PHPConMX 2016 http://docs.ansible.com/ansible/playbooks_loops.html - name: give users access with different passwords mysql_user: name={{ item[0] }} priv=*.*:ALL append_privs=yes password={{ item[1] }} with_nested: - [ 'alice', 'bob' ] - [ 'clientdb', ‘employeedb', ‘more_data’] mysql_user: name=alice priv=*.*:ALL append_privs=yes password=bob mysql_user: name=clientdb priv=*.*:ALL append_privs=yes password=employeedb

Slide 28

Slide 28 text

More Loops Javier López López | PHPConMX 2016 http://docs.ansible.com/ansible/playbooks_loops.html ‣ Standard Loops ‣ Nested Loops ‣ Loops over hashes ‣ Loops over Files ‣ Loops over Fileglobs ‣ Loops over Parallel Sets of Data ‣ Loops over subelements ‣ Random choices ‣ Etc…..

Slide 29

Slide 29 text

Variables Javier López López | PHPConMX 2016 - hosts: all vars: apache_service: apache2 - name: install apache2 apt: name={{ apache_service }} update_cache=yes state=latest http://docs.ansible.com/ansible/playbooks_variables.html Definition Usage

Slide 30

Slide 30 text

Conditionals Javier López López | PHPConMX 2016 tasks: - name: "shut down Debian flavored systems" command: /sbin/shutdown -t now when: ansible_os_family == "Debian" Task Name Module Conditional http://docs.ansible.com/ansible/playbooks_conditionals.html

Slide 31

Slide 31 text

Templates Javier López López | PHPConMX 2016 tasks: - name: “Copy files" template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644 Jinja2 Template Template processed http://docs.ansible.com/ansible/template_module.html

Slide 32

Slide 32 text

Ansible Galaxy Javier López López | PHPConMX 2016

Slide 33

Slide 33 text

Ansible Galaxy Javier López López | PHPConMX 2016 $ ansible-galaxy install flyapen.jenkins https://galaxy.ansible.com/ ➡Explore Username Rolename

Slide 34

Slide 34 text

Questions? Javier López López | PHPConMX 2016 $ ansible-playbook questions.yml -i everyone ? ¿

Slide 35

Slide 35 text

Thanks Javier López López | PHPConMX 2016 Javier López López Software Architect & Scrum Master @devjlopez http://www.devjlopez.com/ [email protected]