Score:0

How to add values to ansible-playbook instead of overwrite it?

ธง uz

As per today, I have the following role, this role simulate a basic installation of the product:

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

I want to simulate an "advanced" installation, which I select additional feature in the Installation wizard

I the installation wizard, I can select one or more features, meaining ADDLOCAL argumnet can be: ADDLOCAL=DB,Agent - that's the basic OR ADDLOCAL=DB,Agent,Feature_A OR ADDLOCAL=DB,Agent,Feature_A,Feature_B

Things are become complicated for me, since Feature_C for example demands additional arguments list to install it for example: RABBIT_LOCAL_PORT, RABBIT_QUEUE_NAME, RABBIT_TTL...

Using vars in Ansible or extraVars in Jenkins - overwrite the values in the playbook\role

Is there a way to add the value to the existing value in the playbook\role, so for example when I select to install Feature_a and\or Feature_b - ADDLOCAL value in the role will changed into ADDLOCAL=DB,Agent,Feature_A,Feature_B? or in the second case when I add Feature_C, the ADDLOCAL value in the role will changed into ADDLOCAL=DB,Agent,Feature_C and arguments key will include in addition: RABBIT_LOCAL_PORT, RABBIT_QUEUE_NAME, RABBIT_TTL arguments?

Score:0
ธง ng

มีสองตัวเลือกในการใช้พฤติกรรมที่ต้องการ:

ปฏิบัติต่อตัวแปรอาร์กิวเมนต์เป็นรายการ

ในขณะที่สร้างอาร์กิวเมนต์ถือว่าเป็นโครงสร้าง (แผนผังของรายการในตัวอย่างของฉัน) คุณสามารถเพิ่มหรือลบคุณลักษณะ/อาร์กิวเมนต์ใดๆ ขึ้นอยู่กับกรณีการใช้งานของคุณ วิธีการนี้เพิ่มความซับซ้อนแม้ว่า:

- ชื่อ: ตั้งค่าอาร์กิวเมนต์เริ่มต้น
  set_fact:
    arguments_map:
      แอดโลคัล:
      - คุณสมบัติ1
      - คุณสมบัติ 2
- ชื่อ: ตั้งค่าคุณสมบัติ 3
  set_fact:
    arguments_map: "{{ arguments_map | combination({'ADDLOCAL':['feature3']}, recursive=True, list_merge='append') }}"
- ชื่อ: ตั้งค่าคุณสมบัติ 4
  set_fact:
    arguments_map: "{{ arguments_map | combination({'ADDLOCAL':['feature4'], 'RABBIT_LOCAL_PORT':5672, 'RABBIT_QUEUE_NAME':'test'}, recursive=True, list_merge='append') }}"
- ชื่อ: สร้างสตริงอาร์กิวเมนต์
  set_fact:
    อาร์กิวเมนต์: "{% สำหรับอาร์กิวเมนต์ใน arguments_map | dict2items %}{{ อาร์กิวเมนต์['key'] }}={{ (อาร์กิวเมนต์['ค่า'] | เข้าร่วม (',')) ถ้า (อาร์กิวเมนต์['ค่า'] | type_debug == 'รายการ') อื่น (อาร์กิวเมนต์ ['ค่า']) }} {% endfor %}"
- แก้ปัญหา:
    var: ข้อโต้แย้ง

สิ่งนี้สร้างสตริงต่อไปนี้:

ADDLOCAL=feature1,feature2,feature3,feature4 RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=ทดสอบ 

คุณสามารถย้ายชุดที่กำหนดไว้ล่วงหน้าทั้งหมดไปยังไฟล์ var เพื่อให้สามารถอ่านได้

ค่อยๆ เชื่อมต่อกับสตริงอาร์กิวเมนต์

ตรงไปตรงมามากขึ้นแต่ยืดหยุ่นน้อยลง:

- ชื่อ: ตั้งค่าอาร์กิวเมนต์เริ่มต้น
  set_fact:
    อาร์กิวเมนต์: 'ADDLOCAL=DB,ตัวแทน'
- ชื่อ: ตั้งค่าคุณสมบัติ 1
  set_fact:
    อาร์กิวเมนต์: "{{ อาร์กิวเมนต์ + ',feature1' }}"
- ชื่อ: ตั้งค่าคุณสมบัติ 2
  set_fact:
    อาร์กิวเมนต์: "{{ อาร์กิวเมนต์ + ',feature2' }}"
- ชื่อ: ตั้งอาร์กิวเมนต์เพิ่มเติม
  set_fact:
    อาร์กิวเมนต์: "{{ อาร์กิวเมนต์ + ' RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=test' }}"
  เมื่อ: ข้อโต้แย้งคือการค้นหา ('feature2')
- แก้ปัญหา:
    var: ข้อโต้แย้ง

สร้างสตริงต่อไปนี้:

ADDLOCAL=DB,ตัวแทน,feature1,feature2 RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=test

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา