Erinevus lehekülje "Ansible" redaktsioonide vahel

Allikas: Kuutõrvaja
32. rida: 32. rida:
 
  media-centre
 
  media-centre
 
  nas
 
  nas
 +
 +
Nimega defineerimise korral tuleb siis muidugi lisada hosts faili vastav seos
  
 
===Käsurealt kasutamine===
 
===Käsurealt kasutamine===

Redaktsioon: 8. november 2018, kell 00:59

Paigaldus

# apt-get install ansible

Kõisse masinaisse tuleb paigaldada SSH võti

# ssh-keygen -t rsa'

Ja kopeerime järgneva käsuga ükshaaval kõigisse masinaisse

# ssh-copy-id -i .ssh/id_rsa.pub kautaja@vm1

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

[centos]
confluence
vm-server1
gitlab

[ubuntu]
trusty-mirror
media-centre
nas

Nimega defineerimise korral tuleb siis muidugi lisada hosts faili vastav seos

Käsurealt kasutamine

Ansible kasutab enamuse asjade tegemiseks mooduleid. Nende abil paigaldab ta tarkvara, kopeerib faile jne. Näiteks kasutame moodulit ping

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'

Kõigi kasutatavate moodulite nimekirja leiab https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

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: debian
  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 

Template kasutamine

Templatedega saab luua vaikekonfe, mis paigaldamise ajal täidetakse vastavalt masinale sobiva infoga. Näiteks haproxyle konfi puhul käiks see järgnevalt

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 kõige 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

Shell mooduli kasutamine IP aadressi saamiseks

- name: Get the host part of the IP 
  shell: host Mall:Ansible fqdn | awk '{print $4}' 
  register: host_ip 

Hiljem võib seda töödelda

{{ host_ip.stdout.split('.')[3] }}

Samuti on võimalik apache veebiserverit seadistada spetsiifilise mooduli abil

   - name: enabled mod_rewrite
     apache2_module: name=rewrite state=present

Postfixi installimisel küsimustele vastamine

---
- name: Set Postfix option hostname
  debconf: 
    name=postifx 
    question="postfix/mailname" 
    value="sandbox" 
    vtype="string"

- name: Set Postfix option type as internet site
  debconf: 
    name=postfix 
    question="postfix/main_mailer_type" 
    value="'Internet Site'" 
    vtype="string"

- name: install postfix
  apt: name=postfix state=present


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

https://github.com/asjalik/ansible eestikeeles