Oui, vous pouvez exécuter des commandes sur l'hôte Ansible. Vous pouvez spécifier que toutes les tâches d'une lecture s'exécutent sur l'hôte Ansible, ou vous pouvez marquer des tâches individuelles à exécuter sur l'hôte Ansible.
Si vous souhaitez exécuter une lecture entière sur l'hôte Ansible, spécifiez hosts: 127.0.0.1
et connection:local
dans la lecture, par exemple:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Voir Local Playbooks dans la documentation Ansible pour plus de détails.
Si vous souhaitez simplement exécuter une seule tâche sur votre hôte Ansible, vous pouvez utiliser local_action
pour spécifier qu'une tâche doit être exécutée localement. Par exemple:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Voir Délégation dans la documentation Ansible pour plus de détails.
Modifier: Vous pouvez éviter d'avoir à taper connection: local
votre jeu en l'ajoutant à votre inventaire:
localhost ansible_connection=local
(Ici, vous utiliseriez "localhost" au lieu de "127.0.0.1" pour faire référence à la lecture).
Modifier: dans les nouvelles versions d'ansible, vous n'avez plus besoin d'ajouter la ligne ci-dessus à votre inventaire, ansible suppose qu'elle est déjà là.
Lorin Hochstein
la source
sudo: no
dans le scénario de délégationansible-playbook -K playbook.yml
où -K pour rootJ'ai trouvé quelques autres façons d'écrire celles-ci qui sont un peu plus lisibles à mon humble avis.
OU
la source
shell
module.Je voudrais partager que Ansible peut être exécuté sur localhost via shell:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Cela pourrait être utile pour des tâches simples ou pour un apprentissage pratique d'Ansible.
L'exemple de code est tiré de ce bon article:
Exécuter un playbook ansible dans localhost
la source
Vous pouvez utiliser
delegate_to
pour exécuter des commandes sur votre hôte Ansible (hôte admin), à partir d'où vous exécutez votre jeu Ansible. Par exemple:Supprimez un fichier s'il existe déjà sur l'hôte Ansible:
Créez un nouveau fichier sur l'hôte Ansible:
la source
become
c'est vrai pour la tâche, il se plaindra de sudo et autres. Cela pourrait se produire directement sur la tâche ou être hérité pour ailleurs.En développant la réponse de @gordon, voici un exemple de syntaxe et d'argument lisibles passant avec le module shell / commande (ceux-ci diffèrent du module git en ce qu'il y a des arguments requis mais de forme libre, comme noté par @ander)
la source
De la documentation Ansible :
Délégation Ce n'est pas réellement une mise à jour continue, mais revient fréquemment dans ces cas.
Si vous souhaitez effectuer une tâche sur un hôte en référence à d'autres hôtes, utilisez le mot clé 'delegate_to' sur une tâche. C'est idéal pour placer des nœuds dans un pool à charge équilibrée ou pour les supprimer. Il est également très utile pour contrôler les fenêtres d'interruption. Sachez qu'il n'est pas logique de déléguer toutes les tâches, déboguer, ajouter_hôte, inclure, etc. toujours s'exécuter sur le contrôleur. L'utiliser avec le mot clé 'serial' pour contrôler le nombre d'hôtes s'exécutant en même temps est également une bonne idée:
Ces commandes s'exécuteront sur 127.0.0.1, qui est la machine exécutant Ansible. Il existe également une syntaxe abrégée que vous pouvez utiliser pour chaque tâche: «action_locale». Voici le même playbook que ci-dessus, mais en utilisant la syntaxe abrégée pour la délégation à 127.0.0.1:
Un modèle courant consiste à utiliser une action locale pour appeler «rsync» afin de copier récursivement des fichiers sur les serveurs gérés. Voici un exemple:
Notez que vous devez avoir des clés SSH sans phrase de passe ou un agent ssh configuré pour que cela fonctionne, sinon rsync devra demander une phrase de passe.
la source
Le module par défaut est le module de commande, donc le
command
mot-clé n'est pas requis.Si vous devez exécuter une commande avec des privilèges élevés, utilisez-la
-b
à la fin de la même commande.la source
vous pouvez essayer de cette façon
la source