Ansible Tutorial za početnike: priručnik, naredbe i primjer

Što je Ansible?

Ansible je alat otvorenog koda za automatizaciju i orkestraciju za pružanje softvera, upravljanje konfiguracijom i implementaciju softvera. Ansible može lako pokretati i konfigurirati sustave slične Unixu Windows sustavi za pružanje infrastrukture kao koda. Sadrži vlastiti deklarativni programski jezik za konfiguraciju i upravljanje sustavom.

Ansible je popularan zbog svoje jednostavnosti instalacije, lakoće korištenja što se tiče povezivanja s klijentima, nedostatka agenta za Ansible klijente i mnoštva vještina. Djeluje spajanjem putem SSH prema klijentima, tako da ne treba posebnog agenta na strani klijenta, a guranjem modula klijentima, moduli se zatim izvršavaju lokalno na strani klijenta, a izlaz se vraća natrag na Ansible poslužitelj.

Budući da koristi SSH, može se vrlo lako povezati s klijentima pomoću SSH-ključeva, pojednostavljujući cijeli proces. Pojedinosti o klijentima, kao što su imena hostova ili IP adrese i SSH priključci, pohranjuju se u datoteke koje se nazivaju datoteke inventara. Nakon što ste kreirali datoteku inventara i popunili je, ansible je može koristiti.

Zašto koristiti Ansible?

Evo nekoliko važnih prednosti/prednosti korištenja Ansiblea

  • Jedna od najznačajnijih prednosti Ansiblea je ta što ga svi mogu besplatno koristiti.
  • Za instalaciju i korištenje Ansiblea nisu potrebne nikakve posebne vještine administratora sustava, a službena dokumentacija je vrlo iscrpna.
  • Njegova modularnost u pogledu dodataka, modula, inventara i knjiga za igru ​​čini Ansible savršenim suputnikom za orkestriranje velikih okruženja.
  • Ansible je vrlo lagan i dosljedan i nema ograničenja u pogledu operativnog sustava ili temeljnog hardvera.
  • Također je vrlo siguran zbog svojih mogućnosti bez agenta i zbog upotrebe sigurnosnih značajki OpenSSH.
  • Još jedna prednost koja potiče usvajanje Ansiblea je njegova glatka krivulja učenja određena opsežnom dokumentacijom i lakom za učenje strukturom i konfiguracijom.

Povijest Ansiblea

Ovdje su važne kopnene oznake iz povijesti ansiblea:

  • U veljači 2012. započeo je projekt Ansible. Prvi ga je razvio Michael DeHaan, tvorac Cobbler and Func, Fedora Unified Network Controller.
  • U početku nazvana AnsibleWorks Inc, tvrtku koja financira ansible alat kupila je 2015. RedHat, a kasnije je, zajedno s RedHatom, prešla pod kišobran IBM.
  • U sadašnjosti, Ansible je uključen u distribucije kao što su Fedora Linux, RHEL, Centos i Oracle Linux.

Važni pojmovi koji se koriste u Ansibleu

  • Ansible poslužitelj

    Stroj na kojem je instaliran Ansible i s kojeg će se pokretati svi zadaci i knjige

  • Moduli

    U osnovi, modul je naredba ili skup sličnih Ansible naredbi namijenjenih izvršavanju na strani klijenta

  • Zadatak

    Zadatak je dio koji se sastoji od jedne procedure koju treba izvršiti

  • Uloga

    Način organiziranja zadataka i srodnih datoteka koje se kasnije pozivaju u priručniku

  • Činjenica

    Informacije dohvaćene iz klijentskog sustava iz globalnih varijabli operacijom prikupljanja činjenica

  • Popis

    Datoteka koja sadrži podatke o ansible klijentskim poslužiteljima. U kasnijim primjerima definirana kao host datoteka

  • Igrati

    Izvođenje knjige za igru

  • sekundant

    Zadatak koji se poziva samo ako je prisutan obavijestitelj

  • Obavijestilac

    Odjeljak pripisan zadatku koji poziva rukovatelja ako se izlaz promijeni

  • Pojam

    Ime postavljeno na zadatak koji se kasnije može koristiti za izdavanje samo tog specifičnog zadatka ili grupe zadataka.

Ansible instalacija u Linuxu

Nakon što ste usporedili i odvagnuli svoje opcije i odlučili se za Ansible, sljedeći korak je da ga instalirate na svoj sustav. Proći ćemo kroz korake instalacije na različite načine Linux distribucije, one najpopularnije, u sljedećem malom vodiču.

Instalirajte Ansible na Centos/RedHat sustave

Korak 1) Instalirajte EPEL repo

[root@ansible-server ~]# sudo yum install epel-release

Korak 2) Instalirajte ansible paket

[root@ansible-server ~]# sudo  yum install -y ansible

Instalirajte Ansible na Centos/RedHat sustave

Instalirajte ansible na Ubuntu/Debian sustavi

Korak 1) Izvršite ažuriranje paketa

$ sudo apt update

Korak 2) Instalirajte paket software-properties-common

$ sudo apt install software-properties-common

Korak 3) Instalirajte ansible osobnu arhivu paketa

$ sudo apt-add-repository ppa:ansible/ansible

Korak 4) Instalirajte ansible

$ sudo apt update
$ sudo apt install ansible

Anzibilne ad-hoc naredbe

Jedan od najjednostavnijih načina na koji se Ansible može koristiti je korištenje ad-hoc naredbi. Oni se mogu koristiti kada želite izdati neke naredbe na poslužitelju ili grupi poslužitelja. Ad-hoc naredbe se ne pohranjuju za buduću upotrebu, već predstavljaju brz način interakcije sa željenim poslužiteljima.

Za ovaj Ansible vodič bit će konfigurirana jednostavna datoteka hostova s ​​dva poslužitelja koja sadrži host1 i host2.

Možete osigurati da su hostovi dostupni s ansible poslužitelja izdavanjem naredbe ping na svim hostovima.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible ad-hoc naredbe

Objašnjenje:

  1. Status naredbe, u ovom slučaju USPJEH
  2. Host na kojem je pokrenuta naredba
  3. Naredba izdana putem parametra -m, u ovom slučaju ping
  4. S parametrom -i možete pokazati na datoteku hosts.


Istu naredbu možete izdati samo na određenom hostu ako je potrebno.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible ad-hoc naredbe

Objašnjenje:

  1. Parametar Limit može se koristiti za izdavanje naredbi samo na određenim hostovima u datoteci hosta
  2. Naziv hosta kako je definirano u datoteci inventara

Ako trebate brzo kopirati datoteku na više odredišta, možete koristiti modul za kopiranje u ansibleu koji koristi SCP. Dakle, naredba i njen izlaz izgledaju ovako:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Ansible ad-hoc naredbe

Objašnjenje:

  1. Definiran modul kopiranja
  2. Argumenti modula, u ovom slučaju, su izvorni apsolutni put i odredišni apsolutni put.
  3. Ansible izlaz naredbe odražava uspjeh naredbe kopiranja i druge pojedinosti poput sha1 ili md5 kontrolnih zbrojeva za provjeru integriteta datoteke i metapodataka kao što su vlasnik, veličina ili dopuštenja. Lako je imati paket instaliran na gomili poslužitelja. Ansible ima nekoliko modula koji komuniciraju s korištenim instalaterima, poput yum, apt, dnf itd.

U sljedećem primjeru ćete saznati kako instalirati paket preko yum modula na dva Centos hosta.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible ad-hoc naredbe

Objašnjenje:

  1. Yum modul se koristi u ovom primjeru
  2. Definira argumente modula, au ovom slučaju ćete odabrati naziv paketa i njegovo stanje. Na primjer, ako stanje ne postoji, paket će se pretražiti i ako se pronađe, ukloniti
  3. Kada je obojen žutom bojom, vidjet ćete izlaz naredbe ansible s promijenjenim stanjem, što u ovom slučaju znači da je paket pronađen i instaliran.
  4. Status naredbe yum install izdane putem ansible-a. U ovom slučaju instaliran je paket ncdu.x86_64 0:1.14-1.el7.

Naravno, sve opcije yum instalacijskog programa mogu se koristiti putem ansiblea, uključujući ažuriranje, instalaciju, najnoviju verziju ili uklanjanje.

U donjem primjeru izdana je ista naredba za uklanjanje prethodno instaliranog ncdu paketa.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible ad-hoc naredbe

Objašnjenje:

  1. Izlaz naredbe yum pokazuje da je paket uklonjen.

Još jedna korisna i bitna značajka koju ansible koristi za interakciju s klijentovim poslužiteljem je prikupljanje nekih činjenica o sustavu. Dakle, dohvaća informacije o hardveru, softveru i verzijama iz sustava i pohranjuje svaku vrijednost u varijablu koja se kasnije može koristiti.

Ako trebate detaljne informacije o sustavima koje treba modificirati putem ansiblea, možete upotrijebiti sljedeću naredbu. Modul za postavljanje prikuplja činjenice iz varijabli sustava.

Ansible ad-hoc naredbe

Ansible Playbooks

Ansible Playbooks su način slanja naredbi udaljenim sustavima putem skripti. Ansible playbooks se koriste za konfiguriranje okruženja složenih sustava kako bi se povećala fleksibilnost izvršavanjem skripte na jednom ili više sustava. Ansible playbooks više su konfiguracijski nego programski jezik.

Ansible playbook naredbe koriste YAML format, tako da nije potrebno puno sintakse, ali uvlačenje se mora poštivati. Kao što naziv kaže, playbook je zbirka drama. Putem priručnika možete odrediti određene uloge nekim domaćinima i druge uloge drugim domaćinima. Na taj način možete orkestrirati više poslužitelja u vrlo različitim scenarijima, sve u jednom priručniku.

Da bismo sve pojedinosti imali precizne prije nastavka s primjerima Ansible playbooka, prvo moramo definirati zadatak. Ovo je sučelje za ansible module za uloge i playbooks.

Sada naučimo Ansible playbook kroz primjer s jednom playbook-om s jednom igrom, koji sadrži više zadataka kao što je prikazano u nastavku:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Ansible Playbooks

U gornjem primjeru priručnika za Ansible, grupa1 hostova u datoteci hosta ciljana je za instalaciju paketa lldpad pomoću modula yum, a nakon toga se servis lldpad stvoren nakon instalacije pokreće pomoću servisnog modula koji se uglavnom koristi za interakciju sa systemd ansamblom.

Objašnjenje:

  1. Grupa hostova na kojima će se izvoditi playbook
  2. Modul Yum koristi se u ovom zadatku za instalaciju lldpada
  3. Servisni modul se koristi za provjeru radi li usluga nakon instalacije

Svaki ansible playbook radi s datotekom inventara. Datoteka inventara sadrži popis poslužitelja podijeljenih u grupe radi bolje kontrole pojedinosti kao što su IP adresa i SSH port za svaki host.

Datoteka inventara koju možete koristiti za ovaj primjer knjige Ansible izgleda ovako. Postoje dvije grupe, pod nazivom group1 i group2, od kojih svaka sadrži host1 i host2.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Ansible Playbooks

Objašnjenje:

  1. Naziv grupe
  2. Naziv glavnog računala, s IP adresom i ssh portom, u ovom slučaju zadanim, 22.

Sljedeći je još jedan koristan primjer Ansible playbooka koji ovaj put sadrži dvije igre za dva domaćina. Za prvu grupu hostova, grupu1, selinux će biti omogućen. Ako je omogućeno, tada će se pojaviti poruka na zaslonu glavnog računala.

Za drugu grupu hostova, paket httpd bit će instaliran samo ako je ansible_os_family RedHat, a ansible_system_vendor HP.

Ansible_os_family i ansible_system_vendor varijable su prikupljene s opcijom gather_facts i mogu se koristiti kao u ovom uvjetnom primjeru.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Ansible Playbooks

Objašnjenje:

  1. Primjer odredbe kada, u ovom slučaju, kada je tip OS-a Debian. Varijabla ansible_os_family prikuplja se putem funkcije gather_facts.
  2. Izlaz zadatka je registriran za buduću upotrebu, sa svojim imenom enable_selinux
  3. Još jedan primjer odredbe kada. U tom slučaju će se prikazati poruka za korisnika glavnog računala ako je SELinux doista prije bio omogućen.
  4. Još jedan primjer kada se klauzula sastoji od dva pravila

Osim zadataka, postoje i neki posebni zadaci koji se zovu rukovatelji. Rukovatelji moraju imati jedinstveno ime u cijelom priručniku. Oni rade na isti način kao obični zadatak, ali rukovatelj može biti obaviješten putem obavijesti.

Ako rukovatelj nije obaviješten tijekom pokretanja priručnika, neće se pokrenuti. Međutim, ako više od jednog zadatka obavijesti rukovatelja, to će se pokrenuti samo jednom nakon završetka svih zadataka.

U donjem primjeru možete vidjeti kako određeni zadatak ima odjeljak obavijesti koji poziva drugi zadatak. Ako se izlaz prvog zadatka promijeni, tada će biti pozvan zadatak rukovatelja. Najbolji primjer je promijeniti konfiguracijsku datoteku i nakon toga ponovno pokrenuti tu specifičnu uslugu.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

U ovom slučaju, ako je prvi zadatak, “sshd config file modify port” promijenjen, što znači da ako port nije 28675 na prvom mjestu, tada će biti izmijenjen i zadatak će obavijestiti rukovatelja s istim imenom da se pokrene , i ponovno će pokrenuti sshd uslugu.

Ansible Playbooks

Objašnjenje:

  1. Primjer dojavljivača
  2. Primjer rukovatelja

Anzibilne uloge

Kada se bavite opsežnim igrama, lakše je podijeliti zadatke u uloge. Ovo također pomaže u ponovnom korištenju uloga u budućnosti. Uloge su zbirka zadataka, koji se mogu premještati iz jednog playbooka u drugi, mogu se pokretati neovisno, ali samo kroz playbook file.

Uloge su pohranjene u zasebnim direktorijima i imaju posebnu strukturu direktorija.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

Datoteka yaml u direktoriju defaults sadrži popis zadanih varijabli koje će se koristiti zajedno s priručnikom. Direktorij rukovatelja koristi se za pohranu rukovatelja. Meta-direktorij bi trebao sadržavati informacije o autoru i ovisnostima o ulogama. U direktoriju zadataka nalazi se glavna yaml datoteka za ulogu.

Direktorij testova sadrži oglednu datoteku yaml playbook-a i oglednu datoteku inventara i uglavnom se koristi u svrhe testiranja prije stvaranja stvarne uloge.

Direktorij vars sadrži yaml datoteku u kojoj će biti definirane sve varijable koje koristi uloga. Predlošci direktorija i datoteke direktorija trebaju sadržavati datoteke i predloške koje će koristiti zadaci u ulozi.

Da biste stvorili stablo direktorija za ulogu, trebali biste upotrijebiti sljedeću naredbu sa posljednjim parametrom, imenom uloge:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible također dobro funkcionira s predlošcima. Kao jezik za šablone, koristi Jinja2.

U sljedećem primjeru saznat ćete kako izgleda osnovni jinja2 predložak i koristiti ga u ulozi.

U vrijeme izvođenja, ovisno o tome u kojem se podatkovnom centru, recimo, nalazi vaš poslužitelj, možete odabrati više od jednog poslužitelja imena, od kojih svaki odgovara podatkovnom centru, pomoću varijable “resolver_ip_addresses”.

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

U ovom primjeru, u direktoriju playbooka definirane su neke varijable, uključujući varijablu naziva resolver_ip_addresses s različitim vrijednostima ovisno o podatkovnom centru.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Anzibilne uloge

Objašnjenje:

  1. Naziv predloška koji će se koristiti. Predložak se nalazi u direktoriju predložaka u putu uloge
  2. Odredišna staza naziva datoteke koja će se zamijeniti predloškom, na strani klijenta.
  3. Dopuštenja odredišne ​​datoteke

Zadaci uloga također mogu imati polje oznake, kojem je pripisan naziv. Više od jednog zadatka može dijeliti istu oznaku. Prilikom pokretanja ansible playbooka, možete odrediti i oznaku, tako da će se ti zadaci izvršiti.

Ansible studija slučaja

U ovom odjeljku analizirat ćemo studiju slučaja esencijalne anzibilne knjige za igru ​​koja ima tri uloge. Svrha ovoga je dati praktičan primjer onoga o čemu smo prije govorili. Neki od primjera korištenih prije u ovom priručniku za igru ​​Ansible bit će prilagođeni i korišteni u ovoj knjizi za igru.

Ispod je struktura imenika priručnika. Yaml datoteka koja će se koristiti bit će p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Playbook ima tri uloge, jednu koja se zove razrješivač koja postavlja određeni poslužitelj imena na poslužitelje kopiranjem datoteke s poslužitelja na odredište /etc/resolv.conf. Drugi se zove httpd i instalira httpd paket s modulom yum, a treći omogućuje SELinux i obavještava prijavljenog korisnika da ponovno pokrene sustav. Svaka je uloga stvorena pomoću naredbe ansible-galaxy.

Uloga razrješitelja, main.yml zadatak:

Ansible studija slučaja

Httpd uloga, main.yml zadatak:

Ansible studija slučaja

Selinux uloga, main.yml zadatak:

Ansible studija slučaja

Ispod je definiran priručnik za p4.yml. Pokretat će se na svim računalima ako nije drugačije navedeno u naredbenom retku, pokrenut će se kao root korisnik na portu 22 (SSH), prikupit će činjenice prije pokretanja uloga i pokrenut će sve tri prethodno spomenute uloge. Svaka se uloga može pokrenuti neovisno određivanjem oznake u naredbenom retku ansible-playbook s parametrom –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Pokretanje priručnika p4.yml na dva hosta i tumačenje izlaza. Ista se naredba može pokrenuti s parametrom –check za rad na suho. U slučaju da želite koristiti autentifikaciju lozinkom, koristite -k parametar.

Ansible studija slučaja

Objašnjenje:

  1. Ansible-playbook naredba koja pokreće p4.yml
  2. Playbook preskače SELinux ulogu jer je već omogućena.
  3. Ansible je otkrio da je httpd paket već instaliran, pa vraća ok.
  4. Razrješivač je postavljen, a razrješivač uloge je dobio status promijenjen.

Ansible Commands Cheat Sheet

Instalirajte EPEL repo na Centos/RHEL sustave

[root@ansible-server ~]# sudo yum install epel-release

Instalirajte ansible paket na Centos/RHEL sustave

[root@ansible-server ~]# sudo  yum install -y ansible

Izvršite ažuriranje paketa na Debianu/Ubuntu sustavi

$ sudo apt update

Instalirajte paket software-properties-common na Debian/Ubuntu sustavi

$ sudo apt install software-properties-common

Instalirajte ansible osobnu arhivu paketa na Debian/Ubuntu sustavi

$ sudo apt-add-repository ppa:ansible/ansible

Instalirajte ansible na Debian/Ubuntu sustavi

$ sudo apt update
$ sudo apt install ansible

Izdajte naredbu ping na svim poslužiteljima definiranim u datoteci inventara pod nazivom hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Izdajte naredbu ping samo na host2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Kopirajte datoteku "testfile" na sve hostove u datoteci inventara

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Instalirajte ncdu paket na svim hostovima

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Uklonite ncdu paket na svim hostovima

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Izgradite strukturu direktorija za ulogu pod nazivom role1.

[root@ansible-server test2]# ansible-galaxy init role1

Dry-run p4.yml playbook

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Pokrenite p4.yml playbook s provjerom autentičnosti lozinkom za sve hostove

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Rezime

U svijetu s tehnologijom koja se neprestano mijenja velikom brzinom i raste nevjerojatno brzo u isto vrijeme, administratori sustava i devops inženjeri moraju smisliti različite pristupe kako automatizirati rutinske zadatke i orkestrirati velike skupove poslužitelja.

Iako postoje mnogi alternativa Ansibleu (Chef, Puppet) koji rade istu stvar uz neke razlike, Ansible se uspio uzdići iznad svih njih svojom jednostavnošću, poboljšanom sigurnošću i što je najvažnije glatkom krivuljom učenja. Zbog ovih kvaliteta i brzog usvajanja Ansiblea, izradili smo vodič pun primjera tako da možete imati još besprijekornije prvo iskustvo u radu s Ansibleom.

U ovom vodiču o osnovama Ansiblea opisali smo ansible i razgovarali o njegovoj povijesti. Spomenuli smo jake strane Ansiblea i prednosti koje ansible može donijeti automatizaciji i orkestraciji infrastruktura različitih veličina. Definirali smo bitne pojmove koji se koriste ansibleom i definirali strukturu Ansible playbooks. Detaljni primjeri popraćeni su svim informacijama detaljnim objašnjenjima.

Sažmite ovu objavu uz: