Установить удаленного пользователя для набора задач в 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}}"
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 работают просто отлично.Еще один совет, который я хотел бы дать: чтобы посмотреть на использование
roleshttp://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