ansible-将字符串附加到存储在变量中的每个列表项

ansible-将字符串附加到存储在变量中的每个列表项,ansible,citrix,netscaler,Ansible,Citrix,Netscaler,开发者社区大家好 我目前正在开发一些Ansible Playbook来管理Citrix NetScaler配置,并希望获得以下方面的帮助。我在YAML文件中定义了以下数据结构: prefix_header: "foo" prefix_trailer: "bar" nsapp_cs_vserver: - name: "testwebvserv

开发者社区大家好

我目前正在开发一些Ansible Playbook来管理Citrix NetScaler配置,并希望获得以下方面的帮助。我在YAML文件中定义了以下数据结构:

prefix_header:                         "foo"
prefix_trailer:                        "bar"

nsapp_cs_vserver:
  - name:                              "testwebvserver-4_SSL_443"
    policybindings:
      - policyname:                    "TO_testwebservice-3"
        priority:                      "100"
      - policyname:                    "To-be-deleted"
        priority:                      "110"
我试图找到一种简单的方法,将“policybindings”列表变量的内容动态转换为以下格式:(我想在“policyname”的实际值后面附加头前缀和尾前缀)

我想使用带有头和尾前缀的策略名称来调用Ansible模块来配置内容切换

- name: "Bind CS policy(ies) to CS vServer(s) on ACTIVE node"
  netscaler_cs_vserver:
    name: "{{ prefix_header }}{{ item.name }}{{ prefix_trailer}}"
    policybindings: "{{ item.policybindings }}"
  register: bind_nsapp_cs_policy_result
  loop: "{{ nsapp_cs_vserver }}"
有谁能告诉我,实现这一目标的正确和有效的方法是什么


非常感谢

可以循环
包含任务来处理嵌套列表。例如文件

shell> cat convert-list.yml
- set_fact:
    policybindings: []
- set_fact:
    policybindings: "{{ policybindings +
                        [item|combine({'policyname':
                              item.policyname|
                              regex_replace( myregex, myreplace)})] }}"
  loop: "{{ outer_item.policybindings }}"
  vars:
    myregex: '^(.*)$'
    myreplace: "{{ prefix_header ~ '_\\1_' ~ prefix_trailer }}"

- set_fact:
    nsapp_cs_vserver2: "{{ nsapp_cs_vserver2|default([]) +
                           [outer_item|combine({'policybindings': policybindings})] }}"
包含在“外部循环”任务中

给予


亲爱的弗拉基米尔!非常感谢,它像一个符咒一样工作:-)我唯一需要添加到convert-list.yml文件的是
-set_fact:policybindings:[]
,这是在处理循环中的下一项之前清理事实内容的第一个任务。对。处理外部循环中的下一项。我已经修好了。
shell> cat convert-list.yml
- set_fact:
    policybindings: []
- set_fact:
    policybindings: "{{ policybindings +
                        [item|combine({'policyname':
                              item.policyname|
                              regex_replace( myregex, myreplace)})] }}"
  loop: "{{ outer_item.policybindings }}"
  vars:
    myregex: '^(.*)$'
    myreplace: "{{ prefix_header ~ '_\\1_' ~ prefix_trailer }}"

- set_fact:
    nsapp_cs_vserver2: "{{ nsapp_cs_vserver2|default([]) +
                           [outer_item|combine({'policybindings': policybindings})] }}"
    - include_tasks: convert-list.yml
      loop: "{{ nsapp_cs_vserver }}"
      loop_control:
        loop_var: outer_item
    - debug:
        var: nsapp_cs_vserver2
    "nsapp_cs_vserver2": [
        {
            "name": "testwebvserver-4_SSL_443", 
            "policybindings": [
                {
                    "policyname": "foo_TO_testwebservice-3_bar", 
                    "priority": "100"
                }, 
                {
                    "policyname": "foo_To-be-deleted_bar", 
                    "priority": "110"
                }
            ]
        }
    ]