Phil
Phil

Reputation: 334

Ansible hosts to be set to a substring of a passed variable

I have a play like this:

- name: Perform an action on a Runtime
  hosts: all
  roles:
  - role: mule_action_on_Runtime

A variable at invocation (--extra-vars 'mule_runtime=MuleS01-3.7.3-Testing') has a prefix of the host needed (MuleS01). I want to set hosts: MuleS01. How do I do this?

Upvotes: 1

Views: 297

Answers (2)

Vladimir Botka
Vladimir Botka

Reputation: 68034

With the inventory

shell> cat hosts
MuleS01
MuleS02
MuleS03

this playbook

shell> cat pb.yml
- hosts: all
  tasks:
    - debug:
        msg: Set {{ mule_runtime }}
      when: mule_runtime.split('-').0 == inventory_hostname

gives

skipping: [MuleS02]
ok: [MuleS01] => {
    "msg": "Set MuleS01-3.7.3-Testing"
}
skipping: [MuleS03]

Upvotes: 0

β.εηοιτ.βε
β.εηοιτ.βε

Reputation: 39129

Given that your pattern is always PartIWant-PartIDonCareAbout-AnotherPartAfterOtherDash you could use the split method of Python, then get the first item of the list via the Jinja filter first.

Here is full working playbook as example:

- hosts: local
  gather_facts: no

  tasks:
    - debug:
        msg: "{{ mule_runtime.split('-') | first }}"

This yield the recap:

play.yml --extra-vars 'mule_runtime=MuleS01-3.7.3-Testing'


PLAY [local] *******************************************************************

TASK [debug] *******************************************************************
ok: [local] => {
    "msg": "MuleS01"
}

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

Upvotes: 1

Related Questions