Existe-t-il un moyen simple de déployer un dossier contenant le modèle .j2 dans une boîte Linux, en utilisant le même nom que le modèle, mais sans l'extension .j2, plutôt que d'utiliser le module de modèle pour chaque fichier?
En ce moment, j'ai une longue liste de:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService
with_fileglob
fonctionne toujours à partir defiles/
, vous pouvez obtenir des modèles avec../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
devrait correspondre en fin de ligne\.j2$
pour les cas où le modèle peut exister à l'intérieur du nom de fichier.Michael DeHaan (créateur d'Ansible) a publié un article sur CoderWall qui parle d'un problème très similaire. Vous pouvez l'ajuster et le développer en fonction de vos besoins (autorisations et droits de propriété, par exemple). La partie pertinente de l'article est ici:
Ceci peut être simplifié en utilisant "
with_items
" et une seulenotify
déclaration. Si l'une des tâches change, le service en sera informé exactement de la même manière qu'il doit redémarrer à la fin de l'exécution du livre de lecture.Notez que comme nous avons des tâches qui prennent plus d’un argument unique, nous ne disons pas simplement "
item
" dans latemplate:
ligne ", mais nous les utilisonswith_items
avec une variable hash (dictionnaire). Vous pouvez également le raccourcir un peu en utilisant des listes, si vous le souhaitez. C'est une préférence stylistique:Bien sûr, nous pourrions également définir la liste que vous parcouriez dans un autre fichier, comme un
groupvars/webservers
fichier " " permettant de définir toutes les variables nécessaires auwebservers
groupe, ou un fichier YAML chargé à partir de lavarsfiles
directive " " du playbook. Regardez comment cela peut nettoyer si nous le faisons.la source
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf
, puis à utiliser une liste simple d'éléments:with_items: - foo - bar
template: src={{item.src}} dest={{item.dest}}
(c'est-à-dire pas${var}
mais plutôt{{var}}
)La réponse de Russel fonctionne mais doit être améliorée
Les premiers de tous les $ doivent disparaître car c'était une mauvaise regex dans le regex_replace. Deuxièmement, tous les fichiers doivent se trouver dans le répertoire files plutôt que dans le répertoire templates
la source
J'ai écrit un plugin de recherche filetree qui peut aider avec des actions sur les arbres de fichiers.
Vous pouvez récupérer des fichiers dans une arborescence et, en fonction de leurs propriétés, effectuer des actions (par exemple, un modèle ou une copie). Comme le chemin relatif est renvoyé, vous pouvez facilement recréer l’arborescence de fichiers sur le ou les systèmes cibles.
Cela rend les playbooks plus lisibles.
la source
La commande ci-dessous m'a permis d'effectuer une recherche récursive des fichiers j2 dans les modèles et de les déplacer vers la destination. J'espère que cela aidera quelqu'un à la recherche d'une copie récursive des modèles vers leur destination.
la source
Il est possible de récupérer automatiquement la liste des fichiers du répertoire et de les réitérer ultérieurement.
la source
print0
, tel quefind
, puis se scinder\u0000
.