task automation using ansible playbooks
Вивчіть автоматизацію завдань, використовуючи Ansible playbooks та Ansible vault для захисту конфіденційних даних:
У нашому попередньому підручнику Ansible No1 ми дізналися про різні компоненти Ansible та про те, як встановити та налаштувати цей інструмент за допомогою різних модулів. Ми також бачили, як модулі використовуються для виконання однієї функції чи завдання.
У цій частині ми розглянемо автоматизацію завдань за допомогою ігрових книжок Ansible та сховищ Ansible для захисту конфіденційних даних.
Пропоноване читання => Навчальний посібник з DevOps
b дерево і b + дерево
Що ви дізнаєтесь:
Ansible Playbooks
Ми бачили, як запускати окремі завдання або одноразові завдання за допомогою модулів, але що, якщо вам потрібно виконати кілька завдань? Playbook допомагає запускати їх за сценарієм.
Playbook визначає змінні, конфігурації, кроки розгортання, призначає ролі, виконує кілька завдань. Для Наприклад КОПІЮВАННЯ / ВИДАЛЕННЯ файлів і папок, встановлення пакетів, запуск служб. Отже, в першу чергу визначено книги для ігор, щоб організувати кроки для декількох машин або серверів і привести їх усі до певного бажаного стану.
Playbook написана на Формат YAML із розширенням файлу .yml. Потрібно бути дуже обережним з форматом та вирівнюванням, що робить його дуже чутливим.
Він містить наступні розділи:
- Кожна книжка для ігор починається з 3 дефісів „-“
- Ведучий розділ - Визначає цільові машини, на яких повинен працювати засіб. Це базується на файлі інвентаризації Ansible.
- Змінна секція - Це необов’язково і може оголосити всі змінні, необхідні в ігровій книзі. Ми також розглянемо кілька прикладів.
- Розділ завдань - У цьому розділі перелічені всі завдання, які слід виконати на цільовій машині. Він визначає використання модулів. Кожне завдання має назву, яка є невеликим описом того, що буде виконувати завдання, і буде перелічена під час запуску ігрової книги.
Наприклад,
Якщо нам потрібно встановити та налаштувати Tomcat, він буде складатися з таких завдань:
- Завантажте та встановіть Tomcat
- Налаштуйте Tomcat
- Запустіть Tomcat
Так само іншийПрикладдля використання Tomcat, що використовується при постійній доставці DevOps, завдання можуть бути такими:
- Зупинити додаток
- Видаліть програму
- Встановіть нову версію файлу WAR.
- Запустіть програму
Зразок формату Playbook
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcat
У наведеному вище сценарії подивіться на вирівнювання, починаючи зверху, і воно повинно підтримуватися, інакше ви отримаєте синтаксичні помилки.
Щоб запустити будь-яку книгу-програму, використовуйте наступну команду
$ ansible-playbook
Щоб перевірити посібник із використанням синтаксичних помилок
$ ansible-playbook --syntax-check
Щоб переглянути список хостів
$ ansible-playbook --list-hosts
Створення посібників із прикладами
У цьому розділі ми побачимо кілька прикладів того, як створювати ігрові книги, які вам можуть знадобитися для регулярного запуску. Ці ігрові книги потрібно буде створити та запускати з контрольної машини.
Збережіть усі наведені нижче книги для ігор у файл .yml і запустіть, як показано нижче.
$ ansible-playbook filename.yml
Приклад 1: Створіть файл на цільових машинах або серверах, як зазначено у файлі інвентаризації та групі веб-сервера, збережіть наведений нижче код із розширенням .yml та запустіть програму відтворення.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
У наведеному вище прикладі ми використовували файл файл модуль для створення файлу.
Приклад 2: Створіть каталог із режимом 775 та власником / групою як Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Приклад 3: Створення декількох каталогів. Щоб створити кілька каталогів з одним завданням, ви можете використовувати цикл with_items заява. Отже, коли ви запускаєте наведену нижче книгу, це трактується як 3 різні завдання.
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'
Приклад 4: Створіть користувача. Давайте подивимось на користувач модуль для створення та видалення користувачів у ігровій книзі.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Приклад 5: Видалити користувача. Видалити користувача дуже просто, і йому знадобиться держава для встановлення відсутній . Це еквівалентно userdel команда в Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
У наведеному вище посібнику видалити = так видалить домашній каталог і сила = так видалить файли з каталогу.
Приклад 6: Скопіюйте вміст у файл за допомогою модуля копіювання.
Якщо вам потрібно скопіювати файл на цільові машини або сервери, використовуйте src і призначення в модулі копіювання.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Наприклад,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Приклад 7: Замінити всі екземпляри рядка.
Використовуючи замінити модуль ми можемо замінити слово іншим словом. Модулю заміни знадобляться 3 параметри, тобто „path“, „regexp“ (для пошуку конкретного слова) і „replace“ (надання іншого слова для заміни).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Приклад 8: Архів або ZIP-файли та папки
Використання Ansible архів модуль, який дозволяє стиснути файли або папки у формат „zip“, „.gz“ або „bz2“.
Примітка : Файли або папки, що підлягають стисненню, повинні бути доступними на цільових серверах і мати на них встановлені пакети для tar, bzip2, gzip, zip. Ви можете мати окреме завдання playbook для встановлення цих пакетів.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
У наведеному вище посібнику для архівування файлу niranjan.txt буде збережено файл niranjan.zip
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zip
У наведеному вище посібнику буде збережено декілька файлів у файлі niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
У наведеному вище посібнику буде збережено усі файли в каталозі / home / ansible.
Приклад 9: Робота з датою та позначкою часу
Використання системної дати та позначки часу допомагає в певних цілях стану або ведення журналу. Факти Ansible забезпечують доступ до віддалених або цільових серверів за датою та часом. Тож ми можемо використовувати модуль налагодження щоб надрукувати вихідні дані разом із де атрибут, як показано нижче.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
У наведеному вище посібнику відображається дата.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
У наведеному вище посібнику відображається час.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
У наведеній вище книзі буде створено динамічний файл на основі поточної дати для Наприклад, . niranjan2018-07-15.log
Приклад 10: Приклад змінних
Змінні використовуються для зберігання значень. У наведеному нижче прикладі я оголошую змінну ім'я зі значенням ніранджан . Вихід буде ніранджан .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Ми також можемо мати масив або список змінних, як показано нижче Приклад .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Індексація масиву починається з НУЛЯ (0). Отже, результатом у наведеному вище прикладі буде Ніранджан.
Приклад 11: Зареєструвати змінні
Ми також можемо фіксувати вихідні дані будь-якого завдання до змінної реєстру.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Примітка: Для відображення - використовуйте атрибут msg, а для захоплення будь-якого значення використовуйте атрибут var у модулі - налагодження
яка найкраща операційна система windows - -
Приклад 12: Playbook для встановлення редактора vim та GIT на цільових серверах або машинах.
У цьому посібнику ми використали ням модуль для встановлення останньої версії програмних пакетів.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Приклад 13: Встановіть сервер Apache. Збережіть наведений нижче код та запустіть playbook, як показано нижче.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Окрім ням модуль, обслуговування модуль також використовується для запуску служби httpd. Завдання синхронно виконуються зверху вниз.
Приклад 14: Встановіть JDK
У наступному посібнику буде автоматизовано встановити JDK 8 на всі цільові машини або сервери. JDK є необхідною умовою для більшості інших програмних пакетів, таких як Maven або Tomcat.
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'
Приклад 15: Встановіть Maven
Завданнями є завантаження файлу maven із URL-адреси за допомогою get_url модуль, витягніть завантажений файл, перемістіть його в менший каталог, оновіть і запустіть профіль, де maven додано до шляху.
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh
Приклад 16: Встановіть Tomcat 8
Наведений нижче посібник допомагає встановити та запустити Tomcat 8 на цільових машинах або серверах.
Можна натиснути тут щоб скопіювати розташування посилань останньої версії Tomcat 8. Клацніть тут для URL-адреси, що містить файл tar tar Tomcat 8, який я використав у цій книзі.
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible
Приклад 17: pre_tasks, post_tasks та теги
Можна використовувати попередні та наступні завдання для виконання певних завдань до або після запуску основного завдання.
Зазвичай у ігровій книзі у вас так багато завдань, які виконуються. Що робити, якщо вам потрібно виконати лише певне завдання? Теги - відповідь на це. Давайте розглянемо варіант нижче, який містить усі 3 варіанти. Він має 2 завдання, тобто одне з TAG і одне без TAG.
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txt
Давайте подивимося, що відбувається під час запуску ігрової книги з опцією –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Висновок вище виглядає кращим та зрозумілішим. Гра №1 має тег niranjan, але Гра №2 не містить тегів.
Якщо вам потрібно виконати завдання з тегом niranjan, тоді команда для запуску буде такою:
$ ansible-playbook preposttagseg.yml --tags niranjan
Друге відтворення не виконується, а файл не створюється.
Приклад 18: Обробники
Будь-який програмний пакет матиме файли конфігурації, і будь-які зміни до нього матимуть силу лише після перезапуску служби. Отже, вам потрібно встановити службу для перезапуску. Для Наприклад У наведеному нижче посібнику, якщо ви запускаєте його кілька разів, служба все одно перезапуститься незалежно від внесених змін чи ні, що неправильно.
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html
# This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yes
Отже, нам потрібно перезапустити службу, лише якщо зміни внесено до файлів конфігурації. Обробники забезпечити цю функцію.
Тож правильний потік з обробниками буде мати a повідомити варіант.
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restarted
Отже, вперше буде встановлено та запущено сервер Apache. Навіть якщо ви повторно запустите програму відтворення без внесених змін, служба httpd не перезапуститься, оскільки вона вже запущена.
Якщо в конфігураційних файлах є якісь зміни або якщо файли HTML змінені, після запуску playbook обробник отримує повідомлення про перезапуск служби. Ім'я в розділі сповіщення та обробники повинні бути однаковими. Обробник пишеться як і будь-яке інше завдання, але викликається, лише якщо є зміни.
Ansible Vault
У більшості випадків, коли конфіденційні або конфіденційні дані потрібно захищати в ігровій книзі, їх можна зашифрувати, а не просто зберігати в текстовому файлі, який читається всіма. Ansible Vault дозволяє зашифрувати книгу-програму для захисту конфіденційних даних.
Наприклад, розгляньте наступне завдання, коли копіюється конфіденційна угода про роботу.
У таких випадках вам знадобиться Ansible Vault.
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
Нижче наведено кроки, які потрібно виконати для шифрування вищезазначених файлів playbook.
# 1) Створення нових зашифрованих файлів
Для створення нових зашифрованих файлів зі сховищем використовуйте файл ansible-vault створити команди.
$ ansible-vault create jobagreement.yml
Після підтвердження пароля відкриється вікно редагування, щоб додати вміст до файлу.
Ansible зашифрує вміст, коли ви закриєте файл. Замість того, щоб побачити фактичний вміст, ви побачите зашифровані блоки.
# 2) Для шифрування існуючого файлу yml використовуйте наступне
$ ansible-vault encrypt existingfile.yml
Пароль буде знову запитаний для шифрування.
# 3) Перегляд зашифрованого файлу
Використовуйте команду Анблі-сховище щоб переглянути фактичний вміст файлу.
$ ansible-vault view jobagreement.yml
Вас знову попросять ввести пароль, щоб переглянути вміст файлу.
# 4) Редагування зашифрованих файлів
Якщо вам потрібно відредагувати файл, скористайтеся командою ansible-vault редагувати
$ ansible-vault edit users.yml
Введіть пароль для редагування файлу.
# 5) Зміна пароля зашифрованих файлів
Використовуйте команду анкель-сховище rekey щоб змінити пароль файлу.
$ ansible-vault rekey jobagreement.yml
# 6) Запустіть зашифрований файл ігрової книги Ansible
Використовуйте опцію –ask-vault-pass з командою ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Розшифрування зашифрованих файлів вручну
Використовуйте команду ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Резюме
У цьому посібнику ми побачили два найважливіші аспекти управління конфігурацією Ansible Playbooks та захист конфіденційних даних за допомогою Ansible Vault.
Наведені вище приклади ігрової книги дадуть вам уявлення про те, як автоматизувати різні завдання в різних сценаріях під час доставки програмного забезпечення.
У нашому підручнику ми побачимо, як модулювати Playbook за допомогою ролей Ansible, інтегрувати з Дженкінсом та найважливіший аспект роботи з модулями Ansible S3 та EC2 для управління екземплярами AWS (Створення та припинення екземплярів EC2).
проста Java-програма для сортування чисел у порядку зростання
НАЗАД Підручник | НАСТУПНИЙ підручник
Рекомендована література
- Підручник з Ansible: Встановлення та використання з Ansible модулями
- Команди SeeTest Automation: Детальне пояснення з прикладами
- Відповідальні ролі, інтеграція з Дженкінсом у DevOps та модулі EC2
- Як розробити тестові сценарії за допомогою 5 найпопулярніших платформ автоматизації тестів (приклади)
- Структура автоматизації тестів без сценаріїв: інструменти та приклади
- Підручник із прикладами Python DateTime
- Вирізати команду в Unix з прикладами
- Автоматизація тестів - це спеціалізована кар’єра? Чи можуть звичайні тестери також робити автоматизацію?