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.















