task automation using ansible playbooks
Naucz się automatyzacji zadań, korzystając z poradników Ansible i skarbców Ansible do zabezpieczania poufnych danych:
W naszym poprzednim samouczku Ansible nr 1 dowiedzieliśmy się o różnych składnikach Ansible oraz o tym, jak zainstalować i skonfigurować to narzędzie z różnymi modułami. Widzieliśmy również, jak moduły są używane do wykonywania jednej funkcji lub zadania.
W tej części przyjrzymy się automatyzacji zadań za pomocą podręczników Ansible i skarbców Ansible do zabezpieczenia poufnych danych.
Sugerowany odczyt => Przewodnik szkoleniowy dotyczący metodyki DevOps
która firma jest obecnie liderem w zakresie usług hostingowych w chmurze?
Czego się nauczysz:
- Ansible Playbooks
- Tworzenie poradników z przykładami
- Ansible Vault
- Podsumowanie
- rekomendowane lektury
Ansible Playbooks
Widzieliśmy, jak uruchamiać pojedyncze zadania lub zadania jednorazowe za pomocą modułów, ale co, jeśli musisz wykonać wiele zadań? Poradniki pomagają je uruchomić w sposób skryptowy.
Podręczniki definiują zmienne, konfiguracje, etapy wdrażania, przypisują role, wykonują wiele zadań. Dla Na przykład. KOPIUJ / USUŃ pliki i foldery, instaluj pakiety, uruchamiaj usługi. Tak więc przede wszystkim playbooki są definiowane w celu aranżacji kroków na wielu komputerach lub serwerach i doprowadzenia ich wszystkich do określonego pożądanego stanu.
Poradnik jest napisany w języku Format YAML z rozszerzeniem pliku .yml. Należy bardzo uważać na format i wyrównanie, co czyni go bardzo wrażliwym.
Zawiera następujące sekcje:
- Każdy poradnik zaczyna się od trzech łączników „-”
- Sekcja hosta - Definiuje komputery docelowe, na których powinien działać podręcznik. Jest to oparte na pliku inwentarza Ansible.
- Zmienna sekcja - Jest to opcjonalne i może zadeklarować wszystkie potrzebne zmienne w playbooku. Przyjrzymy się również kilku przykładom.
- Sekcja zadań - Ta sekcja zawiera listę wszystkich zadań, które powinny zostać wykonane na komputerze docelowym. Określa użycie modułów. Każde zadanie ma nazwę, która jest krótkim opisem tego, co będzie robić, i będzie wyświetlana na liście podczas uruchamiania elementu playbook.
Na przykład,
Jeśli będziemy musieli zainstalować i skonfigurować Tomcata, będzie on składał się z następujących zadań:
- Pobierz i zainstaluj Tomcat
- Skonfiguruj Tomcat
- Uruchom Tomcat
Podobnie innyPrzykładw przypadku korzystania z Tomcat używanego do ciągłego dostarczania DevOps zadania mogą wyglądać następująco:
- Zatrzymaj aplikację
- Odinstaluj aplikację
- Zainstaluj nową wersję pliku WAR.
- Uruchom aplikację
Przykładowy format poradnika
--- 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
W powyższym skrypcie spójrz na wyrównanie zaczynając od góry i musi być utrzymane, w przeciwnym razie pojawią się błędy składniowe.
Aby uruchomić dowolny element playbook, użyj następującego polecenia
$ ansible-playbook
Aby sprawdzić podręcznik pod kątem błędów składniowych
$ ansible-playbook --syntax-check
Aby wyświetlić listę hostów
$ ansible-playbook --list-hosts
Tworzenie poradników z przykładami
W tej sekcji zobaczymy wiele przykładów tworzenia poradników, które mogą być potrzebne regularnie. Te podręczniki trzeba będzie utworzyć i uruchomić z komputera sterującego.
Zapisz wszystkie poniższe playbooki w pliku .yml i uruchom, jak pokazano poniżej.
$ ansible-playbook filename.yml
Przykład 1: Utwórz plik na komputerach docelowych lub serwerach, jak wspomniano w pliku zasobów i grupie serwera WWW, zapisz poniższy kod z rozszerzeniem .yml i uruchom playbook.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
W powyższym przykładzie użyliśmy plik moduł, aby utworzyć plik.
Przykład 2: Utwórz katalog z trybem 775 i właścicielem / grupą jako Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Przykład 3: Utwórz wiele katalogów. Aby utworzyć wiele katalogów za pomocą jednego zadania, możesz użyć pętli with_items komunikat. Zatem po uruchomieniu poniższego poradnika jest on interpretowany jako 3 różne zadania.
--- - 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'
Przykład 4: Utwórz użytkownika. Spójrzmy na użytkownik moduł do tworzenia i usuwania użytkowników w playbooku.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Przykład 5: Usuń użytkownika. Usunięcie użytkownika jest bardzo łatwe i będzie wymagało rozszerzenia stan do ustawienia nieobecny . Jest to odpowiednik userdel polecenie w systemie Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
W powyższym poradniku remove = yes usunie katalog domowy i siła = tak usunie pliki w katalogu.
Przykład 6: Skopiuj zawartość do pliku za pomocą modułu kopiowania.
Jeśli chcesz skopiować plik na komputery docelowe lub serwery, użyj rozszerzenia src i dest w module kopiowania.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Na przykład,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Przykład 7: Zastąp wszystkie wystąpienia ciągu.
Za pomocą zastąpić moduł możemy zamienić słowo na inne słowo. Moduł zamiany będzie potrzebował 3 parametrów, tj. „Ścieżka”, „wyrażenie regularne” (aby znaleźć określone słowo) i „zastąp” (zapewniając inne słowo do zastąpienia).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Przykład 8: Archiwizuj lub ZIP pliki i foldery
Korzystanie z Ansible archiwum moduł umożliwia kompresję plików lub folderów do formatu „zip”, „.gz” lub „bz2”.
Uwaga : Pliki lub foldery do skompresowania powinny być dostępne na serwerach docelowych i powinny mieć zainstalowane na nich pakiety dla tar, bzip2, gzip, zip. Możesz mieć osobne zadanie playbook do instalowania tych pakietów.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Powyższy playbook spakuje plik niranjan.txt do pliku 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
Powyższy playbook spakuje wiele plików do pliku niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Powyższy poradnik spakuje wszystkie pliki w katalogu / home / ansible.
Przykład 9: Praca z datą i znacznikiem czasu
Korzystanie z daty systemowej i znacznika czasu pomaga w określaniu statusu lub celach rejestrowania. Fakty Ansible zapewniają dostęp do zdalnych lub docelowych serwerów daty i godziny. Więc możemy użyć moduł debugowania wydrukować wynik wraz z plikiem gdzie atrybut, jak pokazano poniżej.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Powyższy poradnik wyświetla datę.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Powyższy playbook wyświetla czas.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Powyższy podręcznik utworzy plik dynamiczny na podstawie bieżącej daty dla Na przykład . niranjan2018-07-15.log
Przykład 10: Przykład zmiennych
Zmienne służą do przechowywania wartości. W poniższym przykładzie deklaruję zmienną Nazwa z wartością niranjan . Dane wyjściowe będą niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Możemy też mieć tablicę lub listę zmiennych jak na poniższym rysunku Przykład .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indeksowanie tablicy zaczyna się od ZERA (0). Stąd wyjście w powyższym przykładzie będzie Niranjan.
Przykład 11: Zarejestruj zmienne
Możemy również przechwycić dane wyjściowe dowolnego zadania do zmiennej rejestru.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Uwaga: Aby wyświetlić - użyj atrybutu msg i aby przechwycić dowolną wartość, użyj atrybutu var w module - debug
bąbelkowy kod sortowania c ++
Przykład 12: Poradnik do instalowania edytora VIM i GIT na docelowych serwerach lub maszynach.
W tym poradniku wykorzystaliśmy rozszerzenie mniam moduł do zainstalowania najnowszej wersji pakietów oprogramowania.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Przykład 13: Zainstaluj serwer Apache. Zapisz poniższy kod i uruchom Playbook, jak pokazano poniżej.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Oprócz mniam moduł usługa Moduł służy również do uruchomienia usługi httpd. Zadania są uruchamiane synchronicznie od góry do dołu.
Przykład 14: Zainstaluj JDK
Poniższy poradnik zautomatyzuje instalację JDK 8 na wszystkich docelowych maszynach lub serwerach. JDK jest warunkiem wstępnym większości innych pakietów oprogramowania, takich jak Maven czy 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'
Przykład 15: Zainstaluj Maven
Wykonywane zadania to pobranie pliku maven z adresu URL przy użyciu rozszerzenia get_url wyodrębnij pobrany plik, przenieś go do mniejszego katalogu, zaktualizuj i uruchom profil, w którym do ścieżki zostanie dodany 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
Przykład 16: Zainstaluj Tomcat 8
Poniższy podręcznik pomaga zainstalować i uruchomić Tomcat 8 na docelowych maszynach lub serwerach.
Możesz kliknąć tutaj aby skopiować lokalizację łącza do najnowszej wersji Tomcat 8. Kliknij tutaj dla adresu URL zawierającego plik tar Tomcat 8, którego użyłem w tym poradniku.
--- - 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
Przykład 17: pre_tasks, post_tasks i tagi
Możesz użyć pre_tasks i post_tasks do uruchamiania niektórych zadań przed lub po uruchomieniu zadania głównego.
Zwykle w playbooku jest tak wiele wykonywanych zadań. Co jeśli potrzebujesz wykonać tylko określone zadanie? Tagi są na to odpowiedzią. Spójrzmy na poniższą opcję, która ma wszystkie 3 opcje. Ma 2 zadania, tj. Jedno z TAG-em i jedno bez TAG-a.
--- - 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
Zobaczmy, co się dzieje podczas uruchamiania playbooka z opcją –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Powyższe dane wyjściowe wyglądają lepiej i wyraźniej. Play # 1 ma tag niranjan, ale Play # 2 nie ma żadnych tagów.
Jeśli chcesz wykonać zadania ze znacznikiem niranjan, polecenie do uruchomienia wyglądałoby tak:
$ ansible-playbook preposttagseg.yml --tags niranjan
Drugie odtwarzanie nie jest wykonywane i plik nie jest tworzony.
Przykład 18: Handlery
Każdy pakiet oprogramowania będzie zawierał pliki konfiguracyjne, a wszelkie zmiany w nim będą obowiązywać dopiero po ponownym uruchomieniu usługi. Musisz więc ustawić usługę na ponowne uruchomienie. Dla Na przykład. W poniższym poradniku, jeśli uruchomisz go wiele razy, usługa i tak uruchomi się ponownie, niezależnie od wprowadzonych zmian, co nie jest poprawne.
--- - 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
Musimy więc zrestartować usługę tylko wtedy, gdy zmiany zostaną wprowadzone w plikach konfiguracyjnych. Handlery zapewnić tę funkcję.
Więc właściwy przepływ z programami obsługi powinien mieć rozszerzenie notyfikować opcja.
--- - 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
Tak więc po raz pierwszy serwer Apache zostanie zainstalowany i uruchomiony. Nawet jeśli ponownie uruchomisz Playbook bez żadnych zmian, usługa httpd nie uruchomi się ponownie, ponieważ jest już uruchomiona.
Jeśli są jakieś zmiany w plikach konfiguracyjnych lub jeśli pliki HTML uległy zmianie, po uruchomieniu playbooka program obsługi jest powiadamiany o ponownym uruchomieniu usługi. Imię i nazwisko w sekcji powiadomień i obsługi powinny być takie same. Program obsługi jest napisany jak każde inne zadanie, ale jest wywoływany tylko w przypadku zmian.
Ansible Vault
W większości przypadków, gdy dane wrażliwe lub poufne muszą być chronione w podręczniku, można je zaszyfrować, a nie tylko przechowywać w pliku tekstowym, który jest czytelny dla wszystkich. Ansible Vault umożliwia zaszyfrowanie Playbooka w celu ochrony poufnych danych.
Na przykładrozważ następujące zadanie, w którym kopiowana jest poufna umowa o pracę.
W takich przypadkach potrzebujesz 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
Poniżej przedstawiono kroki, które należy wykonać, aby zaszyfrować powyższe pliki playbook.
# 1) Tworzenie nowych zaszyfrowanych plików
Aby utworzyć nowe zaszyfrowane pliki w repozytorium, użyj rozszerzenia tworzenie skarbca ansibla Komenda.
$ ansible-vault create jobagreement.yml
Po potwierdzeniu hasła otworzy się okno edycyjne umożliwiające dodanie zawartości do pliku.
Ansible zaszyfruje zawartość po zamknięciu pliku. Zamiast zobaczyć rzeczywistą zawartość, zobaczysz zaszyfrowane bloki.
# 2) Aby zaszyfrować istniejący plik yml, użyj następującego
$ ansible-vault encrypt existingfile.yml
Hasło zostanie ponownie poproszone o szyfrowanie.
# 3) Przeglądanie zaszyfrowanego pliku
Użyj polecenia widok skarbca ansibla aby przejrzeć rzeczywistą zawartość pliku.
$ ansible-vault view jobagreement.yml
Zostaniesz poproszony o hasło ponownie, aby przejrzeć zawartość pliku.
# 4) Edycja zaszyfrowanych plików
Jeśli chcesz edytować plik, użyj polecenia edytuj sklepienie ansibli
$ ansible-vault edit users.yml
Wprowadź hasło, aby edytować plik.
# 5) Zmiana hasła do zaszyfrowanych plików
Użyj polecenia aktualizacja klucza skarbca ansibla aby zmienić hasło do pliku.
$ ansible-vault rekey jobagreement.yml
# 6) Uruchom zaszyfrowany plik Playbook Ansible
Użyj opcji –ask-vault-pass z poleceniem ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Ręczne odszyfrowywanie zaszyfrowanych plików
Użyj polecenia ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Podsumowanie
W tym samouczku widzieliśmy dwa najważniejsze aspekty zarządzania konfiguracją, którymi są Ansible Playbooks i ochrona poufnych danych za pomocą Ansible Vaults.
Powyższe przykłady poradnika dałyby ci pomysł, jak zautomatyzować różne zadania w różnych scenariuszach podczas dostarczania oprogramowania.
jak zrobić fałszywą wiadomość e-mail
W naszym nadchodzącym samouczku zobaczymy, jak modularyzować Playbook przy użyciu ról Ansible, integrować się z Jenkinsem i najważniejszy aspekt pracy z modułami Ansible S3 i EC2 do zarządzania instancjami AWS (tworzenie i kończenie instancji EC2).
POPRZEDNIA samouczek | NEXT Tutorial
rekomendowane lektury
- Samouczek Ansible: Instalacja i użytkowanie z modułami Ansible
- Zobacz Polecenia automatyzacji testów: szczegółowe wyjaśnienie z przykładami
- Ansible Roles, Integration with Jenkins in DevOps i EC2 Modules
- Jak opracowywać skrypty testowe przy użyciu 5 najpopularniejszych struktur automatyzacji testów (przykłady)
- Bezskryptowa platforma automatyzacji testów: narzędzia i przykłady
- Python DateTime Tutorial z przykładami
- Polecenie Cut w systemie Unix z przykładami
- Automatyzacja testów - czy to kariera specjalistyczna? Czy zwykli testerzy mogą również wykonywać automatyzację?