Sara James
Sara James

Reputation: 143

ansible: how to split string with multiple delimiters

Here is my output.

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

Here is my code

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

I'm getting the below output:

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

I would like to filter webproxy from cna.docker.dev/webproxy:1.0.0. But I'm getting "['webproxy" instead of "webproxy. Could someone please help!! I even tried this code which fails (item.Image.split("/")[1:]).split(":")[0]

Upvotes: 1

Views: 1082

Answers (1)

Moon
Moon

Reputation: 3047

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

Example regex is non greedy, adjust as needed.

Gives

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

Upvotes: 1

Related Questions