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 Ansible Centos/RedHat-järjestelmiin

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"
}

Mahdolliset ad-hoc-komennot

Selitys:

  1. Komennon tila, tässä tapauksessa SUCCESS
  2. Isäntä, jolla komento suoritettiin
  3. -m-parametrin kautta annettu komento, tässä tapauksessa ping
  4. 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"
}

Mahdolliset ad-hoc-komennot

Selitys:

  1. Limit-parametria voidaan käyttää komentojen antamiseen vain tietyissä isäntäkoneissa isäntätiedoston tiedostossa
  2. 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
}

Mahdolliset ad-hoc-komennot

Selitys:

  1. Kopioi moduuli määritetty
  2. Moduuliargumentit ovat tässä tapauksessa lähde absoluuttinen polku ja määränpää absoluuttinen polku.
  3. 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"
    ]
}

Mahdolliset ad-hoc-komennot

Selitys:

  1. Tässä esimerkissä käytetään Yum-moduulia
  2. 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
  3. Kun väri on keltainen, näet ansible-komennon tulosteen tila muuttuneena, mikä tarkoittaa tässä tapauksessa, että paketti on löydetty ja asennettu.
  4. 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"
    ]
}

Mahdolliset ad-hoc-komennot

Selitys:

  1. 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.

Mahdolliset ad-hoc-komennot

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

Ansible Playbooks

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:

  1. Ryhmä isäntiä, joilla pelikirja toimii
  2. Yum-moduulia käytetään tässä tehtävässä lldpad-asennukseen
  3. 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

Ansible Playbooks

Selitys:

  1. Ryhmän nimi
  2. 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'

Ansible Playbooks

Selitys:

  1. 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.
  2. Tehtävän tulos on rekisteröity tulevaa käyttöä varten nimellä enable_selinux
  3. 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.
  4. 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.

Ansible Playbooks

Selitys:

  1. Esimerkki ilmoittajasta
  2. 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	

Ansible Rooleja

Selitys:

  1. Käytettävän mallin nimi. Malli sijaitsee mallien hakemistossa roolipolussa
  2. Mallilla korvattavan tiedostonimen kohdepolku asiakaspuolella.
  3. 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ä:

Ansible tapaustutkimus

Httpd-rooli, main.yml-tehtävä:

Ansible tapaustutkimus

Selinux-rooli, main.yml-tehtävä:

Ansible tapaustutkimus

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.

Ansible tapaustutkimus

Selitys:

  1. Ansible-playbook-komento, joka suorittaa p4.yml:n
  2. Playbook ohittaa SELinux-roolin, koska se on jo käytössä.
  3. Ansible havaitsi, että httpd-paketti on jo asennettu, joten se palauttaa ok.
  4. 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.