想要创建一个目录列表,以便验证是否存在,然后检查它们是否已正确定义,如果没有更新它们。
如何创建多个一起工作的循环?
autoResizing
理想情况下,要检查所有目录是否存在并更新它们所处的位置然后失败,并列出那些不存在的目录。 最终需要像目录文件和所有权设置一样来验证。
答案 0 :(得分:1)
您可以使用以下检查定义task.yml,然后在playbook中执行具有运行此任务所需的路径数组的任务。
----Task.yml
# Determine if a path exists and is a directory.
- name: check directory existance and characteristics
stat: path=/path1
register: p1
# both that p.stat.isdir actually exists, and also that it's set to true.
- debug: msg="Path exists"
when: p1.stat.isdir is defined
- debug: msg="This is a directory"
when: p1.stat.isdir
- file: path=/path1 owner='user1' group='group1' mode=0755 state=directory
when: p1.stat.pw_name != 'user1' or p1.stat.gr_name != 'group1' or p1.stat.mode != '0755'
playbook来运行任务
--- Playbook
- name: Running Task
host: local
var:
- paths: ["path1" , "path2", "path3"]
tasks:
- include: task.yml path={{item}}
with_items: paths
答案 1 :(得分:1)
理想情况下,要检查所有目录是否存在并更新它们所处的位置然后失败并列出那些不存在的目录。
如果是这样,那么你就会过度设计。您需要做的就是使用每个目录的相应参数调用file
任务。由于Ansible为idempotent,它将为您检查参数,并仅更改需要更改的参数。所以你需要的就是这样的东西:
- name: directories
file: path={{ item.p }}
state=directory
owner={{ item.o }}
group={{ item.g }}
mode=0755
with_items:
- { p: '/deploy', o: 'deploy_user', g: 'deploy_group' }
- { p: '/deploy/scripts', o: 'deploy_user', g: 'deploy_group' }
- { p: '/deploy/lib', o: 'deploy_user', g: 'deploy_group' }
第一次运行此任务时,它将创建具有指定所有权和范围的目录/deploy
,/deploy/scripts
和/deploy/lib
。组。第二次运行此任务时,它应该什么都不做,因为这些路径已经存在,具有指定的所有权&amp;组。 Ansible会很好地格式化输出,特别是如果它在启用了颜色的shell中运行,那么很容易只读取这个任务的输出来确定改变了什么以及什么不是。< / p>
编辑:如果你想测试&amp;如果目录不存在则显示错误,那么简单的两步方法也应该有效:
vars:
my_dirs:
- { p: '/deploy', o: 'deploy_user', g: 'deploy_group' }
- { p: '/deploy/scripts', o: 'deploy_user', g: 'deploy_group' }
- { p: '/deploy/lib', o: 'deploy_user', g: 'deploy_group' }
tasks:
- name: Check directories
stat: path={{ item.p }}
register: st
with_items: my_dirs
- name: Complain
debug: "Path {{ item.p }} does not exist or isn't set properly"
when: p1.stat.isdir is not defined or not p1.stat.isdir or p1.stat.pw_name != item.o or ...
with_items: my_dirs
- name: create directories
file: path={{ item.p }}
state=directory
owner={{ item.o }}
group={{ item.g }}
mode=0755
with_items: my_dirs