GNU/Linux >> Znalost Linux >  >> Linux

Deconstructing ansible playbook

Tento článek popisuje různé části příručky Ansible, počínaje velmi širokým přehledem toho, co je Ansible a jak jej můžete používat. Ansible je způsob, jak používat snadno čitelnou syntaxi YAML k psaní příruček, které za vás mohou automatizovat úkoly. Tyto příručky se mohou pohybovat od velmi jednoduchých po velmi složité a jednu příručku lze dokonce vložit do jiné.

Instalace httpd pomocí příručky

Nyní, když máte základní znalosti, pojďme se podívat na základní příručku, která nainstaluje httpd balík. Mám soubor inventáře se dvěma určenými hostiteli a umístil jsem je na web skupina:

[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com

Podívejme se na skutečnou příručku, abychom viděli, co obsahuje:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
  hosts: web
  tasks:
    - name: this is the task to install httpd
      yum:
        name: httpd
        state: latest

Když to rozeberete, uvidíte, že první řádek v playbooku je --- . To vám dává vědět, že je to začátek příručky. Dále jsem dal hře název. Jedná se pouze o jednoduchý playbook s pouze jednou hrou, ale složitější playbook může obsahovat více her. Dále specifikuji hostitele, na které chci cílit. V tomto případě volím web skupinu, ale mohl jsem zadat buď ansibleclient.usersys.redhat.com nebo ansibleclient2.usersys.redhat.com místo toho, pokud bych nechtěl cílit na oba systémy. Další řádek říká Ansible, že se pustíte do úkolů, které dělají skutečnou práci. V tomto případě má můj playbook pouze jeden úkol, ale pokud chcete, můžete mít úkolů více. Zde specifikuji, že budu instalovat httpd balík. Další řádek říká, že použiji yum modul. Potom mu řeknu název balíčku, httpd a že chci, aby byla nainstalována nejnovější verze.

[ Čtenářům se také líbilo: Začínáme s Ansible ]

Když spustím httpd.yml playbook dvakrát, dostanu na terminál toto:

[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible test]#

Všimněte si, že v obou případech jsem obdržel ok=2 , ale ve druhém spuštění playbooku se nic nezměnilo. Nejnovější verze httpd byl v tomto okamžiku již nainstalován.

Chcete-li získat informace o různých modulech, které můžete v playbooku použít, můžete použít ansible-doc příkaz. Například:

[root@ansible test]# ansible-doc yum
> YUM    (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.

  * This module is maintained by The Ansible Core Team
  * note: This module has a corresponding action plugin.
< output truncated >

Je hezké mít příručku, která instaluje httpd , ale aby to bylo flexibilnější, můžete místo pevného kódování balíčku jako httpd použít proměnné . Chcete-li to provést, můžete použít příručku, jako je tato:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest

Zde vidíte, že jsem přidal sekci s názvem „vars“ a deklaroval jsem proměnnou myrpm s hodnotou httpd . Potom mohu použít myrpm proměnnou v playbooku a upravit ji podle toho, co chci nainstalovat. Také, protože jsem určil RPM k instalaci pomocí proměnné, mohu přepsat to, co jsem napsal v playbook, zadáním proměnné na příkazovém řádku pomocí -e :

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"

PLAY [this playbook will install at] ***************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible test]#

Dalším způsobem, jak zvýšit dynamiku úkolů, je použití smyček . V tomto úryvku můžete vidět, že jsem deklaroval otáčky za minutu jako seznam mít mailx a postfix . K jejich použití používám loop v mém úkolu:

 vars:
    rpms:
      - mailx
      - postfix

  tasks:
    - name: this will install the rpms
      yum:
        name: "{{ item }}"
        state: installed
      loop: "{{ rpms }}"

Možná jste si všimli, že při spuštění těchto her se shromažďují fakta o hostitelích:

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]


Tyto skutečnosti lze použít jako proměnné při spuštění hry. Můžete mít například motd.yml soubor, který nastavuje obsah jako:

“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”

Pro každý systém, kde spustíte tuto příručku, bude nastaven správný plně kvalifikovaný název domény (FQDN), distribuce operačního systému a verze distribuce, a to i bez ručního definování těchto proměnných.

[ Potřebujete více o Ansible? Absolvujte bezplatný kurz technického přehledu od společnosti Red Hat. Ansible Essentials:Jednoduchost v technickém přehledu automatizace. ] 

Sbalit

Toto byl rychlý úvod do toho, jak Ansible playbooky vypadají, co dělají různé části a jak můžete získat více informací o modulech. Další informace jsou k dispozici v dokumentaci Ansible.


Linux
  1. Jak vytvořit Ansible Playbook

  2. Použití Ansible playbooku ke správě aktualizací pracovní stanice a serveru

  3. Jak předat další proměnné do příručky Ansible

  1. Nakonfigurujte si svého démona Chrony pomocí příručky Ansible

  2. Jak nainstalovat softwarové balíčky pomocí Ansible playbooku

  3. jak vytvořit Ansible playbook pro získání verzí OS vzdálených hostitelů?

  1. Ansible Playbook Dry Run:Spusťte Playbook v kontrolním režimu

  2. Ansible Playbook:Jak vytvářet a konfigurovat Playbooky

  3. Jak používat značky v Ansible Playbook (příklady)