Hoe kopieer je bestanden tussen externe hosts in ansible

  • 0

Hoe kopieer je bestanden tussen externe servers in Ansible?. is het doel achter dit artikel. Elk artikel dat ik heb gelezen, gaf me suggesties, maar niets praktisch. Ik wilde gewoon ansible rsync maken. Ik wilde rsync uitvoeren tussen hosts op afstand en bestanden kopiëren tussen hosts op afstand.

Dus hier is het voorbeeld georiënteerde artikel. In deze post gaan we de twee belangrijkste opties bespreken die beschikbaar zijn om bestanden te kopiëren tussen servers op afstand of van afstand naar afstand.

Wanneer we bestanden van de ene host naar de andere willen kopiëren, denken we in het algemeen als eerste aan SCP en ansible heeft een speciale module voor dezelfde naam COPY

Als je een bestand van een Ansible Control Master naar hosts op afstand wilt kopiëren, is de module COPY (scp) prima. Maar we hebben iets meer nodig als we de bestanden willen kopiëren tussen de hosts op afstand of als we bestanden willen kopiëren tussen hosts op afstand en hosts op afstand.

We gaan enkele ansible-modules gebruiken, zoals copy, fetch, synchronize om te voldoen aan de eis van het kopiëren van de bestanden tussen hosts in ansible.

Terwijl we al weten waar de Ansible Copy module voor wordt gebruikt.

Hier volgt een eenvoudige introductie tot Ansible Fetch en Ansible Synchronize.

Ansible Fetch is om de bestanden van de remote server naar de controle machine te halen.

Ansible Synchronize wordt gebruikt om de bestanden tussen remote servers (of) doel hosts te kopiëren. Dit lijkt meer op het uitvoeren van RSYNC met behulp van Ansible.

Table of Contents

The Index

  1. The Plan / The Requirement
  2. Method1: Kopieer bestanden tussen remote hosts met behulp van fetch module
  3. Methode2: Kopieer bestand tussen remote hosts met behulp van synchronize module
    1. Synchronize Push
    2. Synchronize Pull
  4. De Uitvoer
  5. Referenties en andere gerelateerde artikelen.

Het Plan / De Eis

Om te beginnen, laten we zelf wat eisen definiëren, zodat, we kunnen relateren en op dezelfde pagina zitten.

We hebben twee servers met de volgende naam

  1. mwiappi01
  2. mwiapp02

De eis is om een bestand te kopiëren van mwiapp01 naar mwiapp02. Voordat we verder gaan, Dit is het infrastructuur diagram van onze setup.

Raak niet in de war door de naam Master. Het is slechts een controle machine. Vergeet niet dat Ansible minder agents heeft, dus er is geen master en slave.

Methode1: Kopieer van app01 naar app02 met behulp van de haalmodule

GEEN SSH-authenticatie vereist tussen de externe knooppunten voor deze methode

Dit is de beste en eenvoudigste optie om bestanden over te zetten tussen de externe knooppunten wanneer u geen SSH-sleutelgebaseerde authenticatie hebt ingeschakeld tussen de externe knooppunten. Hoewel, het is niet de kortste weg (of) beeline. Het werkt goed waar onze primaire focus is om de klus te klaren, wat de aanpak ook mag zijn.

het is een twee-stappen proces als het op deze methode aankomt.

Step1: Haal het bestand op van de remote server (bron) naar de ansible master

Step2: Push (Kopieer) het bestand van de ansible master naar de remote server (bestemming)

Hier fungeert de master als een buffer waar de bestanden tijdelijk worden opgeslagen en vervolgens worden overgezet.

Bedenk het volgende playbook dat beide bovengenoemde taken uitvoert.

-- - 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: Kopieer het bestand van master naar mwiapp02 copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}"

hier gebruiken we "when" om de voorwaardelijke gebaseerde uitvoering uit te voeren en inventory_hostname is de ansible ingebouwde variabele die de huidige uitvoering remote hostname zal aanwijzen.

Soms kan het nodig zijn om ansible_hostname te gebruiken in plaats van inventory_hostname

We geven Ansible in feite de opdracht om de Fetch-taak alleen uit te voeren op de mwiapp01 server en de Copy-taak alleen wanneer mwiapp02 de huidige host voor uitvoering op afstand is.

Methode 2: Kopieer van app01 naar app02 met behulp van synchronisatiemodule

SSH Key-gebaseerde authenticatie moet zijn ingeschakeld tussen hosts op afstand

Om de synchronisatiemodule probleemloos te laten werken, moet SSH Key-gebaseerde authenticatie zijn ingeschakeld tussen nodes op afstand. Anders zal de synchronize taak vastlopen en dus ook uw Ansible spel.

Met andere woorden, de remote nodes moeten op elkaar kunnen inloggen zonder het wachtwoord handmatig te hoeven invoeren. We bereiken dit meestal met behulp van SSH key.

Zoals eerder gezegd. Ansible Synchronize lijkt meer op Ansible RSYNC. de typische rsync eigenschap van Linux.

Om te weten te komen hoe we sleutel-gebaseerde authenticatie binnen enkele seconden kunnen inschakelen, verwijzen we naar het volgende artikel

Enable SSH Key-based authentication using Ansible

Als we eenmaal klaar zijn met de SSH sleutel-gebaseerde authenticatie. We zijn klaar om het spel af te spelen. ( playbook).

Er zijn twee methoden om bestanden te kopiëren met behulp van de Synchronize module

  1. Synchronize Pull
  2. Synchronize Push

Overweeg de volgende playbooks die het bestand kopieert van mwiapp01 naar mwiapp02 met behulp van zowel de Synchronize Pull als de Synchronize Push methode

Synchronize Pull

Gericht op: Bronserver (mwiapp01)

Gedelegeerd aan en uitgevoerd op: Bestemmingsserver (mwiapp02)

Uitleg: Omdat het wordt uitgevoerd op de bestemmingsserver waar het bestand moet aankomen. De taak is om het bestand van de Origin (of) source server te halen.

Hier is het playbook dat wordt uitgevoerd op de bestemmingsserver mwiapp02 met behulp van delegatie en pulls het bestand van mwiapp01 naar mwiapp02

---- naam: Sync Pull taak - Uitgevoerd op de Destination host "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Kopieer het bestand van mwiapp01 naar mwiapp02 using Method 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"

Je zou kunnen denken dat het playbook is ingesteld om op de eerste server uit te voeren, aangezien de hosts directive zich richt op de eerste server. hosts: "{{group}}" mwiapp01

Maar je moet opmerken dat we deze taak eigenlijk uitvoeren op de tweede server mwiapp02 met behulp van delegate_to

Kijk naar het volgende schermrecord om dit beter te begrijpen.

Synchronize Push

Targeted to: Destination Server (mwiapp02)

Delegated to and Executed on: Bronserver (mwiapp01)

Uitleg: Omdat het wordt uitgevoerd op de bronserver waar het bestand al aanwezig is. De taak is om het bestand naar de bestemmingsserver te pushen

Hier is het playbook dat wordt uitgevoerd op de bronserver mwiapp01 en pushes het bestand van 01 naar 02

- naam: Sync Push taak - Uitgevoerd op bronhost "{{groups}}" hosts: "{{groups}}" user: wlsusr tasks: - name: Kopieer het bestand van mwiapp01 naar mwiapp02 using Method Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groepen}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"

Je zou kunnen denken dat het playbook is ingesteld om op de tweede server uit te voeren, aangezien de hosts directive op de eerste server is gericht. hosts: "{{group}}" mwiapp02

Maar je moet opmerken dat we deze taak eigenlijk uitvoeren op de eerste server mwiapp01 met behulp van delegate_to

Het afspeelboek bestaat uit twee host-gebaseerde takenlijst. De eerste wordt uitgevoerd met Synchronize Pull op mwiapp02 en de tweede met Synchronize Push op mwiapp01

Hoewel het afspeelboek begrijpelijk is (gemakkelijk te begrijpen). Ik heb het gevoel dat er enkele eigenaardige regels zijn die meer uitleg behoeven, zoals "{{groups}}"

Het vertegenwoordigt het eerste element (of) server van de hostgroep met de naam “app”, net als een array

Hoop dat de volgende afbeelding het duidelijk zou maken.

Andere twee belangrijke regels in het bestand zijn als volgt

  • mode Het vertegenwoordigt het model van de Synchronize. Synchronize pull of Synchronize push
  • delegate_to Het vertelt ansible, waar de taak (of) opdracht eigenlijk moet worden uitgevoerd.

Hoop dat je het nu misschien hebt begrepen. delegate_to en de hosts samen met mode in ansible-playbook, werken samen om het op afstand uitvoeren (of) kopiëren tussen remote nodes mogelijk te maken.

Execution Output

In de voorgaande screenshot, hebben we 3 opdrachten uitgevoerd. De eerste en de laatste is een Ansible ad-hoc commando om de beschikbaarheid van het bestand onder de /tmpdirectory in mwiapp02server

te controleren. We gebruiken --limit om het commando op slechts één server uit te voeren, hoewel we de hostgroep gebruiken die twee servers bevat.

we hebben met succes een bestand gekopieerd van mwiapp01 naar mwiapp02 met behulp van zowel de module Fetch als de module Synchronize.

Conclusie

In dit bericht hebben we met succes geleerd en uitgevoerd hoe we bestanden kunnen kopiëren tussen hosts op afstand met behulp van de modules ansible copy en fetch. We hebben twee methodes geleerd om bestanden te kopiëren tussen hosts met behulp van ansible.

Hoop dat je dit artikel nuttig vindt.

  1. Ansible Copy module referentie
  2. Ansible Fetch module referentie
  3. Ansible Synchronize module referentie
  4. Hoe een SSH sleutel te kopiëren of uit te wisselen tussen meerdere hosts – Ansible
  5. Hoe het IP uit te wisselen en /etc/hosts bestand bij te werken in meerdere hosts – Ansible

Hoop dat dit artikel helpt. Als u dit artikel leuk vindt, deel het dan