it-roy-ru.com

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

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

Ниже приведен main.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.

moretasks.yml:

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

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

Прежде всего вы наверняка захотите использовать Sudo_user (удаленный пользователь - тот, кто входит в систему, Sudo_user - тот, кто выполняет задачу).

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

- include: moretasks.yml
  Sudo: yes
  Sudo_user: "{{ newuser }}"

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

Замечание: В большинстве случаев вы должны рассматривать remote_user в качестве параметра Host. Это пользователь, которому разрешено войти в систему на компьютере, и который имеет достаточно прав для выполнения каких-либо действий. Для оперативных вещей вы должны использовать Sudo/Sudo_user

7
ProfHase85

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

---
- 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, работают просто отлично.

Еще один совет, который я хотел бы дать, - изучить использование roleshttp://docs.ansible.com/playbooks_roles.html . Хотя на первый взгляд это может показаться более сложным, гораздо проще использовать их повторно (как вы, похоже, делаете с «createuser.yml»). Глядя на тип вещей, которые вы пытаетесь достичь, путь «включите все вещи» не будет длиться намного дольше.

7
Ramon de la Fuente

Вид, соответствующий вашей проблеме. Надеюсь, поможет. При обновлении моих playbooks для Ansible 2.5 поддержка Cisco IOS network_cli

Файл учетных данных, созданный с помощью 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 кредитов:

ansible-playbook -u ansible -k playbook.yml -l inventory_hostname
0
Jose H. Rosa