我的 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/