Lehetséges oktatóanyag kezdőknek: Playbook, Parancsok és Példa

Mi az Ansible?

Ansible egy nyílt forráskódú automatizálási és hangszerelési eszköz a szoftverek biztosításához, konfigurációkezeléséhez és szoftvertelepítéshez. Az Ansible könnyen futtathat és konfigurálhat Unix-szerű rendszereket, valamint Windows infrastruktúrát kódként biztosító rendszerek. Saját deklaratív programozási nyelvet tartalmaz a rendszer konfigurálásához és kezeléséhez.

Az Ansible népszerű a telepítés egyszerűsége, az ügyfelekhez való csatlakoztathatóság terén a könnyű használhatóság, az Ansible-ügyfelek ügynökének hiánya és a szakértelem sokasága miatt. keresztül csatlakoztatva működik SSH a kliensekhez, így nincs szüksége speciális ügynökre a kliens oldalon, és a modulokat a kliensekhez tolva a modulok helyileg végrehajtásra kerülnek a kliens oldalon, és a kimenet visszakerül az Ansible szerverre.

Mivel SSH-t használ, nagyon könnyen tud csatlakozni az ügyfelekhez SSH-kulcsok használatával, leegyszerűsítve az egész folyamatot. Az ügyféladatok, például a gazdagépnevek, IP-címek és SSH-portok leltárfájloknak nevezett fájlokban tárolódnak. Miután létrehozott egy leltárfájlt és feltöltötte azt, az ansible használhatja.

Miért érdemes az Ansible-t használni?

Íme néhány fontos előnye/előnye az Ansible használatának

  • Az Ansible egyik legjelentősebb előnye, hogy mindenki számára ingyenesen használható.
  • Az Ansible telepítéséhez és használatához nincs szükség speciális rendszergazdai ismeretekre, a hivatalos dokumentáció pedig nagyon átfogó.
  • A bővítmények, modulok, készletek és játékkönyvek modularitása miatt az Ansible tökéletes társ a nagy környezetek hangszereléséhez.
  • Az Ansible nagyon könnyű és konzisztens, és nincsenek megkötések az operációs rendszerre vagy az alapul szolgáló hardverre vonatkozóan.
  • Az ügynök nélküli képességei és az OpenSSH biztonsági funkciói miatt nagyon biztonságos is.
  • Egy másik előny, amely ösztönzi az Ansible alkalmazását, a zökkenőmentes tanulási görbe, amelyet az átfogó dokumentáció, valamint a könnyen megtanulható szerkezet és konfiguráció határozza meg.

Ansible története

Íme, fontos tájékozódási pontok az ansible történetéből:

  • 2012 februárjában elkezdődött az Ansible projekt. Először Michael DeHaan, a Cobbler and Func, a Fedora Unified Network Controller megalkotója fejlesztette ki.
  • Az eredetileg AnsibleWorks Inc. névre keresztelt, az ansible eszközt finanszírozó céget 2015-ben vásárolta fel a RedHat, majd később a RedHattal együtt a vállalat égisze alá költözött. IBM.
  • Jelenleg az Ansible olyan disztribúciókban található, mint a Fedora Linux, RHEL, Centos és Oracle Linux.

Az Ansible-ben használt fontos kifejezések

  • Lehetséges szerver

    A gép, amelyre az Ansible telepítve van, és amelyről minden feladat és játékfüzet fut

  • Modulok

    Alapvetően a modul egy parancs vagy hasonló Ansible parancsok halmaza, amelyeket a kliens oldalon kell végrehajtani.

  • Feladat

    A feladat egy olyan szakasz, amely egyetlen elvégzendő eljárásból áll

  • Szerep

    A feladatok és a kapcsolódó fájlok rendszerezésének módja, amelyet később egy játékfüzetben lehet meghívni

  • Tény

    Az ügyfélrendszerből a globális változókból a tények összegyűjtése művelettel lehívott információk

  • Leltár

    A lehetséges klienskiszolgálók adatait tartalmazó fájl. A későbbi példákban hosts fájlként definiálva

  • játszani

    Játékkönyv végrehajtása

  • Handler

    Feladat, amely csak értesítő jelenléte esetén kerül meghívásra

  • Értesítés

    Feladathoz rendelt szakasz, amely meghív egy kezelőt, ha a kimenet megváltozik

  • címke

    A név olyan feladatra van beállítva, amely a későbbiekben csak az adott feladat vagy feladatcsoport kiadására használható.

Lehetséges telepítés Linux alatt

Miután összehasonlította és mérlegelte a lehetőségeit, és úgy döntött, hogy az Ansible-t választja, a következő lépés az, hogy telepítse a rendszerére. A telepítés lépéseit különböző módon fogjuk végigvinni Linux disztribúciók, a legnépszerűbbek, a következő kis oktatóanyagban.

Telepítse az Ansible-t Centos/RedHat rendszerekre

Step 1) Telepítse az EPEL repót

[root@ansible-server ~]# sudo yum install epel-release

Step 2) Telepítse a lehetséges csomagot

[root@ansible-server ~]# sudo  yum install -y ansible

Telepítse az Ansible-t Centos/RedHat rendszerekre

Telepítse az ansible on Ubuntu/Debian rendszerek

Step 1) Frissítse a csomagokat

$ sudo apt update

Step 2) Telepítse a software-properties-common csomagot

$ sudo apt install software-properties-common

Step 3) Telepítse a lehetséges személyes csomagarchívumot

$ sudo apt-add-repository ppa:ansible/ansible

Step 4) Telepítse lehetséges

$ sudo apt update
$ sudo apt install ansible

Lehetséges ad-hoc parancsok

Az Ansible használatának egyik legegyszerűbb módja az ad-hoc parancsok használata. Ezek akkor használhatók, ha parancsokat szeretne kiadni egy szerveren vagy egy csomó szerveren. Az ad-hoc parancsokat a rendszer nem tárolja későbbi felhasználásra, hanem gyors módot jelent a kívánt szerverekkel való interakcióra.

Ehhez az Ansible oktatóanyaghoz egy egyszerű két kiszolgálós hosts fájl lesz konfigurálva, amely tartalmazza a host1-et és a host2-t.

Győződjön meg arról, hogy a gazdagépek elérhetők az ansible szerverről, ha kiad egy ping parancsot az összes gazdagépen.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Lehetséges ad-hoc parancsok

Magyarázat:

  1. A parancs állapota, ebben az esetben SUCCESS
  2. Host, amelyen a parancs futott
  3. A -m paraméteren keresztül kiadott parancs, ebben az esetben a ping
  4. Az -i paraméterrel a hosts fájlra mutathat.


Szükség esetén ugyanazt a parancsot csak egy adott gazdagépen adhatja ki.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Lehetséges ad-hoc parancsok

Magyarázat:

  1. A Limit paraméter csak a gazdagép fájljában található meghatározott gépeken használható parancsok kiadására
  2. A gazdagép neve a leltárfájlban meghatározottak szerint

Ha egy fájlt gyorsan több helyre kell másolnia, használhatja az SCP-t használó ansible másolómodulját. Tehát a parancs és a kimenete az alábbiak szerint néz ki:

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

Lehetséges ad-hoc parancsok

Magyarázat:

  1. Meghatározott modul másolása
  2. A modul argumentumai ebben az esetben a forrás abszolút elérési útja és a cél abszolút elérési útja.
  3. Lehetséges parancskimenet, amely tükrözi a másolási parancs sikerét és egyéb részleteket, például az sha1 vagy md5 ellenőrzőösszegeket a fájl integritásának ellenőrzéséhez és a metaadatokat, például a tulajdonost, a méretet vagy az engedélyeket. Könnyen telepíthető egy csomag egy csomó kiszolgálóra. Az Ansible számos modullal rendelkezik, amelyek kölcsönhatásba lépnek a használt telepítőkkel, például yum, apt, dnf stb.

A következő példában megtudhatja, hogyan telepíthet csomagot a yum modulon keresztül két Centos gazdagépen.

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

Lehetséges ad-hoc parancsok

Magyarázat:

  1. Ebben a példában a Yum modult használjuk
  2. Ez határozza meg a modul argumentumait, és ebben az esetben kiválaszthatja a csomag nevét és állapotát. Ha például az állapot hiányzik, a rendszer megkeresi a csomagot, és ha megtalálja, eltávolítja
  3. Ha sárgára színezi, az ansible parancs kimenete megváltozott állapottal fog megjelenni, ami ebben az esetben azt jelenti, hogy a csomag megtalálható és telepítve lett.
  4. Az ansible-n keresztül kiadott yum install parancs állapota. Ebben az esetben az ncdu.x86_64 0:1.14-1.el7 csomag került telepítésre.

Természetesen a yum telepítő összes opciója használható a lehetséges módon, beleértve a frissítést, telepítést, legújabb verziót vagy eltávolítást.

Az alábbi példában ugyanezt a parancsot adtuk ki a korábban telepített ncdu csomag eltávolítására.

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

Lehetséges ad-hoc parancsok

Magyarázat:

  1. A yum parancs kimenete azt mutatja, hogy a csomagot eltávolították.

Egy másik hasznos és alapvető funkció, amelyet az ansible használ a kliens szerverével való interakcióhoz, hogy összegyűjtsön néhány tényt a rendszerről. Tehát lekéri a hardver-, szoftver- és verziószámítási információkat a rendszerből, és minden értéket egy változóban tárol, amelyet később felhasználhat.

Ha részletes információra van szüksége az ansible-n keresztül módosítandó rendszerekről, akkor a következő parancs használható. A beállítási modul tényeket gyűjt a rendszerváltozókból.

Lehetséges ad-hoc parancsok

Ansible Playbooks

Ansible Playbooks ezek a parancsok parancsfájlokon keresztül történő távoli rendszereknek küldésének módja. A lehetséges játékkönyvek bonyolult rendszerkörnyezetek konfigurálására szolgálnak a rugalmasság növelése érdekében azáltal, hogy egy szkriptet futtatnak egy vagy több rendszeren. A lehetséges játékkönyvek általában inkább konfigurációs nyelvek, mint programozási nyelvek.

A lehetséges playbook parancsok YAML formátumot használnak, így nincs sok szintaxisra szükség, de a behúzást tiszteletben kell tartani. Ahogy a név is mondja, a játékkönyv színdarabok gyűjteménye. Egy játékfüzeten keresztül bizonyos szerepeket jelölhet ki egyes házigazdáknak, és más szerepeket más házigazdáknak. Ezzel több szervert is megszervezhet nagyon változatos forgatókönyvekben, mindezt egyetlen játékkönyvben.

Ahhoz, hogy minden részlet pontos legyen, mielőtt folytatnánk az Ansible játékkönyv-példákat, először meg kell határoznunk egy feladatot. Ezek az interfész a szerepek és a játékkönyvek lehetséges moduljaihoz.

Most tanuljuk meg az Ansible játékkönyvet egy példán keresztül, ahol egy játékkönyv egy játékkal, több feladatot tartalmaz az alábbiak szerint:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Ansible Playbooks

A fenti Ansible playbook példában a gazdagép fájljában található host1 csoportot célozzák meg az lldpad csomag telepítéséhez a yum modul használatával, majd a telepítés után létrehozott szolgáltatás lldpad elindul a rendszerrel való interakcióhoz használt szolgáltatási modul használatával.

Magyarázat:

  1. Házigazdák csoportja, amelyen a játékkönyv futni fog
  2. A Yum modul ebben a feladatban az lldpad telepítéséhez használatos
  3. A szervizmodul segítségével ellenőrizhető, hogy a szolgáltatás működik-e a telepítés után

Minden lehetséges játékkönyv egy leltárfájllal működik. A leltárfájl a kiszolgálók listáját tartalmazza csoportokra bontva az olyan részletek jobb ellenőrzése érdekében, mint pl IP-cím és SSH port minden gazdagéphez.

A leltárfájl, amelyet az Ansible játékkönyv példájához használhat, az alábbiak szerint néz ki. Két csoport van, amelyek neve group1 és group2, amelyek mindegyike tartalmazza a host1-et és a host2-t.

[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

Magyarázat:

  1. Csoport neve
  2. Gazdanév, IP-címmel és ssh-porttal, ebben az esetben az alapértelmezett, 22.

Egy másik hasznos Ansible játékkönyv, amely ezúttal két színdarabot tartalmaz két házigazdának, a következő. A gazdagépek első csoportja, a group1, a selinux engedélyezve lesz. Ha engedélyezve van, akkor egy üzenet jelenik meg a gazdagép képernyőjén.

A gazdagépek második csoportja esetén a httpd csomag csak akkor lesz telepítve, ha az ansible_os_family a RedHat, az ansible_system_vendor pedig a HP.

Az Ansible_os_family és az ansible_system_vendor a collection_facts paraméterrel összegyűjtött változók, és ugyanúgy használhatók, mint ebben a feltételes példában.

---

- 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

Magyarázat:

  1. Példa a when záradékra, Ebben az esetben, amikor az operációs rendszer típusa Debian. Az ansible_os_family változó összegyűjtése a collection_facts funkción keresztül történik.
  2. A feladat kimenete a jövőbeni használatra van regisztrálva enable_selinux néven
  3. Egy másik példa a when záradékra. Ebben az esetben egy üzenet jelenik meg a gazdagép felhasználó számára, ha a SELinux korábban valóban engedélyezve volt.
  4. Egy másik példa a két szabályból álló when záradékra

A feladatokon kívül van néhány speciális feladat is, amelyeket kezelőknek neveznek. A kezelőknek egyedi névvel kell rendelkezniük a játékkönyvben. Ezek ugyanúgy működnek, mint egy normál feladat, de a kezelőt értesítőn keresztül lehet értesíteni.

Ha egy kezelő nem kap értesítést a játékfüzet futtatása közben, akkor az nem fog futni. Ha azonban egynél több feladat értesít egy kezelőt, akkor ez csak egyszer fut le, miután az összes feladat befejeződött.

Az alábbi példában láthatja, hogy egy adott feladatnak hogyan van egy értesítési szakasza, amely egy másik feladatot hív meg. Ha az első feladat kimenete megváltozik, akkor egy kezelő feladat kerül meghívásra. A legjobb példa egy konfigurációs fájl módosítása, majd az adott szolgáltatás újraindítása.

---

- 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

Ebben az esetben, ha az első feladat, az „sshd config file modify port” módosul, ami azt jelenti, hogy ha a port nem 28675, akkor az módosul, és a feladat értesíti az azonos nevű kezelőt, hogy futtassa. , és újraindítja az sshd szolgáltatást.

Ansible Playbooks

Magyarázat:

  1. Példa a bejelentőre
  2. Példa kezelőre

Lehetséges szerepek

Ha kiterjedt játékfüzetekkel foglalkozik, könnyebb a feladatokat szerepekre bontani. Ez a szerepek jövőbeni újrafelhasználását is segíti. A szerepek olyan feladatok gyűjteménye, amelyek áthelyezhetők egyik játékkönyvből a másikba, önállóan futtathatók, de csak egy játékkönyvfájlon keresztül.

A szerepek külön könyvtárakban vannak tárolva, és sajátos könyvtárszerkezettel rendelkeznek.

[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

Az alapértelmezett könyvtárban található yaml fájl tartalmazza azon alapértelmezett változók listáját, amelyeket a játékkönyvvel együtt kell használni. A kezelők könyvtára a kezelők tárolására szolgál. A meta-könyvtárnak információkat kell tartalmaznia a szerzőről és a szerepkör függőségeiről. A feladatok könyvtárában található a szerep fő yaml-fájlja.

A tesztek könyvtára egy minta yaml playbook fájlt és egy minta leltárfájlt tartalmaz, és többnyire tesztelési célokra használják a tényleges szerep létrehozása előtt.

A vars könyvtár tartalmazza a yaml fájlt, amelyben a szerepkör által használt összes változó definiálva lesz. A címtársablonoknak és a címtárfájloknak olyan fájlokat és sablonokat kell tartalmazniuk, amelyeket a szerepkörben lévő feladatok fognak használni.

Egy szerep címtárfájának létrehozásához használja a következő parancsot az utolsó paraméterrel, a szerepnévvel:

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

Az Ansible sablonokkal is jól működik. A sablonkészítés nyelveként a Jinja2-t használja.

A következő példában megtudhatja, hogyan néz ki egy alapvető jinja2 sablon, és egy szerepkörben használhatja.

Futás közben attól függően, hogy melyik adatközpontban található a szerver, több névszerver közül választhat, amelyek mindegyike egy-egy adatközpontnak felel meg, a „resolver_ip_addresses” változó használatával.

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

options timeout:1
options attempts:5
options rotate

Ebben a példában a játékkönyvkönyvtárban néhány változó van definiálva, beleértve a solver_ip_addresses nevű változót, amely az adatközponttól függően eltérő értékekkel rendelkezik.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Lehetséges szerepek

Magyarázat:

  1. A használandó sablon neve. A sablon a sablonok könyvtárában található a szerepkör útvonalában
  2. A sablonnal lecserélendő fájlnév célútvonala az ügyféloldalon.
  3. A célfájl engedélyei

A szerepfeladatoknak lehet egy címkemezője is, amelyhez név van hozzárendelve. Több feladat is megoszthatja ugyanazt a címkét. Egy lehetséges játékkönyv futtatásakor megadhatja a címkét is, így ezek a feladatok végrehajtásra kerülnek.

Ansible esettanulmány

Ebben a részben egy esettanulmányt elemezünk egy alapvetően használható játékkönyvről, amelynek három szerepe van. Ennek célja, hogy gyakorlati példát adjunk arra, amiről korábban beszéltünk. Az Ansible játékkönyv oktatóanyagában korábban használt példák egy része át lesz adaptálva és felhasználva lesz ebben a játékfüzetben.

Az alábbiakban a játékkönyv könyvtárstruktúrája látható. A használni kívánt Yaml fájl a p4.yml lesz.

[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

A játékkönyvnek három szerepe van, az egyik a feloldó, amely egy adott névszervert állít be a kiszolgálókon úgy, hogy egy fájlt a kiszolgálóról az /etc/resolv.conf célhelyre másol. Egy másik a httpd, amely telepíti a httpd csomagot a yum modullal, a harmadik pedig engedélyezi a SELinuxot, és értesíti a bejelentkezett felhasználót a rendszer újraindításáról. Minden szerep az ansible-galaxy paranccsal jött létre.

Feloldó szerep, main.yml feladat:

Ansible esettanulmány

Httpd szerepkör, main.yml feladat:

Ansible esettanulmány

Selinux szerepkör, main.yml feladat:

Ansible esettanulmány

Az alábbiakban látható a p4.yml játékkönyv meghatározása. Minden gazdagépen futni fog, ha a parancssorban nincs másként megadva, root felhasználóként fut a 22-es porton (SSH), összegyűjti a tényeket a szerepek futtatása előtt, és mindhárom korábban említett szerepkört futtatja. Minden szerep önállóan futtatható, ha a címkét az ansible-playbook parancssorban a –t paraméterrel adja meg.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

A p4.yml playbook futtatása két gazdagépen és a kimenet értelmezése. Ugyanez a parancs futtatható a –check paraméterrel szárazonfutás esetén. Ha jelszavas hitelesítést szeretne használni, használja a -k paramétert.

Ansible esettanulmány

Magyarázat:

  1. Ansible-playbook parancs, amely a p4.yml-t futtatja
  2. A Playbook kihagyja a SELinux szerepkört, mert már engedélyezve van.
  3. Az Ansible azt találta, hogy a httpd csomag már telepítve van, tehát rendben van.
  4. A feloldó be van állítva, és a szerepfeloldó állapota megváltozott.

Ansible Commands Cheat Sheet

Telepítse az EPEL repot a Centos/RHEL rendszerekre

[root@ansible-server ~]# sudo yum install epel-release

Telepítse a lehetséges csomagot a Centos/RHEL rendszerekre

[root@ansible-server ~]# sudo  yum install -y ansible

Frissítse a csomagokat a Debian/Ubuntu rendszerek

$ sudo apt update

Telepítse a software-properties-common csomagot a Debian/Ubuntu rendszerek

$ sudo apt install software-properties-common

Egy lehetséges személyes csomagarchívum telepítése a Debian/Ubuntu rendszerek

$ sudo apt-add-repository ppa:ansible/ansible

Telepíthető a Debian/Ubuntu rendszerek

$ sudo apt update
$ sudo apt install ansible

Adjon ki egy ping parancsot a hosts nevű leltárfájlban meghatározott összes kiszolgálón

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

Csak a host2-n adjon ki ping parancsot

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

Másolja a „testfile” fájlt a leltárfájl összes gazdagépére

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Telepítse az ncdu csomagot az összes gazdagépen

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Távolítsa el az ncdu csomagot az összes gazdagépről

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Építse fel a role1 nevű szerep könyvtárszerkezetét.

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

Száraz futású p4.yml játékkönyv

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Futtassa a p4.yml playbook-ot jelszavas hitelesítéssel minden gazdagépen

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Összegzésként

Egy olyan világban, ahol a technológia folyamatosan gyors ütemben változik, és egyben hihetetlenül gyorsan növekszik, a rendszergazdáknak és a fejlesztőknek különböző megközelítéseket kell kidolgozniuk a rutinfeladatok automatizálására és a nagy szerverkészletek összehangolására.

Míg sokan vannak alternatívája az Ansible-nek (Chef, Puppet), amelyek ugyanazt csinálják, némi különbséggel, az Ansible mindegyik fölé tudott emelkedni egyszerűségével, fokozott biztonságával, és ami a legfontosabb, gördülékeny tanulási görbéjével. Az Ansible ezen tulajdonságainak és gyors bevezetésének köszönhetően példákkal teli oktatóanyagot hoztunk létre, így Ön még zökkenőmentesebb első tapasztalatot szerezhet az Ansible-vel való munka során.

Ebben az Ansible alapismeretek oktatóanyagában leírtuk az Ansible-t, és beszéltünk egy kicsit a történetéről. Megemlítettük az Ansible erősségeit és azokat az előnyöket, amelyeket az ansible a különböző méretű infrastruktúrák automatizálásában és hangszerelésében hozhat. Meghatároztuk az alapvető ansible használt kifejezéseket és meghatároztuk az Ansible játékkönyvek szerkezetét. Minden információt részletes példák kísértek részletes magyarázatokkal.