如何在Ansible中提取Inventory列表中Job字段的值?
Ansible提取Inventory中列表的Job值方法
有两种常用方法可以从你的Inventory列表里提取Job值:
方法一:拆分字符串筛选提取
通过拆分department字段的字符串,逐步筛选出目标值:
- name: 提取Job值 hosts: localhost vars: employee_list: - { emp_id: 101, name: Kiven, department: "id=10,job=IT", number: 00014646} tasks: - name: 拆分并提取job值 set_fact: job_value: "{{ item.department.split(',') | select('search', 'job=') | first | split('=') | last }}" loop: "{{ employee_list }}" register: job_results - name: 打印结果 debug: msg: "提取的Job值为: {{ job_results.results[0].ansible_facts.job_value }}"
步骤说明:
split(',')把department字符串拆成["id=10", "job=IT"]select('search', 'job=')筛选出包含job=的元素first取筛选后的第一个元素(这里只有一个匹配项)- 再次
split('=')把job=IT拆成["job", "IT"],last取最后一个值就是IT
方法二:正则表达式匹配
用正则直接捕获job=后面的内容,更简洁:
- name: 正则提取Job值 hosts: localhost vars: employee_list: - { emp_id: 101, name: Kiven, department: "id=10,job=IT", number: 00014646} tasks: - name: 匹配job值 set_fact: job_value: "{{ item.department | regex_search('job=(\\w+)', '\\1') | first }}" loop: "{{ employee_list }}" register: job_results - name: 输出结果 debug: msg: "提取的Job值是: {{ job_results.results[0].ansible_facts.job_value }}"
步骤说明:
regex_search('job=(\\w+)', '\\1')匹配job=后面的字母数字组合,\\1是捕获组,专门提取匹配到的内容first取出捕获到的结果值
内容的提问来源于stack exchange,提问作者Youssef CH
相关产品推荐
相关产品推荐

