首页 > 解决方案 > 从 ansible 文件中获取价值

问题描述

我需要从(ansible)文件中获取值。我的台词显示:

name01.server.com    key1=val1    key2=val2   #comment
name02.server.com    key1=val1    key2="val 2" key3=val3

一般来说,我只需要服务器名称 val1 和 val2,但如果我split按空格分隔,第二行中的“val 2”将被分隔,我只会得到“val”。

这种情况可以用 python、bash 或其他语言来解决。有人可以帮我解决这个问题吗?

标签: pythonbashsplitansible

解决方案


问:我只需要服务器名称 val1 和 val2

A:使用所选数据创建字典。这应该可以解决问题,例如给定文件

shell> cat my_file
name01.server.com    key1=val1    key2=val2   #comment
name02.server.com    key1=val1    key2="val 2" key3=val3

剧本

shell> cat playbook.yml
- hosts: all
  gather_facts: false
  tasks:
    - set_fact:
        _dict: "{{ dict(ansible_play_hosts_all|zip(_keys1|zip(_keys2))) }}"
      vars:
        _keys1: "{{ ansible_play_hosts_all|map('extract', hostvars, 'key1')|list }}"
        _keys2: "{{ ansible_play_hosts_all|map('extract', hostvars, 'key2')|list }}"
      run_once: true

shell> ansible-playbook playbook.yml -i my_file
  _dict:
    name01.server.com:
    - val1
    - val2
    name02.server.com:
    - val1
    - val 2

推荐阅读