为什么第二次运行 ansible.windows.win_package 不起作用?

为什么第二次运行 ansible.windows.win_package 不起作用?

我有一个产品,可以先安装它,然后更新它 - 这意味着在我的基础产品中添加更多功能

我首先通过执行 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_pathcreates_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"

相关内容