task automation using ansible playbooks
Naučte se automatizaci úkolů pomocí Ansible playbooků a Ansible trezorů pro zabezpečení citlivých dat:
V našem předchozím kurzu Ansible # 1 , jsme se dozvěděli o různých součástech Ansible a jak nainstalovat a konfigurovat tento nástroj s různými moduly. Viděli jsme také, jak se moduly používají k provádění jedné funkce nebo úlohy.
V této části se podíváme na automatizaci úloh pomocí Ansible playbooks a Ansible vaults k zabezpečení citlivých dat.
Doporučené čtení => Výukový průvodce pro DevOps
co je plánování testů a testovací strategie
Co se naučíte:
Ansible Playbooks
Viděli jsme, jak spouštět jednotlivé úkoly nebo jednorázové úkoly pomocí modulů, ale co když potřebujete provést více úkolů? Příručky pomáhají spouštět je skriptovaným způsobem.
Příručky definují proměnné, konfigurace, kroky nasazení, přiřazují role, provádějí více úkolů. Pro Např. KOPÍROVAT / ODSTRANIT Soubory a složky, instalovat balíčky, spouštět služby. Primárně jsou tedy definovány playbooky, které organizují kroky na více počítačů nebo serverů a všechny je dostávají do určitého požadovaného stavu.
Příručka je napsána Formát YAML s příponou .yml. Je třeba být velmi opatrní s formátem a zarovnáním, díky kterému je velmi citlivý.
Obsahuje následující části:
- Každá příručka začíná 3 spojovníky „-“
- Sekce hostitele - Definuje cílové stroje, na kterých by měla hrací kniha běžet. Toto je založeno na souboru inventáře Ansible.
- Variabilní sekce - Toto je volitelné a může deklarovat všechny proměnné potřebné v příručce. Podíváme se také na několik příkladů.
- Sekce Úkoly - V této části jsou uvedeny všechny úlohy, které by měly být provedeny na cílovém počítači. Specifikuje použití modulů. Každý úkol má název, který je malým popisem toho, co daný úkol bude dělat, a bude uveden při spuštění příručky.
Například,
Pokud potřebujeme nainstalovat a nakonfigurovat Tomcat, bude se skládat z následujících úkolů:
- Stáhněte a nainstalujte Tomcat
- Nakonfigurujte Tomcat
- Spusťte Tomcat
Podobně dalšíPříkladpro použití Tomcatu používaného při nepřetržitém doručování DevOps mohou být úkoly následující:
- Zastavit aplikaci
- Odinstalujte aplikaci
- Nainstalujte novou verzi souboru WAR.
- Spusťte aplikaci
Ukázkový formát příručky
--- 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
Ve výše uvedeném skriptu se podívejte na zarovnání, které začíná shora, a je třeba ho udržovat, jinak získáte syntaktické chyby.
Chcete-li spustit libovolnou příručku, použijte následující příkaz
$ ansible-playbook
Chcete-li v příručce zkontrolovat syntaktické chyby
$ ansible-playbook --syntax-check
Zobrazení seznamu hostitelů
$ ansible-playbook --list-hosts
Vytváření příruček s příklady
V této části uvidíme několik příkladů, jak vytvořit příručky, které byste mohli pravidelně spouštět. Tyto playbooky bude nutné vytvořit a spustit z řídicího stroje.
Uložte všechny níže uvedené příručky do souboru .yml a spusťte je, jak je znázorněno níže.
$ ansible-playbook filename.yml
Příklad 1: Vytvořte soubor na cílových počítačích nebo serverech, jak je uvedeno v souboru inventáře a skupině webového serveru, uložte níže uvedený kód s příponou .yml a spusťte příručku.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
Ve výše uvedeném příkladu jsme použili soubor modul k vytvoření souboru.
Příklad 2: Vytvořte adresář s režimem 775 a vlastníkem / skupinou jako možným.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Příklad 3: Vytvořte více adresářů. K vytvoření více adresářů s jedním úkolem můžete použít smyčku with_items tvrzení. Když tedy spustíte níže uvedenou příručku, bude interpretována jako 3 různé úkoly.
--- - 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'
Příklad 4: Vytvořte uživatele. Podívejme se na uživatel modul pro vytváření a mazání uživatelů v příručce.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Příklad 5: Odebrat uživatele. Odebrání uživatele je velmi snadné a bude to potřebovat Stát být nastaven na chybí . To je ekvivalentní s userdel příkaz v Linuxu.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
Ve výše uvedené příručce remove = yes odebere domovský adresář a síla = ano odstraní soubory v adresáři.
Příklad 6: Zkopírujte obsah do souboru pomocí modulu kopírování.
Pokud potřebujete zkopírovat soubor na cílové počítače nebo servery, použijte src a dest v kopírovacím modulu.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Například,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Příklad 7: Nahraďte všechny instance řetězce.
Použitím nahradit modul můžeme nahradit slovo jiným slovem. Modul nahrazení bude vyžadovat 3 parametry, tj. „Cesta“, „regexp“ (k vyhledání konkrétního slova) a „nahradit“ (poskytující jiné slovo k nahrazení).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Příklad 8: Archivujte nebo ZIP soubory a složky
Používání možností archiv modul můžete komprimovat soubory nebo složky do formátu „zip“, „.gz“ nebo „bz2“.
Poznámka : Soubory nebo složky, které mají být komprimovány, by měly být k dispozici na cílových serverech a měly by mít nainstalované balíčky pro tar, bzip2, gzip, zip. Pro instalaci těchto balíčků můžete mít samostatnou úlohu příručky.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Výše uvedená příručka zkomprimuje soubor niranjan.txt do souboru 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
Výše uvedená příručka bude zipovat více souborů do souboru niranjan.zip.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Výše uvedená hrací kniha komprimuje všechny soubory v adresáři / home / ansible.
Příklad 9: Práce s datem a časovým razítkem
software ke stažení videí na trubici
Použití systémového data a časového razítka pomáhá při určitých stavech nebo pro účely protokolování. Fakty Ansible poskytují přístup k datům a časům vzdálených nebo cílových serverů. Takže můžeme použít ladicí modul vytisknout výstup spolu s kde atribut, jak je uvedeno níže.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Výše uvedená hrací kniha zobrazuje datum.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Výše uvedená hrací kniha zobrazuje čas.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Výše uvedená příručka vytvoří dynamický soubor na základě aktuálního data pro Např . niranjan2018-07-15.log
Příklad 10: Příklad proměnných
Proměnné se používají k ukládání hodnot. V níže uvedeném příkladu deklaruji proměnnou název s hodnotou niranjan . Výstup bude niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Můžeme také mít pole nebo seznam proměnných, jak je uvedeno níže Příklad .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indexování pole začíná od nuly (0). Výstupem ve výše uvedeném příkladu bude tedy Niranjan.
Příklad 11: Zaregistrujte proměnné
Můžeme také zachytit výstup libovolného úkolu do proměnné registru.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Poznámka: Chcete-li zobrazit - použít atribut msg a zachytit libovolnou hodnotu, použijte atribut var v modulu - debug
Příklad 12: Příručka k instalaci editoru vim a GIT na cílové servery nebo stroje.
V této příručce jsme využili Mňam modul k instalaci nejnovější verze softwarových balíků.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Příklad 13: Nainstalujte server Apache. Uložte níže uvedený kód a spusťte playbook, jak je znázorněno níže.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Kromě Mňam modul, servis modul se také používá ke spuštění služby httpd. Úkoly běží synchronně shora dolů.
Příklad 14: Nainstalujte JDK
Následující hrací kniha se automatizuje a nainstaluje JDK 8 na všechny cílové počítače nebo servery. JDK je předpokladem pro většinu ostatních softwarových balíčků, jako jsou Maven nebo 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'
Příklad 15: Nainstalujte Maven
Prováděnými úkoly je stažení souboru maven z adresy URL pomocí get_url modul, rozbalte stažený soubor, přesuňte jej do menšího adresáře, aktualizujte a spusťte profil, kde je do cesty přidán soubor 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
Příklad 16: Nainstalujte si Tomcat 8
Níže uvedená příručka pomáhá nainstalovat a spustit Tomcat 8 na cílové stroje nebo servery.
Můžete kliknout tady zkopírujte umístění odkazu nejnovější verze Tomcat 8. Klikněte tady pro URL obsahující tar soubor Tomcat 8, který jsem použil v této příručce.
--- - 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
Příklad 17: pre_tasks, post_tasks a tagy
Můžeš použít pre_tasks a post_tasks spouštět určité úkoly před nebo po spuštění hlavního úkolu.
Normálně máte v playbooku tolik úkolů, které jsou provedeny. Co když potřebujete provést pouze určitý úkol? Odpovědi na něj jsou značky. Podívejme se na níže uvedenou možnost, která má všechny 3 možnosti. Má 2 úkoly, tj. Jeden s TAG a jeden bez 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
Podívejme se, co se stane při spuštění příručky s možností –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Výstup výše vypadá lépe a jasněji. Play # 1 má tag niranjan, ale Play # 2 nemá žádné tagy.
Pokud potřebujete provést úkoly se značkou niranjan, pak by měl být příkaz spuštěn:
$ ansible-playbook preposttagseg.yml --tags niranjan
Druhé přehrávání se neprovede a soubor se nevytvoří.
Příklad 18: Manipulátory
Jakýkoli softwarový balíček bude mít konfigurační soubory a jakékoli jeho změny se projeví až po restartování služby. Musíte tedy mít službu nastavenou na restart. Pro Např. V níže uvedené příručce, pokud ji spustíte vícekrát, se služba restartuje stejně bez ohledu na provedené nebo ne provedené změny, což není správné.
--- - 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
Službu tedy musíme restartovat, pouze pokud dojde ke změnám v konfiguračních souborech. Manipulátory poskytnout tuto funkci.
Správný tok s manipulátory by tedy měl mít oznámit volba.
--- - 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
Poprvé bude tedy server Apache nainstalován a spuštěn. I když znovu spustíte playbook bez provedení jakýchkoli změn, služba httpd se nerestartuje, protože je již spuštěna.
Pokud dojde ke změnám v konfiguračních souborech nebo pokud dojde ke změně souborů HTML, je obslužný program po spuštění příručky upozorněn na restartování služby. Název v sekci upozornění a obslužné rutiny by měl být stejný. Obslužná rutina je zapsána jako každý jiný úkol, ale je volána, pouze pokud dojde ke změnám.
Ansible Vault
Většinu času, kdy je třeba v příručce chránit citlivá nebo důvěrná data, je možné je zašifrovat, a ne je ponechat v textovém souboru, který je čitelný pro všechny. Ansible Vault vám umožňuje zašifrovat příručku k ochraně důvěrných dat.
Například, zvažte následující úlohu, kde se kopíruje dohoda o důvěrné práci.
V takových případech budete potřebovat 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
Následují kroky, které potřebujete k zašifrování výše uvedených souborů příručky.
# 1) Vytváření nových šifrovaných souborů
Chcete-li vytvořit nové šifrované soubory pomocí úložiště, použijte ansible-vault vytvořit příkaz.
$ ansible-vault create jobagreement.yml
Po potvrzení hesla se otevře editační okno pro přidání obsahu do souboru.
Když zavřete soubor, Ansible zašifruje obsah. Místo toho, abyste viděli skutečný obsah, uvidíte šifrované bloky.
# 2) K zašifrování existujícího souboru yml použijte následující
$ ansible-vault encrypt existingfile.yml
Heslo bude znovu požádáno o šifrování.
# 3) Prohlížení šifrovaného souboru
Použijte příkaz pohled na klenbu ansible podívat se na skutečný obsah souboru.
$ ansible-vault view jobagreement.yml
Chcete-li se podívat na obsah souboru, budete znovu požádáni o heslo.
# 4) Úpravy šifrovaných souborů
Pokud potřebujete soubor upravit, použijte příkaz ansible-vault editovat
$ ansible-vault edit users.yml
Chcete-li soubor upravit, zadejte heslo.
# 5) Změna hesla šifrovaných souborů
Použijte příkaz ansible-vault rekey změnit heslo souboru.
$ ansible-vault rekey jobagreement.yml
# 6) Spusťte zašifrovaný soubor playbooku Ansible
Použijte volbu –ask-vault-pass s příkazem ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Ruční dešifrování šifrovaných souborů
Použijte příkaz dešifrovat příkaz ansible-vault.
$ ansible-vault decrypt jobagreement.yml
souhrn
V tomto tutoriálu jsme viděli dva nejdůležitější aspekty správy konfigurace, které jsou Ansible Playbooks a ochrana citlivých dat pomocí Ansible Vaults.
Výše uvedené příklady příručky by vám poskytly představu o tom, jak během dodávky softwaru automatizovat různé úkoly v různých scénářích.
V našem nadcházejícím tutoriálu uvidíme, jak modulovat Playbook pomocí rolí Ansible, integrovat s Jenkinsem a nejdůležitější aspekt pro práci s moduly Ansible S3 a EC2 pro správu instancí AWS (Create and Terminate EC2 instances).
c ++ náhodné číslo mezi 1 a 3
Výukový program PREV | DALŠÍ výuka
Doporučené čtení
- Výukový program Ansible: Instalace a použití s moduly Ansible
- Příkazy automatizace SeeTest: Podrobné vysvětlení s příklady
- Možné role, integrace s Jenkinsem v DevOps a moduly EC2
- Jak vyvíjet testovací skripty pomocí nejlepších 5 nejpopulárnějších rámců automatizace testů (příklady)
- Bezskriptový testovací automatizační rámec: Nástroje a příklady
- Výukový program Python DateTime s příklady
- Vyjmout příkaz v Unixu s příklady
- Automatizace testů - je to specializovaná kariéra? Mohou normální testeři provádět také automatizaci?