Upgrade to Pro — share decks privately, control downloads, hide ads and more …

De 0 a 72,5 con Ansible

De 0 a 72,5 con Ansible

En esta presentación se mostrarán los beneficios de Ansible para la automatización de procesos de IT, sus esquemas de trabajo y los módulos más relevantes para su uso.

No hay un pasado una vez conoces Ansible.

Pablo Martín

April 04, 2018
Tweet

More Decks by Pablo Martín

Other Decks in Programming

Transcript

  1. De 0 a 72,5 con
    Ansible
    P R 3 S S H
    XLIII Betabeers Huelva
    4 de abril de 2018

    View Slide

  2. ¿Qué es Ansible?
    Ansible is a software that automates software provisioning, configuration
    management, and application deployment.
    Ansible delivers simple IT automation that ends repetitive tasks and frees
    up DevOps teams for more strategic work.
    ● Creada por Michael DeHaan (RedHat Inc.)
    ● Mantenida por RedHat Inc., Ansible Inc. y la comunidad de Ansible.
    ● https://www.ansible.com/

    View Slide

  3. Funcionamiento básico
    ● Está basado en ficheros de definición/configuración YAML.
    ● En dichos ficheros se describe toda la infraestructura IT necesaria.
    ● Usa Jinja2 como motor de plantillas
    ● Se crean playbooks que son las unidades ejecutables.
    ● Permite gestionar variables.
    ● Permite gestionar inventarios.
    ● Permite la generación de sistemas modulares.
    ● Guarda estados de ejecución para posibles rupturas.
    ● Existen clientes locales (Linux, MacOS, Win) para administrar los playbooks.

    View Slide

  4. Elementos principales
    ● Playbooks
    ● Inventory
    ● Config files
    ● Group Vars
    ● Roles
    ● Templates
    ● Handlers
    ● Modules
    A continuación veremos uno a uno a través de un ejemplo.

    View Slide

  5. Estructura de ficheros de un proyecto Ansible

    View Slide

  6. Playbooks
    - name: App Server
    hosts: web
    become: yes
    become_user: root
    become_method: su
    gather_facts: False
    roles:
    - common
    - ruby
    - postgresql
    - webapp
    - nginx
    - unicorn

    View Slide

  7. Inventory
    [web]
    1.1.1.1

    View Slide

  8. Config files
    [defaults]
    inventory=hosts
    remote_user=root

    View Slide

  9. Group Vars
    # linux user (consul)
    linux_usergroup: users
    linux_userpassword: consul # recreate password when deployed
    linux_shell: /bin/bash
    # application name
    app_name: consul
    webapp_repo: git://github.com/arcosdelafrontera/consul.git
    # RAILS_ENV
    rails_env: development
    # ruby config
    ruby_version: 2.3.2
    gemoptions: "gem: --no-ri --no-rdoc"

    View Slide

  10. Roles [1]
    - name: Create user for Consul
    user:
    name=consul
    group={{ linux_usergroup }}
    password={{ linux_userpassword }}
    comment="Consul user"
    shell=/bin/bash
    state=present
    tags: setup

    View Slide

  11. Roles [2]
    - name: Install extra packages
    apt: "pkg={{item}} state=latest force=yes update_cache=yes"
    with_items:
    - vim
    - git-core
    - curl
    - build-essential
    - libssl-dev
    - libyaml-dev
    - libsqlite3-dev
    - sqlite3
    - libxml2-dev
    - nodejs
    - npm
    tags: setup

    View Slide

  12. Roles [3]
    - name: Clone rbenv repo
    git:
    repo=git://github.com/sstephenson/rbenv.git
    version=master
    dest=/home/consul/.rbenv
    become: yes
    become_user: consul
    tags: ruby

    View Slide

  13. Templates
    upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/home/consul/consul/shared/sockets/unicorn.sock fail_timeout=0;
    }
    server {
    listen 80;
    server_name localhost;
    root /home/consul/consul/public;
    try_files $uri/index.html $uri @app;
    location @app {
    proxy_pass http://app;
    ...

    View Slide

  14. Handlers
    Task:
    - name: update-rc.d
    command: update-rc.d unicorn_{{app_name}} defaults
    notify: restart unicorn
    tags:
    - unicorn
    Handler:
    - name: restart unicorn
    service: name=unicorn_consul state=restarted

    View Slide

  15. Modules
    ● Todo en Ansible se puede ejecutar mediante comandos de shell.
    ● Se recomienda el uso de módulos siempre que exista uno para la tarea que queremos
    llevar a cabo.
    ● Los módulos son abstracciones de un determinado grupo de comandos para facilitar su
    uso y mantenimiento.
    ● Dado que Ansible se ha convertido en una herramienta muy utilizada, hay una ingente
    cantidad de módulos que te pueden ser de ayuda dependiendo de tu stack tecnológico (y
    de tu plataforma cloud).
    ● El listado de módulos se puede consultar en la documentación oficial.

    View Slide

  16. Run
    ansible-playbook [-i inventory] [-t tags] playbook.yml

    View Slide

  17. RTFM

    View Slide

  18. Enlaces de interés
    ● Web oficial: http://ansible.com
    ● Documentación (getting started): https://docs.ansible.com/
    ● Toda la documentación: http://docs.ansible.com/ansible/latest/
    ● Listado de módulos:
    http://docs.ansible.com/ansible/latest/modules/modules_by_category.html
    ● URL del ejemplo: https://github.com/enredacoop/ansible-consul
    ● Un maravilloso video tutorial: https://www.youtube.com/watch?v=icR-df2Olm8

    View Slide