Ansible Урок за начинаещи: Наръчник, команди и пример

Какво е Ansible?

Ansible е инструмент за автоматизация и оркестрация с отворен код за предоставяне на софтуер, управление на конфигурацията и внедряване на софтуер. Ansible може лесно да стартира и конфигурира Unix-подобни системи, както и Windows системи за предоставяне на инфраструктура като код. Той съдържа собствен декларативен език за програмиране за конфигуриране и управление на системата.

Ansible е популярен със своята простота на инсталиране, лекота на използване по отношение на връзката с клиентите, липсата на агент за клиенти на Ansible и множеството умения. Функционира чрез свързване чрез SSH към клиентите, така че не се нуждае от специален агент от страна на клиента и чрез натискане на модули към клиентите, модулите след това се изпълняват локално от страна на клиента и изходът се връща обратно към Ansible сървъра.

Тъй като използва SSH, той може много лесно да се свързва с клиенти, използвайки SSH-ключове, като опростява целия процес. Подробностите за клиента, като имена на хостове или IP адреси и SSH портове, се съхраняват във файлове, наречени инвентарни файлове. След като създадете инвентарен файл и го попълните, ansible може да го използва.

Защо да използвате Ansible?

Ето някои важни плюсове/ползи от използването на Ansible

  • Едно от най-значимите предимства на Ansible е, че е безплатен за използване от всички.
  • Не са необходими специални умения на системен администратор, за да инсталирате и използвате Ansible, а официалната документация е много изчерпателна.
  • Неговата модулност по отношение на плъгини, модули, описи и книги за игри прави Ansible идеалният спътник за оркестриране на големи среди.
  • Ansible е много лек и последователен и няма ограничения по отношение на операционната система или основния хардуер.
  • Освен това е много сигурен поради възможностите си без агенти и поради използването на функции за сигурност на OpenSSH.
  • Друго предимство, което насърчава приемането на Ansible, е неговата плавна крива на обучение, определена от изчерпателната документация и лесната за научаване структура и конфигурация.

История на Ansible

Ето важни забележителности от историята на анзибъл:

  • През февруари 2012 г. стартира проектът Ansible. За първи път е разработен от Michael DeHaan, създателят на Cobbler and Func, Fedora Unified Network Controller.
  • Първоначално наречена AnsibleWorks Inc, компанията, финансираща инструмента ansible, беше придобита през 2015 г. от RedHat и по-късно, заедно с RedHat, премина под шапката на IBM.
  • В момента Ansible се включва в дистрибуции като Fedora Linux, RHEL, Centos и Oracle Linux.

Важни термини, използвани в Ansible

  • Ansible сървър

    Машината, на която е инсталиран Ansible и от която ще се изпълняват всички задачи и книги за игри

  • Модули

    По принцип модулът е команда или набор от подобни Ansible команди, предназначени да бъдат изпълнени от страна на клиента

  • Task

    Задачата е раздел, който се състои от една процедура, която трябва да бъде изпълнена

  • Роля

    Начин за организиране на задачи и свързани файлове, които по-късно да бъдат извикани в книга за игра

  • факт

    Информация, извлечена от клиентската система от глобалните променливи с операцията за събиране на факти

  • Опис

    Файл, съдържащ данни за анзибилните клиентски сървъри. Дефиниран в следващите примери като hosts файл

  • Пусни видео

    Изпълнение на книга-игра

  • треньор

    Задача, която се извиква само ако има нотификатор

  • Известител

    Секция, приписана на задача, която извиква манипулатор, ако изходът е променен

  • Tag

    Име, зададено на задача, която може да се използва по-късно за издаване само на тази конкретна задача или група от задачи.

Ansible инсталация в Linux

След като сравните и претеглите възможностите си и решите да изберете Ansible, следващата стъпка е да го инсталирате на вашата система. Ще преминем през стъпките на инсталиране в различни Linux дистрибуции, най-популярните, в следващия малък урок.

Инсталирайте Ansible на Centos/RedHat системи

Стъпка 1) Инсталирайте EPEL repo

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

Стъпка 2) Инсталирайте ansible пакет

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

Инсталирайте Ansible на Centos/RedHat системи

Инсталирайте ansible на Ubuntu/Debian системи

Стъпка 1) Извършете актуализация на пакетите

$ sudo apt update

Стъпка 2) Инсталирайте общия пакет софтуерни свойства

$ sudo apt install software-properties-common

Стъпка 3) Инсталирайте невъзможен личен архив на пакети

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

Стъпка 4) Инсталирайте ansible

$ sudo apt update
$ sudo apt install ansible

Ansible ad-hoc команди

Един от най-простите начини, по които Ansible може да се използва, е чрез използване на ad-hoc команди. Те могат да се използват, когато искате да издадете някои команди на сървър или група сървъри. Ad-hoc командите не се съхраняват за бъдеща употреба, но представляват бърз начин за взаимодействие с желаните сървъри.

За този урок за Ansible ще бъде конфигуриран прост файл с хостове на два сървъра, съдържащ host1 и host2.

Можете да се уверите, че хостовете са достъпни от ansible сървъра, като издадете команда ping на всички хостове.

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

Ansible ad-hoc команди

Обяснение:

  1. Статус на командата, в този случай УСПЕХ
  2. Хост, на който е изпълнена командата
  3. Командата, издадена чрез параметъра -m, в този случай ping
  4. С параметъра -i можете да посочите файла hosts.


Можете да подадете същата команда само на конкретен хост, ако е необходимо.

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

Ansible ad-hoc команди

Обяснение:

  1. Параметърът Limit може да се използва за издаване на команди само на определени хостове във файла на хоста
  2. Име на хоста, както е дефинирано във файла с инвентара

Ако трябва бързо да копирате файл на множество дестинации, можете да използвате модула за копиране в ansible, който използва SCP. Така че командата и нейният изход изглеждат по-долу:

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

Ansible ad-hoc команди

Обяснение:

  1. Дефиниран модул за копиране
  2. Аргументите на модула в този случай са абсолютен път на източника и абсолютен път на местоназначение.
  3. Анзибилен команден изход, отразяващ успеха на командата за копиране и други подробности като sha1 или md5 контролни суми за проверка на целостта на файла и метаданни като собственик, размер или разрешения. Лесно е да имате пакет инсталиран на куп сървъри. Ansible има няколко модула, които взаимодействат с използвани инсталатори, като yum, apt, dnf и др.

В следващия пример ще разберете как да инсталирате пакет чрез модула yum на два хоста на Centos.

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

Ansible ad-hoc команди

Обяснение:

  1. В този пример се използва модул Yum
  2. Той дефинира аргументите на модула и в този случай ще изберете името на пакета и неговото състояние. Ако състоянието отсъства, например, пакетът ще бъде претърсен и ако бъде открит, премахнат
  3. Когато е оцветен в жълто, ще видите резултата от командата ansible с променено състояние, което в този случай означава, че пакетът е намерен и инсталиран.
  4. Състояние на командата за инсталиране на yum, издадена чрез ansible. В този случай беше инсталиран пакетът ncdu.x86_64 0:1.14-1.el7.

Разбира се, всички опции на инсталатора на yum могат да се използват чрез ansible, включително актуализиране, инсталиране, най-нова версия или премахване.

В примера по-долу същата команда беше издадена за премахване на предварително инсталирания пакет ncdu.

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

Ansible ad-hoc команди

Обяснение:

  1. Резултатът от командата yum показва, че пакетът е премахнат.

Друга полезна и съществена функция, която ansible използва за взаимодействие със сървъра на клиента, е да събере някои факти за системата. И така, той извлича информация за хардуер, софтуер и версии от системата и съхранява всяка стойност в променлива, която може да се използва по-късно.

Ако имате нужда от подробна информация за системите, които трябва да бъдат модифицирани чрез ansible, може да се използва следващата команда. Модулът за настройка събира факти от системните променливи.

Ansible ad-hoc команди

Ansible Playbooks

Ansible Playbooks са начинът за изпращане на команди към отдалечени системи чрез скриптове. Ansible playbooks се използват за конфигуриране на сложни системни среди за увеличаване на гъвкавостта чрез изпълнение на скрипт към една или повече системи. Ansible playbooks са по-скоро език за конфигуриране, отколкото език за програмиране.

Командите на Ansible playbook използват YAML формат, така че не е необходим много синтаксис, но отстъпът трябва да се спазва. Както казва името, книгата е колекция от пиеси. Чрез книга за игри можете да определите конкретни роли на някои хостове и други роли на други хостове. По този начин можете да организирате множество сървъри в много разнообразни сценарии, всичко това в една книга.

За да имаме всички детайли точни, преди да продължим с примерите на Ansible playbook, първо трябва да дефинираме задача. Това са интерфейсът към анзибилни модули за роли и книги за игра.

Сега нека научим Ansible playbook чрез пример с една playbook с една игра, съдържащ множество задачи, както е показано по-долу:

---

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

Ansible Playbooks

В горния пример на Ansible playbook групата1 от хостове във файла на хоста е насочена за инсталиране на пакет lldpad с помощта на модула yum и след това услугата lldpad, създадена след инсталацията, се стартира с помощта на сервизния модул, използван най-вече за взаимодействие с ансамбъла systemd.

Обяснение:

  1. Група от хостове, на които ще се изпълнява книгата
  2. Модулът Yum се използва в тази задача за инсталиране на lldpad
  3. Сервизният модул се използва за проверка дали услугата работи и работи след инсталирането

Всяка ansible playbook работи с инвентарен файл. Файлът с инвентара съдържа списък със сървъри, разделени на групи за по-добър контрол за подробности като IP Адрес и SSH порт за всеки хост.

Файлът с инвентара, който можете да използвате за този пример на Ansible playbook, изглежда по-долу. Има две групи, наречени group1 и group2, всяка от които съдържа съответно host1 и host2.

[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

Обяснение:

  1. Име на групата
  2. Име на хост, с IP адрес и ssh порт, в този случай, по подразбиране, 22.

Друг полезен пример за Ansible playbook, съдържащ този път две пиеси за двама домакини, е следващият. За първата група хостове, group1, selinux ще бъде активиран. Ако е активирано, на екрана на хоста ще се появи съобщение.

За втората група хостове httpd пакетът ще бъде инсталиран само ако ansible_os_family е RedHat и ansible_system_vendor е HP.

Ansible_os_family и ansible_system_vendor са променливи, събрани с опцията gather_facts и могат да се използват като в този условен пример.

---

- 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

Обяснение:

  1. Пример за клаузата when, В този случай, когато типът на OS е Debian. Променливата ansible_os_family се събира чрез функционалността gather_facts.
  2. Резултатът от задачата е регистриран за бъдеща употреба с името му enable_selinux
  3. Друг пример за клаузата when. В този случай ще се покаже съобщение за потребителя на хоста, ако SELinux наистина е бил активиран преди.
  4. Друг пример за клаузата when, състояща се от две правила

Освен задачите, има и някои конкретни задачи, наречени манипулатори. Манипулаторите трябва да имат уникално име в цялата книга. Те работят по същия начин като обикновена задача, но манипулаторът може да бъде уведомен чрез нотификатор.

Ако манипулатор не бъде уведомен по време на изпълнението на книгата за игра, тя няма да се изпълни. Въпреки това, ако повече от една задача уведоми манипулатор, това ще се изпълни само веднъж, след като всички задачи са завършени.

В примера, показан по-долу, можете да видите как конкретна задача има раздел за уведомяване, който извиква друга задача. Ако изходът на първата задача се промени, тогава ще бъде извикана задача за обработка. Най-добрият пример е да промените конфигурационния файл и след това да рестартирате тази конкретна услуга.

---

- 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

В този случай, ако първата задача, „sshd config file modify port“ е променена, което означава, че ако портът не е 28675 на първо място, тогава тя ще бъде променена и задачата ще уведоми манипулатора със същото име да се изпълни и ще рестартира sshd услугата.

Ansible Playbooks

Обяснение:

  1. Пример за нотификатор
  2. Пример за манипулатор

Анзибилни роли

Когато работите с обширни книги-игри, е по-лесно да разделите задачите на роли. Това също помага при повторното използване на ролите в бъдеще. Ролите са набор от задачи, които могат да се преместват от една книга с игри в друга, могат да се изпълняват независимо, но само чрез файл с книга с игри.

Ролите се съхраняват в отделни директории и имат определена структура на директория.

[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

Файлът yaml в директорията по подразбиране съдържа списък с променливи по подразбиране, които трябва да се използват заедно с книгата за игра. Директорията с манипулатори се използва за съхраняване на манипулатори. Предполага се, че мета-директорията съдържа информация за автора и зависимостите на ролите. В директорията със задачи има основния yaml файл за ролята.

Директорията за тестове съдържа примерен файл с книга за yaml и примерен файл с инвентаризация и се използва най-вече за целите на тестването, преди да създаде действителната роля.

Директорията vars съдържа файла yaml, в който ще бъдат дефинирани всички променливи, използвани от ролята. Шаблоните на директорията и файловете на директорията трябва да съдържат файлове и шаблони, които ще се използват от задачите в ролята.

За да създадете дърво на директория за роля, трябва да използвате следната команда с последния параметър, името на ролята:

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

Ansible също работи добре с шаблони. Като език за шаблони той използва Jinja2.

В следващия пример ще разберете как изглежда основен шаблон jinja2 и ще го използвате в роля.

По време на изпълнение, в зависимост от това, да речем, в кой център за данни се намира вашият сървър, можете да изберете от повече от един сървър на имена, всеки от които съответства на център за данни, като използвате променливата „resolver_ip_addresses“.

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

options timeout:1
options attempts:5
options rotate

В този пример в директорията на playbook има дефинирани някои променливи, включително променлива с име resolver_ip_addresses с различни стойности в зависимост от центъра за данни.

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

Анзибилни роли

Обяснение:

  1. Име на шаблона, който ще се използва. Шаблонът се намира в директорията шаблони в пътя на ролята
  2. Целевият път на името на файла, който ще бъде заменен с шаблона, от страна на клиента.
  3. Разрешения на целевия файл

Задачите с роли могат също да имат поле за етикет, което има приписано име. Повече от една задача може да споделя един и същ етикет. Когато изпълнявате ansible playbook, можете също да посочите етикета, така че тези задачи да бъдат изпълнени.

Ansible Казус

В този раздел ще анализираме казус от основна книга за игра, която има три роли. Целта на това е да се даде практически пример за това, за което говорихме преди. Някои от примерите, използвани преди в този урок на книгата за игра Ansible, ще бъдат адаптирани и използвани в тази книга игра.

По-долу е структурата на директорията на книгата. Файлът Yaml, който ще се използва, ще бъде 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

Наръчникът има три роли, едната наречена преобразувател, която задава конкретен сървър за имена на сървърите чрез копиране на файл от сървъра до дестинацията /etc/resolv.conf. Друг се нарича httpd и инсталира пакета httpd с модул yum, а третият активира SELinux и уведомява регистрирания потребител да рестартира системата. Всяка роля е създадена с помощта на командата ansible-galaxy.

Роля на преобразувател, main.yml задача:

Ansible Казус

Httpd роля, main.yml задача:

Ansible Казус

Роля на Selinux, main.yml задача:

Ansible Казус

По-долу е дефинираната книга за игра p4.yml. Той ще работи на всички хостове, ако не е указано друго в командния ред, ще работи като root потребител на порт 22 (SSH), ще събира факти, преди да изпълни ролите, и ще изпълнява всичките три роли, споменати по-горе. Всяка роля може да се изпълнява независимо чрез указване на етикета в командния ред на ansible-playbook с параметъра –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 playbook на два хоста и интерпретиране на изхода. Същата команда може да се изпълни с параметъра –check за работа на сухо. В случай, че искате да използвате удостоверяване с парола, използвайте -k параметър.

Ansible Казус

Обяснение:

  1. Команда Ansible-playbook, която изпълнява p4.yml
  2. Playbook пропуска ролята на SELinux, защото вече е активирана.
  3. Ansible установи, че пакетът httpd вече е инсталиран, така че се връща добре.
  4. Резолверът беше зададен и статусът на резолвера на ролите беше променен.

Ansible Commands Cheat Sheet

Инсталирайте EPEL repo на Centos/RHEL системи

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

Инсталирайте ansible пакет на Centos/RHEL системи

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

Извършете актуализация на пакетите на Debian/Ubuntu системи

$ sudo apt update

Инсталирайте пакета software-properties-common на Debian/Ubuntu системи

$ sudo apt install software-properties-common

Инсталирайте ansible личен архив на пакети на Debian/Ubuntu системи

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

Инсталирайте ansible на Debian/Ubuntu системи

$ sudo apt update
$ sudo apt install ansible

Издайте команда ping на всички сървъри, дефинирани в инвентарния файл с име hosts

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

Издайте команда ping само на host2

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

Копирайте файла „testfile“ на всички хостове във файла с инвентара

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

Инсталирайте пакета ncdu на всички хостове

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

Премахнете пакета ncdu на всички хостове

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

Изградете структурата на директория за роля с име role1.

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

Игра на p4.yml на сухо

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

Стартирайте p4.yml playbook с удостоверяване с парола за всички хостове

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

Oбобщение

В свят с технологии, които непрекъснато се променят с бързи темпове и се разрастват невероятно бързо в същото време, системните администратори и инженерите на devops трябва да помислят за различни подходи за това как да автоматизират рутинни задачи и да организират големи групи от сървъри.

Докато има много алтернатива на Ansible (Chef, Puppet), които правят едно и също нещо с някои разлики, Ansible успя да се издигне над всички тях със своята простота, подобрена сигурност и най-важното с плавната си крива на обучение. Благодарение на тези качества и бързото възприемане на Ansible, ние създадохме урок, пълен с примери, така че можете да имате още по-безпроблемен първи опит в работата с Ansible.

В този урок за основите на Ansible описахме ansible и говорихме малко за неговата история. Споменахме силните страни на Ansible и предимствата, които ansible може да донесе на автоматизацията и оркестрацията на инфраструктури с различни размери. Дефинирахме основните термини, използвани от анзибъл, и дефинирахме структурата на книгите за игра на Ansible. Цялата информация е придружена от подробни примери с подробни обяснения.