task automation using ansible playbooks
Lær oppgaveautomatisering ved hjelp av Ansible spillbøker og Ansible hvelv for å sikre sensitive data:
I vår forrige Ansible tutorial # 1 , vi lærte om de forskjellige komponentene i Ansible og hvordan du installerer og konfigurerer dette verktøyet med forskjellige moduler. Vi så også hvordan modulene brukes til å utføre en funksjon eller oppgave.
I denne delen vil vi se på automatisering av oppgaver ved hjelp av Ansible spillbøker og Ansible hvelv for å sikre sensitive data.
Foreslått lese => Læringsguide om DevOps
automatiseringstest intervju spørsmål og svar pdf
Hva du vil lære:
Ansible Playbooks
Vi har sett hvordan du kjører enkeltoppgaver eller engangsoppgaver ved hjelp av moduler, men hva om du trenger å utføre flere oppgaver? Playbooks hjelper deg med å kjøre dem på en skriptet måte.
Playbooks definerer variabler, konfigurasjoner, distribusjonstrinn, tilordner roller, utfører flere oppgaver. Til F.eks. KOPIER / SLETT filer og mapper, installer pakker, start tjenester. Så primært er spillbøker definert for å organisere trinnene til flere maskiner eller servere og få dem alle til en bestemt ønsket tilstand.
Playbook er skrevet i YAML-format med filtypen .yml. Man må være veldig forsiktig med formatet og justeringen som gjør det veldig følsomt.
Den inneholder følgende seksjoner:
- Hver lekebok starter med tre bindestreker ‘-‘
- Vertdel - Definerer målmaskinene som spillboken skal kjøre på. Dette er basert på Ansible-inventarfilen.
- Variabel seksjon - Dette er valgfritt og kan erklære alle variablene som trengs i spillboken. Vi vil se på noen eksempler også.
- Oppgaver - Denne delen viser alle oppgavene som skal utføres på målmaskinen. Den spesifiserer bruken av moduler. Hver oppgave har et navn som er en liten beskrivelse av hva oppgaven vil gjøre og vil bli oppført mens lekeboken kjøres.
For eksempel,
Hvis vi trenger å installere og konfigurere Tomcat, vil den bestå av følgende oppgaver:
- Last ned og installer Tomcat
- Konfigurer Tomcat
- Start Tomcat
Tilsvarende en annenEksempelfor bruk av Tomcat som brukes i kontinuerlig levering av DevOps, kan oppgavene være som følger:
- Stopp søknaden
- Avinstaller applikasjon
- Installer en ny versjon av WAR-filen.
- Start søknaden
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 skriptet ovenfor ser du på justeringen fra toppen og den må opprettholdes ellers får du syntaksfeil.
Bruk følgende kommando for å kjøre en hvilken som helst spillbok
$ ansible-playbook
For å sjekke spillboken for syntaksfeil
$ ansible-playbook --syntax-check
For å se vertslisten
$ ansible-playbook --list-hosts
Lage Playbooks med eksempler
I denne delen vil vi se flere eksempler på hvordan du lager spillbøker som du kanskje trenger å kjøre regelmessig. Disse spillbøkene må opprettes og kjøres fra kontrollmaskinen.
Lagre alle spillbøkene nedenfor i en .yml-fil og kjør som vist nedenfor.
$ ansible-playbook filename.yml
Eksempel 1: Opprett filen på målmaskiner eller servere som nevnt i lagerfilen og webserverens gruppe, lagre koden nedenfor med .yml-utvidelsen og kjør spillboken.
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
I eksemplet ovenfor har vi brukt fil modul for å opprette filen.
Eksempel 2: Opprett en katalog med modusen 775 og eier / 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: Lag flere kataloger. For å opprette flere kataloger med en enkelt oppgave kan du bruke loop med_elementer uttalelse. Så når du kjører spillelisten nedenfor tolkes den som 3 forskjellige oppgaver.
--- - 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: Opprett en bruker. La oss se på bruker modul for å opprette og slette brukere i spillboken.
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
Eksempel 5: Fjern bruker. Det er veldig enkelt å fjerne en bruker, og det trenger stat som skal settes til fraværende . Dette tilsvarer userdel kommando i Linux.
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
I spillboken ovenfor, fjerne = ja vil fjerne hjemmekatalogen og kraft = ja vil fjerne filene i katalogen.
Eksempel 6: Kopier innhold til en fil ved hjelp av kopimodulen.
Hvis du trenger å kopiere en fil til målmaskiner eller servere, bruk src og dest i kopimodulen.
--- - 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: Erstatt alle forekomster av en streng.
Ved hjelp av erstatte modul kan vi erstatte et ord med et annet ord. Erstatningsmodulen trenger 3 parametere, dvs. 'sti', 'regexp' (for å finne det bestemte ordet) og 'erstatt' (gir et annet ord for erstatning).
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
Eksempel 8: Arkivere eller ZIP-filer og mapper
Bruke Ansible arkiv modul kan du komprimere filer eller mapper til 'zip', '.gz' eller 'bz2' format.
Merk : Filene eller mappene som skal komprimeres skal være tilgjengelige på målserverne og skal ha pakkene for tjære, bzip2, gzip, zip-fil installert på dem. Du kan ha en egen playbook-oppgave for å installere disse pakkene.
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
Spillboken ovenfor vil zip filen niranjan.txt til 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
Spillboken ovenfor vil zip flere filer til niranjan.zip-filen.
beste gratis youtube til mp3-omformer
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
Spillboken ovenfor vil zip alle filene i / home / ansible-katalogen.
Eksempel 9: Arbeider med dato og tidsstempel
Å bruke systemets dato og tidsstempel hjelper i visse status- eller loggformål. Ansible fakta gir tilgang til eksterne servere eller målservere dato og klokkeslett. Så vi kan bruke feilsøkingsmodul for å skrive ut utskrift sammen med hvor attributt som vist nedenfor.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
Spillboken ovenfor viser datoen.
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
Spillboken ovenfor viser klokkeslettet.
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
Spillboken ovenfor vil opprette en dynamisk fil basert på gjeldende dato for F.eks . niranjan2018-07-15.log
Eksempel 10: Variabler Eksempel
Variabler brukes til å lagre verdier. I eksemplet nedenfor erklærer jeg variabelen Navn med verdi niranjan . Resultatet blir niranjan .
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
Vi kan også ha en matrise eller en liste over variabler som nedenfor Eksempel .
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
Indekseringen av matrisen starter fra ZERO (0). Derfor blir produksjonen i eksemplet ovenfor Niranjan.
Eksempel 11: Registrer variabler
Vi kan også fange utdataene fra en hvilken som helst oppgave 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
Merk: For å vise - bruk msg-attributtet og for å fange opp en verdi, bruk var-attributtet i - feilsøkingsmodulen
Eksempel 12: Playbook for å installere vim editor og GIT på målserverne eller maskinene.
I denne lekeboken har vi benyttet oss av yum modul for å installere den nyeste versjonen av programvarepakkene.
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
Eksempel 13: Installer Apache-serveren. Lagre koden nedenfor og kjør spillbok 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
Bortsett fra yum modul, den service modulen brukes også til å starte httpd-tjenesten. Oppgavene løper fra topp til bunn synkront.
Eksempel 14: Installer JDK
Den følgende spillboken automatiserer installasjonen av JDK 8 på alle målmaskiner eller servere. JDK er en forutsetning for de fleste andre programvarepakker 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
Oppgavene som utføres er å laste ned maven-filen fra URL-en ved hjelp av get_url modul, trekk ut den nedlastede filen, flytt den til en mindre katalog, oppdater og kjør profilen der maven er lagt til banen.
--- - 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
Spillboken nedenfor hjelper deg med å installere og starte Tomcat 8 på målmaskinene eller serverne.
Du kan klikke her for å kopiere koblingsplasseringen til den siste versjonen av Tomcat 8. Klikk her for URL-en som inneholder Tomcat 8 tar-filen som jeg har brukt i denne spillboken.
--- - 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: foroppgaver, etteroppgaver og koder
Du kan bruke foroppgaver og etteroppgaver å kjøre bestemte oppgaver før eller etter kjøring av hovedoppgaven.
Normalt i en lekebok har du så mange oppgaver som utføres. Hva om du bare trenger å utføre en bestemt oppgave? Merkelapper er svaret på det. La oss se på alternativet nedenfor som har alle de tre alternativene. Den har to oppgaver, dvs. en med en TAG og en uten 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
La oss se hva som skjer når du kjører playbook med alternativet –list-tags
$ ansible-playbook preposttagseg.yml --list-tags
Resultatet ovenfor ser bedre og tydelig ut. Spill # 1 har en tag niranjan, men Play # 2 har ingen tagger.
Hvis du trenger å utføre oppgavene med taggen niranjan, vil kommandoen du skal kjøre være:
$ ansible-playbook preposttagseg.yml --tags niranjan
Det andre avspillingen blir ikke utført, og filen blir ikke opprettet.
Eksempel 18: Handlere
Enhver programvarepakke vil ha konfigurasjonsfiler, og eventuelle endringer i den vil bare ha effekt når tjenesten startes på nytt. Så du må ha tjenesten satt til å starte på nytt. Til F.eks. I spillelisten nedenfor, hvis du kjører den flere ganger, starter tjenesten uansett uansett endringene som er gjort eller ikke, noe som ikke er riktig.
--- - 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 trenger å starte tjenesten på nytt bare hvis endringene er gjort i konfigurasjonsfiler. Handlere gi den funksjonen.
Så riktig flyt med håndterere ville være å ha en gi beskjed 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å for første gang vil Apache-serveren installeres og startes. Selv om du kjører spillboken på nytt uten endringer, vil ikke httpd-tjenesten starte på nytt siden den allerede er startet.
Hvis det er noen endringer i konfigurasjonsfilene, eller hvis HTML-filene endres, blir håndteringen varslet om å starte tjenesten på nytt når spillboken er kjørt. Navnet i varslingsseksjonen og håndterere skal være det samme. Behandleren er skrevet som alle andre oppgaver, men kalles bare hvis det er endringer.
Ansible Vault
De fleste ganger når sensitive eller konfidensielle data må beskyttes i spillboken, kan de krypteres i stedet for bare å oppbevare dem i en tekstfil som er lesbar for alle. Ansible Vault lar deg kryptere spillboken for å beskytte konfidensielle data.
For eksempel, vurder følgende oppgave der en konfidensiell jobbavtale kopieres.
I slike tilfeller trenger du et 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 trinnene du trenger å følge for å kryptere spillboksfilene ovenfor.
# 1) Opprette nye krypterte filer
For å lage nye krypterte filer med hvelv, bruk ansible-hvelv opprette kommando.
$ ansible-vault create jobagreement.yml
Etter bekreftelse av passord åpnes et redigeringsvindu for å legge til innhold i filen.
Ansible vil kryptere innholdet når du lukker filen. I stedet for å se det faktiske innholdet vil du se krypterte blokker.
# 2) Bruk følgende for å kryptere en eksisterende yml-fil
$ ansible-vault encrypt existingfile.yml
Passord vil igjen bli bedt om kryptering.
# 3) Viser kryptert fil
Bruk kommandoen ansible-hvelvvisning for å se på det faktiske innholdet i filen.
$ ansible-vault view jobagreement.yml
Du blir bedt om passordet igjen for å se på innholdet i filen.
# 4) Redigering av krypterte filer
Hvis du trenger å redigere filen, bruk kommandoen ansible-hvelv redigere
$ ansible-vault edit users.yml
Skriv inn passordet for å redigere filen.
# 5) Endring av passord for de krypterte filene
Bruk kommandoen ansible-hvelv rekey for å endre passordet til filen.
$ ansible-vault rekey jobagreement.yml
# 6) Kjør en kryptert Ansible playbook-fil
Bruk alternativet –ask-vault-pass med ansible-playbook-kommandoen.
$ ansible-playbook users.yml --ask-vault-pass
# 7) Kryptere de krypterte filene manuelt
Bruk kommandoen ansible-vault decrypt command.
$ ansible-vault decrypt jobagreement.yml
Sammendrag
Vel i denne opplæringen så vi de to viktigste aspektene av konfigurasjonsadministrasjon som er Ansible Playbooks og beskytter sensitive data ved hjelp av Ansible Vaults.
Ovennevnte eksempler på playbook ville gitt deg en ide om hvordan du automatiserer forskjellige oppgaver i forskjellige scenarier under programvarelevering.
I vår kommende opplæring vil vi se hvordan vi kan modulere Playbook ved hjelp av Ansible-roller, integrere med Jenkins og det viktigste aspektet for å jobbe med Ansible S3 og EC2-moduler for å administrere AWS-forekomster (Opprett og avslutt EC2-forekomster).
forskjell mellom port frem og port trigger
PREV Opplæring | NESTE veiledning
Anbefalt lesing
- Ansible Tutorial: Installasjon og bruk med Ansible Modules
- SeeTest-automatiseringskommandoer: En detaljert forklaring med eksempler
- Ansible Rolles, Integrasjon med Jenkins i DevOps og EC2-moduler
- Slik utvikler du testskript ved hjelp av de fem mest populære rammene for testautomatisering (eksempler)
- Scriptless Test Automation Framework: Verktøy og eksempler
- Python DateTime Tutorial med eksempler
- Klipp kommandoen i Unix med eksempler
- Testautomatisering - er det en spesialisert karriere? Kan normale testere gjøre automatisering også?