Хотите запускать задачи ansible на удаленном хосте

#ansible-playbook #ansible-2.x

#ansible #ansible-2.x

Вопрос:

В моем сценарии у меня есть инвентаризация трех компьютеров localhost, host2 и host3. Я хочу запустить некоторые задачи / команды на host3, пока мой ansible playbook все еще воспроизводится на host2 без переключения с host2 на host3 — возможно ли это? Я могу использовать модуль local_action, но он запускает задачи на localhost, но я хочу, чтобы команда выполнялась на host3, пока я нахожусь на host2. Было бы здорово, если бы кто-нибудь мог дать указания. Ниже может быть объяснено, чего я пытаюсь достичь:

  - name: Playing host2
   hosts: host2
   become: yes
   tasks:
    - name: run following commands on host3
      local_action: command <command1 for host3>
      local_action: command <command2 for host3>
    - name: continue to run host2
      command: <command for host2>
  

Есть ли какая-либо замена local_action, чтобы я мог запускать команды на host3, а не на 127.0.0.1?

Большое спасибо, Дипак

Ответ №1:

В этом случае вы можете использовать delegate_to. В случае, если вы запускаете свою игру на одном хосте (один хост упоминается в «host:»), вы можете просто использовать delegate_to для делегирования конкретной команды на какой-либо другой компьютер:

 -  name: Playing host2
   hosts: host2
   become: yes
   tasks:
    - name: run following commands on localhost.
      shell: hostname
      delegate_to: 127.0.0.1

    - name: continue to run host2
      shell: hostname
  

Также, если в вашем целевом списке есть группа узлов (указанная группа в «hosts:»), в этом случае наряду с delegate_to вам также следует использовать run_once:

 -  name: Playing on group of hosts.
   hosts: someGroup
   become: yes
   tasks:
    - name: run following commands on localhost.
      shell: hostname
      delegate_to: 127.0.0.1
      run_once: true

    - name: continue to run on group hosts.
      shell: hostname
  

Редактировать: При подключении к host3 с localhost будет использоваться аутентификация без пароля. Поэтому убедитесь, что вы уже настроили аутентификацию на основе ключа.

Примечание: вы всегда можете поместить несколько воспроизведений в один сборник воспроизведения. Итак, если у вас есть набор команд для запуска на host2, а затем куча команд для запуска на host3, я бы посоветовал использовать несколько воспроизведений в одном сборнике воспроизведения.

Комментарии:

1. Спасибо @Shasha99 за ваш ответ.

2. В моем случае Localhost используется в качестве хоста ansible, где я использую его для запуска своих плейбуков. Что, в свою очередь, создает для меня новые хосты (host2 и host3). я хочу запускать команды на host3, а затем возвращаться на host2. Я пытался использовать delegate_to: host3, но затем мне не удается подключиться к хосту через ssh. Я не хочу запускать какие-либо команды на localhost. Упомянутые вами примеры, я думаю, хорошо работают, если я хочу делегировать задачи localhost, но в моем случае я не хочу делегировать locahost. Есть идеи, как я могу избавиться от ошибки ssh, которую я получаю в этом случае? Еще раз спасибо

3. ‘-name: играющий хост2

4. @DeepakPrasad, Убедитесь, что вы настроили ssh для хостов (аутентификация на основе ключа). т.Е. Вы должны иметь возможность использовать ssh для host3 с localhost (или вашего сервера ansible) без пароля.

5. Также отредактировал мой ответ