Предпоставки
Ако искате да изпробвате примерите в тази статия, трябва:
1) Инсталирайте Ansible на вашия компютър.
2) Настройте Ubuntu хост, конфигуриран за Ansible автоматизация.
В LinuxHint има много статии, посветени на инсталирането на Ansible и конфигурирането на хостове за автоматизация на Ansible. Можете да проверите тези статии, ако е необходимо.
Създаване на директория на проекти
Преди да продължите напред, създайте нова директория на проекта Ansible, само за да поддържате нещата малко организирани.
За да създадете директория на проекта регистър-демо / и всички необходими поддиректории (в текущата работна директория), изпълнете следната команда:
$ mkdir -pv register-demo / playbooks
След като директорията на проекта е създадена, отидете до директорията на проекта, както следва:
$ cd регистър-демо /
Създавам домакини инвентарен файл, както следва:
$ nano домакини
Добавете IP или DNS името на хоста на вашия Ubuntu хост във файла с инвентара (по един хост на ред), както е показано на екранната снимка по-долу.
Тук добавих моя Ubuntu 20.04 LTS домакин vm3.нодеките.com в ubuntu20 група.
След като приключите, запазете файла, като натиснете
Създайте конфигурационен файл Ansible ансибъл.cfg в директорията на вашия проект, както следва:
$ nano ansible.cfg
След това въведете следните редове в ансибъл.cfg файл:
[по подразбиране]инвентар = хостове
host_key_checking = Невярно
След като приключите, запазете ансибъл.cfg файл, като натиснете
Сега опитайте да пингнете вашия хост на Ubuntu, както следва:
$ ansible ubuntu20 -u ansible -m ping
Както можете да видите, моят Ubuntu 20.04 домакин vm3.нодеките.com е достъпна.
Пример 1: Основите
В този пример ще ви покажа някои от основите на Ansible регистрирам модул. Ще използвам Ansible, за да генерирам произволна парола в моя Ubuntu 20.04 домакин с помощта на pwgen команда, съхранявайте паролата в променлива с помощта на регистрирам модул и отпечатайте паролата на екрана.
Първо създайте новата книга за игри генерира_пропуск.ямъл в книги за игри / директория, както следва:
$ nano playbooks / generiraj_pass.ямъл
Въведете следните редове в генерира_пропуск.ямъл файл:
- хостове: ubuntu20потребител: ansible
стана: Вярно
задачи:
- име: Уверете се, че pwgen е инсталиран
подходящ:
име: pwgen
състояние: присъства
update_cache: Вярно
- name: Генериране на парола
черупка: pwgen -N 1 -s 30
регистър: mypass
- name: Отпечатайте генерираната парола
отстраняване на грешки:
msg: "Паролата е mypass"
След като приключите, натиснете
Следващият ред казва на Ansible да стартира книгата за игри генерира_пропуск.ямъл на всеки хост в ubuntu20 група. В моя случай книгата за игри ще се изпълнява на хоста vm3.нодеките.com.
В тази книга за игри ще дефинирам три задачи.
Първата задача ще гарантира, че pwgen пакетът е инсталиран.
Втората задача ще генерира случайна парола от 30 знака, използвайки pwgen команда. Ще използвам регистрирам модул за съхраняване на генерираната парола в mypass променлива.
Третата задача ще отпечата mypass променлива с помощта на Ansible отстраняване на грешки модул.
Стартирайте книгата за игри генерира_пропуск.ямъл използвайки следната команда:
$ ansible-playbook playbooks / generated_pass.ямъл
Както можете да видите, книгата за игри работи успешно. Генерирана е и парола.
Но защо променливата mypass отпечатайте толкова много елементи?
Е, променливата mypass е обект, който съдържа някои важни свойства.
Най-важните свойства на всеки от регистрирам променливите са както следва:
cmd - Командата, която се изпълнява за генериране на изхода.
stdout - Изходът на командата.
stderr - Изходът за грешка на командата.
старт - Датата и часът, когато командата започва да се изпълнява.
край - Датата и часът, когато командата завършва с изпълнението.
делта - Времето, необходимо за стартиране на командата. Това е разликата между край и старт Имоти.
stdout_lines - Масив, съдържащ всеки изходен ред на командата. Същото като stdout, но stdout разделя редовете, използвайки символи за нов ред (\ n) вместо масиви.
stderr_lines - Масив, съдържащ всеки ред за извеждане на грешка на командата. Същото като stderr, но stderr разделя редовете, използвайки символи за нови редове (\ n) вместо масиви.
Ако просто искате да отпечатате / да получите достъп до низа с парола (което е много вероятно), можете да отпечатате / да получите достъп до stdout собственост на mypass променлива във вашата книга за игри, както е отбелязано на екранната снимка по-долу.
$ nano playbooks / generiraj_pass.ямъл
След като приключите, стартирайте книгата с игри генерира_пропуск.ямъл отново. Ще бъде отпечатан само низът с парола, както можете да видите на екранната снимка по-долу.
Това обхваща основите на Ansible регистрирам модул.
Пример 2: Съдържание на директорията на магазина
В този пример ще ви покажа как да съхранявате съдържанието на директория в променлива, използвайки Ansible регистрирам модул, както и как да се итерира над тях.
Първо създайте новата книга за игри get_dir_contents.ямъл в книги за игри / директория.
$ nano playbooks / get_dir_contents.ямъл
След това въведете следните редове в get_dir_contents.ямъл книга за игри:
- хостове: ubuntu20потребител: ansible
стана: Вярно
задачи:
- име: Избройте всички файлове и директории в / home / ansible
черупка: ls / home / ansible
регистър: dir_contents
- name: Отпечатайте съдържанието на директорията с помощта на цикли
отстраняване на грешки:
съобщение: "item"
цикъл: "dir_contents.stdout_lines "
След като приключите, натиснете
В тази книга за игри ще дефинирам две задачи.
Първата задача изброява цялото съдържание на / начало / анзибъл директория и ги съхранява в dir_contents променлива.
Втората задача отпечатва dir_contents променлива.
Стартирайте get_dir_contents.ямъл playbook, както следва.
$ ansible-playbook playbooks / get_dir_contents.ямълКакто можете да видите, stdout_lines свойството съхранява съдържанието на директорията като масив. The stdout свойството също се съхранява в съдържанието на директорията. Тези свойства са разделени от символи за нов ред (\ n). В този пример, stdout_lines с имота се работи лесно.
След това прегледайте съдържанието на директорията с помощта на цикъл.
За да направите това, отворете get_dir_contents.ямъл playbook и променете втората задача, както е отбелязано на екранната снимка по-долу.
$ nano playbooks / get_dir_contents.ямъл
Ето, преглеждам dir_contents.stdout_lines масив с помощта на цикъл и отпечатване на елементите на масива с помощта на Ansible отстраняване на грешки модул. В тази задача, вещ променливата е циклична променлива, използвана за итерация над елементите на масива.
Стартирайте get_dir_contents.ямъл playbook, както следва:
$ ansible-playbook playbooks / get_dir_contents.ямълКакто можете да видите, съдържанието на / начало / анзибъл директория се отпечатват на екрана.
Пример 3: Архивиране на директория
В този пример ще ви покажа как да архивирате директория с помощта на Ansible регистрирам, файл, и копие модули.
Първо създайте новата книга за игри backup_home_dir.ямъл в книги за игри / директория, както следва:
$ nano playbooks / backup_home_dir.ямъл
След това въведете следните редове в backup_home_dir.ямъл файл.
- хостове: ubuntu20потребител: ansible
стана: Вярно
задачи:
- name: Вземете съдържанието на началната директория / начало / отговор
черупка: ls / home / ansible
регистър: dir_contents
- name: Създайте нова директория / tmp / ansible
файл:
път: / tmp / ansible
състояние: директория
- name: Архивиране на домашна директория / home / ansible в / tmp / ansible
копие:
src: / home / ansible / item
dest: / tmp / ansible /
remote_src: Вярно
цикъл: "dir_contents.stdout_lines
След като приключите, натиснете
В тази книга за игри ще дефинирам три задачи.
Първата задача съхранява съдържанието на / начало / анзибъл директория (директорията, която ще архивирам) в dir_contents променлива с помощта на Ansible регистрирам модул.
Втората задача създава нова директория / tmp / ansible използвайки Ansible файл модул. Това е директорията, в която ще се съхранява архивът.
Третата задача завърта през dir_contents.stdout_lines масив и използва Ansible копие модул за копиране на всяка директория в / tmp / ansible / директория.
Стартирайте backup_home_dir.ямъл playbook, както следва:
$ ansible-playbook playbooks / backup_home_dir.ямъл
Както можете да видите, на моя Ubuntu 20.04 LTS хост, архивирането беше успешно.
Пример 4: Изпълнение или пропускане на задачи
В този пример ще ви покажа как да изпълнявате или пропускате задачи, в зависимост от променливата, която сте регистрирали, като използвате регистрирам модул.
Първо създайте новата книга за игри register_conditions.ямъл в книги за игри / директория, както следва:
$ nano playbooks / register_conditions.ямъл
След това въведете следните редове в register_conditions.ямъл файл.
- хостове: ubuntu20потребител: ansible
стана: Вярно
задачи:
- name: Списък на съдържанието на директорията
черупка: ls / home / ansible / test3
регистър: dir_contents
- name: Проверете дали директорията е празна
отстраняване на грешки:
msg: "Директорията е празна."
когато: dir_contents.stdout == ""
След като приключите, натиснете
В тази книга за игри определих две задачи.
Първата задача съхранява съдържанието на / home / ansible / test3 директория в dir_contents променлива.
Втората задача проверява дали dir_contents.stdout е празен низ или дали директорията / home / ansible / test3 празно е. Ако директорията е празна, съобщението Директорията е празна ще отпечата.
Стартирайте register_conditions.ямъл playbook, както следва:
$ ansible-playbook playbooks / register_conditions.ямълКакто можете да видите, книгата за игри работи успешно.
Тъй като директорията / home / ansible / test3 е празно, книгата за игри отпечатва съобщението Директорията е празна.
След това създайте нов файл в / home / ansible / test3 директория.
$ touch test3 / myfile
Тъй като / home / ansible / test3 директория вече не е празна, задачата Проверете дали директорията е празна се пропуска, както можете да видите на екранната снимка по-долу.
$ ansible-playbook playbooks / register_conditions.ямъл
Заключение
Отговорното регистрирам модул е много полезен за сървърна автоматизация. Тази статия ви показа основите на регистрирам модул, включително примери за използване на Ansible регистрирам модул за съхранение и архивиране на директории и за изпълнение на задачи в директорията.