Ansible: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ptomusk (talk | contribs)
Ptomusk (talk | contribs)
 
(48 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Tutvustus ==
== Tutvustus ==
Ansible on vabavaraline ([http://www.gnu.org/licenses/gpl.html GPL])<ref>https://github.com/ekarak/ansible/blob/master/license/gpl.txt</ref> konfiguratsiooni ja seadistuse haldamise tarkvaraplatvorm.<ref>http://server.dzone.com/articles/ansible-cm-deployment-and-ad</ref>
Ansible on vabavaraline ([http://www.gnu.org/licenses/gpl.html GPL])<ref>Ansible license in GitHub, https://github.com/ansible/ansible/blob/devel/COPYING</ref> konfiguratsiooni ja seadistuse haldamise tarkvaraplatvorm.<ref> Ansible: CM, Deployment, and Ad-hoc Task Execution All in One, http://server.dzone.com/articles/ansible-cm-deployment-and-ad</ref>


Konfiguratsiooni hoidmiseks kasutatakse [http://www.yaml.org/ YAML]'i faile mis võivad olla omavahel hierarhiliselt seotud.<ref>http://docs.ansible.com/playbooks_intro.html</ref>
Toetatud on Linux ja teised Unixilaadsed operatsioonisüsteemid, Windows servermasinana toetatud ei ole.<ref name="ansible_installation"/>
Konfiguratsiooni hoidmiseks kasutatakse [http://www.yaml.org/ YAML]'i faile mis võivad olla omavahel hierarhiliselt seotud.<ref name="ansible_playbooks">Ansible Playbooks, http://docs.ansible.com/playbooks_intro.html</ref>
Ansible on kirjutatud Python'is ning seadistuse vahendamiseks kasutatakse SSH protokolli (Python'i paramiko teeki või OS'i ssh käsku rakendades).
Ansible on kirjutatud Python'is ning seadistuse vahendamiseks kasutatakse SSH protokolli (Python'i paramiko teeki või OS'i ssh käsku rakendades).
Hallatava masina eelduseks on sissetulevate SSH ühenduste lubamine ja Python'i interpretaatori olemasolu (vähemalt versioon 2.4), eraldiseisvat klienti või agenti ei ole.<ref name="ansible_installation">http://docs.ansible.com/intro_installation.html</ref>
Hallatava masina eelduseks on sissetulevate SSH ühenduste lubamine ja Python'i interpretaatori olemasolu (vähemalt versioon 2.4), eraldiseisvat klienti või agenti ei ole.<ref name="ansible_installation">Ansible installation manual, http://docs.ansible.com/intro_installation.html</ref>


Tarkvara loojaks on Michael DeHaan, kes eelnevalt on loonud [[Cobbler]]'i ning olnud [[Puppet]]'i arendaja.<ref>http://investing.businessweek.com/research/stocks/private/person.asp?personId=233466314&privcapId=233465248&previousCapId=233465248&previousTitle=AnsibleWorks,%20Inc</ref>
Tarkvara loojaks on Michael DeHaan, kes eelnevalt on loonud [[Cobbler]]'i ning olnud [[Puppet]]'i arendaja.<ref>Michael DeHaan's bio, http://investing.businessweek.com/research/stocks/private/person.asp?personId=233466314&privcapId=233465248&previousCapId=233465248&previousTitle=AnsibleWorks,%20Inc</ref>


Nimetus "Ansible" on pärit O.S.Card'i raamatust Enderi mäng, kus kirjeldatakse samanimelist valguse kiirusest kiiremat suhtlusprotokolli.<ref>http://www.ansibleworks.com/faq/</ref>
Nimetus "Ansible" on pärit O.S.Card'i raamatust Enderi mäng, kus kirjeldatakse samanimelist valguse kiirusest kiiremat suhtlusprotokolli.<ref>Why is it called Ansible, http://www.ansibleworks.com/faq/</ref>


Ansible'ile on võimalik osta ka ärikliendi tuge.<ref>http://www.ansibleworks.com/</ref>
Ansible'ile on võimalik osta ka ärikliendi tuge.<ref>AnsibleWorks homepage, http://www.ansibleworks.com/</ref>


== Erinevused levinud alternatiividega ==
== Erinevused levinud alternatiividega ==
Ansible peamine erinevus oma konkurentidega [[Puppet]] ja [[Chef]] on agendi kui sellise puudumine. Klientide seadistamiseks kasutatakse juba (enamus juhtudel) olemasolevaid vahendeid - [[SSH]] ja [[Python]]. <ref>Review: Puppet vs. Chef vs. Ansible vs. Salt, http://www.infoworld.com/d/data-center/review-puppet-vs-chef-vs-ansible-vs-salt-231308?page=0,1</ref>


Ansible peamine erinevus oma konkurentidega, sh. Puppet ja Chef on see, et ta on loodud mitte ainult agendi(kliendi)vabana, vaid lisaks puudub igasugune vajadus seadistada klientarvuteid, sest toimingud teostatakse üle SSH protokolli. Lisaks, kuna ta on kirjutatud Pythonis, peab serverarvutisse olema paigaldatud Python 2.4 või uuem.
[[SaltStack]] on Ansible'ga vägagi sarnane, ent erineb klientidega suhtlemise osas, kasutades [[0mq]]'d ning täiendades seda enda poolt [[AES]] krüpteeringuga (milles võib aeg-ajalt esineda vigasid<ref>SaltStack AES bug, https://github.com/saltstack/salt/commit/5dd304276ba5745ec21fc1e6686a0b28da29e6fc</ref>). Ansible poolt kasutatav [[SSH]] ei lisa süsteemi täiendavaid ründevektoreid.<ref name="ansible_and_salt">Ansible and Salt: A detailed comparison, http://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/</ref>
 
Neljast konkurendist on Ansible'l hetkel kõige rohkem erinevaid autoreid, mis annab tunnistust tervest ja aktiivsest arendajaskonnast.<ref>Ansible pulse, https://github.com/ansible/ansible/pulse/monthly</ref><ref>Puppet pulse, https://github.com/puppetlabs/puppet/pulse/monthly</ref><ref>Chef pulse, https://github.com/opscode/chef/pulse/monthly</ref><ref>SaltStack pulse, https://github.com/saltstack/salt/pulse/monthly</ref> Ansible ajakohasusest annab aimu ka [[Ubuntu]] repositooriumist kättesaadavate pakkide võrdlus, milles praegusele ''(12.04)'' LTS versioonile on [[GitHub]]'is projekti enda uusima versiooniga võrreldes ajakohane versioon saadaval vaid Ansible'le.
<ref>Ansible GitHub releases, https://github.com/ansible/ansible/releases</ref>
<ref>Puppet GitHub releases, https://github.com/puppetlabs/puppet/releases</ref>
<ref>Chef GitHub releases, https://github.com/opscode/chef/releases</ref>
<ref>SaltStack GitHub releases, https://github.com/saltstack/salt/releases</ref>
<ref>Ansible package for Ubuntu (precise), http://packages.ubuntu.com/precise-backports/ansible</ref>
<ref>Puppet package for Ubuntu (precise), http://packages.ubuntu.com/precise-updates/puppet</ref>


== Kasutamine ==
== Kasutamine ==
=== Paigaldamine ===
=== Paigaldamine ===
 
Ansible paigaldamiseks on võimalik tõmmata see otse projekti [https://github.com/ansible/ansible GitHub'i repost] või paigaldada operatsioonisüüsteemi pakihaldustarkvara abil.<ref name="ansible_installation"/>
Installeerime Ansible (kõik käsud soovitavalt juurkasutaja õigustes!):
;Ansible paigaldamine [[APT]]'i abil
 
   sudo apt-get install ansible
  apt-get install ansible
;Versiooni (ja paigaldatuse kontroll)
 
  Reading package lists... Done
  Building dependency tree     
  Reading state information... Done
  The following NEW packages will be installed:
    ansible
  0 upgraded, 1 newly installed, 0 to remove and 24 not upgraded.
  Need to get 0 B/245 kB of archives.
  After this operation, 1,219 kB of additional disk space will be used.
  Selecting previously unselected package ansible.
  (Reading database ... 140139 files and directories currently installed.)
   Unpacking ansible (from .../ansible_1.1+dfsg-1~ubuntu12.04.1_all.deb) ...
  Processing triggers for man-db ...
  Setting up ansible (1.1+dfsg-1~ubuntu12.04.1) ...
 
Kontrollime, et sai ilusti peale:
 
   ansible --version
   ansible --version


  ansible 1.1
===Esmane seadistamine===
Süsteemne seadistusfail on ''/etc/ansible/ansible.cfg'', kuid iga kasutaja võib isiklike seadete hoidmiseks tekitada faili  ''.ansible.cfg'' enda kodukataloogi. Kasutaja kodukataloogis olevad seaded on süsteemse seadistusfaili suhtes ülemuslikud.<ref name="ansible_man">ansible-playbook man page, http://linux.die.net/man/1/ansible-playbook</ref>


=== Esmane seadistamine ===
'''Need muudatused on (rangelt) soovituslik sisse viia kas kasutaja seadistusfailis või süsteemses seadistusfailis.'''<br/>
 
: '''NB: Järgnevad muudatused asuvad sektsioonis''' '''''[defaults]'''''''!'''
Avame konfifaili ja muudame ära mõnede parameetrite väärtused:
Seadistatavaid sihtmasinaid kirjeldava faili teekonna muutmine
 
hostfile=~/ansible/hosts
  vi /etc/ansible/ansible.cfg
Kasutatava protokolli muutmine [[SSH]]'ks et vähendada turvariske.<ref name="ansible_and_salt"/> ''Autori isikliku kogemuse põhjal on [[Python]]'i [[paramiko]] teek kapriisne ning ei pruugi sobida keerukamateks lahendusteks''.
 
transport=ssh
Muudame protokolli SSH'ks, sest see on paindlikum:
Juhul kui teil ei ole seadistatud [[OpenSSH:_võtmetega_autentimine|SSH võtmega autentimine]] on vajalik muuta ssh ühenduse seadistust, lubamaks parooliga autentimist.
 
: '''NB: Järgnevad muudatused asuvad sektsioonis''' '''''[ssh_connection]'''''''!'''
# connection to use when -c <connection_type> is not specified
  ssh_args=-o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r
  transport=paramiko
Kasutaja sedistusfaili eeldatav sisu pärast muudatusi
>>
  [defaults]
  transport=ssh
  transport=ssh
 
  hostfile=~/ansible/hosts
Lülitame sisse parooliga audentimise:
[ssh_connection]
 
  ssh_args=-o PasswordAuthentication=no -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r
>>
  ssh_args=-o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r
  ssh_args=-o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r


Tekitame grupi milles on kõik webserverid mida hallata tahame, antud juhul üksainus:
Tekitame kataloogi, milles hoida Ansible tööks olulisi faile ja samaaegselt ka sihtmasinate loendi faili.
 
  mkdir ~/ansible && touch ~/ansible/hosts
  vi /etc/ansible/hosts


Lisame sihtmasinate faili mõned kirjed:
[main:children]
webservers
  [webservers]
  [webservers]
  192.168.56.1
  192.168.56.1
Kirjete selgitus:
: '''[main:children]''' - Loogiline grupp, mis koosneb alamgruppidest
: '''webservers''' - Kõik grupi ''webservers'' masinad kuuluvad ka gruppi ''main''
: '''[webservers]''' - Loogiline grupp sihtmasinaid
: '''192.168.56.1''' - Sihtmasin mis kuulub gruppi ''webservers (ja main)''


=== Syntaks ===
===Süsteemide seadistuse kirjeldamine===
 
Loome kataloogi kus hoida seadistuse kirjelduse kogumeid ehk Ansible mõistes ''playbook'''e
=== Veebiserveri jaoks vajalike pakkide paigaldamine ===
mkdir ~/ansible/playbooks
 
====Põhiseaded====
Tekitame skriptide, ehk kohalikus keeles playbookide jaoks eraldi kausta ja selle sisse yml faili nimega apache.yml:
Tekitame põhifaili kus hoida üldist seadistust
 
touch ~/ansible/playbooks/main.yml
  mkdir /etc/ansible/playbooks
: '''NB: Näidete kopeerimisel tuleb olulist tähelepanu pöörata taanetele, kuna need on YAML'i süntaksi osa!'''<ref name="yaml_syntax">YAML syntax, http://docs.ansible.com/YAMLSyntax.html</ref><br/>
  vi apache.yml
Lisame sellese faili järgnevad read
 
---
Faili sisuks järgnev. Installime veebiserveri jaoks vajalikud komponendid:
- hosts: main
 
  user: student
  ---
  gather_facts: no
  - hosts: webservers
  sudo: yes
    user: student
  tasks:
    vars:
  - name: Copy MOTD
    gather_facts: False
    copy: src=~/ansible/files/motd.txt dest=/etc/motd backup=yes
    sudo: True
    tasks:
- include: ~/ansible/playbooks/apache.yml
    - name: install apache and php packages
      apt: pkg=$item state=latest force=yes
...
      with_items:
Kirjete selgitus:
      - apache2
: '''---''' - YAML'i süntaksis faili algus
      - php5
: '''- hosts: main''' - Selles failis määratletud seadistused rakendadatkse sihtmasinatele, mis kuuluvad gruppi ''main''
      - php5-cgi
: '''  user: student''' - Kasutajanimi, kellena sihtmasinasse sisse logitakse, ehk [[SSH]] kasutaja
      - php5-cli
: '''  gather_facts: no''' - Sihtmasinate kohta käiva info kogumise keelamine: käesoleva näite raames ei ole see vajalik ning säästab käivitamisel aega
      - php5-curl
: '''  sudo: yes''' - Seadistuse elluviimiseks eskaleerutakse juurkasutaja õigustesse
      - php5-ldap
: '''  tasks:''' - Sellele reale järgnevad seadistussammude kirjeldused
  ...
: '''  - name: Copy MOTD''' - Konkreetse seadistussammu nimi on ''Copy MOTD''
 
:: ''(Igal seadistussammul peab olema nimi ning sellele on võimalik soovi korral viidata)''
Käivitame playbooki:
: '''copy: src=~/ansible/files/motd.txt dest=/etc/motd backup=yes''' - Kopeerida kohaliku masina fail ''~/ansible/files/motd.txt'' sihtmasinasse, nimega ''/etc/motd'' ning varundada praegune sihtmasinas eksisteeriv fail<ref>copy module syntax, http://docs.ansible.com/copy_module.html</ref>
 
: '''- include: ~/ansible/playbooks/apache.yml''' - Impordi seadistusfail ''~/ansible/playbooks/apache.yml'' ja rakenda ka selles olevad seadistused
  ansible-playbook -k -K /etc/ansible/playbooks/apache.yml
: '''...''' - YAML'i süntaksis faili lõpp
 
====Seadistuse abifailid====
Sisestame ssh ja sudo parooli ning mõne aja pärast saame tagasisidet teostatud toimingute kohta:
Loome kataloogi kus hoida sihtmasinatesse kopeeritavaid faile
 
mkdir ~/ansible/files
  SSH password:  
Loome MOTD faili, mida sihtmasinatesse kopeerida
  sudo password:  
echo "This is the Ansible MOTD" > ~/ansible/files/motd.txt
  PLAY [webservers] *********************
====Veebiserveri seadistus====
  TASK: [install apache and php packages] *********************
Tekitame faili, milles hoida Apache veebiserveri seadistust
  changed: [192.168.56.1] => (item=apache2,php5,php5-cgi,php5-cli,php5-curl,php5-ldap)
touch ~/ansible/playbooks/apache.yml
  PLAY RECAP *********************
: '''NB: Näidete kopeerimisel tuleb olulist tähelepanu pöörata taanetele, kuna need on YAML'i süntaksi osa!'''<ref name="yaml_syntax"/>
  192.168.56.1                  : ok=1   changed=1    unreachable=0    failed=0
Lisame sellese faili järgnevad read
 
---
Kontrollime tulemust klientarvutis (192.168.56.1):
- hosts: webservers
 
  user: student
  dpkg -l|grep apache
  gather_facts: no
  sudo: yes
  tasks:
  - name: install apache and php packages
    apt: pkg=$item state=latest update_cache=yes
    with_items:
    - apache2
    - php5
    - php5-cli
    - php-pear
    - libapache2-mod-php5
    notify: restart apache
  - name: install PHP_CodeSniffer
    command: pear install PHP_CodeSniffer creates=/usr/share/php/data/PHP_CodeSniffer
  - name: set php memory limit
    ini_file: dest=/etc/php5/apache2/php.ini option=memory_limit value=512M section=PHP
  - name: enable ssl
    file: src=/etc/apache2/mods-available/$item dest=/etc/apache2/mods-enabled/$item state=link
    with_items:
    - ssl.conf
    - ssl.load
    notify: restart apache
  handlers:
  - name: restart apache
    service: name=apache2 enabled=yes state=restarted
...
Kirjete selgitus:
: '''---''' - YAML'i süntaksis faili algus
: '''- hosts: webservers''' - Selles failis määratletud seadistused rakendadatkse sihtmasinatele, mis kuuluvad gruppi ''webservers''
: '''  user: student''' - Kasutajanimi, kellena sihtmasinasse sisse logitakse, ehk [[SSH]] kasutaja
: '''  gather_facts: no''' - Sihtmasinate kohta käiva info kogumise keelamine: käesoleva näite raames ei ole see vajalik ning säästab käivitamisel aega
: '''  sudo: yes''' - Seadistuse elluviimiseks eskaleerutakse juurkasutaja õigustesse
: '''  tasks:''' - Sellele reale järgnevad seadistussammude kirjeldused
: '''  - name: install apache and php packages''' - Konkreetse seadistussammu nimi on ''install apache and php packages''
: '''    apt: pkg=$item state=latest update_cache=yes''' - Paigalda [[APT]]'iga muutujate loetelus olevate pakkide uusim versioon ning uuenda repositooriumite kirjeldused<ref>apt module syntax, http://docs.ansible.com/apt_module.html</ref>
: '''    with_items:''' - Muutujate loetelu algus
: '''    - apache2''' - Muutujate loetelu element ''apache2''
: '''    - php5''' - Muutujate loetelu element ''php5''
: '''    - php5-cli''' - Muutujate loetelu element ''php5-cli''
: '''    - php-pear''' - Muutujate loetelu element ''php-pear''
: '''    - libapache2-mod-php5''' - Muutujate loetelu element ''libapache2-mod-php5''
: '''    notify: restart apache''' - Teavita vajadusepõhist haldurit ''restart apache'' rakendamise nõudest
: '''  - name: install PHP_CodeSniffer''' - Konkreetse seadistussammu nimi on ''install PHP_CodeSniffer''
: '''    command: pear install PHP_CodeSniffer creates=/usr/share/php/data/PHP_CodeSniffer''' - Käivita sihtmasinas käsk ''pear install PHP_CodeSniffer'', ainult juhul kui viidatud faili/kataloogi pole olemas<ref>command module syntax, http://docs.ansible.com/command_module.html</ref>
: '''  - name: set php memory limit''' - Konkreetse seadistussammu nimi on ''set php memory limit''
: '''    ini_file: dest=/etc/php5/apache2/php.ini option=memory_limit value=512M section=PHP''' - Seadista ''.ini'' tüüpi failis ''/etc/php5/apache2/php.ini'' muutuja ''memory_limit''väärtuseks ''512M''<ref>ini_file module syntax, http://docs.ansible.com/ini_file_module.html</ref>
: '''  - name: enable ssl''' Konkreetse seadistussammu nimi on ''enable ssl''
: '''   file: src=/etc/apache2/mods-available/$item dest=/etc/apache2/mods-enabled/$item state=link''' - Loo muutuja väärtusega failist kataloogis ''/etc/apache2/mods-available/'', kataloogi ''/etc/apache2/mods-enabled/'' muutuja väärtusega koopia, mille tüübiks on sümboolne link
: '''    with_items:''' - Muutujate loetelu algus
: '''    - ssl.conf''' - Muutujate loetelu element ''ssl.conf''
: '''    - ssl.load''' - Muutujate loetelu element ''ssl.load''
: '''    notify: restart apache''' - Teavita vajadusepõhist haldurit ''restart apache'' rakendamise nõudest
: '''  handlers:''' - Vajadusepõhiste haldurite algus
: ''' - name: restart apache''' - Konkreetse halduri nimi on ''restart apache''
: '''    service: name=apache2 enabled=yes state=restarted''' - Teenus, nimega ''apache2'' tuleb alglaadimisel käivitada ning hetkel peab tema staatus ''taaskäivitunud''<ref>service module syntax, http://docs.ansible.com/service_module.html</ref>
: '''...''' - YAML'i süntaksis faili lõpp


ii  apache2                                    2.2.22-1ubuntu1.4                      Apache HTTP Server metapackage
===Süsteemide seadistamine===
ii  apache2-mpm-worker                          2.2.22-1ubuntu1.4                      Apache HTTP Server - high speed threaded model
====Eeldused====
  ii  apache2-utils                              2.2.22-1ubuntu1.4                      utility programs for webservers
* Sihtmasinas on töötav [[SSH]] server
ii  apache2.2-bin                              2.2.22-1ubuntu1.4                      Apache HTTP Server common binary files
* ''Playbook'''is määratud kasutajal on lubatud teha [[SSH]] ühendusi sihtmasinasse
ii  apache2.2-common                            2.2.22-1ubuntu1.4                      Apache HTTP Server common files
* Kui seadistamine nõuab juurkasutaja õigustesse eskaleerimist, on ''playbook''is määratud kasutajal lubatud seda teha
   
====Playbook'ide rakendamine====
Seadistusi rakendatakse käsuga '''ansible-playbook'''.<br/>
Käsu täiendavatest argumentidest saab [[Linux]]'i käsule omaselt ülevaate ''--help'' argumendiga.
  ansible-playbook --help
Olulisemad argumendid:
* '''-k''' - Küsi [[SSH]] ühenduse loomiseks parooli
* '''-K''' - Küsi ''sudo'' käsu jaoks parooli
: '''NB: Kasutades Ansible't ilma võtmega autentimiseta, on vajalik paigaldada pakk ''sshpass''!'''
  sudo apt-get install sshpass


  dpkg -l|grep php5
Rakendame kõigi sihtmasinate peal põhiseadistuse (ja kõik pärinevad lisaseadistused), kasutades parooliga autentimist ning andes ette sudo parooli.
  ansible-playbook -k -K ~/ansible/playbooks/main.yml
: '''NB: Seadistusfailide ajalugu ja muudatusi on (rangelt) soovituslik hallata versioonihaldussüteemiga ([[SVN]], [[CVS]], [[Git]] või [[Mercurial]])!


ii  php5                                        5.3.10-1ubuntu3.9                      server-side, HTML-embedded scripting language (metapackage)
==Kokkuvõte==
ii  php5-cgi                                    5.3.10-1ubuntu3.9                      server-side, HTML-embedded scripting language (CGI binary)
Ansible hoomatavus temaga väheseid kogemusi omavale isikule ning sihtarvutisse agendi paigaldamise vajaduse puudumine võimaldavad vähese vaevaga rakendada keskset haldust ka olukordades, milles tema konkurentide kasutamine ratsionaalsena ei tundu.
ii  php5-cli                                    5.3.10-1ubuntu3.9                      command-line interpreter for the php5 scripting language
ii  php5-common                                5.3.10-1ubuntu3.9                      Common files for packages built from the php5 source
ii  php5-curl                                  5.3.10-1ubuntu3.9                      CURL module for php5
ii  php5-ldap                                  5.3.10-1ubuntu3.9                      LDAP module for php5


=== Konfifaili lisamine/muutmine ===
;Silver Vesi
:Olles analüüsinud Ansiblet ja tema alternatiive pean tõdema, et väiksemal skaalal ja triviaalsete muudatuste tegemiseks võtaksin kasutusele Ansible, samas kui suuremas võrgus kus on mitmeid erinevaid operatsioonisüsteeme, kasutaksin pigem Puppetit. Ansiblet on lihtsam kasutada ja üles seada, tema süntaks on märksa lihtsam, aga Puppetil on taga kommuun mille toel on juurde arendatud meeletult mooduleid millega kergema vaevaga automatiseerida ka keerukamaid toiminguid.
;Peeter Tomusk
:Ansible kasutamine on süsteemiadministraatorile mugav ja omane, kuna sarnaneb vägagi skriptide kirjutamisele, seetõttu on ka implementeerimise õpikõver [[Puppet]]'i ja [[Chef]]'iga võrreldes oluliselt väiksem. Rakendades olemasolevaid lahendusi ([[SSH]]) tundub Ansible baasil keskhalduse kasutuselevõtmine loogilise jätkuna seniste haldusmeetodite järel ning võimaldab süsteemi haldavatel isikutel enda oskustepagasit orgaaniliselt täiendada. Autor soovitab kõigil, kes ei ole enda süsteemide keskset haldust teostavat tarkvaralahendust veel valinud, proovida esmalt Ansible't.


== Kasulikk materjale ==
== Kasulikke materjale ==
* https://www.youtube.com/watch?v=PDRdCqFp2sY Continuous Deployment with Ansible
* https://www.youtube.com/watch?v=PDRdCqFp2sY Continuous Deployment with Ansible
* http://www.ansibleworks.com/tech/ How Ansible Works
* http://www.ansibleworks.com/tech/ How Ansible Works
* http://docs.ansible.com/modules.html Documentation
* http://docs.ansible.com/modules.html Documentation
==Kasutatud kirjandus==
==Kasutatud kirjandus==
<references />
<references />

Latest revision as of 18:30, 13 January 2014

Tutvustus

Ansible on vabavaraline (GPL)[1] konfiguratsiooni ja seadistuse haldamise tarkvaraplatvorm.[2]

Toetatud on Linux ja teised Unixilaadsed operatsioonisüsteemid, Windows servermasinana toetatud ei ole.[3] Konfiguratsiooni hoidmiseks kasutatakse YAML'i faile mis võivad olla omavahel hierarhiliselt seotud.[4] Ansible on kirjutatud Python'is ning seadistuse vahendamiseks kasutatakse SSH protokolli (Python'i paramiko teeki või OS'i ssh käsku rakendades). Hallatava masina eelduseks on sissetulevate SSH ühenduste lubamine ja Python'i interpretaatori olemasolu (vähemalt versioon 2.4), eraldiseisvat klienti või agenti ei ole.[3]

Tarkvara loojaks on Michael DeHaan, kes eelnevalt on loonud Cobbler'i ning olnud Puppet'i arendaja.[5]

Nimetus "Ansible" on pärit O.S.Card'i raamatust Enderi mäng, kus kirjeldatakse samanimelist valguse kiirusest kiiremat suhtlusprotokolli.[6]

Ansible'ile on võimalik osta ka ärikliendi tuge.[7]

Erinevused levinud alternatiividega

Ansible peamine erinevus oma konkurentidega Puppet ja Chef on agendi kui sellise puudumine. Klientide seadistamiseks kasutatakse juba (enamus juhtudel) olemasolevaid vahendeid - SSH ja Python. [8]

SaltStack on Ansible'ga vägagi sarnane, ent erineb klientidega suhtlemise osas, kasutades 0mq'd ning täiendades seda enda poolt AES krüpteeringuga (milles võib aeg-ajalt esineda vigasid[9]). Ansible poolt kasutatav SSH ei lisa süsteemi täiendavaid ründevektoreid.[10]

Neljast konkurendist on Ansible'l hetkel kõige rohkem erinevaid autoreid, mis annab tunnistust tervest ja aktiivsest arendajaskonnast.[11][12][13][14] Ansible ajakohasusest annab aimu ka Ubuntu repositooriumist kättesaadavate pakkide võrdlus, milles praegusele (12.04) LTS versioonile on GitHub'is projekti enda uusima versiooniga võrreldes ajakohane versioon saadaval vaid Ansible'le. [15] [16] [17] [18] [19] [20]

Kasutamine

Paigaldamine

Ansible paigaldamiseks on võimalik tõmmata see otse projekti GitHub'i repost või paigaldada operatsioonisüüsteemi pakihaldustarkvara abil.[3]

Ansible paigaldamine APT'i abil
 sudo apt-get install ansible
Versiooni (ja paigaldatuse kontroll)
 ansible --version

Esmane seadistamine

Süsteemne seadistusfail on /etc/ansible/ansible.cfg, kuid iga kasutaja võib isiklike seadete hoidmiseks tekitada faili .ansible.cfg enda kodukataloogi. Kasutaja kodukataloogis olevad seaded on süsteemse seadistusfaili suhtes ülemuslikud.[21]

Need muudatused on (rangelt) soovituslik sisse viia kas kasutaja seadistusfailis või süsteemses seadistusfailis.

NB: Järgnevad muudatused asuvad sektsioonis [defaults]''!

Seadistatavaid sihtmasinaid kirjeldava faili teekonna muutmine

hostfile=~/ansible/hosts

Kasutatava protokolli muutmine SSH'ks et vähendada turvariske.[10] Autori isikliku kogemuse põhjal on Python'i paramiko teek kapriisne ning ei pruugi sobida keerukamateks lahendusteks.

transport=ssh

Juhul kui teil ei ole seadistatud SSH võtmega autentimine on vajalik muuta ssh ühenduse seadistust, lubamaks parooliga autentimist.

NB: Järgnevad muudatused asuvad sektsioonis [ssh_connection]''!
 ssh_args=-o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r

Kasutaja sedistusfaili eeldatav sisu pärast muudatusi

[defaults]
transport=ssh
hostfile=~/ansible/hosts
[ssh_connection]
ssh_args=-o PasswordAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r

Tekitame kataloogi, milles hoida Ansible tööks olulisi faile ja samaaegselt ka sihtmasinate loendi faili.

mkdir ~/ansible && touch ~/ansible/hosts

Lisame sihtmasinate faili mõned kirjed:

[main:children]
webservers

[webservers]
192.168.56.1

Kirjete selgitus:

[main:children] - Loogiline grupp, mis koosneb alamgruppidest
webservers - Kõik grupi webservers masinad kuuluvad ka gruppi main
[webservers] - Loogiline grupp sihtmasinaid
192.168.56.1 - Sihtmasin mis kuulub gruppi webservers (ja main)

Süsteemide seadistuse kirjeldamine

Loome kataloogi kus hoida seadistuse kirjelduse kogumeid ehk Ansible mõistes playbook'e

mkdir ~/ansible/playbooks

Põhiseaded

Tekitame põhifaili kus hoida üldist seadistust

touch ~/ansible/playbooks/main.yml
NB: Näidete kopeerimisel tuleb olulist tähelepanu pöörata taanetele, kuna need on YAML'i süntaksi osa![22]

Lisame sellese faili järgnevad read

---
- hosts: main
  user: student
  gather_facts: no
  sudo: yes
  tasks:
  - name: Copy MOTD
    copy: src=~/ansible/files/motd.txt dest=/etc/motd backup=yes

- include: ~/ansible/playbooks/apache.yml

...

Kirjete selgitus:

--- - YAML'i süntaksis faili algus
- hosts: main - Selles failis määratletud seadistused rakendadatkse sihtmasinatele, mis kuuluvad gruppi main
user: student - Kasutajanimi, kellena sihtmasinasse sisse logitakse, ehk SSH kasutaja
gather_facts: no - Sihtmasinate kohta käiva info kogumise keelamine: käesoleva näite raames ei ole see vajalik ning säästab käivitamisel aega
sudo: yes - Seadistuse elluviimiseks eskaleerutakse juurkasutaja õigustesse
tasks: - Sellele reale järgnevad seadistussammude kirjeldused
- name: Copy MOTD - Konkreetse seadistussammu nimi on Copy MOTD
(Igal seadistussammul peab olema nimi ning sellele on võimalik soovi korral viidata)
copy: src=~/ansible/files/motd.txt dest=/etc/motd backup=yes - Kopeerida kohaliku masina fail ~/ansible/files/motd.txt sihtmasinasse, nimega /etc/motd ning varundada praegune sihtmasinas eksisteeriv fail[23]
- include: ~/ansible/playbooks/apache.yml - Impordi seadistusfail ~/ansible/playbooks/apache.yml ja rakenda ka selles olevad seadistused
... - YAML'i süntaksis faili lõpp

Seadistuse abifailid

Loome kataloogi kus hoida sihtmasinatesse kopeeritavaid faile

mkdir ~/ansible/files

Loome MOTD faili, mida sihtmasinatesse kopeerida

echo "This is the Ansible MOTD" > ~/ansible/files/motd.txt

Veebiserveri seadistus

Tekitame faili, milles hoida Apache veebiserveri seadistust

touch ~/ansible/playbooks/apache.yml
NB: Näidete kopeerimisel tuleb olulist tähelepanu pöörata taanetele, kuna need on YAML'i süntaksi osa![22]

Lisame sellese faili järgnevad read

---
- hosts: webservers
  user: student
  gather_facts: no
  sudo: yes
  tasks:
  - name: install apache and php packages
    apt: pkg=$item state=latest update_cache=yes
    with_items:
    - apache2
    - php5
    - php5-cli
    - php-pear
    - libapache2-mod-php5
    notify: restart apache
  - name: install PHP_CodeSniffer
    command: pear install PHP_CodeSniffer creates=/usr/share/php/data/PHP_CodeSniffer
  - name: set php memory limit
    ini_file: dest=/etc/php5/apache2/php.ini option=memory_limit value=512M section=PHP
  - name: enable ssl
    file: src=/etc/apache2/mods-available/$item dest=/etc/apache2/mods-enabled/$item state=link
    with_items:
    - ssl.conf
    - ssl.load
    notify: restart apache

  handlers:
  - name: restart apache
    service: name=apache2 enabled=yes state=restarted 

...

Kirjete selgitus:

--- - YAML'i süntaksis faili algus
- hosts: webservers - Selles failis määratletud seadistused rakendadatkse sihtmasinatele, mis kuuluvad gruppi webservers
user: student - Kasutajanimi, kellena sihtmasinasse sisse logitakse, ehk SSH kasutaja
gather_facts: no - Sihtmasinate kohta käiva info kogumise keelamine: käesoleva näite raames ei ole see vajalik ning säästab käivitamisel aega
sudo: yes - Seadistuse elluviimiseks eskaleerutakse juurkasutaja õigustesse
tasks: - Sellele reale järgnevad seadistussammude kirjeldused
- name: install apache and php packages - Konkreetse seadistussammu nimi on install apache and php packages
apt: pkg=$item state=latest update_cache=yes - Paigalda APT'iga muutujate loetelus olevate pakkide uusim versioon ning uuenda repositooriumite kirjeldused[24]
with_items: - Muutujate loetelu algus
- apache2 - Muutujate loetelu element apache2
- php5 - Muutujate loetelu element php5
- php5-cli - Muutujate loetelu element php5-cli
- php-pear - Muutujate loetelu element php-pear
- libapache2-mod-php5 - Muutujate loetelu element libapache2-mod-php5
notify: restart apache - Teavita vajadusepõhist haldurit restart apache rakendamise nõudest
- name: install PHP_CodeSniffer - Konkreetse seadistussammu nimi on install PHP_CodeSniffer
command: pear install PHP_CodeSniffer creates=/usr/share/php/data/PHP_CodeSniffer - Käivita sihtmasinas käsk pear install PHP_CodeSniffer, ainult juhul kui viidatud faili/kataloogi pole olemas[25]
- name: set php memory limit - Konkreetse seadistussammu nimi on set php memory limit
ini_file: dest=/etc/php5/apache2/php.ini option=memory_limit value=512M section=PHP - Seadista .ini tüüpi failis /etc/php5/apache2/php.ini muutuja memory_limitväärtuseks 512M[26]
- name: enable ssl Konkreetse seadistussammu nimi on enable ssl
file: src=/etc/apache2/mods-available/$item dest=/etc/apache2/mods-enabled/$item state=link - Loo muutuja väärtusega failist kataloogis /etc/apache2/mods-available/, kataloogi /etc/apache2/mods-enabled/ muutuja väärtusega koopia, mille tüübiks on sümboolne link
with_items: - Muutujate loetelu algus
- ssl.conf - Muutujate loetelu element ssl.conf
- ssl.load - Muutujate loetelu element ssl.load
notify: restart apache - Teavita vajadusepõhist haldurit restart apache rakendamise nõudest
handlers: - Vajadusepõhiste haldurite algus
- name: restart apache - Konkreetse halduri nimi on restart apache
service: name=apache2 enabled=yes state=restarted - Teenus, nimega apache2 tuleb alglaadimisel käivitada ning hetkel peab tema staatus taaskäivitunud[27]
... - YAML'i süntaksis faili lõpp

Süsteemide seadistamine

Eeldused

  • Sihtmasinas on töötav SSH server
  • Playbook'is määratud kasutajal on lubatud teha SSH ühendusi sihtmasinasse
  • Kui seadistamine nõuab juurkasutaja õigustesse eskaleerimist, on playbookis määratud kasutajal lubatud seda teha

Playbook'ide rakendamine

Seadistusi rakendatakse käsuga ansible-playbook.
Käsu täiendavatest argumentidest saab Linux'i käsule omaselt ülevaate --help argumendiga.

ansible-playbook --help

Olulisemad argumendid:

  • -k - Küsi SSH ühenduse loomiseks parooli
  • -K - Küsi sudo käsu jaoks parooli
NB: Kasutades Ansible't ilma võtmega autentimiseta, on vajalik paigaldada pakk sshpass!
sudo apt-get install sshpass

Rakendame kõigi sihtmasinate peal põhiseadistuse (ja kõik pärinevad lisaseadistused), kasutades parooliga autentimist ning andes ette sudo parooli.

ansible-playbook -k -K ~/ansible/playbooks/main.yml
NB: Seadistusfailide ajalugu ja muudatusi on (rangelt) soovituslik hallata versioonihaldussüteemiga (SVN, CVS, Git või Mercurial)!

Kokkuvõte

Ansible hoomatavus temaga väheseid kogemusi omavale isikule ning sihtarvutisse agendi paigaldamise vajaduse puudumine võimaldavad vähese vaevaga rakendada keskset haldust ka olukordades, milles tema konkurentide kasutamine ratsionaalsena ei tundu.

Silver Vesi
Olles analüüsinud Ansiblet ja tema alternatiive pean tõdema, et väiksemal skaalal ja triviaalsete muudatuste tegemiseks võtaksin kasutusele Ansible, samas kui suuremas võrgus kus on mitmeid erinevaid operatsioonisüsteeme, kasutaksin pigem Puppetit. Ansiblet on lihtsam kasutada ja üles seada, tema süntaks on märksa lihtsam, aga Puppetil on taga kommuun mille toel on juurde arendatud meeletult mooduleid millega kergema vaevaga automatiseerida ka keerukamaid toiminguid.
Peeter Tomusk
Ansible kasutamine on süsteemiadministraatorile mugav ja omane, kuna sarnaneb vägagi skriptide kirjutamisele, seetõttu on ka implementeerimise õpikõver Puppet'i ja Chef'iga võrreldes oluliselt väiksem. Rakendades olemasolevaid lahendusi (SSH) tundub Ansible baasil keskhalduse kasutuselevõtmine loogilise jätkuna seniste haldusmeetodite järel ning võimaldab süsteemi haldavatel isikutel enda oskustepagasit orgaaniliselt täiendada. Autor soovitab kõigil, kes ei ole enda süsteemide keskset haldust teostavat tarkvaralahendust veel valinud, proovida esmalt Ansible't.

Kasulikke materjale

Kasutatud kirjandus

  1. Ansible license in GitHub, https://github.com/ansible/ansible/blob/devel/COPYING
  2. Ansible: CM, Deployment, and Ad-hoc Task Execution All in One, http://server.dzone.com/articles/ansible-cm-deployment-and-ad
  3. 3.0 3.1 3.2 Ansible installation manual, http://docs.ansible.com/intro_installation.html
  4. Ansible Playbooks, http://docs.ansible.com/playbooks_intro.html
  5. Michael DeHaan's bio, http://investing.businessweek.com/research/stocks/private/person.asp?personId=233466314&privcapId=233465248&previousCapId=233465248&previousTitle=AnsibleWorks,%20Inc
  6. Why is it called Ansible, http://www.ansibleworks.com/faq/
  7. AnsibleWorks homepage, http://www.ansibleworks.com/
  8. Review: Puppet vs. Chef vs. Ansible vs. Salt, http://www.infoworld.com/d/data-center/review-puppet-vs-chef-vs-ansible-vs-salt-231308?page=0,1
  9. SaltStack AES bug, https://github.com/saltstack/salt/commit/5dd304276ba5745ec21fc1e6686a0b28da29e6fc
  10. 10.0 10.1 Ansible and Salt: A detailed comparison, http://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/
  11. Ansible pulse, https://github.com/ansible/ansible/pulse/monthly
  12. Puppet pulse, https://github.com/puppetlabs/puppet/pulse/monthly
  13. Chef pulse, https://github.com/opscode/chef/pulse/monthly
  14. SaltStack pulse, https://github.com/saltstack/salt/pulse/monthly
  15. Ansible GitHub releases, https://github.com/ansible/ansible/releases
  16. Puppet GitHub releases, https://github.com/puppetlabs/puppet/releases
  17. Chef GitHub releases, https://github.com/opscode/chef/releases
  18. SaltStack GitHub releases, https://github.com/saltstack/salt/releases
  19. Ansible package for Ubuntu (precise), http://packages.ubuntu.com/precise-backports/ansible
  20. Puppet package for Ubuntu (precise), http://packages.ubuntu.com/precise-updates/puppet
  21. ansible-playbook man page, http://linux.die.net/man/1/ansible-playbook
  22. 22.0 22.1 YAML syntax, http://docs.ansible.com/YAMLSyntax.html
  23. copy module syntax, http://docs.ansible.com/copy_module.html
  24. apt module syntax, http://docs.ansible.com/apt_module.html
  25. command module syntax, http://docs.ansible.com/command_module.html
  26. ini_file module syntax, http://docs.ansible.com/ini_file_module.html
  27. service module syntax, http://docs.ansible.com/service_module.html

Autorid

Silver Vesi AK31
Peeter Tomusk AK41