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.

Tiivistรค tรคmรค viesti seuraavasti: