ansible - 使用 with_nested 和 Ansible

标签 ansible f5

有人能推荐一种方法来获取两个寄存器变量的内容并将它们传递到一个命令中吗?同时还以 1:1 的方式排列每个变量的输出结果。 (即,下面显示的输出中的 VS1:rule1、VS2:rule2 等)

以下是 stdout_lines 中存储的“Virtual_Check”和“Rule_Check”内容:

     "Virtual_Check.stdout_lines": [
        [
            "ltm virtual VS1 ", 
            "ltm virtual VS2 ", 
            "ltm virtual VS3 ", 
            "ltm virtual VS",           
    "Rule_Check.stdout_lines": [
        [
            "myrule1", 
            "    ", 
            "", 
            "        myrule2", 
            "    ", 
            "", 
            "        myrule3", 
            "    ", 
            "", 
            "        myrule4", 
            "    ", 
            "", 

现在,我想将变量的内容传递到一个命令中,如下所示。当我运行此剧本时,“with_nested”下的“Virtual_Check”部分按预期循环,但我遇到的问题是它不会为“Rule_Check”部分正确循环(我留下了我尝试过的两种方法)如下)

到目前为止,我已经尝试使用 with_nested 来完成此操作,但似乎没有正确循环第二个变量。

     - name:  Update VS iRule
        bigip_command:
          commands:
            - "modify ltm virtual {{ item.0 }} rules { {{ item.1 }} myrule10 }"
          provider:
            server: "{{ inventory_hostname }}"
            password: "{{ remote_passwd }}"
            user: "{{ remote_username }}"
          validate_certs: no
        delegate_to: localhost
        with_nested:
          - [ "{{ Virtual_Check['stdout'][0] | replace('ltm virtual', '') | replace('\n', '') }}"]
          - [ "{{ Rule_Check['stdout'][0] | replace('\n', '') }}" ]
          - [ "{{ Rule_Check['stdout_lines'][0] }}" ]

我希望“修改 ltm virtual {{ item.0 }} 规则 { {{ item.1 }} myrule10 }” 行将使用 Virtual_Check 和 Rule_Check 列表中的内容进行处理

例如:

modify ltm virtual VS1 rules { myrule1 myrule10 }
modify ltm virtual VS2 rules { myrule2 myrule10 }
modify ltm virtual VS3 rules { myrule3 myrule10 }
modify ltm virtual VS4 rules { myrule4 myrule10 }

最佳答案

nested lookup没有达到您的预期:它在第一个元素上创建一个循环,在第二个元素上创建一个子循环,在第三个元素上创建一个子子循环,等等...

您正在寻找的是zip filter这将允许您将多个列表组合到一个列表中,将相同索引的所有项目连接到一个列表中。

下面的示例包含您问题中的原始示例数据。您只需要适应您的实际情况即可:

---
- name: zip example
  hosts: localhost
  gather_facts: false

  vars:
    servers: [ 'VS1', 'VS2', 'VS3', 'VS4' ]
    rules: [ myrule1, myrule2, myrule3, myrule4 ]

  tasks:
    - name: Show zipped data from servers and rules
      debug:
        msg: "Server {{ item.0 }} has rule: {{ item.1 }}"
      loop: "{{ servers | zip(rules) | list }}"

这给出了

PLAY [zip example] ********************************************************************************************************************************************************************************************************

TASK [Show zipped data from servers and rules] ****************************************************************************************************************************************************************************
ok: [localhost] => (item=['VS1', 'myrule1']) => {
    "msg": "Server VS1 has rule: myrule1"
}
ok: [localhost] => (item=['VS2', 'myrule2']) => {
    "msg": "Server VS2 has rule: myrule2"
}
ok: [localhost] => (item=['VS3', 'myrule3']) => {
    "msg": "Server VS3 has rule: myrule3"
}
ok: [localhost] => (item=['VS4', 'myrule4']) => {
    "msg": "Server VS4 has rule: myrule4"
}

PLAY RECAP ****************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

关于ansible - 使用 with_nested 和 Ansible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841850/

相关文章:

php - 为什么 mysql CLI 可以连接,而 WordPress 却不能?

variables - Ansible 剧本不会获取主机变量

python - 如何使用 pyparsing 解析 F5 bigip.conf

ansible - 使用列表项解析字典

ansible - 复制时对多个源和目标使用 with_fileglob

amazon-web-services - 通过用户数据脚本安装新的 aws 实例时解密的变量

java - JMeter javax.net.ssl.SSLHandshakeException 间歇性

f5 - Bigip 12 中未启用 REST 服务

仅当服务器需要客户端证书时,iOS 客户端才无法使用 f5 BigIP 进行服务器验证/身份验证

dictionary - 如果满足条件,则从字典中删除项目