task automation using ansible playbooks
Lär dig automatisering av uppgifter genom att använda Ansible-spelböcker och Ansible-valv för att säkra känsliga data:
I vår tidigare Ansible-handledning nr 1 , vi lärde oss om de olika komponenterna i Ansible och hur man installerar och konfigurerar detta verktyg med olika moduler. Vi såg också hur modulerna används för att utföra en funktion eller uppgift.
I den här delen kommer vi att titta på uppgiftsautomatisering med Ansible playbooks och Ansible valv för att säkra känslig data.
Föreslagen läsning => Inlärningsguide om DevOps
intervjufrågor och svar på automatiseringstest pdf
Vad du kommer att lära dig:
Ansible Playbooks
Vi har sett hur man kör enstaka uppgifter eller engångsuppgifter med hjälp av moduler, men vad händer om du behöver utföra flera uppgifter? Playbooks hjälper till att köra dem på ett skriptat sätt.
Playbooks definierar variabler, konfigurationer, distributionssteg, tilldelar roller, utför flera uppgifter. För T.ex. KOPIERA / RADERA filer och mappar, installera paket, starta tjänster. Så primärt är spelböcker definierade för att ordna stegen till flera maskiner eller servrar och få dem alla till ett visst önskat tillstånd.
Playbook är skrivet i YAML-format med ett .yml-filtillägg. Man måste vara mycket försiktig med formatet och inriktningen som gör det mycket känsligt.
Den innehåller följande avsnitt:
- Varje spelbok börjar med tre bindestreck '-'
- Värdsektion - Definierar målmaskinerna där spelboken ska köras. Detta är baserat på Ansible-inventeringsfilen.
- Variabelt avsnitt - Detta är valfritt och kan deklarera alla variabler som behövs i spelboken. Vi kommer också att titta på några exempel.
- Uppgiftsavsnitt - I det här avsnittet listas alla uppgifter som ska utföras på målmaskinen. Den specificerar användningen av moduler. Varje uppgift har ett namn som är en liten beskrivning av vad uppgiften kommer att göra och kommer att listas medan spelboken körs.
Till exempel,
Om vi behöver installera och konfigurera Tomcat kommer det att bestå av följande uppgifter:
- Ladda ner och installera Tomcat
- Konfigurera Tomcat
- Starta Tomcat
På samma sätt en annanExempelför användning av Tomcat som används vid kontinuerlig leverans av DevOps kan uppgifterna vara följande:
- Stoppa ansökan
- Avinstallera applikationen
- Installera en ny version av WAR-filen.
- Starta ansökan
Exempel på format för 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
I ovanstående skript titta på inriktningen från början och den måste bibehållas annars kommer du att få syntaxfel.
Använd följande kommando för att köra valfri spelbok
$ ansible-playbook
För att kontrollera syntaxfel i spelboken
$ ansible-playbook --syntax-check
För att visa värdlistan
$ ansible-playbook --list-hosts
Skapa Playbooks med exempel
I det här avsnittet ser vi flera exempel på hur du skapar spelböcker som du kan behöva köra regelbundet. Dessa spelböcker måste skapas och köras från kontrollmaskinen.
Spara alla nedanstående spelböcker i en .yml-fil och kör som visas nedan.
$ ansible-playbook filename.yml
Exempel 1: Skapa filen på målmaskinerna eller -servrarna som nämns i inventeringsfilen och webbserverns grupp, spara koden nedan med .yml-tillägget och kör playbook.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
I exemplet ovan har vi använt fil modul för att skapa filen.
Exempel 2: Skapa en katalog med läget 775 och ägare / grupp som Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Exempel 3: Skapa flera kataloger. För att skapa flera kataloger med en enda uppgift kan du använda loop med_objekt påstående. Så när du kör spelboken nedan tolkas den som tre olika uppgifter.
--- - 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'
Exempel 4: Skapa en användare. Låt oss titta på användare modul för att skapa och ta bort användare i spelboken.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Exempel 5: Ta bort användare. Att ta bort en användare är väldigt enkelt och det kommer att behöva stat som ska ställas in på frånvarande . Detta motsvarar userdel kommando i Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
I ovanstående spelbok, ta bort = ja tar bort hemkatalogen och kraft = ja tar bort filerna i katalogen.
Exempel 6: Kopiera innehåll till en fil med hjälp av kopieringsmodulen.
Om du behöver kopiera en fil till målmaskinerna eller servrarna använder du src och dest i kopieringsmodulen.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
Till exempel,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Exempel 7: Ersätt alla förekomster av en sträng.
Använder sig av byta ut modul kan vi ersätta ett ord med ett annat ord. Ersättningsmodulen behöver tre parametrar, dvs 'sökväg', 'regexp' (för att hitta det specifika ordet) och 'ersätt' (ger ett annat ord för ersättning).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Exempel 8: Arkivera eller ZIP-filer och mappar
Använda Ansible arkiv modul kan du komprimera filer eller mappar till 'zip', '.gz' eller 'bz2' format.
Notera : Filerna eller mapparna som ska komprimeras ska vara tillgängliga på målservrarna och paketen för tjära, bzip2, gzip, zip-fil ska installeras på dem. Du kan ha en separat playbook-uppgift för att installera dessa paket.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Ovanstående spelbok kommer att zip-filen niranjan.txt till niranjan.zip-filen
--- - 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
Ovanstående spelbok kommer att zippa flera filer till niranjan.zip-filen.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Ovanstående spelbok kommer att zipa alla filer i katalogen / home / ansible.
Exempel 9: Arbetar med datum och tidsstämpel
Att använda systemets datum och tidsstämpel hjälper till i vissa status- eller loggningsändamål. Ansible-fakta ger tillgång till fjärr- eller målservrar datum och tid. Så vi kan använda felsökningsmodul för att skriva ut utmatningen tillsammans med var attribut som visas nedan.
standardgateway inte tillgängligt Windows 10
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Ovanstående spelbok visar datumet.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Ovanstående spelbok visar tiden.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Ovanstående spelbok skapar en dynamisk fil baserad på aktuellt datum för T.ex . niranjan2018-07-15.log
Exempel 10: Variabler Exempel
Variabler används för att lagra värden. I exemplet nedan förklarar jag variabeln namn med värde niranjan . Resultatet blir niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Vi kan också ha en array eller en lista med variabler som nedan Exempel .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indexeringen av matrisen börjar från ZERO (0). Därför kommer produktionen i exemplet ovan att vara Niranjan.
Exempel 11: Registrera variabler
Vi kan också fånga utdata från alla uppgifter till en registervariabel.
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
Obs! För att visa - använd msg-attributet och för att fånga något värde, använd var-attributet i - felsökningsmodulen
Exempel 12: Playbook för att installera vim-editor och GIT på målservrarna eller maskinerna.
I den här spelboken har vi använt yum modul för att installera den senaste versionen av programvarupaket.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Exempel 13: Installera Apache-servern. Spara nedanstående kod och kör playbook enligt nedan.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Förutom yum modulen, den service modulen används också för att starta httpd-tjänsten. Uppgifterna körs från topp till botten synkront.
Exempel 14: Installera JDK
Följande spelbok automatiserar installationen av JDK 8 på alla målmaskiner eller servrar. JDK är en förutsättning för de flesta andra mjukvarupaket som Maven eller 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'
Exempel 15: Installera Maven
De uppgifter som utförs är att ladda ner maven-filen från URL: en med get_url modul, extrahera den nedladdade filen, flytta den till en mindre katalog, uppdatera och kör profilen där maven läggs till sökvägen.
--- - 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
Exempel 16: Installera Tomcat 8
Nedanstående spelbok hjälper till att installera och starta Tomcat 8 på målmaskinerna eller servrarna.
Du kan klicka här för att kopiera länkplatsen för den senaste versionen av Tomcat 8. Klicka på här för webbadressen som innehåller Tomcat 8 tar-filen som jag har använt i den här spelboken.
--- - 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
Exempel 17: pre_tasks, post_tasks och tags
Du kan använda föruppgifter och efteruppgifter att köra vissa uppgifter före eller efter att ha kört huvuduppgiften.
Normalt i en spelbok har du så många uppgifter som utförs. Vad händer om du bara behöver utföra en viss uppgift? Taggar är svaret på det. Låt oss titta på alternativet nedan som har alla de tre alternativen. Den har två uppgifter, dvs. en med en TAG och en utan en 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
Låt oss se vad som händer när du kör spelboken med alternativet –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Produktionen ovan ser bättre och tydligare ut. Spela # 1 har en tagg niranjan men Play # 2 har inga taggar.
Om du behöver utföra uppgifterna med taggen niranjan skulle kommandot att köra vara:
$ ansible-playbook preposttagseg.yml --tags niranjan
Den andra uppspelningen körs inte och filen skapas inte.
Exempel 18: Hanterare
Varje programvarupaket har konfigurationsfiler och alla ändringar av det kommer endast att gälla när tjänsten startas om. Så du måste ha tjänsten inställd för att starta om. För T.ex. I spelboken nedan om du kör den flera gånger kommer tjänsten att startas om hur som helst, oavsett vilka ändringar som gjorts eller inte, vilket inte är korrekt.
--- - 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
Så vi behöver bara starta om tjänsten om ändringarna görs i konfigurationsfilerna. Hanterare tillhandahålla den funktionen.
Så det korrekta flödet med hanterare skulle vara att ha en meddela alternativ.
--- - 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
Så för första gången kommer Apache-servern att installeras och startas. Även om du kör igen spelboken utan några ändringar kommer httpd-tjänsten inte att startas om eftersom den redan har startats.
Om det finns några ändringar i konfigurationsfilerna eller om HTML-filerna ändras, så meddelas hanteraren om att starta om tjänsten när spelboken har körts. Namnet i meddelandeavdelningen och hanterare ska vara desamma. Hanteraren är skriven som alla andra uppgifter men kallas bara om det finns ändringar.
Ansible Vault
För det mesta när känsliga eller konfidentiella data måste skyddas i spelboken kan den krypteras snarare än att bara förvara den i en textfil som är läsbar för alla. Ansible Vault låter dig kryptera spelboken för att skydda konfidentiella data.
Till exempel, överväga följande uppgift där ett konfidentiellt jobbavtal kopieras.
I sådana fall behöver du ett 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
Nedan följer stegen som du behöver följa för att kryptera ovanstående playbook-filer.
# 1) Skapa nya krypterade filer
För att skapa nya krypterade filer med valv använder du ansible-valv skapa kommando.
$ ansible-vault create jobagreement.yml
Efter att ha bekräftat lösenordet öppnas ett redigeringsfönster för att lägga till innehåll i filen.
Ansible krypterar innehållet när du stänger filen. Istället för att se det faktiska innehållet ser du krypterade block.
# 2) Använd följande för att kryptera en befintlig yml-fil
$ ansible-vault encrypt existingfile.yml
Lösenord kommer igen att krävas för kryptering.
# 3) Visar krypterad fil
Använd kommandot ansible-valvvy för att titta på det faktiska innehållet i filen.
$ ansible-vault view jobagreement.yml
Du kommer att bli ombedd om lösenordet igen för att titta på innehållet i filen.
# 4) Redigera krypterade filer
Om du behöver redigera filen använder du kommandot ansible-valv redigera
$ ansible-vault edit users.yml
Ange lösenordet för att redigera filen.
# 5) Ändra lösenord för de krypterade filerna
Använd kommandot ansible-vault rekey för att ändra lösenordet för filen.
$ ansible-vault rekey jobagreement.yml
# 6) Kör en krypterad Ansible playbook-fil
Använd alternativet –ask-vault-pass med kommandot ansible-playbook.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Kryptera de krypterade filerna manuellt
Använd kommandot ansible-vault decrypt-kommandot.
$ ansible-vault decrypt jobagreement.yml
Sammanfattning
Tja i denna handledning såg vi de två viktigaste aspekterna av konfigurationshantering som är Ansible Playbooks och skyddar känsliga data med Ansible Vaults.
Ovanstående exempel på playbook skulle ha gett dig en uppfattning om hur man automatiserar olika uppgifter i olika scenarier under leverans av programvara.
I vår kommande handledning kommer vi att se hur man modulerar Playbook med Ansible-roller, integreras med Jenkins och den viktigaste aspekten för att arbeta med Ansible S3- och EC2-moduler för hantering av AWS-instanser (Skapa och avsluta EC2-instanser).
skillnad mellan port framåt och port trigger
PREV-handledning | NÄSTA självstudie
Rekommenderad läsning
- Ansible Tutorial: Installation och användning med Ansible Modules
- SeeTest Automation Commands: En detaljerad förklaring med exempel
- Ansible Rolles, Integration med Jenkins i DevOps och EC2-moduler
- Hur man utvecklar testskript med de fem mest populära ramarna för testautomatisering (exempel)
- Skriptfri testautomatiseringsramverk: verktyg och exempel
- Python DateTime-handledning med exempel
- Klipp kommandot i Unix med exempel
- Testautomation - Är det en specialiserad karriär? Kan normala testare göra automatisering också?