In diesem Leitfaden zeige ich Ihnen, wie Sie Dateien mit Ansible-Modulen verwalten. Sie erfahren, wie Sie Dateien mit Ansible kopieren, bearbeiten, einfügen, herunterladen und ersetzen.
Was werden wir tun?
- Kopieren Sie die Datei mit den Modulen „Kopieren“ und „Vorlagen“
- Datei mit dem 'Fetch'-Modul herunterladen
- Datei mit den Modulen 'blockinfile', 'lineinfile' und 'replace' bearbeiten
- Dateiattribute verwalten
Datei mit den Modulen „copy“ und „templates“ in Ansible kopieren
Ansible bietet einige Module zum Kopieren von Dateien aus dem lokalen Verzeichnis auf die Remote-Zielmaschinen, es sind die Module „copy“ und „template“.
Der Unterschied zwischen dem 'copy'- und 'template'-Modul besteht darin, dass das copy-Modul die Datei aus dem 'files'-Verzeichnis kopiert und das 'template' die Jinja2-Vorlage aus dem 'templates'-Verzeichnis in Ansible Playbooks kopiert.
Das Modul „Kopieren“ eignet sich gut zum Kopieren dauerhafter Dateien wie Zertifikate, während das Modul „Vorlage“ eher für wiederverwendbare Konfigurationen wie die Konfiguration virtueller Hosts usw. geeignet ist.
1. Datei vom lokalen auf den Remote-Zielcomputer kopieren
Kopieren Sie die Konfiguration „sources.list“ aus dem lokalen Verzeichnis „files“ auf den Remote-Computer „/etc/apt/sources.list“. Wenn eine Konfiguration vorhanden ist, wird sie ersetzt und basierend auf den Zeitstempeln gesichert.
- name: Copy from Local to Remote Target Machine with 'copy' copy: src: sources.list dest: /etc/apt/sources.list backup: yes
2. Datei auf Remote-Rechner in ein anderes Verzeichnis kopieren
Kopieren Sie die Sudoers-Konfiguration „/etc/sudoers.d/hakase“ auf dem Remote-Computer in das andere Verzeichnis „/home/hakase/hakase-suoers.txt“. Dies kann mit der Option 'remote_src' erfolgen.
- name: Copy file from one directory to other on the Remote Machine copy: src: /etc/sudoers.d/hakase dest: /home/hakase/hakase-sudoers.txt remote_src: yes
3. Kopieren Sie die Datei und ändern Sie die Berechtigung und besitzen Sie die Datei
Kopieren Sie die Bash-Datei im Verzeichnis „files“ auf den Remote-Server-Rechner und legen Sie die Standarddateiberechtigung „0755“ fest und der Besitzer der Datei ist „hakase“.
- name: Copy file and set up the permission and owner of the file copy: src: simple.sh dest: /home/hakase/simple.sh owner: hakase group: hakase mode: 0755
4. Datei mit Vorlagenmodul kopieren
Kopieren Sie die Jinja2-Vorlagenkonfiguration für den virtuellen Nginx-Host aus dem Verzeichnis „templates“ in das Verzeichnis „/etc/sites-enabled/“ auf dem Remotecomputer. Mit der Jinja2-Vorlage können wir Variablen für unsere Konfiguration erstellen und sie besser wiederverwendbar machen.
- name: Copy file using 'template' module template: src: default.j2 dest: /etc/nginx/sites-enabled/ backup: yes owner: root group: root mode: 0644
Laden Sie eine Datei mit dem Fetch-Modul in Ansible herunter
Um eine Datei von der entfernten Maschine auf unseren lokalen Ansible-Knoten herunterzuladen, können wir das Ansible-Modul namens „fetch“ verwenden.
1. Download von einem Remote-Rechner auf lokal
Laden Sie die nginx-Konfigurationsdatei „nginx.conf“ vom Remote-Server in das lokale Ansible-Node-Verzeichnis „/home/hakase/backup“ herunter, um ein Backup zu erstellen. Und das Standard-Fetch-Modul enthält die Verzeichnisstrukturen.
- name: Download file from Remote Machine to Local ansible-node directory become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/
2. Download von Remote zu Local ohne Verzeichnisstrukturen
Laden Sie ohne Verzeichnisstrukturen von der Remote-Maschine auf den lokalen Ansible-Knoten herunter, indem Sie die Option „Flat“ hinzufügen.
- name: Download file from Remote Machine to Local ansible node without directory structures become: yes fetch: src: /etc/nginx/nginx.conf dest: /home/hakase/backup/ flat: yes
Dateien mit Ansible bearbeiten
Jetzt werden wir Dateien mit Ansible-Modulen bearbeiten. Es gibt einige Module, die Sie zum Bearbeiten von Dateien mit Ansible kennen müssen, z. B. blockinfile, lineinfile und replace.
Die Blockdatei fügt mehrere Zeilen in die Datei ein/entfernt sie. Die lineinfile ist für die einzelne Zeile, und das replace-Modul kann verwendet werden, um string.
zu ersetzen1. Mehrere Zeilen in Datei einfügen mit 'blockinfile'
Fügen Sie der SSH-Konfiguration „sshd_config“ mithilfe des Moduls „blockinfile“ eine Konfiguration mit mehreren Zeilen hinzu. Und das Standard-Setup fügt die neue Konfiguration am Ende der Zeilen ein.
- name: Insert multiple lines and Backup
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
block: |
ClientAliveInterval 360
ClientAliveCountMax 0
2. Mehrere Zeilen mit den Markierungsoptionen einfügen
Oder wenn Sie in die bestimmte Zeile einfügen möchten, können Sie die Markierungsoption verwenden und 'insertafter' oder 'insertbefore' und Regex gefolgt, oder Sie können beides verwenden.
Das folgende Playbook fügt eine neue zusätzliche Konfiguration in die Datei „sshd_config“ ein. Die zusätzliche Konfiguration wird vor der 'UserPAM'-Zeile hinzugefügt, die von der Standardmarkierung '# BEGIN ANSIBLE MANAGED BLOCK' umgeben ist.
- name: Insert after regex, backup, and validate
blockinfile:
path: /etc/ssh/sshd_config
backup: yes
marker: "# {mark} ANSIBLE MANAGED BLOCK "
insertbefore: '^UsePAM '
block: |
AllowUsers hakase vagrant
PermitEmptyPasswords no
PermitRootLogin no
validate: '/usr/sbin/sshd -T -f %s'
3. Löschen/Entfernen Mehrere Linien blockieren die Umgebung innerhalb der Markierungen
Entfernen Sie den Zeilenblock um die ansible Markierung '# BEGIN ANSIBLE MANAGED BLOCK'.
- name: Remote text block surrounding by markers
blockinfile:
path: /etc/ssh/sshd_config
marker: "# {mark} ANSIBLE MANAGED BLOCK"
content: ""
backup: yes
4. Neue Zeile in Datei einfügen
Fügen Sie die neue Zeilenkonfiguration „PasswordAuthentication no“ unter der Regex-Zeile „#PermitEmptyPasswords“ in die SSH-Konfiguration „/etc/ssh/sshd_config“ ein.
- name: Insert New Line under the Regex configuration
lineinfile:
path: /etc/ssh/sshd_config
backup: yes
regexp: '^PasswordAuthentication '
insertafter: '^#PermitEmptyPasswords '
line: 'PasswordAuthentication no'
validate: '/usr/sbin/sshd -T -f %s'
5. Entfernen Sie die Zeile aus der Datei mit dem lineinfile-Modul
Um eine Zeile aus der Datei zu entfernen/löschen, können Sie die Option „Status:abwesend“ verwenden und den regulären Ausdruck der Zeile wie unten folgen.
- name: Remove a line from the file
lineinfile:
path: /etc/ssh/sshd_config
state: absent
regexp: '^PasswordAuthentication'
6. Musterzeichenfolgen durch regulären Ausdruck ersetzen und Modul ersetzen
Jetzt werden wir einen String mit dem Modul „replace“ ersetzen. Das Ersetzungsmodul benötigte den regulären Ausdruck als Backend-Referenz, um bestimmte Zeichenketten zu ersetzen.
Ändern Sie den Namen des Hosts in der Datei „/etc/hosts“, indem Sie das Modul ersetzen.
- name: Replace the default
replace:
path: /etc/hosts
regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
replace: '\1box.hakase.labs\2'
backup: yes
7. Konfigurationen auskommentieren
Das Replace-Modul kann verwendet werden, um die Konfiguration auf dem Linux-System zu entkommentieren. Einfach, wir können die Kommentarzeichenfolge '#' am Zeilenanfang mit dem Ersetzungsmodul entfernen.
Entkommentieren Sie die Zeilenkonfiguration „server_tokens“ in der Datei „/etc/nginx/nginx.conf“.
- name: Uncomment configuration
replace:
path: /etc/nginx/nginx.conf
regexp: '#(\s+)server_tokens'
replace: 'server_tokens'
backup: yes
8. Kommentar zur Konfigurationszeile
Unten ist die Zeilenkonfiguration zu kommentieren, indem das '#' am Anfang der Zeile hinzugefügt wird.
- name: Comment Line configuration replace: path: /etc/nginx/nginx.conf regexp: '(\s+)gzip on' replace: '\n\t#gzip on' backup: yes
Festlegen von Dateiattributen mithilfe des Dateimoduls in Ansible
Das Dateimodul kann verwendet werden, um Attribute von Dateien selbst zu setzen, wie Besitzer, Gruppe und Berechtigung ändern, einen Symlink erstellen, ein neues Verzeichnis erstellen und einen Symlink, eine Datei oder ein Verzeichnis löschen.
1. Symlink der Datei erstellen
Erstellen Sie auf dem Remote-Host eine Symlink-Datei für die Konfiguration des virtuellen nginx-Hosts mit dem Namen „vhost“ im Verzeichnis „/etc/nginx/sites-enabled/“.
- name: Create Symlink of file
file:
src: /etc/nginx/sites-available/vhost
dest: /etc/nginx/sites-enabled/vhost
owner: root
group: root
state: link
2. Erstellen Sie ein neues Verzeichnis mit dem Dateimodul
Um ein neues Verzeichnis mit dem Dateimodul zu erstellen, müssen wir die Statusoption mit dem Wert „Verzeichnis“ wie unten verwenden.
- name: Create a New Directory using file
file:
path: /etc/nginx/ssl
state: directory
owner: root
group: root
mode: 0755