Да, вы можете запускать команды на хосте Ansible. Вы можете указать, что все задачи в игре выполняются на хосте Ansible, или вы можете отметить отдельные задачи для запуска на хосте Ansible.
Если вы хотите запустить всю игру на хосте Ansible, укажите hosts: 127.0.0.1
и connection:local
в игре, например:
- 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
Смотрите Local Playbooks в документации Ansible для более подробной информации.
Если вы просто хотите запустить одну задачу на хосте Ansible, вы можете local_action
указать, что задача должна выполняться локально. Например:
- 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
См. Делегирование в документации Ansible для более подробной информации.
Изменить: Вы можете избежать необходимости вводить connection: local
в игру, добавив это в свой инвентарь:
localhost ansible_connection=local
(Здесь вы бы использовали «localhost» вместо «127.0.0.1» для ссылки на игру).
Редактировать: в более новых версиях ansible вам больше не нужно добавлять вышеуказанную строку в ваш инвентарь, поскольку ansible предполагает, что она уже есть.
sudo: no
в сценарии делегированияansible-playbook -K playbook.yml
где -K для пользователя rootЯ нашел пару других способов, которыми вы можете написать эти, которые немного более читабельны, ИМХО.
ИЛИ
источник
shell
модулю.Я хотел бы поделиться, что Ansible может быть запущен на локальном хосте через оболочку:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Это может быть полезно для простых задач или для практического изучения Ansible.
Пример кода взят из этой хорошей статьи:
Запуск ANSIBLE playbook в локальном хосте
источник
Вы можете использовать
delegate_to
для запуска команд на вашем хосте Ansible (хосте администратора), с которого вы запускаете игру Ansible. Например:Удалите файл, если он уже существует на хосте Ansible:
Создайте новый файл на хосте Ansible:
источник
become
True для задачи, он будет жаловаться на sudo и тому подобное. Это может произойти непосредственно в задаче или быть унаследовано для других.В качестве дополнения к ответу @gordon приведем пример удобочитаемого синтаксиса и передачи аргументов с помощью модуля оболочки / команды (они отличаются от модуля git тем, что существуют обязательные аргументы в свободной форме, как отметил @ander)
источник
Из документации Ansible :
Делегирование Это не конкретное обновление, а часто встречающееся в таких случаях.
Если вы хотите выполнить задачу на одном хосте со ссылкой на другие хосты, используйте ключевое слово «Delegate_to» в задаче. Это идеально для размещения узлов в пуле с балансировкой нагрузки или их удаления. Это также очень полезно для управления окнами отключения. Имейте в виду, что не имеет смысла делегировать все задачи, debug, add_host, include и т. Д. Всегда выполняются на контроллере. Использование этого с ключевым словом «serial» для управления количеством хостов, выполняющихся одновременно, также является хорошей идеей:
Эти команды будут работать на 127.0.0.1, то есть на машине, на которой работает Ansible. Существует также сокращенный синтаксис, который вы можете использовать для каждой задачи: «local_action». Вот та же книга воспроизведения, что и выше, но с использованием сокращенного синтаксиса для делегирования 127.0.0.1:
Распространенным шаблоном является использование локального действия для вызова rsync для рекурсивного копирования файлов на управляемые серверы. Вот пример:
Обратите внимание, что у вас должны быть SSH-ключи без паролей или ssh-agent, настроенный для этого, иначе rsync должен будет запросить парольную фразу.
источник
Модуль по умолчанию - это командный модуль, поэтому
command
ключевое слово не требуется.Если вам нужно выполнить какую-либо команду с повышенными привилегиями, используйте
-b
в конце той же команды.источник
ты можешь попробовать этот путь
источник