Sopiva opetusohjelma aloittelijoille: Ohjekirja, komennot ja esimerkki
Mikä on Ansible?
Ansible on avoimen lähdekoodin automaatio- ja orkestrointityökalu ohjelmistojen hallintaan, konfigurointien hallintaan ja ohjelmistojen käyttöönottoon. Ansible voi helposti ajaa ja konfiguroida Unix-tyyppisiä järjestelmiä sekä Windows järjestelmät tarjoavat infrastruktuurin koodina. Se sisältää oman deklaratiivisen ohjelmointikielen järjestelmän konfigurointia ja hallintaa varten.
Ansible on suosittu asennuksen yksinkertaisuuden, helppokäyttöisyytensä ja asiakasyhteyksien, agenttien puutteen Ansible-asiakkaille ja monien taitojensa vuoksi. Se toimii yhteyden kautta SSH asiakkaille, joten se ei tarvitse erityistä agenttia asiakaspuolella, ja työntämällä moduuleja asiakkaille, moduulit suoritetaan paikallisesti asiakaspuolella ja tuloste työnnetään takaisin Ansible-palvelimelle.
Koska se käyttää SSH:ta, se voi helposti muodostaa yhteyden asiakkaisiin SSH-avaimilla, mikä yksinkertaistaa koko prosessia. Asiakkaan tiedot, kuten isäntänimet tai IP-osoitteet ja SSH-portit, tallennetaan tiedostoihin, joita kutsutaan inventaariotiedostoiksi. Kun olet luonut inventaariotiedoston ja täyttänyt sen, ansible voi käyttää sitä.
Miksi käyttää Ansiblea?
Tässä on joitain tärkeitä Ansiblen käytön etuja/hyötyjä
- Yksi Ansiblen merkittävimmistä eduista on, että se on ilmainen kaikkien käytettävissä.
- Se ei vaadi erityisiä järjestelmänvalvojataitoja Ansiblen asentamiseen ja käyttämiseen, ja virallinen dokumentaatio on erittäin kattava.
- Sen modulaarisuus lisäosien, moduulien, varastojen ja pelikirjojen suhteen tekee Ansiblesta täydellisen kumppanin suurten ympäristöjen ohjaamiseen.
- Ansible on erittäin kevyt ja johdonmukainen, eikä käyttöjärjestelmään tai taustalla olevaan laitteistoon liity rajoituksia.
- Se on myös erittäin turvallinen agentittomien ominaisuuksiensa ja OpenSSH-suojausominaisuuksien käytön ansiosta.
- Toinen Ansiblen käyttöönottoa rohkaiseva etu on sen sujuva oppimiskäyrä, jonka määrittelevät kattava dokumentaatio ja helppo oppia rakenne ja kokoonpano.
Ansiblen historia
Tässä on tärkeitä maamerkkejä ansiblen historiasta:
- Helmikuussa 2012 Ansible-projekti alkoi. Sen kehitti ensimmäisenä Michael DeHaan, Cobbler and Funcin Fedora Unified Network Controllerin luoja.
- Alun perin AnsibleWorks Inc:ksi kutsuttu yritys, joka rahoitti ansible-työkalua, ostettiin vuonna 2015 RedHatille, ja myöhemmin RedHat siirtyi sen sateenvarjon alle. IBM.
- Tällä hetkellä Ansible sisältyy jakeluihin, kuten Fedora Linux, RHEL, Centos ja Oracle Linux.
Ansiblessa käytetyt tärkeät termit
-
Mahdollinen palvelin
Kone, johon Ansible on asennettu ja josta kaikki tehtävät ja pelikirjat ajetaan
-
Moduulit
Pohjimmiltaan moduuli on komento tai joukko samanlaisia Ansible-komentoja, jotka on tarkoitettu suoritettavaksi asiakaspuolella
-
Tehtävä
Tehtävä on osa, joka koostuu yhdestä suoritettavasta toimenpiteestä
-
Rooli
Tapa järjestää tehtäviä ja niihin liittyviä tiedostoja, joita kutsutaan myöhemmin leikkikirjaan
-
tosiasia
Tietoa haetaan asiakasjärjestelmästä globaaleista muuttujista kerätä faktoja -toiminnolla
-
Inventaario
Tiedosto, joka sisältää tietoja mahdollisista asiakaspalvelimista. Myöhemmissä esimerkeissä määritetty hosts-tiedostoksi
-
Pelaa
Pelikirjan toteuttaminen
-
Käsittelijä
Tehtävä, jota kutsutaan vain, jos ilmoittaja on paikalla
-
Ilmoittaja
Tehtävälle määritetty osio, joka kutsuu käsittelijän, jos tulostetta muutetaan
-
tag
Nimi asetetaan tehtävälle, jota voidaan käyttää myöhemmin antamaan vain kyseinen tehtävä tai tehtäväryhmä.
Mahdollinen asennus Linuxissa
Kun olet vertannut ja punninnut vaihtoehtojasi ja päättänyt valita Ansiblen, seuraava vaihe on asentaa se järjestelmääsi. Käymme läpi asennuksen vaiheet eri tavoin Linux jakelut, suosituimmat, seuraavassa pienessä opetusohjelmassa.
Asenna Ansible Centos/RedHat-järjestelmiin
Vaihe 1) Asenna EPEL repo
[root@ansible-server ~]# sudo yum install epel-release
Vaihe 2) Asenna mahdollinen paketti
[root@ansible-server ~]# sudo yum install -y ansible
Asenna mahdollinen päälle Ubuntu/Debian-järjestelmät
Vaihe 1) Päivitä paketit
$ sudo apt update
Vaihe 2) Asenna software-properties-common-paketti
$ sudo apt install software-properties-common
Vaihe 3) Asenna mahdollinen henkilökohtainen pakettiarkisto
$ sudo apt-add-repository ppa:ansible/ansible
Vaihe 4) Asenna mahdollinen
$ sudo apt update $ sudo apt install ansible
Mahdolliset ad-hoc-komennot
Yksi yksinkertaisimmista tavoista käyttää Ansiblea on käyttää ad-hoc-komentoja. Näitä voidaan käyttää, kun haluat antaa joitain komentoja palvelimella tai joukolla palvelimia. Ad-hoc-komentoja ei tallenneta tulevaa käyttöä varten, mutta ne ovat nopea tapa olla vuorovaikutuksessa haluttujen palvelimien kanssa.
Tätä Ansible-opetusohjelmaa varten määritetään yksinkertainen kahden palvelimen isäntätiedosto, joka sisältää host1:n ja host2:n.
Voit varmistaa, että isännät ovat käytettävissä mahdolliselta palvelimelta antamalla ping-komennon kaikille koneille.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping host1 | SUCCESS => { "changed": false, "ping": "pong" } host2 | SUCCESS => { "changed": false, "ping": "pong" }
Selitys:
- Komennon tila, tässä tapauksessa SUCCESS
- Isäntä, jolla komento suoritettiin
- -m-parametrin kautta annettu komento, tässä tapauksessa ping
- Parametrilla -i voit osoittaa hosts-tiedostoon.
Voit tarvittaessa antaa saman komennon vain tietylle isännälle.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2 host2 | SUCCESS => { "changed": false, "ping": "pong" }
Selitys:
- Limit-parametria voidaan käyttää komentojen antamiseen vain tietyissä isäntäkoneissa isäntätiedoston tiedostossa
- Isännän nimi sellaisena kuin se on määritetty inventaariotiedostossa
Jos sinun on kopioitava tiedosto useisiin kohteisiin nopeasti, voit käyttää SCP:tä käyttävää kopiointimoduulia ansiblessa. Joten komento ja sen tulos näyttävät alla:
[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 }
Selitys:
- Kopioi moduuli määritetty
- Moduuliargumentit ovat tässä tapauksessa lähde absoluuttinen polku ja määränpää absoluuttinen polku.
- Mahdollinen komentotulostus, joka heijastaa kopiokomennon onnistumista ja muita yksityiskohtia, kuten sha1- tai md5-tarkistussummat tiedoston eheyden tarkistukseen ja metatiedot, kuten omistaja, koko tai käyttöoikeudet. Paketin asentaminen useille palvelimille on vaivatonta. Ansiblessa on useita moduuleja, jotka ovat vuorovaikutuksessa käytettyjen asentajien kanssa, kuten yum, apt, dnf jne.
Seuraavassa esimerkissä selvitetään, kuinka paketti asennetaan yum-moduulin kautta kahdelle Centos-isännälle.
[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" ] }
Selitys:
- Tässä esimerkissä käytetään Yum-moduulia
- Se määrittelee moduulin argumentit, ja tässä tapauksessa valitset paketin nimen ja sen tilan. Jos tila puuttuu esimerkiksi, paketti etsitään ja jos se löytyy, se poistetaan
- Kun väri on keltainen, näet ansible-komennon tulosteen tila muuttuneena, mikä tarkoittaa tässä tapauksessa, että paketti on löydetty ja asennettu.
- Ansiblen kautta annetun yum install -komennon tila. Tässä tapauksessa paketti ncdu.x86_64 0:1.14-1.el7 asennettiin.
Tietenkin kaikkia yum-asennusvaihtoehtoja voidaan käyttää mahdollisen kautta, mukaan lukien päivitys, asennus, uusin versio tai poistaminen.
Alla olevassa esimerkissä sama komento annettiin aiemmin asennetun ncdu-paketin poistamiseksi.
[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" ] }
Selitys:
- Yum-komennon tulos osoittaa, että paketti on poistettu.
Toinen hyödyllinen ja olennainen ominaisuus, jota ansible käyttää vuorovaikutuksessa asiakkaan palvelimen kanssa, on kerätä tietoja järjestelmästä. Joten se hakee laitteisto-, ohjelmisto- ja versiotiedot järjestelmästä ja tallentaa jokaisen arvon muuttujaan, jota voidaan käyttää myöhemmin.
Jos tarvitset yksityiskohtaista tietoa ansiblen kautta muokattavista järjestelmistä, voidaan käyttää seuraavaa komentoa. Asennusmoduuli kerää faktoja järjestelmän muuttujista.
Ansible Playbooks
Ansible Playbooks ovat tapa lähettää komentoja etäjärjestelmiin komentosarjojen kautta. Mahdollisia pelikirjoja käytetään monimutkaisten järjestelmäympäristöjen määrittämiseen joustavuuden lisäämiseksi suorittamalla komentosarja yhteen tai useampaan järjestelmään. Mahdolliset pelikirjat ovat yleensä enemmän konfigurointikieliä kuin ohjelmointikieliä.
Mahdolliset pelikirjan komennot käyttävät YAML-muotoa, joten syntaksia ei tarvita paljon, mutta sisennystä on kunnioitettava. Kuten nimikin sanoo, näytelmäkirja on kokoelma näytelmiä. Pelikirjan avulla voit määrittää tiettyjä rooleja joillekin isännille ja muita rooleja muille isännille. Näin voit ohjata useita palvelimia hyvin erilaisissa skenaarioissa, kaikki yhdessä pelikirjassa.
Jotta kaikki yksityiskohdat olisivat tarkkoja, ennen kuin jatkamme Ansiblen pelikirjan esimerkkejä, meidän on ensin määritettävä tehtävä. Nämä ovat käyttöliittymä mahdollisiin roolimoduuleihin ja leikkikirjoihin.
Opitaan nyt Ansible-pelikirja esimerkin avulla, jossa on yksi pelikirja ja yksi näytelmä, joka sisältää useita tehtäviä alla:
--- - hosts: group1 tasks: - name: Install lldpad package yum: name: lldpad state: latest - name: check lldpad service status service: name: lldpad state: started
Yllä olevassa Ansible playbook -esimerkissä isäntätiedoston isäntien ryhmä1 on kohdistettu lldpad-paketin asennukseen yum-moduulin avulla ja sen jälkeen asennuksen jälkeen luotu palvelu lldpad käynnistetään palvelumoduulilla, jota käytetään enimmäkseen vuorovaikutukseen systemd-ensemblen kanssa.
Selitys:
- Ryhmä isäntiä, joilla pelikirja toimii
- Yum-moduulia käytetään tässä tehtävässä lldpad-asennukseen
- Huoltomoduulin avulla tarkistetaan, onko palvelu toiminnassa asennuksen jälkeen
Jokainen mahdollinen pelikirja toimii inventaariotiedoston kanssa. Varastotiedosto sisältää luettelon palvelimista, jotka on jaettu ryhmiin, jotta voit hallita paremmin tietoja, kuten IP-osoite ja SSH-portti jokaiselle isännälle.
Varastotiedosto, jota voit käyttää tässä Ansible playbook -esimerkissä, näyttää alla. On olemassa kaksi ryhmää, joiden nimi on ryhmä1 ja ryhmä2, joista kumpikin sisältää isäntä1:n ja isäntä2:n.
[group1] host1 ansible_host=192.168.100.2 ansible_ssh_port=22 [group2] host2 ansible_host=192.168.100.3 ansible_ssh_port=22
Selitys:
- Ryhmän nimi
- Isäntänimi, jossa on IP-osoite ja ssh-portti, tässä tapauksessa oletusarvo, 22.
Toinen hyödyllinen Ansible-pelikirjaesimerkki, joka sisältää tällä kertaa kaksi näytelmää kahdelle isännälle, on seuraava. Ensimmäisessä isäntäryhmässä, ryhmä1, selinux otetaan käyttöön. Jos se on käytössä, isännän näytölle tulee viesti.
Toiselle isäntäryhmälle httpd-paketti asennetaan vain, jos ansible_os_family on RedHat ja ansible_system_vendor on HP.
Ansible_os_family ja ansible_system_vendor ovat muuttujia, jotka on kerätty collection_facts-vaihtoehdolla, ja niitä voidaan käyttää kuten tässä ehdollisessa esimerkissä.
--- - 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'
Selitys:
- Esimerkki when-lauseesta, Tässä tapauksessa, kun käyttöjärjestelmän tyyppi on Debian. Ansible_os_family-muuttuja kerätään collection_facts-toiminnon kautta.
- Tehtävän tulos on rekisteröity tulevaa käyttöä varten nimellä enable_selinux
- Toinen esimerkki kun-lauseesta. Tässä tapauksessa isäntäkäyttäjälle näytetään viesti, jos SELinux oli todella käytössä aiemmin.
- Toinen esimerkki kun-lauseesta, joka koostuu kahdesta säännöstä
Tehtävien lisäksi on myös tiettyjä tehtäviä, joita kutsutaan käsittelijöiksi. Käsittelijöillä on oltava yksilöllinen nimi koko pelikirjassa. Nämä toimivat samalla tavalla kuin tavalliset tehtävät, mutta käsittelijälle voidaan ilmoittaa ilmoittajan kautta.
Jos käsittelijälle ei ilmoiteta pelikirjan ajon aikana, sitä ei suoriteta. Jos kuitenkin useampi kuin yksi tehtävä ilmoittaa käsittelijälle, tämä suoritetaan vain kerran, kun kaikki tehtävät on suoritettu.
Alla olevassa esimerkissä voit nähdä, kuinka tietyssä tehtävässä on ilmoitusosio, joka kutsuu toista tehtävää. Jos ensimmäisen tehtävän tulostetta muutetaan, käsittelijätehtävä kutsutaan. Paras esimerkki on muuttaa asetustiedostoa ja käynnistää sen jälkeen kyseinen palvelu uudelleen.
--- - 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
Tässä tapauksessa, jos ensimmäistä tehtävää "sshd config file modify port" muutetaan, mikä tarkoittaa, että jos portti ei alun perin ole 28675, sitä muutetaan ja tehtävä kehottaa samannimistä käsittelijää suorittamaan , ja se käynnistää sshd-palvelun uudelleen.
Selitys:
- Esimerkki ilmoittajasta
- Esimerkki käsittelijästä
Ansible Rooleja
Kun käsitellään laajoja pelikirjoja, on helpompi jakaa tehtävät rooleihin. Tämä auttaa myös roolien uudelleenkäytössä tulevaisuudessa. Roolit ovat kokoelma tehtäviä, jotka voidaan siirtää pelikirjasta toiseen, joita voidaan suorittaa itsenäisesti, mutta vain pelikirjatiedoston kautta.
Roolit on tallennettu erillisiin hakemistoihin ja niillä on erityinen hakemistorakenne.
[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
Oletushakemiston yaml-tiedosto sisältää luettelon oletusmuuttujista, joita käytetään pelikirjan kanssa. Käsittelijät-hakemistoa käytetään käsittelijöiden tallentamiseen. Metahakemistossa oletetaan olevan tietoa tekijästä ja rooliriippuvuudesta. Tehtävähakemistossa on roolin tärkein yaml-tiedosto.
Testihakemisto sisältää yaml-esimerkkitiedoston ja näyteluettelotiedoston, ja sitä käytetään enimmäkseen testaustarkoituksiin ennen varsinaisen roolin luomista.
Vars-hakemisto sisältää yaml-tiedoston, jossa määritellään kaikki roolin käyttämät muuttujat. Hakemistopohjien ja hakemistotiedostojen tulee sisältää tiedostoja ja malleja, joita roolissa olevat tehtävät käyttävät.
Luodaksesi roolille hakemistopuun, sinun tulee käyttää seuraavaa komentoa viimeisen parametrin, roolin nimen, kanssa:
[root@ansible-server test2]# ansible-galaxy init role1
Ansible toimii hyvin myös mallien kanssa. Mallin kielenä se käyttää Jinja2:ta.
Seuraavassa esimerkissä saat selville, miltä Jinja2-perusmalli näyttää ja käytät sitä roolissa.
Ajon aikana voit valita useammista nimipalvelimista, joista jokainen vastaa palvelinkeskusta, riippuen siitä, missä datakeskuksessa palvelimesi sijaitsee, käyttämällä muuttujaa "resolver_ip_addresses".
{% for resolver in resolver_ip_addresses %} nameserver {{ resolver }} {% endfor %} options timeout:1 options attempts:5 options rotate
Tässä esimerkissä playbook-hakemistossa on määritelty joitain muuttujia, mukaan lukien muuttuja nimeltä solver_ip_addresses, joilla on erilaiset arvot tietokeskuksesta riippuen.
- name: Set resolver for server template: src: dns.j2 dest: /etc/resolv.conf group: root owner: root mode: "0644" tag: resolver
Selitys:
- Käytettävän mallin nimi. Malli sijaitsee mallien hakemistossa roolipolussa
- Mallilla korvattavan tiedostonimen kohdepolku asiakaspuolella.
- Kohdetiedoston käyttöoikeudet
Roolitehtävissä voi olla myös tunnistekenttä, jolle on annettu nimi. Useampi kuin yksi tehtävä voi jakaa saman tunnisteen. Kun käytät mahdollista pelikirjaa, voit määrittää myös tunnisteen, jotta kyseiset tehtävät suoritetaan.
Ansible tapaustutkimus
Tässä osiossa analysoimme tapaustutkimuksen olennaisesta mahdollisesta leikkikirjasta, jolla on kolme roolia. Tämän tarkoituksena on antaa käytännön esimerkki siitä, mistä puhuimme aiemmin. Joitakin aiemmin tässä Ansible-pelikirjan opetusohjelmassa käytetyistä esimerkeistä mukautetaan ja niitä käytetään tässä ohjekirjassa.
Alla on pelikirjan hakemistorakenne. Käytettävä Yaml-tiedosto on 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
Pelikirjassa on kolme roolia, joista yksi kutsutaan ratkaisejaksi, joka asettaa tietyn nimipalvelimen palvelimille kopioimalla tiedoston palvelimelta /etc/resolv.conf-kohteeseen. Toinen on nimeltään httpd, ja se asentaa httpd-paketin yum-moduulilla ja kolmas mahdollistaa SELinuxin ja ilmoittaa kirjautuneelle käyttäjälle käynnistämään järjestelmän uudelleen. Jokainen rooli luotiin ansible-galaxy-komennolla.
Ratkaisijarooli, main.yml-tehtävä:
Httpd-rooli, main.yml-tehtävä:
Selinux-rooli, main.yml-tehtävä:
Alla on määritelty p4.yml-ohjekirja. Se toimii kaikilla isännillä, ellei komentorivillä ole toisin määritetty, se toimii pääkäyttäjänä portissa 22 (SSH), se kerää faktat ennen roolien suorittamista ja suorittaa kaikkia kolmea aiemmin mainittua roolia. Jokainen rooli voidaan suorittaa itsenäisesti määrittämällä tunniste ansible-playbook-komentorivillä parametrilla –t.
--- - hosts: all user: root port: 22 gather_facts: True roles: - { role: selinux, tags: selinux } - { role: httpd, tags: httpd } - { role: resolver, tags: resolver }
P4.yml-ohjekirjan suorittaminen kahdella isännällä ja tulosteen tulkitseminen. Sama komento voidaan suorittaa -check-parametrilla kuivaajona varten. Jos haluat käyttää salasanatodennusta, käytä parametria -k.
Selitys:
- Ansible-playbook-komento, joka suorittaa p4.yml:n
- Playbook ohittaa SELinux-roolin, koska se on jo käytössä.
- Ansible havaitsi, että httpd-paketti on jo asennettu, joten se palauttaa ok.
- Resolver asetettiin, ja roolinratkaisun tila muutettiin.
Ansible Commands -huijauslehti
Asenna EPEL repo Centos/RHEL-järjestelmiin
[root@ansible-server ~]# sudo yum install epel-release
Asenna mahdollinen paketti Centos/RHEL-järjestelmiin
[root@ansible-server ~]# sudo yum install -y ansible
Päivitä paketit Debianissa/Ubuntu järjestelmät
$ sudo apt update
Asenna paketti software-properties-common Debianille/Ubuntu järjestelmät
$ sudo apt install software-properties-common
Asenna mahdollinen henkilökohtainen pakettiarkisto Debianille/Ubuntu järjestelmät
$ sudo apt-add-repository ppa:ansible/ansible
Asenna mahdollinen Debianille/Ubuntu järjestelmät
$ sudo apt update $ sudo apt install ansible
Anna ping-komento kaikille palvelimille, jotka on määritetty luettelotiedostossa nimeltä hosts
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
Anna ping-komento vain isäntä2:ssa
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
Kopioi tiedosto "testfile" kaikille inventaariotiedoston koneille
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
Asenna ncdu-paketti kaikkiin koneisiin
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
Poista ncdu-paketti kaikista isännistä
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
Luo hakemistorakenne roolille nimeltä role1.
[root@ansible-server test2]# ansible-galaxy init role1
Kuivakäyttöinen p4.yml pelikirja
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
Suorita p4.yml playbook salasanatodennuksella kaikille isännille
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k
Yhteenveto
Maailmassa, jossa teknologia muuttuu jatkuvasti nopeasti ja kasvaa uskomattoman nopeasti samaan aikaan, järjestelmänvalvojien ja devops-insinöörien on mietittävä erilaisia lähestymistapoja rutiinitehtävien automatisoimiseen ja suurten palvelimien järjestämiseen.
Vaikka monia vaihtoehto Ansiblelle (Chef, Puppet), jotka tekevät saman tietyin eroin, Ansible onnistui nousemaan niiden yläpuolelle yksinkertaisuudellaan, parannetulla turvallisuudellaan ja mikä tärkeintä, sujuvalla oppimiskäyrällä. Näiden ominaisuuksien ja Ansiblen nopean käyttöönoton ansiosta loimme opetusohjelman, joka on täynnä esimerkkejä, jotta saat entistä saumattomamman kokemuksen Ansiblen kanssa työskentelystä.
Tässä Ansiblen perusopetusohjelmassa kuvailimme ansiblea ja puhuimme hieman sen historiasta. Mainitsimme Ansiblen vahvuudet ja edut, joita ansible voi tuoda erikokoisten infrastruktuurien automatisointiin ja orkestrointiin. Määritimme käytetyt olennaiset ansible-termit ja määritimme Ansible-leikkikirjojen rakenteen. Kaiken tiedon mukana oli perusteellisia esimerkkejä yksityiskohtaisten selitysten kera.