Поскольку, похоже, нет общего решения, я искал альтернативы, которые хотя бы охватывают этот вариант использования.
Подход 1: Использование блока и определение переменные для всего блока:
- block:
- name: Check if installer exists
win_stat:
path: \\path_to_installer\installer.exe
register: installer_info
- name: Run installation
win_package:
path: \\path_to_installer\installer.exe
product_id: '...'
arguments: '/q'
when: installer_info.stat.exists == True
vars:
ansible_become: yes
ansible_become_method: runas
ansible_become_user: "{{ network_share_user }}"
ansible_become_password: "{{ network_share_user_pw }}"
ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only
Подход 2: Пройдем немного дальше (если у вас несколько одинаковых блоков). Используйте отдельный файл и включите его:
Файл install_software.yml
:
- block:
- name: Check if installer exists
win_stat:
path: "{{ path }}"
register: installer_info
- name: Run installation
win_package:
path: "{{ path }}"
product_id: "{{ product_id }}"
arguments: "{{ arguments }}"
when: installer_info.stat.exists == True
vars:
ansible_become: yes
ansible_become_method: runas
ansible_become_user: "{{ network_share_user }}"
ansible_become_password: "{{ network_share_user_pw }}"
ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only
Основная книга воспроизведения:
- import_tasks: install_software.yml
vars:
path: \\path_to_installer\installer1.exe
product_id: '...'
arguments: '/q'
- import_tasks: install_software.yml
vars:
path: \\path_to_installer\installer2.exe
product_id: '...'
arguments: '/q'