task automation using ansible playbooks
Lær opgaveautomatisering ved hjælp af Ansible playbooks og Ansible hvælvinger til sikring af følsomme data:
I vores tidligere Ansible tutorial # 1 , vi lærte om de forskellige komponenter i Ansible, og hvordan man installerer og konfigurerer dette værktøj med forskellige moduler. Vi så også, hvordan modulerne bruges til at udføre en funktion eller opgave.
I denne del vil vi se på opgaveautomatisering ved hjælp af Ansible playbooks og Ansible hvælvinger for at sikre følsomme data.
Foreslået læsning => Læringsvejledning om DevOps
c ++ boble sorteringskode
Hvad du vil lære:
Ansible Playbooks
Vi har set, hvordan man kører enkeltopgaver eller engangsopgaver ved hjælp af moduler, men hvad hvis du har brug for at udføre flere opgaver? Playbooks hjælper med at køre dem på en scriptet måde.
Playbooks definerer variabler, konfigurationer, implementeringstrin, tildeler roller, udfører flere opgaver. Til For eksempel. KOPIER / SLET Filer og mapper, installer pakker, start tjenester. Så primært er playbøger defineret til at orkestrere trinnene til flere maskiner eller servere og få dem alle til en bestemt ønsket tilstand.
Playbook er skrevet i YAML-format med en .yml filtypenavn. Man skal være meget forsigtig med formatet og justeringen, hvilket gør det meget følsomt.
Den indeholder følgende afsnit:
- Hver playbook starter med 3 bindestreger '-'
- Værtssektion - Definerer de målmaskiner, som playbook skal køre på. Dette er baseret på Ansible-beholdningsfilen.
- Variabelt afsnit - Dette er valgfrit og kan erklære alle de nødvendige variabler i playbook. Vi vil også se på nogle eksempler.
- Opgaver - Dette afsnit viser alle de opgaver, der skal udføres på målmaskinen. Det specificerer brugen af moduler. Hver opgave har et navn, der er en lille beskrivelse af, hvad opgaven vil gøre, og vil blive opført, mens playbook køres.
For eksempel,
Hvis vi har brug for at installere og konfigurere Tomcat, vil den bestå af følgende opgaver:
- Download og installer Tomcat
- Konfigurer Tomcat
- Start Tomcat
Tilsvarende en andenEksempeltil brug af Tomcat, der anvendes til kontinuerlig levering af DevOps, kan opgaverne være som følger:
- Stop applikationen
- Afinstaller applikation
- Installer en ny version af WAR-filen.
- Start applikationen
Prøveformat på 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 ovenstående script skal du se på justeringen startende fra toppen, og den skal opretholdes ellers får du syntaksfejl.
Brug følgende kommando til at køre en hvilken som helst playbook
$ ansible-playbook
For at kontrollere playbook for syntaksfejl
$ ansible-playbook --syntax-check
For at se værtslisten
$ ansible-playbook --list-hosts
Oprettelse af Playbooks med eksempler
I dette afsnit vil vi se flere eksempler på, hvordan du opretter playbooks, som du muligvis har brug for at køre regelmæssigt. Disse playbooks skal oprettes og køres fra kontrolmaskinen.
Gem alle nedenstående playbøger i en .yml-fil, og kør som vist nedenfor.
$ ansible-playbook filename.yml
Eksempel 1: Opret filen på målmaskinerne eller serverne som nævnt i lagerfilen og webserverens gruppe, gem nedenstående kode med .yml-udvidelse og kør playbook.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
I ovenstående eksempel har vi brugt fil modul til at oprette filen.
Eksempel 2: Opret en mappe med tilstanden 775 og ejer / gruppe som Ansible.
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
Eksempel 3: Opret flere mapper. For at oprette flere mapper med en enkelt opgave kan du bruge sløjfen med_elementer udmelding. Så når du kører nedenstående playbook fortolkes den som 3 forskellige opgaver.
--- - 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'
Eksempel 4: Opret en bruger. Lad os se på bruger modul til at oprette og slette brugere i playbook.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Eksempel 5: Fjern bruger. Fjernelse af en bruger er meget let, og det har brug for stat skal indstilles til fraværende . Dette svarer til userdel kommando i Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
I ovenstående playbook, fjern = ja fjerner hjemmekataloget og kraft = ja fjerner filerne i biblioteket.
Eksempel 6: Kopier indhold til en fil ved hjælp af kopimodulet.
Hvis du har brug for at kopiere en fil til målmaskinerne eller serverne, skal du bruge src og dest i kopimodulet.
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
For eksempel,
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
Eksempel 7: Erstat alle forekomster af en streng.
Ved brug af erstatte modul kan vi erstatte et ord med et andet ord. Udskiftningsmodulet har brug for 3 parametre, dvs. 'sti', 'regexp' (for at finde det bestemte ord) og 'udskift' (giver et andet ord til udskiftning).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Eksempel 8: Arkiver eller ZIP filer og mapper
Brug af Ansible arkiv modul kan du komprimere filer eller mapper til 'zip', '. gz' eller 'bz2' format.
Bemærk : De filer eller mapper, der skal komprimeres, skal være tilgængelige på målserverne og skal have pakkerne til tjære, bzip2, gzip, zip-fil installeret på dem. Du kan have en separat playbook-opgave til installation af disse pakker.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Ovenstående afspilningsbog zip-filen niranjan.txt til niranjan.zip-fil
--- - 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
Ovenstående playbook vil zip flere filer til niranjan.zip-filen.
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Ovenstående playbook vil zip alle filer i / home / ansible-biblioteket.
Eksempel 9: Arbejde med dato og tidsstempel
Brug af systemets dato og tidsstempel hjælper med visse status- eller logningsformål. Ansible fakta giver adgang til fjernserver eller målserver dato og klokkeslæt. Så vi kan bruge fejlretningsmodul for at udskrive output sammen med hvor attribut som vist nedenfor.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Ovenstående playbook viser datoen.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Ovenstående playbook viser klokkeslættet.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Ovenstående playbook opretter en dynamisk fil baseret på den aktuelle dato for For eksempel . niranjan2018-07-15.log
Eksempel 10: Variabler Eksempel
Variabler bruges til at gemme værdier. I nedenstående eksempel erklærer jeg variablen navn med værdi niranjan . Outputtet bliver niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Vi kan også have en matrix eller en liste over variabler som nedenfor Eksempel .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indekseringen af arrayet starter fra ZERO (0). Derfor vil output i ovenstående eksempel være Niranjan.
Eksempel 11: Registrer variabler
Vi kan også registrere output fra enhver opgave til 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
Bemærk: For at få vist - brug msg-attributten og til at registrere enhver værdi, brug var-attributten i - debug-modulet
Eksempel 12: Playbook til installation af vim editor og GIT på målserverne eller maskinerne.
gratis mp3 downloader app til Android-telefon
I denne playbook har vi gjort brug af yum modul til at installere den nyeste version af softwarepakkerne.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Eksempel 13: Installer Apache-serveren. Gem nedenstående kode og kør playbook som vist nedenfor.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
Bortset fra yum modulet, service modulet bruges også til at starte httpd-tjenesten. Opgaverne løber fra top til bund synkront.
Eksempel 14: Installer JDK
Den følgende playbook automatiserer installation af JDK 8 på alle målmaskiner eller servere. JDK er en forudsætning for de fleste andre softwarepakker 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'
Eksempel 15: Installer Maven
De udførte opgaver er at downloade maven-filen fra URL'en ved hjælp af get_url modul, udpak den downloadede fil, flyt den til et mindre bibliotek, opdater og kør profilen, hvor maven føjes til stien.
--- - 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
Eksempel 16: Installer Tomcat 8
Nedenstående playbook hjælper med at installere og starte Tomcat 8 på målmaskinerne eller serverne.
Du kan klikke her for at kopiere linkplaceringen til den nyeste version af Tomcat 8. Klik på her til den URL, der indeholder Tomcat 8 tar-filen, som jeg har brugt i denne playbook.
--- - 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
Eksempel 17: foropgaver, postopgaver og tags
Du kan bruge foropgaver og efteropgaver at køre bestemte opgaver før eller efter kørsel af hovedopgaven.
Normalt i en playbook har du så mange opgaver, der udføres. Hvad hvis du kun har brug for at udføre en bestemt opgave? Mærker er svaret på det. Lad os se på nedenstående mulighed, som har alle de 3 muligheder. Den har 2 opgaver, dvs. en med en TAG og en uden 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
Lad os se, hvad der sker, når du kører playbook med indstillingen –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Outputtet ovenfor ser bedre og tydeligt ud. Afspil nr. 1 har et mærke niranjan, men Afspil nr. 2 har ingen tags.
Hvis du har brug for at udføre opgaverne med tagget niranjan, vil kommandoen til at køre være:
$ ansible-playbook preposttagseg.yml --tags niranjan
Det andet afspilning udføres ikke, og filen oprettes ikke.
Eksempel 18: Handlere
Enhver softwarepakke har konfigurationsfiler, og ændringer af den har kun effekt, når tjenesten genstartes. Så du skal have tjenesten indstillet til at genstarte. Til For eksempel. I nedenstående playbook, hvis du kører den flere gange, genstarter tjenesten alligevel uanset de foretagne ændringer eller ej, hvilket ikke er 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 skal kun genstarte tjenesten, hvis ændringerne foretages i konfigurationsfiler. Handlere give den funktion.
Så det rette flow med håndterere ville være at have en underrette mulighed.
--- - 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å for første gang installeres og startes Apache-serveren. Selvom du genkører playbooken uden ændringer foretaget, genstarter httpd-tjenesten ikke, da den allerede er startet.
Hvis der er ændringer i konfigurationsfilerne, eller hvis HTML-filerne ændres, så får behandleren besked om at genstarte tjenesten, når playbook er kørt. Navnet i underretningssektionen og håndterere skal være de samme. Handleren er skrevet som enhver anden opgave, men kaldes kun, hvis der er ændringer.
Ansible Vault
De fleste af de gange, hvor følsomme eller fortrolige data skal beskyttes i afspilningsbogen, kan de krypteres snarere end blot at opbevare dem i en tekstfil, som alle kan læse. Ansible Vault giver dig mulighed for at kryptere playbook for at beskytte fortrolige data.
For eksempel, overvej følgende opgave, hvor en fortrolig jobaftale kopieres.
I sådanne tilfælde har du brug for en 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
Følgende er de trin, du skal følge for at kryptere ovenstående playbook-filer.
# 1) Oprettelse af nye krypterede filer
For at oprette nye krypterede filer med hvælving skal du bruge ansible-vault opretter kommando.
$ ansible-vault create jobagreement.yml
Efter bekræftelse af adgangskode åbnes et redigeringsvindue for at tilføje indhold til filen.
Ansible krypterer indholdet, når du lukker filen. I stedet for at se det faktiske indhold vil du se krypterede blokke.
# 2) Brug følgende for at kryptere en eksisterende yml-fil
$ ansible-vault encrypt existingfile.yml
Adgangskode bliver igen bedt om kryptering.
# 3) Visning af krypteret fil
Brug kommandoen ansible-hvælving visning for at se på det faktiske indhold af filen.
$ ansible-vault view jobagreement.yml
Du bliver bedt om adgangskoden igen for at se indholdet af filen.
# 4) Redigering af krypterede filer
Brug kommandoen, hvis du har brug for at redigere filen ansible-hvælving redigering
$ ansible-vault edit users.yml
Indtast adgangskoden for at redigere filen.
# 5) Ændring af adgangskode til de krypterede filer
Brug kommandoen ansible-vault rekey for at ændre adgangskoden til filen.
$ ansible-vault rekey jobagreement.yml
# 6) Kør en krypteret Ansible playbook-fil
Brug indstillingen –ask-vault-pass med ansible-playbook-kommandoen.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Dekryptering manuelt af de krypterede filer
Brug kommandoen ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Resumé
Nå i denne vejledning så vi de to vigtigste aspekter af konfigurationsstyring, som er Ansible Playbooks og beskyttelse af følsomme data ved hjælp af Ansible Vaults.
Ovenstående eksempler på playbook ville have givet dig en idé om, hvordan man automatiserer forskellige opgaver i forskellige scenarier under softwarelevering.
I vores kommende vejledning vil vi se, hvordan man modulerer Playbook ved hjælp af Ansible-roller, integreres med Jenkins og det vigtigste aspekt til at arbejde med Ansible S3- og EC2-moduler til styring af AWS-forekomster (Opret og afslut EC2-forekomster).
c ++ hvordan man bruger stringstream
PREV-vejledning | NÆSTE vejledning
Anbefalet læsning
- Ansible Tutorial: Installation og brug med Ansible Modules
- SeeTest-automatiseringskommandoer: En detaljeret forklaring med eksempler
- Ansible roller, integration med Jenkins i DevOps og EC2-moduler
- Sådan udvikles testskripter ved hjælp af Top 5 mest populære testautomatiseringsrammer (eksempler)
- Scriptless Test Automation Framework: Værktøjer og eksempler
- Python DateTime-tutorial med eksempler
- Klip kommando i Unix med eksempler
- Testautomatisering - er det en specialiseret karriere? Kan normale testere også automatisere?