Howto ansible orquestacion

De Tutoriales de Informática
Saltar a: navegación, buscar

Descripción[editar]

Ansible no utiliza el concepto cliente-servidor, para que el mismo funcione solo hay que instalar ansible en el equipo que va a oficiar de servidor y copiar su llave publica a los clientes.

Instalación[editar]

apt-get install ansible

Configuración[editar]

Ansible se basa en un archivo denominado hosts que se encuentra en /etc/ansible en el mismo se crear los grupos de host.

  • Ejemplo: si queireo crear un grupo de webserver, defino lo siguiente;
[webserver]
192.168.0.30
192.168.0.10
prueba.ejemplo.com.ar
prueba1.ejemplo.com.ar

Definicion de Playbook[editar]

Playbooks describen configuraciones, despliegue, y orquestación en Ansible.11​ El formato del Playbook es YAML. Cada Playbook asocia un grupo de hosts a un conjunto de roles. Cada rol está representado por llamadas a lo que Ansible define como Tareas.

Playbook para un Servidor web[editar]

El ejemplo a continuación es un playbook para la orquestación de un web sever. el archivo se denomina webserver.yml y esta ubicado en el directorio /etc/ansible

---
- hosts: webservers
  user: root

  vars:
   domain: macaco.com.ar
  tasks:
    ##
    # Instalacion de paquetes necesarios.
    ##
    - name: Actualizacion de repositorios
      apt:
        update_cache: yes

    - name: Instalacion de Apache2.
      action: apt pkg={{ item }} state=installed
      with_items:
        - apache2

    ##
    # Configuracion de Apache2.
    ##
    - name: Apache2 | Habilitar modulos
      action: command a2enmod rewrite vhost_alias

    - name: create virtual host file
      template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

    - name: a2ensite {{ domain }}
      command: a2ensite {{ domain }}
      args:
        creates: /etc/apache2/sites-enabled/{{ domain }}.conf
    ##
    # Reinicio de servicios
    ##
    - name: Restart Apache
      action: service name=apache2 state=restarted

    - name: 4. install web propia
      copy: src=index.html dest=/var/www/html/index.html mode=0664

En este caso el playbook utiliza dos archivos virtualhost.conf y index.html

  • virtualhost.conf
<VirtualHost *:80>
    ServerAdmin webmaster@{{ domain }}
    ServerName {{ domain }}
    ServerAlias www.{{ domain }}
    DocumentRoot /var/www/{{ domain }}
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • index.html
<html>
<head>
        <title>Ansible WEB</title>
</head>
<body bgcolor="#FFF9B1">
<center><p><a href="http://www.ejemplo.edu.ar">Web ejemplo</a></p></center>
<center><p>Web creada desde Ansible</p></center>
</body>
</html>

El resultado de esta orquestación sera instalar apache2, habilitar los modules rewrite y vhost_alias, crear el virtual host macaco.com.ar y que el index por default sea index.html en todos los equipos que pertenezcan a webservers

Playbook para un Servidor LAMP[editar]

El ejemplo a continuación es un playbook para la orquestación de un web sever. el archivo se denomina lamp.yml y esta ubicado en el directorio /etc/ansible

---
- hosts: lamp
  user: root
  vars:
   database: glpi
   usuario: usuario
   contrasena: 123456
  tasks:
    ##
    # Instalacion de paquetes necesarios.
    ##
    - name: Actualizacion de repositorios
      apt:
        update_cache: yes

    - name: Instalacion de Apache2.
      apt: state=present name={{ item }}
      with_items:
      - apache2
      - mysql-server
      - libapache2-mod-php5
      - php5
      - php5-gd
      - php5-mysql
      - python-mysqldb

    ##
    # Configuracion de Apache2.
    ##
    - name: Apache2 | Habilitar modulos
      action: command a2enmod rewrite vhost_alias

    ##
    # Reinicio de servicios
    ##
    - name: Restart Apache
      action: service name=apache2 state=restarted

    - name: 4. install Hello World PHP script
      copy: src=index.html dest=/var/www/html/index.html mode=0664

    - name: 5. Start Mysql Service
      service: name=mysql state=started enabled=true

#    - name: 6. update mysql root password for all root accounts
    - name: 6. Create a new database
      mysql_db: db={{ database }} state=present collation=utf8_general_ci

    - name: 7. Create a database user
      mysql_user: user={{ usuario }} password={{ contrasena }} priv=*.*:ALL state=present

    - name: 8a. Copy sample data
      copy: src=dump.sql dest=/tmp/dump.sql

    - name: 8b. Insert sample data
      shell: cat /tmp/dump.sql | mysql -u {{ usuario }} --password={{ contrasena }} {{ database }}
  • dump.sql
CREATE TABLE IF NOT EXISTS glpi (
  message varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO glpi (message) VALUES('Heeeeee GATOOO!');

El resultado de esta orquestación sera instalar apache2, mysql-server, libapache2-mod-php5, php5, php5-gd, php5-mysql, python-mysqldb, crear una base llamada glpi, crear el usuario sergio con la contraseña dsiredes sobre la base glpi y restaurar un backup que se encuentra en el archivo dump.sql