Ansible запустить задачу delegate_to на удаленном компьютере от имени другого пользователя - PullRequest
0 голосов
/ 10 июля 2020

Я хочу установить запись cron на удаленном хосте, но подключаюсь к хосту как другой пользователь.

# task
- name: Cron to ls at a specific time
  cron:
    name: "perform a listing"
    weekday: "6"
    minute: "5"
    hour: "3"
    job: "/bin/ls -lR /mnt/*/"
  delegate_to: "{{ my_remote_machine }}"

Проблема Это сценарий запуска для экземпляра в облако. Скрипт работает как root, поэтому будет пытаться подключиться к {{ my_remote_machine }} как root. Очевидно, что root отключен по умолчанию в большинстве облачных экземпляров. Из-за этого я не могу использовать ключевое слово become_user.

Есть ли у меня другие варианты?

1 Ответ

1 голос
/ 11 июля 2020

Просто измените remote_user для данной задачи на тот, к которому вы можете подключиться на делегированном хосте. Вот псевдо-сценарий, чтобы дать вам основы.

Примечание: при таргетинге на хост с использованием ansible_connection: local (например, неявное по умолчанию localhost), remote_user игнорируется и по умолчанию используется пользователем, запускающим сценарий. контроллер.

---
- name: Play mixing several hosts and users
  hosts: some_host_or_group
  # Play level remote_user. In short, this is used if not overridden in task.
  # See documentation for finer grained info (define in inventory, etc...)
  remote_user: root  

  tasks:
    - name: Check who we are on current host
      command: id -a
      register: who_we_are_current
    - debug:
        var: who_we_are_current.stdout

    - name: Show we can be someone else on delegate
      command: id -a
      # Task level remote_user: overrides play
      remote_user: johnd
      delegate_to: "{{ my_remote_machine }}"
      register: who_whe_are_delegate
    - debug:
        var: who_whe_are_delegate.stdout

    - name: And of course, this works with your real task as well
      cron:
        name: "perform a listing"
        weekday: "6"
        minute: "5"
        hour: "3"
        job: "/bin/ls -lR /mnt/*/"
      remote_user: johnd
      delegate_to: "{{ my_remote_machine }}"
...