Как выполнить определенный модуль Ansible с другим пользователем вместо пользователя PLAY - PullRequest
1 голос
/ 24 октября 2019

Вот моя книга воспроизведения:

- name: Play 4.
  hosts: dest_nodes
  user: "{{ USER }}"

  tasks:

   - name: "Load Respective variable file before Deployment1."
     tags: deploy
     include_vars:
 file: "{{ item }}"
     with_fileglob:
       - "vars/{{ Layer }}_*.yaml"

   - file:
       path: "{{ playbook_dir }}/gitfiles/{{ Number }}"
       state: directory
     when: Layer == 'APP'
     with_items:
       - "{{ Source_Filenames.split(',') }}"


   - name: "Pulling APP files  `{{ inventory_hostname }}`"
     tags: deploy
     synchronize:
       src: "{{ BASEPATH }}/ref.txt"
       dest: "{{ playbook_dir }}/gitfiles/{{ Number }}"
       mode: pull
     register: q
     when: Layer == 'APP'
     with_items:
       - "{{ Source_Filenames.split(',') }}"

В вышеприведенной книге воспроизведения я хочу, чтобы все выполнялось с "{{USER}}", однако нижеприведенный файловый модуль должен запускать локального пользователя "user1"это исполняет мою пьесу.

   - file:
       path: "{{ playbook_dir }}/gitfiles/{{ Number }}"
       state: directory
     when: Layer == 'APP'
     with_items:
       - "{{ Source_Filenames.split(',') }}"

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

Подскажите, пожалуйста, какие изменения мне нужно внести вФайловый модуль / мой playbook?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Прежде всего, user устарел, вместо него следует использовать remote_user.

Теперь ваш вопрос неясен. На самом деле есть 2 возможности:

  1. Вы хотите всегда подключаться как {{ USER }} и становиться (например, sudo) user1 для конкретной задачи.
  2. Вы хотите подключитьсякак {{ USER }} для всех задач, кроме конкретной задачи, к которой вы хотите подключиться, как user1

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

---
- name: my play
  hosts: my_hosts
  remote_user: my_deploy_user

  tasks:
    - name: normal task
      debug:
        msg: "normal"

    - name: become root task
      debug:
        msg: "as root"
      become: true

    - name: become user1 task
      debug:
        msg: "as user1"
      become: true
      become_user: user1

Теперь, если вы действительно хотите подключиться как другой пользователь, это также возможно (при условии, что у вас правильная конфигурация /ключи для этого). Еще раз, пример для чистой иллюстрации:

- name: my_play
  hosts: my_hosts
  remote_user: "{{ USER }}"

  tasks:
    - name: task as usual
      debug:
        msg: "Usual task"

    - name: task connected as user1
      debug:
        msg: "connect as user1
      remote_user: user1
0 голосов
/ 24 октября 2019

Вам просто нужно применить ставшего пользователем на задачу, которую вы хотите, на уровне модуля:

- file:
    path: "{{ playbook_dir }}/gitfiles/{{ Number }}"
    state: directory
  when: Layer == 'APP'
  with_items:
    - "{{ Source_Filenames.split(',') }}"
  become: true
  become_user: <new user>
...