task automation using ansible playbooks
Научете автоматизацията на задачите, като използвате Ansible playbooks и Ansible treasures за защита на поверителни данни:
В предишния ни урок Ansible №1 , научихме за различните компоненти на Ansible и как да инсталираме и конфигурираме този инструмент с различни модули. Видяхме също как модулите се използват за изпълнение на една функция или задача.
В тази част ще разгледаме автоматизацията на задачите, като използваме Ansible playbooks и Ansible сводове, за да защитим поверителни данни.
Предложено четене => Учебно ръководство за DevOps
най-добрият софтуер за наблюдение на температурата windows 10
Какво ще научите:
Ansible Playbooks
Виждали сме как да изпълняваме единични задачи или еднократни задачи с помощта на модули, но какво ще стане, ако трябва да изпълните няколко задачи? Playbooks помагат да ги стартирате по сценарий.
Playbooks дефинират променливи, конфигурации, стъпки за внедряване, назначават роли, изпълняват множество задачи. За E.g. КОПИРАНЕ / ИЗТРИВАНЕ на файлове и папки, инсталиране на пакети, стартиране на услуги. Така че предимно книгите за игри са дефинирани, за да организират стъпките на множество машини или сървъри и да ги приведат до определено желано състояние.
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
Създаване на Playbook с примери
В този раздел ще видим множество примери за това как да създавате книги за игри, които може да се наложи да стартирате редовно. Тези книги за игра ще трябва да бъдат създадени и стартирани от контролната машина.
Запазете всички книги по-долу в .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: Създайте потребител. Нека да разгледаме потребител модул за създаване и изтриване на потребители в playbook.
--- - 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: Работа с дата и клеймо
Използването на системната дата и клеймо помага за определени състояния или цели на регистриране. Отговорните факти осигуряват достъп до отдалечени или целеви сървъри дата и час. Така че можем да използваме модул за отстраняване на грешки за да отпечатате изхода заедно с където атрибут, както е показано по-долу.
--- - 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
Горната книга за игри ще създаде динамичен файл въз основа на текущата дата за E.g . 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). Следователно изходът в горния пример ще бъде Niranjan.
Пример 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 в модула - debug
Пример 12: Playbook за инсталиране на vim editor и 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 адреса, съдържащ Tomcat 8 tar файл, който съм използвал в тази книга.
--- - 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 и тагове
Можеш да използваш 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: Манипулатори
Всеки софтуерен пакет ще има конфигурационни файлове и всички промени в него ще имат ефект само когато услугата бъде рестартирана. Така че трябва да настроите услугата да се рестартира. За E.g. В долната книга за игри, ако я стартирате няколко пъти, услугата ще се рестартира така или иначе, независимо от направените промени или не, което не е правилно.
--- - 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 файловете се променят, след като стартира плейбека, манипулаторът се уведомява да рестартира услугата. Името в раздела за уведомяване и манипулаторите трябва да са еднакви. Манипулаторът е написан като всяка друга задача, но се извиква само ако има промени.
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) Промяна на паролата на криптираните файлове
Използвайте командата ansible-vault rekey за да промените паролата на файла.
$ ansible-vault rekey jobagreement.yml
# 6) Стартирайте шифрован файл на Ansible playbook
Използвайте опцията –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 Vaults.
Горните примери на playbook биха ви дали представа как да автоматизирате различни задачи в различни сценарии по време на доставката на софтуера.
В нашия предстоящ урок ще видим как да модулираме Playbook, използвайки Ansible роли, да се интегрираме с Jenkins и най-важният аспект за работа с Ansible S3 и EC2 модули за управление на AWS екземплярите (Създаване и прекратяване на EC2 екземпляри).
как да конвертирате char в низ c ++
Препоръчително четене
- Урок за Ansible: Инсталиране и използване с Ansible модули
- SeeTest Automation Commands: Подробно обяснение с примери
- Отговорни роли, интеграция с Jenkins в DevOps и EC2 модули
- Как да разработим тестови скриптове с помощта на Топ 5 на най-популярните рамки за автоматизация на тестове (примери)
- Рамка за автоматизация на тестове без скриптове: инструменти и примери
- Урок за Python DateTime с примери
- Изрежете командата в Unix с примери
- Автоматизация на тестовете - Специализирана кариера ли е? Могат ли нормалните тестери да правят и автоматизация?