Установить удаленного пользователя для набора задач в Ansible playbook, не повторяя его для каждой задачи



Я создаю playbook, который сначала создает новое имя пользователя. Я тогда хочу запустить " moretasks.yml " как тот новый пользователь, которого я только что создал. В настоящее время я устанавливаю remote_user для каждой задачи. Есть ли способ, которым я могу установить его для всего набора задач один раз? Я не мог найти примеров этого, и ни одна из моих попыток переместить remote_user не помогла.



Ниже-главная.yml:



---
- name: Configure Instance(s)
hosts: all
remote_user: root
gather_facts: true

tags:
- config
- configure

tasks:
- include: createuser.yml new_user=username
- include: moretasks.yml new_user=username
- include: roottasks.yml #some tasks unrelated to username.


Больше задач.yml:



---
- name: Task1
copy:
src: /vagrant/FILE
dest: ~/FILE
remote_user: "{{newuser}}"

- name: Task2
copy:
src: /vagrant/FILE
dest: ~/FILE
remote_user: "{{newuser}}"
616   3  

3 ответов:

В первую очередь вы наверняка захотите использовать sudo_user (удаленный пользователь-это тот, кто входит в систему, sudo_user - Тот, кто выполняет задачу).

В вашем случае вы хотите выполнить задачу как другой пользователь (ранее созданный) просто установите:

- include: moretasks.yml
  sudo: yes
  sudo_user: "{{ newuser }}"

И эти задачи будут выполняться как {{newuser }} (не забудьте кавычки)

Замечание: в большинстве случаев вы должны рассматривать remote_user как параметр хоста. Это пользователь, которому разрешено войти в систему на машине и который имеет достаточные права для делать вещи. Для оперативного материала вы должны использовать sudo / sudo_user

Вы могли бы разделить это на отдельные пьесы? (книги воспроизведения могут содержать несколько пьес)

---
- name: PLAY 1
  hosts: all
  remote_user: root
  gather_facts: true

  tasks:
    - include: createuser.yml new_user=username
    - include: roottasks.yml #some tasks unrelated to username.

- name: PLAY 2
  hosts: all
  remote_user: username
  gather_facts: false

  tasks:
    - include: moretasks.yml new_user=username

Есть готча, использующая отдельные пьесы: вы не можете использовать переменные, установленные с register: или set_fact: в первой пьесе, чтобы делать что-то во второй пьесе (это утверждение не совсем верно, переменные доступны в hostvars, но я рекомендую не использовать переменные между ролями). Определенные переменные, как в group_vars и host_vars работают просто отлично.

Еще один совет, который я хотел бы дать: чтобы посмотреть на использование roles http://docs.ansible.com/playbooks_roles.html хотя на первый взгляд это может показаться более сложным, гораздо проще повторно использовать их (как вы, кажется, делаете с "createuser.в формате YML"). Глядя на тип вещей, которых вы пытаетесь достичь, путь "включить все вещи" не продлится долго.

Как бы встроено в вашу проблему. Надеюсь, это поможет. При обновлении моих playbook для Ansible 2.5 поддержка Cisco IOS network_cli connection

Файл учетных данных, созданный с помощью ansible-vault: auth / secrets.yml

---
creds:
  username: 'ansible'
  password: 'user_password'

Playbook:

---
- hosts: ios
  gather_facts: yes
  connection: network_cli
  become: yes
  become_method: enable
  ignore_errors: yes

  tasks:
  - name: obtain login credentials
    include_vars: auth/secrets.yml

  - name: Set Username/ Password
    set_fact:
     remote_user: "{{ creds['username'] }}"
     ansible_ssh_pass: "{{ creds['password'] }}"

  - name: Find info for "{{ inventory_hostname }}" via ios_facts
    ios_facts:
      gather_subset: all
    register: hardware_fact

Запуск playbook без auth / secrets.YML creds:

ansible-playbook -u ansible -k playbook.yml -l inventory_hostname

Comments

    Ничего не найдено.