Ansible vodič za početnike: Priručnik i naredbe

⚡ Pametni sažetak

Ansible je automatizacijski mehanizam otvorenog koda bez agenata koji konfigurira poslužitelje putem SSH-a, izvršava ad-hoc naredbe i orkestrira složene implementacije putem YAML playbookova, uloga i predložaka za višekratnu upotrebu na Linuxu i... Windows infrastruktura.

  • 🧩 Bez agenta Architekstura: Ansible se povezuje s klijentima putem SSH-a i šalje module, tako da na upravljanim čvorovima nije potrebno instalirati agentski softver.
  • 📥 Instalacija: Postavite Ansible na kontrolnom čvoru s yumom i EPEL-om na CentOS-u ili RHEL-u, ili s aptom i PPA-om na Ubuntu ili Debianu.
  • ⚡ Ad-hoc naredbe: Izvršite jednokratne zadatke kao što su ping, kopiraj ili yum preko inventara koristeći sintaksu modula ansible -m.
  • 📜 Knjige igrokaza: Opišite željeno stanje u YAML playbookovima koji grupiraju playove, zadatke i module kako bi se više poslužitelja konfiguriralo dosljedno.
  • 🧱 Uloge i predlošci: Podijelite velike playbookove u uloge koje se mogu ponovno koristiti stvorene pomoću ansible-galaxy i renderirajte konfiguracijske datoteke pomoću Jinja2 predložaka.
  • 🔁 Rukovatelji i činjenice: Pokrenite rukovatelje putem obavijestitelja pri promjeni i koristite varijable gather_facts za uvjetnu, ponovljivu automatizaciju.
  • 🎯 Studija slučaja: Jedan p4.yml playbook može pokretati uloge selinux, httpd i resolver na svim hostovima, a svakim upravlja oznaka.

Ansible tutorial za početnike koji pokriva instalaciju, ad-hoc naredbe, playbookove, uloge i predloške

Ansible je jedan od najšire prihvaćenih alata za automatizaciju otvorenog koda u modernom DevOps, cijenjen zbog dizajna bez agenata i jednostavnih, čitljivih konfiguracijskih datoteka. Ovaj Ansible vodič za početnike objašnjava što je Ansible, kako ga instalirati i kako koristiti ad-hoc naredbe, playbookove, uloge i predloške kroz praktične primjere.

Što je Ansible?

Ansible je alat otvorenog koda za automatizaciju i orkestraciju za opskrbu softverom, upravljanje konfiguracijom i implementaciju softvera. Konfigurira Unix-slične sustave i Windows sustave podjednako, pružajući infrastrukturu kao kod putem vlastitog deklarativnog jezika. Ansible se često uspoređuje s alatima temeljenim na agentima kao što su Lutka.

Ansible je popularan zbog jednostavne instalacije, jednostavnog povezivanja klijenata i dizajna bez agenata. Povezuje se s klijentima putem SSH, tako da na strani klijenta nije potreban poseban agent. Ansible šalje module svakom klijentu, moduli se pokreću lokalno, a njihov izlaz se vraća na Ansible poslužitelj.

Budući da se oslanja na SSH, Ansible se lako povezuje s klijentima pomoću SSH ključeva, što pojednostavljuje cijeli proces. Podaci o klijentu poput imena hosta ili IP adresa i SSH portova pohranjeni su u datotekama koje se nazivaju datoteke inventara. Nakon što stvorite i popunite datoteku inventara, Ansible je može koristiti.

Zašto koristiti Ansible?

Evo nekih važnih prednosti korištenja Ansiblea:

  • Jedna od najznačajnijih prednosti Ansiblea je ta što je besplatan za korištenje svima.
  • Za instalaciju i korištenje nisu potrebne posebne vještine sistemskog administratora, a službena dokumentacija je vrlo sveobuhvatna.
  • Njegova modularnost kroz dodatke, module, inventar i playbookove čini Ansible izvrsnim suputnikom za orkestriranje velikih okruženja.
  • Ansible je lagan i konzistentan, bez ograničenja na operativni sustav ili temeljni hardver.
  • Vrlo je siguran zahvaljujući dizajnu bez agenata i korištenju sigurnosnih značajki OpenSSH-a.
  • Ansible ima glatku krivulju učenja, podržanu detaljnom dokumentacijom i lako razumljivom strukturom i konfiguracijom.

Ove snage, posebno kada se uspoređuju s drugima alternative Ansibleu, pomažu objasniti njegovo brzo usvajanje. Prije instalacije, korisno je razumjeti kako se projekt razvijao.

Povijest Ansiblea

Evo važnih prekretnica u povijesti Ansiblea:

  • Projekt Ansible započeo je u veljači 2012. Prvi ga je razvio Michael DeHaan, tvorac Cobblera i Funca (Fedora Unified Network Controller).
  • Tvrtka koja je izvorno financirala Ansible, izvorno nazvana AnsibleWorks Inc, preuzeta je od strane RedHata 2015. godine, a kasnije je, zajedno s RedHatom, prešla pod... IBM kišobran.
  • Danas je Ansible uključen u distribucije kao što su Fedora Linux, RHEL, CentOS i Oracle Linux.

Važni pojmovi koji se koriste u Ansibleu

Sljedeći pojmovi pojavljuju se u ovom Ansible tutorialu i vrijedi ih znati prije nego što počnete:

Ansible poslužitelj

Stroj na kojem je instaliran Ansible i s kojeg se izvršavaju svi zadaci i playbookovi.

Moduli

Modul je naredba ili skup sličnih Ansible naredbi namijenjenih izvršavanju na strani klijenta.

Zadatak

Zadatak je dio koji se sastoji od jednog postupka koji treba dovršiti.

Uloga

Način organiziranja zadataka i povezanih datoteka kako bi se kasnije mogli pozvati u playbooku.

Činjenica

Informacije dohvaćene iz globalnih varijabli klijentskog sustava putem operacije gather_facts.

Popis

Datoteka koja sadrži podatke o Ansible klijentskim poslužiteljima. U kasnijim primjerima definirana je kao datoteka hosts.

Igrati

Izvršenje scenografije.

sekundant

Zadatak koji se poziva samo kada je prisutan dojavljivač.

Obavijestilac

Dio pripisan zadatku koji poziva rukovatelj ako se izlaz promijeni.

Pojam

Naziv postavljen na zadatku koji se kasnije može koristiti za pokretanje samo tog određenog zadatka ili grupe zadataka.

Ansible instalacija u Linuxu

Nakon što ste odvagnuli svoje mogućnosti i odlučili se za Ansible, sljedeći korak je instalacija na vaš sustav. Sljedeći kratki vodič pokriva instalaciju na najpopularnijim Linux distribucija.

Instalirajte Ansible na Centos/RedHat sustave

Korak 1) Instalirajte EPEL repozitorij.

[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 korištenja Ansiblea je putem ad-hoc naredbi. One su korisne kada želite izdati naredbu na jednom poslužitelju ili na grupi poslužitelja. Ad-hoc naredbe se ne pohranjuju za buduću upotrebu, ali su brz način interakcije s odabranim poslužiteljima.

Za ovaj Ansible tutorial konfigurirana je jednostavna datoteka hosts za dva poslužitelja, koja sadrži host1 i host2.

Možete potvrditi da su hostovi dostupni s Ansible poslužitelja izdavanjem naredbe ping naredba 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.

Također možete izdati istu naredbu na jednom hostu kada je to 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, upotrijebite modul za kopiranje koji se oslanja na SCP. Naredba i njezin 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, instalirat ćete paket s yum modulom 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 i uklanjanje.

U donjem primjeru, ista naredba se izdaje 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 bitna značajka Ansiblea je njegova sposobnost prikupljanja činjenica o sustavu. Prikuplja podatke o hardveru, softveru i verziji te pohranjuje svaku vrijednost u varijablu koju kasnije možete ponovno upotrijebiti.

Kada su vam potrebne detaljne informacije o sustavima koje će Ansible modificirati, modul za postavljanje prikuplja te činjenice iz sistemskih varijabli.

Ansible ad-hoc naredbe

Ansible Playbooks

Ansible Playbooks su način slanja naredbi udaljenim sustavima putem skripti. Playbookovi konfiguriraju složena sistemska okruženja i povećavaju fleksibilnost pokretanjem jedne skripte na jednom ili više sustava. Ponašaju se više kao konfiguracijski jezik nego kao programski jezik.

Naredbe playbooka koriste YAML format, tako da je potrebno malo sintakse, ali se mora poštivati ​​uvlačenje. Kao što ime sugerira, playbook je zbirka playova. Pomoću playbooka možete dodijeliti određene uloge nekim hostovima i različite uloge drugima, orkestrirajući mnoge poslužitelje u jednoj datoteci.

Prije nego što nastavimo s primjerima playbookova, korisno je definirati zadatak. Zadaci su sučelje za Ansible module za uloge i playbookove.

Sada, razmotrite Ansibleovu playbook s jednom igrom koja 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 playbooku, hostovi group1 u hosts datoteci su namijenjeni za instalaciju lldpad paketa pomoću yum modula. lldpad servis kreiran nakon instalacije zatim se pokreće pomoću servisnog modula, koji uglavnom komunicira 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, što daje bolju kontrolu nad detaljima kao što su IP adresa i SSH port za svaki host.

Datoteka inventara za ovaj primjer playbooka izgleda ovako. Postoje dvije grupe, grupa1 i grupa2, 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 primjer Ansible playbooka sadrži dvije reprodukcije za dvije grupe hostova. Za prvu grupu, group1, SELinux je omogućen, a kada je omogućen, na zaslonu hosta se pojavljuje poruka.

Za drugu grupu, httpd paket se instalira samo ako je ansible_os_family RedHat, a ansible_system_vendor HP.

ansible_os_family i ansible_system_vendor su varijable prikupljene 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 posebni zadaci koji se nazivaju rukovatelji. Rukovatelj mora imati jedinstveno ime u cijeloj playbooku. Rukovatelji rade kao redovni zadatak, ali rukovatelj može biti obaviješten putem obavijestitelja.

Ako rukovatelj nije obaviješten tijekom izvođenja playbooka, on se ne izvršava. Međutim, ako više od jednog zadatka obavijesti rukovatelja, on se izvršava samo jednom nakon što su svi zadaci završeni.

U donjem primjeru, određeni zadatak ima odjeljak za obavještavanje koji poziva drugi zadatak. Ako se promijeni izlaz prvog zadatka, poziva se zadatak za rukovanje. Uobičajeni primjer je promjena konfiguracijske datoteke, a zatim ponovno pokretanje pogođene usluge.

---

- 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 se prvi zadatak, "sshd config file modify port", promijeni, što znači da port više nije 28675, port se mijenja i zadatak obavještava rukovatelja istog imena, koji ponovno pokreće sshd uslugu.

Ansible Playbooks

Objašnjenje:

  1. Primjer dojavljivača
  2. Primjer rukovatelja

Anzibilne uloge

Pri radu s velikim playbookovima lakše je podijeliti zadatke u uloge. Uloge također olakšavaju ponovnu upotrebu rada kasnije. Uloga je skup zadataka koji se mogu premjestiti iz jednog playbooka u drugi i izvršavati neovisno, iako samo putem playbook datoteke.

Uloge se pohranjuju u zasebne direktorije i slijede određenu 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

YAML datoteka u direktoriju defaults sadrži zadane varijable korištene s playbookom. Direktorij handlers pohranjuje handlere, a direktorij meta sadrži informacije o autoru i ovisnostima uloga. Direktorij tasks sadrži glavnu YAML datoteku za ulogu.

Direktorij testovi sadrži primjer YAML playbooka i primjer datoteke inventara, a uglavnom se koristi za testiranje prije nego što se stvarna uloga stvori.

Direktorij vars sadrži YAML datoteku u kojoj su definirane sve varijable koje koristi uloga. Direktoriji templates i files sadrže predloške i datoteke koje koriste zadaci u ulozi.

Za izradu stabla direktorija za ulogu, upotrijebite sljedeću naredbu s nazivom uloge kao posljednjim parametrom:

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

Ansible također dobro radi s predlošcima, a kao jezik za predloške koristi Jinja2.

Sljedeći primjer pokazuje kako izgleda osnovni Jinja2 predložak i kako ga koristiti u ulozi.

Tijekom izvođenja, ovisno na primjer o tome u kojem se podatkovnom centru nalazi vaš poslužitelj, možete odabrati između nekoliko nameservera, od kojih svaki odgovara podatkovnom centru, koristeći varijablu resolver_ip_addresses.

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

options timeout:1
options attempts:5
options rotate

U ovom primjeru, direktorij playbooka definira nekoliko varijabli, uključujući 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 s dodijeljenim nazivom. Više zadataka može dijeliti istu oznaku, a kada pokrenete playbook, možete odrediti oznaku tako da se izvršavaju samo označeni zadaci.

Ansible studija slučaja

U ovom odjeljku analiziramo studiju slučaja osnovnog Ansibleovog priručnika koji ima tri uloge. Cilj je dati praktičan primjer do sada obrađenih koncepata. Neki raniji primjeri iz ovog vodiča prilagođeni su i ponovno korišteni u ovom priručniku.

Ispod je struktura direktorija playbooka. Korištena YAML datoteka je 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. Uloga resolvera postavlja određeni nameserver na poslužiteljima kopiranjem datoteke na odredište /etc/resolv.conf. Uloga httpd instalira httpd paket s yum modulom, a treća uloga omogućuje SELinux i obavještava prijavljenog korisnika da ponovno pokrene sustav. Svaka uloga je kreirana naredbom 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

U nastavku slijedi p4.yml playbook. Pokreće se na svim hostovima osim ako nije drugačije navedeno u naredbenom retku, pokreće se kao root korisnik na portu 22 (SSH), prikuplja činjenice prije pokretanja uloga i pokreće sve tri uloge. Svaka se uloga može pokrenuti neovisno navođenjem njezine 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 }

Zatim možete pokrenuti p4.yml playbook na dva hosta i interpretirati izlaz. Ista naredba može se pokrenuti s parametrom –check za probni rad i s parametrom -k kada želite koristiti autentifikaciju lozinkom.

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

Izdanje a ping naredba na svim poslužiteljima definiranim u datoteci inventara pod nazivom hosts

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

Izdanje a ping naredba samo na hostu2

[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

Pitanja i odgovori

Da. Ansible ne koristi agente, tako da se nikakav softver ne pokreće na upravljanim čvorovima. Povezuje se putem SSH-a ili WinRM-a za Windowsi gura male module koji se izvršavaju na cilju, a zatim se uklanjaju. Samo kontrolni čvor treba Ansible i Python instaliran.

Ansible playbookovi su napisani u YAML-u, koji je čitljiv ljudima i ovisi o uvlačenju, a ne o zagradama. Predlošci koriste jezik za predloške Jinja2, dok činjenice i varijable omogućuju da se jedan playbook prilagodi mnogim hostovima. Za početak nije potrebno opće programiranje.

Ansible je bez agenta i baziran je na push protokolima, šaljući promjene putem SSH-a. Lutka i Chef obično su bazirani na agentima i pull-ovima. Ansible koristi YAML, dok Chef koristi Ruby, a Puppet vlastiti DSL. Mnogi timovi biraju Ansible zbog njegove niže krivulje učenja.

Da. Ansible je besplatan i otvorenog koda pod GNU GPL licencom, a održava ga Red Hat i velika zajednica. Osnovni engine i tisuće modula ne koštaju ništa. Red Hat također prodaje Ansible Automation Platform, plaćeni proizvod koji dodaje GUI, pristup temeljen na ulogama i podršku.

Da. Osim Linux i Unix hostova dostupnih putem SSH-a, Ansible upravlja Windows čvorova putem WinRM-a koristeći namjenske Windows module. Može instalirati pakete, uređivati ​​registar, upravljati servisima i pokretati PowerShell, tako da miješa Linux i Windows Vozni park je automatiziran s jednog kontrolnog čvora.

Ansible Galaxy je javno središte za dijeljenje i preuzimanje uloga i kolekcija zajednice. Naredba ansible-galaxy gradi strukturu direktorija uloge i instalira objavljene uloge, tako da možete ponovno koristiti testiranu automatizaciju umjesto pisanja svake knjige scenarija ispočetka.

AI asistenti mogu izraditi YAML playbookove iz zahtjeva napisanog jednostavnim jezikom, objasniti nepoznate module i predložiti ispravke za neuspjele zadatke ili sintaktičke pogreške. Također mogu pretvoriti shell skripte u idempotentne zadatke. Uvijek pregledajte generirane playbookove za ispravne nazive modula i idempotentnost prije nego što ih pokrenete.

Da. GitHub kopilot automatski dovršava zadatke playbooka, unose inventara i Jinja2 predloške iz kratkog komentara ili naziva datoteke. Tretirajte njegov izlaz kao početnu točku i provjerite uvlačenje, parametre modula i nazive varijabli, jer generirani YAML može referencirati zastarjelu sintaksu ili nepostojeće module.

Sažmite ovu objavu uz: