我使用Ansible 2.3查找具有特定模式的文件,并根据其路径进行复制。
所以我的搜索任务如下:
- name: find onDemand scripts of APIs
find:
paths: "{{WORKSPACE}}/dollaru-scripts/Docker/scripts_on_demand/"
patterns:
- 'run_api*.ksh'
- '*_all_containers.ksh'
- '*_docker_engine.ksh'
register: scripts_on_demand_api
when:
- ansible_host not in groups['remoteHosts']
然后,为了显示结果,我使用了debug
任务,并在Jenkins下运行后得到了这样的结果:
ok: [localhost] => {
17:51:36 "changed": false,
17:51:36 "msg": {
17:51:36 "changed": false,
17:51:36 "examined": 13,
17:51:36 "files": [
17:51:36 {
17:51:36 "atime": 1518791011.147691,
17:51:36 "ctime": 1518791009.4396753,
17:51:36 "dev": 64782,
17:51:36 "gid": 15001,
17:51:36 "inode": 301837,
17:51:36 "isblk": false,
17:51:36 "ischr": false,
17:51:36 "isdir": false,
17:51:36 "isfifo": false,
17:51:36 "isgid": false,
17:51:36 "islnk": false,
17:51:36 "isreg": true,
17:51:36 "issock": false,
17:51:36 "isuid": false,
17:51:36 "mode": "0644",
17:51:36 "mtime": 1518791009.4396753,
17:51:36 "nlink": 1,
17:51:36 "path": "/opt/jenkins/workspace/ANSIBLE_DEPLOY_HP-ALL/dollaru-scripts/Docker/scripts_on_demand/run_api_backend.ksh",
17:51:36 "rgrp": true,
17:51:36 "roth": true,
17:51:36 "rusr": true,
17:51:36 "size": 470,
17:51:36 "uid": 30000,
17:51:36 "wgrp": false,
17:51:36 "woth": false,
17:51:36 "wusr": true,
17:51:36 "xgrp": false,
17:51:36 "xoth": false,
17:51:36 "xusr": false
17:51:36 },
{
17:51:36 "atime": 1518791011.147691,
17:51:36 "ctime": 1518791009.4396753,
17:51:36 "dev": 64782,
17:51:36 "gid": 15001,
17:51:36 "inode": 301853,
17:51:36 "isblk": false,
17:51:36 "ischr": false,
17:51:36 "isdir": false,
17:51:36 "isfifo": false,
17:51:36 "isgid": false,
17:51:36 "islnk": false,
17:51:36 "isreg": true,
17:51:36 "issock": false,
17:51:36 "isuid": false,
17:51:36 "mode": "0644",
17:51:36 "mtime": 1518791009.4396753,
17:51:36 "nlink": 1,
17:51:36 "path": "/opt/jenkins/workspace/ANSIBLE_DEPLOY_HP-ALL/dollaru-scripts/Docker/scripts_on_demand/run_api_tracking.ksh",
17:51:36 "rgrp": true,
17:51:36 "roth": true,
17:51:36 "rusr": true,
17:51:36 "size": 476,
17:51:36 "uid": 30000,
17:51:36 "wgrp": false,
17:51:36 "woth": false,
17:51:36 "wusr": true,
17:51:36 "xgrp": false,
17:51:36 "xoth": false,
17:51:36 "xusr": false
17:51:36 }
17:51:36 ],
17:51:36 "matched": 9,
17:51:36 "msg": ""
17:51:36 }
17:51:36 }
现在我想在复制任务中使用我创建的文件的路径;我这样做了:
- name: Copy foundedfiles
copy:
src: "{{item.path}}"
dest: "/opt/application/i99/sh/onDemand/"
mode: 0755
with_items:
- "{{scripts_on_demand_api.files}}"
when:
- ansible_host in groups['api']
奇怪的是,一个错误说没有konwnb" 文件"属性!!!
17:51:37致命:失败! => {"失败":是的," msg": "' dict object'没有属性'文件'}
建议??
答案 0 :(得分:1)
when
条件下的主机不匹配,因此您在未运行第一个任务(copy
)的主机上运行第二个任务(find
)。
scripts_on_demand_api
已在所有主机上注册,files
仅在主机not in groups['remoteHosts']
上注册。
要迭代本地文件,有一个更简单的with_fileglob
loop方法。