GNU/Linux >> Tutoriels Linux >  >> Linux

Guide Ansible :Gérer les fichiers à l'aide d'Ansible

Dans ce guide, je vais vous montrer comment gérer des fichiers à l'aide de modules ansible. Vous apprendrez à copier, modifier, insérer, télécharger et remplacer des fichiers à l'aide d'Ansible.

Qu'allons-nous faire ?

  • Copier le fichier à l'aide des modules 'copy' et 'templates'
  • Télécharger le fichier à l'aide du module "récupérer"
  • Modifier le fichier à l'aide des modules 'blockinfile', 'lineinfile' et 'replace'
  • Gérer les attributs de fichier

Copier le fichier en utilisant le module 'copy' et 'templates' dans Ansible

Ansible fournit des modules pour copier le fichier du répertoire local vers les machines cibles distantes, c'est le module 'copie' et 'modèle'.

La différence entre le module 'copy' et 'template' est que le module de copie copiera le fichier à partir du répertoire 'files' et le 'template' copiera le modèle Jinja2 à partir du répertoire 'templates' sur les playbooks Ansible.

Le module 'copy' est bon pour copier des fichiers persistants tels que des certificats, tandis que le 'template' est plus utile pour les configurations réutilisables telles que la configuration de l'hôte virtuel, etc.

1. Copier le fichier de la machine cible locale vers la machine cible distante

Copiez la configuration 'sources.list' du répertoire 'files' local sur la machine distante '/etc/apt/sources.list'. Lorsqu'il y a configuration, elle sera remplacée et sauvegardée en fonction des horodatages.

- name: Copy from Local to Remote Target Machine with 'copy'
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    backup: yes

2. Copier le fichier sur la machine distante vers un autre répertoire

Copiez la configuration sudoers '/etc/sudoers.d/hakase' sur la machine distante dans l'autre répertoire '/home/hakase/hakase-suoers.txt'. Cela peut être fait avec l'option 'remote_src'.

- 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. Copier le fichier et modifier l'autorisation et le propriétaire du fichier

Copiez le fichier bash du répertoire 'files' sur la machine serveur distante et définissez l'autorisation de fichier par défaut '0755' et le propriétaire du fichier est '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. Copier le fichier avec le module Modèle

Copiez la configuration du modèle Jinja2 pour l'hôte virtuel nginx du répertoire 'templates' vers le répertoire '/etc/sites-enabled/' sur la machine distante. Avec le modèle Jinja2, nous pouvons créer des variables pour notre configuration et la rendre plus réutilisable.

- name: Copy file using 'template' module
  template:
    src: default.j2
    dest: /etc/nginx/sites-enabled/
    backup: yes
    owner: root
    group: root
    mode: 0644

Télécharger un fichier à l'aide du module Fetch dans Ansible

Afin de télécharger un fichier de la machine distante vers notre nœud ansible local, nous pouvons utiliser le module ansible appelé 'fetch'.

1. Télécharger depuis une machine distante vers une machine locale

Téléchargez le fichier de configuration nginx 'nginx.conf' du serveur distant vers le répertoire local du nœud ansible '/home/hakase/backup' pour créer une sauvegarde. Et le module de récupération par défaut inclura les structures de répertoires.

- name: Download file from Remote Machine to Local ansible-node directory
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/

2. Télécharger de distant à local sans structures de répertoire

Téléchargez depuis la machine distante vers un nœud ansible local sans structures de répertoires en ajoutant l'option 'flat'.

- 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

Modifier des fichiers avec Ansible

Nous allons maintenant éditer des fichiers à l'aide de modules Ansible. Il existe certains modules que vous devez connaître pour modifier des fichiers à l'aide d'Ansible, tels que blockinfile, lineinfile et replace.

Le blockinfile insérera/supprimera plusieurs lignes dans le fichier. Le lineinfile est pour la seule ligne, et le module de remplacement peut être utilisé pour remplacer la chaîne.

1. Insérer plusieurs lignes dans le fichier à l'aide de 'blockinfile'

Ajoutez la configuration de plusieurs lignes à la configuration ssh 'sshd_config' en utilisant le module 'blockinfile'. Et la configuration par défaut insérera la nouvelle configuration au bas des lignes.

- name: Insert multiple lines and Backup
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    block: |
      ClientAliveInterval 360
      ClientAliveCountMax 0

2. Insérer plusieurs lignes à l'aide des options de marqueur

Ou si vous voulez insérer sur la ligne spécifique, vous pouvez utiliser l'option de marqueur et suivre par 'insertafter' ou 'insertbefore' et Regex, ou vous pouvez utiliser les deux.

Le playbook ci-dessous insérera une nouvelle configuration supplémentaire dans le fichier 'sshd_config'. La configuration supplémentaire sera ajoutée avant la ligne 'UserPAM' entourée par le marqueur par défaut '# BEGIN ANSIBLE MANAGED BLOCK'.

- 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. Supprimer/supprimer plusieurs lignes bloquent l'environnement à l'intérieur des marqueurs

Supprimez le bloc de lignes environnant par le marqueur ansible '# 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. Insérer une nouvelle ligne dans le fichier

Insérez la nouvelle ligne de configuration 'PasswordAuthentication no' sous la ligne regex '#PermitEmptyPasswords' dans la configuration ssh '/etc/ssh/sshd_config'.

- 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. Supprimez la ligne du fichier à l'aide du module lineinfile

Afin de retirer/supprimer une ligne du fichier, vous pouvez utiliser l'option 'état :absent' et suivre l'expression régulière de la ligne comme ci-dessous.

- name: Remove a line from the file
  lineinfile:
    path: /etc/ssh/sshd_config
    state: absent
    regexp: '^PasswordAuthentication'

6. Remplacez les chaînes de modèle par une expression régulière et remplacez le module

Nous allons maintenant remplacer une chaîne en utilisant le module 'replace'. Le module de remplacement nécessitait l'expression régulière comme référence dorsale pour remplacer le type de chaînes.

Changez le nom de l'hôte sur le fichier '/etc/hosts' en utilisant remplacer le module.

- name: Replace the default
  replace:
    path: /etc/hosts
    regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
    replace: '\1box.hakase.labs\2'
    backup: yes

7. Décommenter les configurations

Le module de remplacement peut être utilisé pour décommenter la configuration sur le système Linux. Simple, nous pouvons supprimer la chaîne de commentaire '#' au début de la ligne en utilisant le module de remplacement.

Décommentez la configuration de la ligne 'server_tokens' dans le fichier '/etc/nginx/nginx.conf'.

- name: Uncomment configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '#(\s+)server_tokens'
    replace: 'server_tokens'
    backup: yes

8. Commentaire sur la ligne de configuration

Ci-dessous, commentez la configuration de la ligne en ajoutant le '#' au début de la ligne.

- name: Comment Line configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '(\s+)gzip on'
    replace: '\n\t#gzip on'
    backup: yes

Définir les attributs des fichiers à l'aide du module de fichiers dans Ansible

Le module de fichier peut être utilisé pour définir les attributs des fichiers eux-mêmes, tels que le changement de propriétaire, de groupe et d'autorisation, la création d'un lien symbolique, la création d'un nouveau répertoire et la suppression d'un lien symbolique, d'un fichier ou d'un répertoire.

Créez un fichier de lien symbolique sur l'hôte distant pour la configuration de l'hôte virtuel nginx appelé "vhost" vers le répertoire "/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. Créer un nouveau répertoire à l'aide du module de fichiers

Afin de créer un nouveau répertoire à l'aide du module de fichier, nous devons utiliser l'option d'état avec la valeur 'répertoire' comme ci-dessous.

- name: Create a New Directory using file
  file:
    path: /etc/nginx/ssl
    state: directory
    owner: root
    group: root
    mode: 0755

Linux
  1. Gérer le démarrage à l'aide de systemd

  2. Comment copier récursivement des fichiers par extension de fichier ? ?

  3. Comment utiliser Logrotate pour gérer les fichiers journaux

  4. Fusionner manuellement deux fichiers à l'aide de diff

  5. Déploiement d'un dossier de fichiers modèles à l'aide d'ansible

Commande Cp sous Linux (Copier des fichiers)

Comment partager des fichiers localement sur Linux en utilisant NitroShare

Fichiers d'inventaire et de configuration Ansible

Comment copier des fichiers avec une extension de fichier spécifique de manière récursive

Comment copier des fichiers sous Linux à l'aide de la commande CP

Transférer des fichiers à l'aide de WinSCP