Ansible
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
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