Sådan kopieres filer mellem eksterne værter i ansible
- 0
Sådan kopieres filer mellem eksterne servere i Ansible ?. er formålet bag denne artikel. Hver artikel jeg gik og læste gav mig forslag, men intet praktisk. Jeg ønskede simpelthen at gøre gøre ansible rsync. Jeg ønskede at udføre rsync
mellem fjernværter og kopiere filer mellem fjernværter.
Så her er den eksempelorienterede artikel. I dette indlæg vil vi diskutere de to store muligheder, der er tilgængelige for at kopiere filerne mellem fjernservere eller fjern til fjern.
Når vi ønsker at kopiere filer fra en vært til en anden vært, er det første, der kommer i vores sind, generelt SCP og ansible har et dedikeret modul til det samme navn COPY
Hvis du vil kopiere en fil fra en Ansible Control Master til fjernværter, ville COPY (scp) modulet være helt fint. Men vi har brug for noget mere, når vi vil kopiere filerne mellem fjernværter eller kopiere filer mellem fjernværter til fjernværter.
Vi vil bruge nogle af de ansible moduler som copy, fetch, synchronize til at opfylde kravet om at kopiere filerne mellem værter i ansible.
Mens vi allerede er klar over, hvad er Ansible Copy modulet bruges til.
Her er den enkle introduktion til Ansible Fetch og Ansible Synchronize.
Ansible Fetch er at trække filerne fra fjernserveren til kontrolmaskinen.
Ansible Synchronize bruges til at kopiere filerne mellem fjernservere (eller) målværter. Dette svarer mere til at udføre RSYNC med hjælp fra Ansible.
Indholdsfortegnelse
Indekset
- Planen / Kravet
- Metode1: Copy files between remote hosts using fetch module
- Method2: Copy file between remote hosts using synchronize module
- Synkronize Push
- Synkronize Pull
- The Execution Output
- Referencer og andre relaterede artikler.
Planen / Kravet
For at komme i gang, lad os selv definere nogle krav, så vi kan relatere og være på samme side.
Vi har to servere, der hedder som følger
- mwiappi01
- mwiapp02
Kravet er at kopiere en fil fra mwiapp01 til mwiapp02. Før vi fortsætter, Dette er infrastrukturdiagrammet for vores opsætning.
Bliv ikke forvirret af navnet Master. Det er blot en kontrolmaskine. Husk Ansible er agent mindre. så der er ingen master og slave.
Metode1: Kopier fra app01 til app02 ved hjælp af fetch-modulet
INGEN SSH-autentifikation kræves mellem fjernknudepunkterne for denne metode
Dette er den bedste og nemmeste mulighed for at overføre filer mellem fjernknudepunkterne Når du ikke har SSH-nøglebaseret autentifikation aktiveret mellem fjernknudepunkterne. Selv om det ikke er den korteste vej (eller) beeline. Det fungerer godt, hvor vores primære fokus er at få arbejdet gjort, uanset hvilken fremgangsmåde der er tale om.
Det er en to-trins proces, når det drejer sig om denne metode.
Stræk 1: Hent filen fra fjernserveren (kilde) til ansible master
Stræk 2: Skub (kopiering) filen fra ansible master til fjernserveren ( destination)
Her fungerer masteren som en buffer, hvor filerne gemmes midlertidigt og derefter overføres.
Tænk på følgende playbook, som udfører begge disse ovennævnte opgaver.
--- - hosts: app tasks: - name: Fetch the file from the mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}}" - name: Kopier filen fra master til mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}}"
Her bruger vi "when"
til at udføre den betingelsesbaserede udførelse, og inventory_hostname
er den indbyggede ansible-variabel, som vil pege på den aktuelle udførelse fjernværtsværtsnavn.
Nogle gange kan det være nødvendigt at bruge
ansible_hostname
i stedet forinventory_hostname
Vi instruerer grundlæggende Ansible om kun at udføre Fetch-opgaven på mwiapp01
-serveren og kun at kopiere opgaven, når mwiapp02
er den aktuelle fjernudførelsesvært.
Metode 2: Kopier fra app01 til app02 ved hjælp af synkroniseringsmodulet
SSH-nøglebaseret godkendelse skal være aktiveret mellem fjernværter
For at synkroniseringsmodulet kan fungere problemfrit, skal SSH-nøglebaseret godkendelse være aktiveret mellem fjernknudepunkterne. Ellers vil synkroniseringsopgaven gå i stå, og det samme gør dit Ansible-spil.
Med andre ord skal fjernknudepunkterne kunne logge ind på hinanden uden at skulle indtaste adgangskoden manuelt. Vi opnår dette for det meste ved hjælp af SSH-nøglen.
Som sagt tidligere. Ansible Synchronize er mere som Ansible RSYNC. den typiske rsync
funktion i Linux.
For at vide hvordan man aktiverer nøglebaseret autentificering bare på få sekunder, henvises til følgende artikel
Aktiver SSH Key baseret autentificering ved hjælp af Ansible
Når vi er klar med SSH Key-baseret autentificering. Vi er klar til at spille stykket. ( playbook).
Der er to metoder til at kopiere filer ved hjælp af Synchronize-modulet
- Synchronize Pull
- Synchronize Push
Opnå følgende playbooks, som kopierer filen fra mwiapp01
til mwiapp02
ved hjælp af både Synchronize Pull og Synchronize Push-metoden
Synchronize Pull
Targeted to: Kildeserver (mwiapp01)
Delegeret til og udført på:
Delegeret til og udført på: Destinationsserver (mwiapp02)
Forklaring: Da den udføres på destinationsserveren, hvor filen skal ankomme. Opgaven er at trække filen fra Origin (eller) kildeserveren.
Her er den playbook, der bliver udført på destinationsserveren mwiapp02
ved hjælp af delegation og pulls
filen fra mwiapp01 til mwiapp02
---- navn: Sync Pull task - Executed on the Destination host "{{groups}}}" hosts: "{{groups}}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Pull tags: sync-pull sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups}}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"
Du kan tro, at playbooken er indstillet til at blive udført på den første server, da hosts
-direktivet er rettet mod den første server. hosts: "{{group}}"
mwiapp01
Men du skal bemærke, at vi faktisk udfører denne opgave på den anden server mwiapp02
ved hjælp af delegate_to
Kig på følgende skærmpost for at forstå dette bedre.
Synkroniser Push
Targeted to: Destinationsserver (mwiapp02)
Delegeret til og udført på:
Delegeret til og udført på: Kildeserver (mwiapp01)
Forklaring: Da den udføres på kildeserveren, hvor filen allerede er til stede. Opgaven er at skubbe filen til destinationsserveren
Her er den playbook, der bliver udført på kildeserveren mwiapp01
og pushes
filen fra 01 til 02
- navn: Sync Push task - Udført på kildevært "{{groups}}" værter: "{{groups}}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}}" register: syncfile with_items: "{{groups}} - "/tmp/app01-to-app02.jar"
Du kan tro, at playbooken er indstillet til at blive udført på den anden server, da hosts
-direktivet er rettet mod den første server. hosts: "{{group}}"
mwiapp02
Men du skal bemærke, at vi faktisk udfører denne opgave på den første server mwiapp01
ved hjælp af delegate_to
Spillebogen består af to værtsbaserede opgaver liste. Den første kører med Synchronize Pull vil køre på mwiapp02
og den anden med Synchronize Push vil køre på mwiapp01
Selv om playbooken er forståelig ( let at forstå). Jeg føler, at der er nogle ejendommelige linjer, der har brug for mere forklaring, som "{{groups}}"
Det repræsenterer det første element (eller) server i værtsgruppen ved navn “app” ligesom et array
Håber følgende billede ville gøre det klart.
Andre to vigtige linjer i filen er som følger
- mode Det repræsenterer modellen af Synchronize. Enten Synchronize pull eller Synchronize push
- delegate_to Den fortæller ansible, hvor opgaven (eller) kommandoen egentlig skal udføres.
Håber du måske har forstået det nu. delegate_to
og hosts
sammen med mode
i ansible-playbook, arbejder sammen for at gøre fjernudførelse (eller) kopiering mellem fjernknudepunkter mulig.
Udførelsesoutput
I det foregående skærmbillede har vi udført 3 kommandoer. Den første og den sidste er en Ansible ad hoc-kommando til at kontrollere tilgængeligheden af filen under /tmp
mappen i mwiapp02
server
Vi bruger
--limit
til at udføre kommandoen i kun én server, selvom vi bruger hostgruppen, der indeholder to servere.
Vi har med succes kopieret en fil fra mwiapp01 til mwiapp02 ved hjælp af både Fetch- og Synchronize-moduler.
Slutning
I dette indlæg har vi med succes lært og udført, hvordan man kopierer filer mellem fjernværter ved hjælp af ansible copy- og fetch-moduler. Vi har lært to metoder til at kopiere filerne mellem værter ved hjælp af ansible.
Håber du finder denne artikel nyttig.
- Ansible Copy modul reference
- Ansible Fetch modul reference
- Ansible Synchronize modul reference
- Sådan kopierer eller udveksler SSH Key mellem flere værter – Ansible
- Sådan udveksler du IP og opdaterer /etc/hosts filen i flere værter – Ansible
Håber denne artikel hjælper. Hvis du kan lide denne artikel, bedes du dele den