Windows

為什麼第二次執行 ansible.windows.win_package 不起作用?

  • January 31, 2022

我有一個產品,我可以先安裝它,然後更新它——這意味著為我的基礎產品添加更多功能

我是通過第一次執行 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 文件,第二個角色 - 不是

這個問題很可能是state: present參數,因為在執行任務時包已經存在。相反,您可以使用creates_pathorcreates_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"

引用自:https://serverfault.com/questions/1091194