En ansible, je peux faire ceci:
file: dest=/foo/bar/somedir owner=root group=Apache mode=0775 recurse=yes
Et il définit de manière récursive le propriétaire, le groupe et les autorisations sur 0775 dans tous les répertoires et fichiers de ce chemin. Mais je veux définir les répertoires sur 0775 et les fichiers sur 0664. Existe-t-il un moyen de le rendre compatible?
file: dest=/foo/bar/somedir owner=root group=Apache mode=u=rwX,g=rX,o=rX recurse=yes
définira les répertoires sur 755 et les fichiers sur 644.
Les modules de fichier/copie Ansible ne vous donnent pas la granularité de spécifier des autorisations en fonction du type de fichier. Vous devrez probablement le faire manuellement en procédant comme suit:
- name: Ensure directories are 0755 command: find {{ path }} -type d -exec chmod 0755 {} \; - name: Ensure files are 0644 command: find {{ path }} -type f -exec chmod 0644 {} \;
Celles-ci auraient pour effet de faire récursir
{{ path }}
et de modifier les autorisations de chaque fichier ou répertoire en fonction des autorisations spécifiées.
Si vous souhaitez utiliser le fichier de module dans ansible, vous pouvez:
fichier: dest =/foo/bar/somedir propriétaire = groupe racine = mode Apache = 0644 recurse = yes
fichier: dest =/foo/bar/somedir propriétaire = groupe racine = mode Apache = 0775
Avec cette méthode, vous définissez tout d'abord le fichier (recurse = yes) sur '644', puis sur/foo/bar/somedir sur '775'.
Ce n'est pas parfait car cela changera les permissions de votre répertoire chaque fois que vous jouerez dans votre playbook. Mais au moins, il est idempotent, pas comme la commande de module.
Si vous ne voulez pas avoir le statut 'changé', vous pouvez utiliser le module stat. Il listera tous les fichiers et le répertoire dans/foo/bar/somedir afin que vous enregistriez la réponse, puis fassiez une boucle sur ces fichiers uniquement.
Je ne sais pas à quel point il serait judicieux de définir les répertoires sur 0775 (rwxrwxr-x
) et les fichiers sur 0644 (rw-r--r--
): des répertoires inscriptibles par groupe, mais pas des fichiers?
Si vous vouliez définir les fichiers sur 0664 (rw-rw-r--
) pour vous assurer que les fichiers ne sont pas exécutables alors que les répertoires sont traversables, il existe une solution élégante impliquant une seule commande chmod
:
chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"
Voici comment il peut être utilisé dans Ansible :
- name: recursive chmod example
command: |
chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
register: chmod_status
changed_when: chmod_status.stdout != ""
with_items:
- "/home/user/sample/dir"
chmod -c
affiche toutes les modifications que nous pouvons facilement utiliser pour renseigner le statut "modifié" dans Ansible . J'espère que cela a du sens.
Pour changer les mods seulement quand cela est nécessaire:
- name: make dirs 0755
command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;
- name: make files 0644
command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;