Hur man kopierar filer mellan fjärrvärdar i ansible
- 0
Hur man kopierar filer mellan fjärrservrar i Ansible ? är syftet med denna artikel. Varje artikel jag gick och läste gav mig förslag men inget praktiskt. Jag ville helt enkelt göra make ansible rsync. Jag ville utföra rsync
mellan fjärrvärdar och kopiera filer mellan fjärrvärdar.
Så här är den exempelorienterade artikeln. I det här inlägget kommer vi att diskutera de två huvudalternativen som finns tillgängliga för att kopiera filer mellan fjärrservrar eller fjärr till fjärr.
När vi vill kopiera filer från en värddator till en annan värddator, i allmänhet, det första som kommer i vårt sinne är SCP och ansible har en dedikerad modul för samma namn COPY
Om du vill kopiera en fil från en Ansible Control Master till fjärrvärdar, skulle COPY (scp) modulen vara helt okej. Men vi behöver något mer när vi vill kopiera filerna mellan fjärrvärdarna eller kopiera filer mellan fjärrvärdar till fjärrvärdar.
Vi kommer att använda några av ansible-modulerna som copy, fetch, synchronize för att uppfylla kravet på att kopiera filer mellan värdar i ansible.
Men vi är redan medvetna om vad är Ansible Copy-modulen används för.
Här är en enkel introduktion till Ansible Fetch och Ansible Synchronize.
Ansible Fetch är att dra filerna från fjärrservern till kontrollmaskinen.
Ansible Synchronize används för att kopiera filerna mellan fjärrservrar (eller) målvärdar. Detta är mer som att utföra RSYNC med hjälp av Ansible.
Innehållsförteckning
Index
- Planen/kravet
- Metod1: Kopiera filer mellan fjärrvärdar med hjälp av fetch-modulen
- Metod2: Kopiera fil mellan fjärrvärdar med hjälp av synkroniseringsmodulen
- Synkronisera Push
- Synkronisera Pull
- Exekveringsresultatet
- Referenser och andra relaterade artiklar.
Planen/kravet
För att komma igång bör vi definiera några krav själva så att vi kan relatera och vara på samma sida.
Vi har två servrar med följande namn
- mwiappi01
- mwiapp02
Kravet är att kopiera en fil från mwiapp01 till mwiapp02. Innan vi fortsätter är detta infrastrukturdiagrammet för vår installation.
Låt dig inte förvirras av namnet Master. Det är bara en kontrollmaskin. Kom ihåg att Ansible är agentlös. så det finns ingen master och slav.
Metod1: Kopiera från app01 till app02 med hjälp av fetch-modulen
Ingen SSH-autentisering krävs mellan fjärrnoderna för den här metoden
Det här är det bästa och enklaste alternativet för att överföra filer mellan fjärrnoderna När du inte har SSH-nyckelbaserad autentisering aktiverad mellan fjärrnoderna. Även om det inte är den kortaste vägen (eller) beeline. Det fungerar bra när vårt primära fokus är att få jobbet gjort oavsett tillvägagångssätt.
Det är en tvåstegsprocess när det gäller den här metoden.
Steg1: Hämta filen från fjärrservern (källan) till ansible master
Steg2: Skjut (kopiera) filen från ansible master till fjärrservern ( destination)
Här fungerar masteren som en buffert där filerna lagras tillfälligt och sedan överförs.
Tänk på följande playbook som utför båda dessa ovan nämnda uppgifter.
--- - 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: Kopiera filen från master till mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "
Här använder vi "when"
för att utföra den villkorliga baserade exekveringen och inventory_hostname
är den inbyggda ansible-variabeln som pekar på det aktuella exekveringsmotorns värdnamn.
Ibland kan du behöva använda
ansible_hostname
i stället förinventory_hostname
Vi instruerar i princip Ansible att utföra Fetch-uppgiften endast på mwiapp01
-servern och copy-uppgiften endast när mwiapp02
är den aktuella fjärrutförandet.
Metod 2: Kopiera från app01 till app02 med hjälp av synkroniseringsmodulen
SSH-nyckelbaserad autentisering måste aktiveras mellan fjärrvärdar
För att synkroniseringsmodulen ska fungera problemfritt måste SSH-nyckelbaserad autentisering aktiveras mellan fjärrvärdarna. Annars kommer synkroniseringsuppgiften att fastna och så även din Ansible-lek.
Med andra ord ska fjärrnoderna kunna logga in på varandra utan att behöva ange lösenordet manuellt. Vi uppnår detta mestadels med hjälp av SSH-nyckel.
Som sagt tidigare. Ansible Synchronize är mer som Ansible RSYNC. den typiska rsync
funktionen för Linux.
För att veta hur man aktiverar nyckelbaserad autentisering på bara några sekunder, hänvisar vi till följande artikel
Aktivera SSH-nyckelbaserad autentisering med hjälp av Ansible
När vi väl är klara med SSH-nyckelbaserad autentisering. Vi är redo att spela upp pjäsen. ( playbook).
Det finns två metoder för att kopiera filer med hjälp av Synchronize-modulen
- Synchronize Pull
- Synchronize Push
Tänk på följande playbooks som kopierar filen från mwiapp01
till mwiapp02
med hjälp av både Synchronize Pull- och Synchronize Push-metoden
Synchronize Pull
Målsatt till: Källserver (mwiapp01)
Delegerat till och utfört på: Målserver (mwiapp02)
Förklaring: Eftersom den exekveras på målservern där filen ska anlända. Uppgiften är att hämta filen från Origin (eller) källservern.
Här är spelboken som exekveras på destinationsservern mwiapp02
med hjälp av delegering och pulls
filen från mwiapp01 till mwiapp02
---- namn: Sync Pull task - Executed on the Destination hosts "{{groups}}" hosts: "{{groups}}}" user: wlsusr tasks: - name: Kopiera filen från mwiapp01 till mwiapp02 med hjälp av metoden Pull tags: 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 kanske tror att spelboken är inställd på att köras på den första servern eftersom hosts
-direktivet riktar sig till den första servern. hosts: "{{group}}"
mwiapp01
Men du måste lägga märke till att vi faktiskt utför den här uppgiften på den andra servern mwiapp02
med hjälp av delegate_to
Klipp på följande skärmpost för att förstå detta bättre.
Synchronize Push
Targeted to: Målserver (mwiapp02)
Delegerat till och utfört på: Källserver (mwiapp01)
Förklaring: Eftersom den exekveras på källservern där filen redan finns. Uppgiften är att skjuta filen till målservern
Här är spelboken som exekveras på källservern mwiapp01
och pushes
filen från 01 till 02
- namn: Sync Push task - Executed on source host "{{groups}}" hosts: "{{groups}}}" user: wlsusr tasks: - name: Copy the file from mwiapp01 to mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"
Du kanske tror att spelboken är inställd för att köras på den andra servern eftersom hosts
-direktivet riktar sig till den första servern. hosts: "{{group}}"
mwiapp02
Men du måste lägga märke till att vi faktiskt utför den här uppgiften på den första servern mwiapp01
med hjälp av delegate_to
Spelboken består av två värdbaserade uppgifter lista. Den första körs med Synchronize Pull kommer att köras på mwiapp02
och den andra med Synchronize Push kommer att köras på mwiapp01
Tyvärr är playbooken begriplig ( lätt att förstå). Jag känner att det finns några märkliga rader som behöver mer förklaring, som "{{groups}}"
Det representerar det första elementet (eller) servern i värdgruppen som heter ”app” precis som en array
Hoppar att följande bild skulle göra det klart.
Alltså två andra viktiga rader i filen är som följer
- mode Det representerar modellen för Synchronize. Antingen Synchronize pull eller Synchronize push
- delegate_to Den talar om för ansible, var uppgiften (eller) kommandot faktiskt ska exekveras.
Hoppar att du kanske har förstått det nu. delegate_to
och hosts
tillsammans med mode
i ansible-playbook, arbetar tillsammans för att göra fjärrkörning (eller) kopiering mellan fjärrnoder möjlig.
Execution Output
I föregående skärmdump har vi utfört 3 kommandon. Den första och den sista är ett Ansible ad hoc-kommando för att kontrollera tillgängligheten av filen under /tmp
katalogen i mwiapp02
server
Vi använder
--limit
för att exekvera kommandot i endast en server, även om vi använder hostgroup som innehåller två servrar.
Vi har framgångsrikt kopierat en fil från mwiapp01 till mwiapp02 med hjälp av både Fetch- och Synchronize-modulerna.
Slutsats
I det här inlägget har vi framgångsrikt lärt oss och utfört hur man kopierar filer mellan fjärrvärdar med hjälp av ansible copy och fetch-moduler. Vi har lärt oss två metoder för att kopiera filer mellan värdar med hjälp av ansible.
Hoppar att du finner den här artikeln användbar.
- Ansible Copy modulreferens
- Ansible Fetch modulreferens
- Ansible Synchronize modulreferens
- Hur man kopierar eller utbyter SSH-nyckel mellan flera värdar – Ansible
- Hur man byter ut IP-adressen och uppdaterar /etc/hosts-filen i flera värdar – Ansible
Hoppas att du har nytta av denna artikel. Om du gillar den här artikeln, dela den gärna
.