【问题标题】:ansible: how to split string with multiple delimitersansible:如何使用多个分隔符拆分字符串
【发布时间】:2020-07-23 08:42:17
【问题描述】:

这是我的输出。

"result.containers": [
    {
        "Image": "cna.docker.dev/webproxy:1.0.0",
    },
    {
        "Image": "cna-docker-dev-local.docker.dev/lega-customer:1.0.1",
    }
]

这是我的代码

  - name: adding it to groups using images
    add_host:
      name: "{{ inventory_hostname }}"
      groups: '{{ (item.Image.split("/")[1:] | regex_replace("^/", "")).split(":")[0] }}'
    with_items: "{{ result.containers }}"

我得到以下输出:

    "add_host": {
    "groups": [
        "['webproxy"
    ],
    "host_name": "vm4.nodekite.com",
    "host_vars": {
    }

我想从 cna.docker.dev/webproxy:1.0.0 中过滤 webproxy。 但我得到的是“['webproxy”而不是“webproxy. 有人可以帮忙吗!我什至尝试了这个失败的代码 (item.Image.split("/")[1:]).split(":")[0]

【问题讨论】:

    标签: regex split ansible ansible-2.x


    【解决方案1】:
    - debug:
        msg: "{{ item.Image | regex_replace('.*?/(.*?):.*', '\\1') }}"
      loop: "{{ result.containers | flatten(1) }}"
    

    示例正则表达式是非贪婪的,根据需要进行调整。

    给予

    ok: [localhost] => (item={'Image': 'cna.docker.dev/webproxy:1.0.0'}) => {
        "msg": "webproxy"
    }
    ok: [localhost] => (item={'Image': 'cna-docker-dev-local.docker.dev/lega-customer:1.0.1'}) => {
        "msg": "lega-customer"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多