Ansible

Allikas: Kuutõrvaja
Redaktsioon seisuga 23. august 2017, kell 01:31 kasutajalt Jj (arutelu | kaastöö)

Install

# apt-get install ansible

Kõisse masinaisse tuleb paigaldada SSH võti

# ssh-keygen -t rsa

Kliendid vaja defineerida

Kliendi defineerimine toimub failis /etc/ansible/hosts näiteks lisame ühe kliendi gruppi test

[test]
10.20.0.20

Neid gruppe võib teha terve hulga, nt kõik masinad ära jaotada opsüsteemide järgi

[debian]
vm1
vm2
vm3

[fedora]
netflix

[centos]
confluence
vm-server1
gitlab

[ubuntu]
trusty-mirror
media-centre
nas

Käsurealt kasutamine

Kõikide nodede korrasoleku kontroll

# ansible all -m ping

Küsime nodedelt hostname käsku

# ansible -m shell -a "hostname" all

Samamoodi võib käsurealt otse teha ka jõhkramaid toiminguid, nt midagi installida

# ansible all -s -m shell -a 'apt-get install nginx'

Playbook

Playbookid on .yml failid, kus defineeritakse Ansible tegevused ja tegevuste järjekord. Näiteks lihtne playbook mis paigaldab ngxinxi apt moodulit kasutades ning paneb selle tööle.

---
- hosts: debian
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=installed update_cache=true
      notify:
        - start nginx

  handlers:
    - name: start nginx
      service: name=nginx state=started

Nende käivitamiseks

# ansible-playbook test.yml


Keerukam lahendus, mis juba lisaks paigaldab vaikimisi nginx konfi ja tõmbab alla ka gitist veebiserveri sisu

---
- hosts: debian
  sudo: yes
  
  tasks: 

  - name: paigaldame nginx
    apt: name=nginx state=installed update_cache=yes

  - name: loome nginxile konfiguratsiooni
    template: src=templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: restart nginx

  - name: paigaldame veebiserverisse sisu
    git: repo=https://github.com/jweissig/episode-47.git
         dest=/usr/share/nginx/html/
         version=release-0.01

  - name: start
    service: name=nginx state=started

  handlers:

  - name: restart nginx
    service: name=nginx state=restarted

Kolmas näide

---
- hosts: linode
  remote_user: yourusername
  become: yes
  become_method: sudo
  tasks:
    - name: "Install Apache, MySQL, and PHP5"
      apt: name=Mall:Item state=present
      with_items:
        - apache2
        - mysql-server
        - python-mysqldb
        - php5
        - php-pear
        - php5-mysql

    - name: "Turn on Apache and MySQL and set them to run on boot"
      service: name=Mall:Item state=started enabled=yes
      with_items:
        - apache2
        - mysql

    - name: Create a test database
      mysql_db: name=testDb
                state=present

   - name: Create a new user for connections
     mysql_user: name=webapp 
                 password=mypassword 
                 priv=*.*:ALL state=present 

Ip aadressi muutujaks tegemine playbookis

- name: get IP of testmachine
shell: "dig +short testmachine.test.dom| awk '{ print ; exit }'"
register: ip_test
always_run: yes
changed_when: False
 
debug: msg="ip of testmachine is Mall:Ip test.stdout"

Template kasutamine

Esimesena tuleb luua templaatide kataloog

mkdir templates

Seejärel tekitame haproxy konfiguratsiooni

nano templates/haproxy.cfg

Konfi lisame järgnevad read

global
  log 127.0.0.1 local0 notice
  maxconn 2000
  user haproxy
  group haproxy 

defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  retries 3
  option redispatch
  timeout connect  5000
  timeout client  10000
  timeout server  10000

listen Mall:Haproxy app name 0.0.0.0:80
 mode Mall:Haproxy mode
 stats Mall:Haproxy enable stats
 {% if haproxy_enable_stats == 'enable' %}
 stats uri /haproxy?stats
 stats realm Strictly\ Private
 {% for user in haproxy_stats_users %}
 stats auth Mall:User.username:Mall:User.password
 {% endfor %}
 {% endif %}
 balance Mall:Haproxy algorithm
 option httpclose
 option forwardfor
 {% for server in haproxy_backend_servers %}
 server Mall:Server.name Mall:Server.ip:Mall:Server.port Mall:Server.paramstring
 {% endfor %}    

Järgmisena defineerime konfitemplates olevad muutujad playbooki

vars:
  haproxy_app_name: myapp
  haproxy_mode: http
  haproxy_enable_stats: enable 
  haproxy_algorithm: roundrobin
  haproxy_backend_servers:
    - {name: server1, ip: 10.133.181.247, port: 80, paramstring: cookie A check}
    - {name: server2, ip: 10.133.186.46, port: 80, paramstring: cookie A check}
  haproxy_stats_users:
   - {username: joe, password: soap}


Ja kige viimasena seome konfi ja template kokku

- name: Update HAProxy config
  template: src=templates/haproxy.cfg 
        dest=/etc/haproxy/haproxy.cfg 
        backup=yes

Moodulid'

Ansible sisaldab lisaks suurt hulka mooduleid praktiliselt kõige tegemiseks. Moodulite nimekirja näeb

# ansible-doc -l

Näiteks saab importida mooduli abil postgresi dump faili

---
- hosts: postgres-server
  tasks:
  - name: Restore db server
    postgresql_db: name=example state=import target=/example.sql

https://github.com/randohinn/KnowHow/blob/master/docs/Vorgurakendused/ansible.rst

https://github.com/asjalik/ansible

http://docs.ansible.com/ansible/latest/proxmox_module.html

http://docs.ansible.com/ansible/latest/mysql_db_module.html

https://github.com/rhwlo/ansible-playbooks/blob/master/mailserver.yml