【问题标题】:How to put file paths into variable in ansible?如何将文件路径放入ansible中的变量中?
【发布时间】:2020-10-25 08:27:43
【问题描述】:

我正在尝试将路径从文件过滤到字典中的变量 路径文件: 路径.yml

---

 files:
         - {path: /root/files_to_copy/file_1}

 files:
         - {path: /root/files_to_copy/file_2}
         - {path: /root/files_to_copy/file_3}
         - {path: /root/files_to_copy/file_4}

 files:
         - {path: /root/files_to_copy/file_5}
         - {path: /root/files_to_copy/file_6 }
         - {path: /root/files_to_copy/file_7 }

我的 main.yml 是什么: 为什么我不能使用 paths.values().path ?还是分裂??

    - name: putting paths into a variable
      include_vars:
        file: paths.yml
        name: paths
    - debug: 
        msg: "{{ paths.values() }}"


result: 
   ok: [192.168.1.10] => {
        "msg": [
           [
                {
                    "path": "/root/files_to_copy/file_2"
                },
                {
                    "path": "/root/files_to_copy/file_3"
                },
                {
                    "path": "/root/files_to_copy/file_4"
                }
            ],

我想要这样的输出:/root/files_to_copy/file_2,没有路径和大括号

【问题讨论】:

  • 您的 Python 在哪里显示您尝试过的内容以及您得到的错误或不正确的结果?

标签: python linux dictionary ansible yaml


【解决方案1】:

当您加载名为pathspaths.yml 文件时,它会将整个文件加载到变量paths 中,并且值都是来自paths.yml 文件的键值对。

要仅提取最终的path,有多种选择。这是一个示例:

    - debug: 
        msg: "{{ paths.values() | flatten | map(attribute='path') | list }}"

给予

ok: [localhost] => 
  msg:
  - /root/files_to_copy/file_1
  - /root/files_to_copy/file_2
  - /root/files_to_copy/file_3
  - /root/files_to_copy/file_4
  - /root/files_to_copy/file_5
  - /root/files_to_copy/file_6
  - /root/files_to_copy/file_7

使用json_query 过滤器的替代方法可能更简单。

    - debug: 
        msg: "{{ paths | json_query('*[].path') | list }}"

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多