在 Ansible 中访问调试值

在 Ansible 中访问调试值

我的 ansible 代码如下所示,

  ¦ - name: Copying Archived File
  ¦ ¦ unarchive:
  ¦ ¦ ¦ src: "/home/user/{{ item }}"
  ¦ ¦ ¦ dest: "/home/user/someLocation"
  ¦ ¦ ¦ list_files: yes
  ¦ ¦ register: archive_contents
  ¦ ¦ loop: "{{ files_to_unarchive }}"

  ¦ - name: Print Directory Name
  ¦ ¦ debug:
  ¦ ¦ ¦ msg: "{{ archive_contents }}"

我得到的输出是,

ok: [serverName] => {
    "msg": {
        "changed": false, 
        "msg": "All items completed", 
        "results": [
            {
                "ansible_loop_var": "item", 
                "changed": false, 
                "dest": "/home/user/someLocation", 
                "failed": false, 
                "files": [
                    "6880880/", 
                    "6880880/README.txt", 
                    "6880880/opatch_generic.jar", 
                    "6880880/version.txt"
                ], 
                "gid": 110, 
                "group": "oracle", 
                "handler": "ZipArchive", 
                "invocation": {
                    "module_args": {
                        "attributes": null, 
                        "backup": null, 
                        "content": null, 
                        "creates": null, 
                        "delimiter": null, 
                        "dest": "/home/user/someLocation", 
                        "directory_mode": null, 
                        "exclude": [], 
                        "extra_opts": [], 
                        "follow": false, 
                        "force": null, 
                        "group": null, 
                        "keep_newer": false, 
                        "list_files": true, 
                        "mode": null, 
                        "owner": null, 
                        "regexp": null, 
                        "remote_src": false, 
                        "selevel": null, 
                        "serole": null, 
                        "setype": null, 
                        "seuser": null, 
                        "src": "/var/tmp/ansible-tmp-1660003769.3-20299-226224112946024/source", 
                        "unsafe_writes": false, 
                        "validate_certs": true
                    }
                }, 
                "item": "XYZ.zip", 
                "mode": "0755", 
                "owner": "user", 
                "size": 21, 
                "src": "/var/tmp/ansible-tmp-1660003769.3-20299-226224112946024/source", 
                "state": "directory", 
                "uid": 110
            }
        ]
    }
}

我需要在另一个任务中使用 files:6880880 中的第一个值(目录名称)。我尝试了 msg:“{{ archive_contents['results'] }}”和“{{ archive_contents['results']['files'][0] }}”,但出现错误。我对 ansible 还不太熟悉。我想我漏掉了一些东西。

使用时出错存档内容['结果']['文件'][0]==> 致命:[serverName]:失败! => {“msg”:“该任务包含一个未定义变量的选项。错误是:“list object”没有属性“files”\n\n错误似乎在“/home/user/ansibleScript.yml”中:第 46 行,第 7 列,但可能\n在文件的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n - 名称:打印目录名称\n ^ 此处\n”}

您能建议我如何才能获得所需的值吗?

答案1

属性结果是一个列表。您必须引用该项目才能获取其属性。最简单的选项是第一个项目的路径

dir0: "{{ archive_contents.results.0.files.0 }}"

给出

dir0: 6880880/

通常,列表中可能会有更多项目结果. 全部获取

dirs: "{{ archive_contents.results|map(attribute='files.0')|list }}"

给出一个列表

dirs:
  - 6880880/

获取第一个项目

dirs.0: 6880880/

相关内容