Comment créer un répertoire www
à /srv
un système basé sur Debian en utilisant un PlayBook Ansible?
Comment créer un répertoire www
à /srv
un système basé sur Debian en utilisant un PlayBook Ansible?
Réponses:
Vous voulez le module de fichiers. Pour créer un répertoire, vous devez spécifier l'option state=directory
:
- name: Creates directory
file:
path: /src/www
state: directory
Vous pouvez voir d'autres options sur http://docs.ansible.com/file_module.html
all immediate subdirectories
prête à confusion, pourriez-vous définir cela et donner un exemple?
Vous pouvez même étendre le module de fichiers et même définir le propriétaire, le groupe et l'autorisation à travers lui. (Réf: documentation du fichier Ansible )
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
Même, vous pouvez créer les répertoires de manière récursive:
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
recurse: yes
De cette façon, il créera les deux répertoires, s'ils n'existaient pas.
recursive
argument en fait un peu comme l'utilisation mkdir -p
(pour ceux qui recherchent un google ansible mkdir -p ).
recurse
paramètre n'aime pas mkdir -p
. Il définit de manière récursive les attributs de fichier spécifiés (s'applique uniquement à state = directory). Si state=directory
, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.
=
caractères, serait génial de la mettre à jour avec la :
syntaxe avec chaque attribut sur une nouvelle ligne
chmod -R
. Autrement dit, s'il path
existe déjà en tant que répertoire et qu'il contient des fichiers, l' recurse
option appliquera (parfois malheureusement) également ces mêmes autorisations aux fichiers. C'est par conception , pour le meilleur ou pour le pire.
vous pouvez créer en utilisant:
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
Le répertoire peut être créé à l'aide du module de fichiers uniquement, car le répertoire n'est rien d'autre qu'un fichier.
# create a directory if it doesn't exist
- file:
path: /etc/some_directory
state: directory
mode: 0755
owner: foo
group: foo
Vous pouvez créer un répertoire. en utilisant
# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755
Vous pouvez également consulter http://docs.ansible.com/ansible/file_module.html pour plus de détails sur le répertoire et le système de fichiers regaridng.
Pour toutes les réponses supplémentaires ici, il y a beaucoup de situations où vous devez créer plus d'un répertoire, c'est donc une bonne idée d'utiliser des boucles au lieu de créer une tâche distincte pour chaque répertoire.
- name: Creates directory
file:
path: "{{ item }}"
state: directory
with_items:
- /srv/www
- /dir/foo
- /dir/bar
Il suffit de mettre une condition pour exécuter la tâche pour une distribution spécifique
- name: Creates directory
file: path=/src/www state=directory
when: ansible_distribution == 'Debian'
Si vous souhaitez créer un répertoire sous Windows:
- nom: créer la structure du répertoire
fichier_win:
chemin: C: \ Temp \ dossier \ sous-dossier>
état: répertoire
Nous avons des modules disponibles pour créer un répertoire, un fichier en ansible
Exemple
- name: Creates directory
file:
path: /src/www
state: directory
Vous pouvez directement exécuter la commande et créer directement en utilisant ansible
ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser
OU
ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
---
- hosts: all
connection: local
tasks:
- name: Creates directory
file: path=/src/www state=directory
Le playbook ci-dessus créera le répertoire www dans le chemin / src.
Avant de courir au-dessus du playbook. Veuillez vous assurer que votre connexion hôte ansible doit être définie,
"localhost ansible_connection = local"
doit être présent dans / etc / ansible / hosts
pour plus d'informations, veuillez me le faire savoir.
Utilisez le module de fichiers pour créer un répertoire et obtenir les détails sur le module de fichiers en utilisant la commande "ansible-doc file"
Voici une option "état" qui explique:
Si
directory
, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.
Sifile
, le fichier ne sera PAS créé s'il n'existe pas, consultez le module [copie] ou [modèle] si vous souhaitez ce comportement.
Silink
, le lien symbolique sera créé ou modifié. Utilisezhard
pour les liens durs.
Siabsent
, les répertoires seront supprimés récursivement et les fichiers ou liens symboliques seront dissociés.Notez que
file
cela n'échouera pas si le chemin n'existe pas car l'état n'a pas changé.Si
touch
(nouveau dans la version 1.4), un fichier vide sera créé si le chemin d'accès n'existe pas, tandis qu'un fichier ou un répertoire existant recevra des temps d'accès et de modification de fichier mis à jour (similaire à la façon donttouch
fonctionne à partir de la ligne de commande).
vous pouvez utiliser le module "fichier" dans ce cas, il y a tellement d'arguments que vous pouvez passer pour un répertoire nouvellement créé comme le propriétaire, le groupe, l'emplacement, le mode et ainsi de suite .....
veuillez vous référer à ce document pour l'explication détaillée sur le module de fichiers ...
https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module
rappelez-vous que ce module n'est pas seulement destiné à créer le répertoire !!!
Le moyen le plus simple de créer un répertoire dans Ansible.
OU
Vous souhaitez accorder des privilèges sudo à ce répertoire.
Je vois beaucoup d'exemples Playbooks et je voudrais mentionner l'exemple des commandes Adhoc.
$ ansible -i inventaire -m fichier -a "path = / tmp / direcory state = répertoire (au lieu du répertoire, nous pouvons mentionner toucher pour créer des fichiers)
Vous devez utiliser le module de fichiers pour ce cas. Ci-dessous le playbook, vous pouvez utiliser pour votre référence.
---
- hosts: <Your target host group>
name: play1
tasks:
- name: Create Directory
files:
path=/srv/www/
owner=<Intended User>
mode=<Intended permission, e.g.: 0750>
state=directory
Pour vérifier si le répertoire existe, puis exécuter une tâche (par exemple, créer un répertoire), utilisez ce qui suit
- name: Check if output directory exists
stat:
path: /path/to/output
register: output_folder
- name: Create output directory if not exists
file:
path: /path/to/output
state: directory
owner: user
group: user
mode: 0775
when: output_folder.stat.exists == false
Vous voulez le file
module. Pour créer un répertoire, vous devez spécifier l'option state: directory
:
- name: Creates directory
file:
path: /src/www
state: directory
state=directory
, tous les sous-répertoires immédiats seront créés s'ils n'existent pas, puisque 1.7 ils seront créés avec les autorisations fournies.