ฉันมีผลิตภัณฑ์ที่ฉันสามารถติดตั้งได้ก่อน แล้วจึงอัปเดต - หมายถึงการเพิ่มคุณสมบัติเพิ่มเติมให้กับผลิตภัณฑ์พื้นฐานของฉัน

ฉันทำโดยรัน MSI ครั้งแรกจากนั้นไปที่ Add \ Remove Programs และเมื่อเลือกผลิตภัณฑ์คุณสามารถคลิก "เปลี่ยน" และวิซาร์ดการติดตั้งจะปรากฏขึ้นอีกครั้งเพื่อให้คุณเลือกและติดตั้งคุณสมบัติเพิ่มเติมในผลิตภัณฑ์

ฉันสร้าง 2 ansible role และ playbooks สำหรับภารกิจนี้ บทบาทแรกใช้ 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

answer

ปัญหานี้น่าจะเป็นstate: presentพารามิเตอร์ เนื่องจากแพ็กเกจมีอยู่แล้วเมื่อรันงาน คุณสามารถใช้creates_pathor creates_serviceparams เพื่อตรวจสอบว่าจำเป็นต้องติดตั้งแพ็คเกจหรือไม่

ตัวอย่าง:

- 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"