i've this list in my inventory :
employee_list:
- { emp_id: 101, name: Kiven, depatement: "id=10,job=IT", number: 00014646}
How i get the value of "Job" using Ansible?
The value of job
is contained in the depatement
subentry. You can parse the value of depatement
via regex to extract the value of job
.
- name: Define employee_list
set_fact:
employee_list:
- { emp_id: 101, name: Kiven, depatement: "id=10,job=IT", number: 00014646}
- { emp_id: 102, name: Eve, depatement: "id=11,job=WelcomeDesk", number: 00014657}
- { emp_id: 103, name: Kevin, depatement: "id=12", number: 00014667}
- name: Print out job from the employees
debug:
msg: "{{ item.emp_id }} has job {{ item.depatement | regex_findall('job=([\\w]+)', '\\1') | first | default('unknown') }}"
with_items: "{{ employee_list }}"
Leads to the following output:
TASK [Define employee_list] ********************************************************************************************
ok: [localhost]
TASK [Print out job from the employees] ********************************************************************************
ok: [localhost] => (item={'emp_id': 101, 'name': 'Kiven', 'depatement': 'id=10,job=IT', 'number': 6566}) => {
"msg": "101 has job IT"
}
ok: [localhost] => (item={'emp_id': 102, 'name': 'Eve', 'depatement': 'id=11,job=WelcomeDesk', 'number': 6575}) => {
"msg": "102 has job WelcomeDesk"
}
ok: [localhost] => (item={'emp_id': 103, 'name': 'Kevin', 'depatement': 'id=12', 'number': 6583}) => {
"msg": "103 has job unknown"
}
regex_findall
always returns a list, if nothing is found an empty list ([]
) is returned. first
takes the first element from the list, default
is a fallback if the job
specification was not found and an empty list was returned.
More about regex_findall
in the Ansible docs.