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.
1. Créer un lien symbolique de fichier
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