Windows
為什麼第二次執行 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 文件,第二個角色 - 不是
這個問題很可能是
state: present
參數,因為在執行任務時包已經存在。相反,您可以使用creates_path
orcreates_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"