Tartalomjegyzék
Ansible-playbook kezdés
- Szerző: Sallai András
- Copyright © Sallai András, 2019
- Web: http://szit.hu
Az ansible-playbook
Az ansible-playbook esetén egy YAML típusú fájlban leírjuk a célgépek kívánt állapotát, majd az ansible-playbook paranccsal elindítjuk a célgépek megfelelő állapotba hozását. A gépek állapotát leíró fájlt nevezhetjük playbook-nak.
Előkészítés
A playbook használata során használhatjuk a központi /etc/ansible/ansible.cfg konfigurációs fájlt, vagy írhatunk saját konfigurációs fájlt a ~/.ansible.cfg állományban, de a helyi könyvtárban is létrehozhatunk egyet. Mi ez utóbbit fogjuk követni.
Hozzunk létre egy munkakönyvtárat:
$ mkdir szerverek
Globális konfigurációs fájl helyett itt fogunk egyet létrehozni. (Van aki egyszerűen lemásolja a /etc/anisble könyvtárat a munkakönyvtárba.)
$ cd szerverek $ nano ansible.cfg
Az ansible.cfg tartalma:
- ansible.cfg
[defaults] inventory = hosts
A konfigurációs fájlban közöltük, hogy az aktuális könyvtárban fogunk létrehozni egy hosts fájlt, ezt használjuk.
Hozzuk létre hosts fájlt:
$ nano hosts
Tartalma:
- hosts
gep1 gep2 gep3
Ha név alapján nem érhetők el a szerverek, akkor használjunk IP címet.
Playbook készítése
A playbook egy YAML formátumú állomány, amelyben leírjuk a távoli gép elérni kívánt állapotát.
A playbook-t mindig a célgépek csoportnevének megadásával kezdjük. Ezt követően adjunk meg a feladatokat. A feladatokat nevükkel kezdjük. Az alábbi példa egy távoli Debianos, gep1 nevű gépen telepíti az apache webszervert.
- setup_apache.yml
--- - hosts: gepek1 remote_user: janos tasks: - name: Webszerver telepítése apt: name: apache2 state: present update_cache: yes become: yes
Indítás
A telepítés a három gépre ezek után:
ansible-playbook setup_apache.yml
A parancsnak megadható hosts fájl, a -i kapcsolóval:
ansible-playbook -i hostfile setup_apache.yml
Megadhatunk egyetlen gépet is:
ansible-playbook -i "gep1," setup.yml
A vessző nagyon fontos, mivel ebből derül ki, hogy egy listáról van szó, nem fájlnévről.
IP címet is megadhatunk:
ansible-playbook -i "192.168.10.3," setup.yml
Az idézőjelek is elhagyhatók:
ansible-playbook -i 192.168.10.3, setup.yml
Csomagkezelés
- name: .deb csomag telepítése apt: deb: /tmp/csomag.deb
- name: Nem szükséges függőségek törlése apt: autoremove: yes
- name: A vmi nevű csomag törlése apt: name: vmi state: absent
Csoportok és felhasználók
Célunk, hogy felvegyünk egy dev nevű csoportot, majd egy kati nevű felhasználót, akit elhelyezünk a dev csoportban.
- setup_user.yml
--- - hosts: all remote_user: janos tasks: - name: Dev csoport group: name: dev state: present become: yes - name: Felhasználó felvétele user: name: kati comment: Pereces Katalin shell: /bin/bash password: "{{'titok' | password_hash('sha512', 'soso')}}" become: yes
Felhasználó törlése:
- setup_userdel.yml
--- - hosts: all remote_user: janos tasks: - name: Felhasználó törlése user: name: kati state: absent remove: yes become: yes
Fájlok másolása
Másolás távoli gépre
A kontrollgépről szeretnénk egy állomány a gépekre másolni.
- fajlFeltoltes.yml
--- - hosts: all remote_user: janos tasks: - name: Fájl feltöltése (másolása) a gépekre copy: src: /home/janos/adat.txt dest: /srv/adat.txt become: yes
A távoli gépeken belül fájlok másolása
Tulajdonképpen egy plusz sort kell beillesztenem:
- fajlMasolas.yml
--- - hosts: all remote_user: janos tasks: - name: Fájl másolása a gépeken copy: src: /home/janos/adat.txt dest: /srv/adat.txt remote_src: yes become: yes
Fájlok attribútumai
Fájlok attribútumait, csak az ansible 2.3 verziójától lehet ilyen formában állítani; a Debian 9 verziója, viszont csak a 2.2 tartalmazza. Ha használni akarjuk, akkor telepítsünk újabbat.
- setup_fajl_attr.yml
--- - hosts: all remote_user: janos tasks: - name: Fájl attribútum beállítása file: path: /srv/adat.txt attr: +i become: yes
Ha el akarjuk venni az i-t:
attr: -i
Tetszőleges parancs végrehajtása
- setup_parancs.yml
--- - hosts: all remote_user: janos tasks: - name: Parancs végrehajtása command: "chattr +i adat.txt" become: yes
Végrehajtás helyi gépen
- helyben.yml
--- hosts: localhost gather_facts: no tasks: - name: ide jöhetnek a műveletek ...