上書きするのではなく、ansible-playbook に値を追加するにはどうすればよいでしょうか?

上書きするのではなく、ansible-playbook に値を追加するにはどうすればよいでしょうか?

現在、私には次の役割があり、この役割は製品の基本的なインストールをシミュレートします。

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

インストールウィザードで追加機能を選択する「高度な」インストールをシミュレートしたい

インストールウィザードでは、1つ以上の機能を選択できます。つまり、ADDLOCAL引数は次のようになります。ADDLOCAL=DB,Agent- これは基本OR ADDLOCAL=DB,Agent,Feature_AORです。ADDLOCAL=DB,Agent,Feature_A,Feature_B

Feature_Cたとえば、インストールするには追加の引数リストが必要になるため、状況が複雑になっています。たとえばRABBIT_LOCAL_PORT、、、...RABBIT_QUEUE_NAMERABBIT_TTL

varsAnsibleまたはJenkinsで使用する場合extraVars- プレイブック\ロールの値を上書きする

プレイブック\ロールの既存の値に値を追加する方法はありますか? たとえば、Feature_aおよび\またはFeature_b- ADDLOCAL のインストールを選択すると、ロールの値は に変更されますかADDLOCAL=DB,Agent,Feature_A,Feature_B? または、2 番目のケースで を追加するとFeature_CADDLOCALロールの値は に変更されADDLOCAL=DB,Agent,Feature_Cargumentsキーにはさらに、、引数が含まれRABBIT_LOCAL_PORTますRABBIT_QUEUE_NAMERABBIT_TTL?

答え1

望ましい動作を実装するには、次の 2 つのオプションがあります。

引数変数をリストとして扱う

引数を生成する際は、それらを構造として扱います (私の例ではリストのマップ)。ユースケースに応じて、機能や引数を追加または削除できます。ただし、このアプローチでは複雑さが増します。

- name: set default arguments
  set_fact:
    arguments_map:
      ADDLOCAL:
      - feature1
      - feature2
- name: set feature3
  set_fact:
    arguments_map: "{{ arguments_map | combine({'ADDLOCAL':['feature3']}, recursive=True, list_merge='append') }}"
- name: set feature4
  set_fact:
    arguments_map: "{{ arguments_map | combine({'ADDLOCAL':['feature4'], 'RABBIT_LOCAL_PORT':5672, 'RABBIT_QUEUE_NAME':'test'}, recursive=True, list_merge='append') }}"
- name: generate arguments string
  set_fact:
    arguments: "{% for argument in arguments_map | dict2items %}{{ argument['key'] }}={{ (argument['value'] | join(',')) if (argument['value'] | type_debug == 'list') else (argument['value']) }} {% endfor %}"
- debug:
    var: arguments

これにより、次の文字列が生成されます。

ADDLOCAL=feature1,feature2,feature3,feature4 RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=test 

読みやすくするために、すべての定義済みセットを var ファイルに移動できます。

引数文字列に徐々に連結する

より単純だが柔軟性は低い:

- name: set default arguments
  set_fact:
    arguments: 'ADDLOCAL=DB,Agent'
- name: set feature1
  set_fact:
    arguments: "{{ arguments + ',feature1' }}"
- name: set feature2
  set_fact:
    arguments: "{{ arguments + ',feature2' }}"
- name: set additional arguments
  set_fact:
    arguments: "{{ arguments + ' RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=test' }}"
  when: arguments is search('feature2')
- debug:
    var: arguments

次の文字列を生成します:

ADDLOCAL=DB,Agent,feature1,feature2 RABBIT_LOCAL_PORT=5672 RABBIT_QUEUE_NAME=test

関連情報