我有一个产品,可以先安装它,然后更新它 - 这意味着在我的基础产品中添加更多功能
我首先通过执行 MSI 来执行此操作,然后转到“添加\删除程序”,在选择产品时,您可以单击“更改”,然后安装向导将再次显示,允许您选择并安装产品中的附加功能
我为这个任务创建了 2 个 ansible 角色和剧本 第一个角色使用 ansible.windows.win_package 来安装基础产品(见下面的示例)
- name: Install Server.msi primary_appserver
ansible.windows.win_package:
path: C:\product.msi
log_path: C:\InstallProduct.log
arguments:
ADDLOCAL=DB,Agent
state: present
become: true
become_method: runas
vars:
ansible_become_user: "{{ ansible_user }}"
ansible_become_password: "{{ ansible_password }}"
when: "'primary_appservers' in group_names"
第二个角色再次使用 ansible.windows.win_package 并使用不同的 ADDLOCAL 参数(附加功能):
- name: Install Engine primary_appserver
ansible.windows.win_package:
path: C:\product.msi
log_path: C:\InstallEngine.log
arguments:
ADDLOCAL=Engine
state: present
become: true
become_method: runas
vars:
ansible_become_user: "{{ ansible_user }}"
ansible_become_password: "{{ ansible_password }}"
when: "'primary_appservers' in group_names"
第一个角色工作正常并执行 msi 文件,第二个角色 - 不如果我执行这两个任务,使用 CLI,msiexec /i 它可以正常工作那么,为什么在执行 ansible.windows.win_package 时它不起作用?
答案1
这个问题很可能是state: present
参数的问题,因为任务运行时包已经存在。你可以使用creates_path
或creates_service
参数来检查是否需要安装包。
例子:
- name: Install Engine primary_appserver
ansible.windows.win_package:
path: C:\product.msi
log_path: C:\InstallEngine.log
arguments:
ADDLOCAL=Engine
creates_path: "C:\Path\to\product\folder"
become: true
become_method: runas
vars:
ansible_become_user: "{{ ansible_user }}"
ansible_become_password: "{{ ansible_password }}"
when: "'primary_appservers' in group_names"