在执行其他一些任务之前,我需要检查目录是否是安装点。
我一直在浏览文档,似乎只能创建/销毁挂载点,而不仅仅是检查是否存在。从下面的链接。
http://docs.ansible.com/ansible/mount_module.html
我想知道是否有任何方法可以检查ansible是否存在,或者必须是从ansible调用的其他某种语言。
我已经尝试过mount
和stat
模块。两者都不符合您的要求。
我设法仅使用OS命令来工作。我已经对Redhat,Debian和SLES系列进行了测试。
vars:
- myvolume: /backup
tasks:
- command: mountpoint -q {{myvolume}}
register: volume_stat
failed_when: False
changed_when: False
- debug:
msg: "This is a mountpoint!"
when: volume_stat.rc == 0
问题是,如果路径不是安装点,则mountpoint
命令生成stderr,因此您必须使用ignore_errors
,女巫不是一个好的解决方案。
EDIT 1:@udondan提到,failed_when
比ignore_errors
更好,因为它不会输出错误。
如果路径不是装载点,则需要停止剧本,这可能就是您想要的。
我希望有人能找到比这更好的解决方案。
NOTE:据我所知,有些平台没有mountpoint
命令,据我所知Darwin(Mac OSX)和SunOS(Oracle Solaris),如果需要在这些系统上运行, '将需要找到另一个解决方法。
经过一段时间的尝试,我想到了这个。
vars:
- myvolume: /backup
tasks:
- debug: msg="The dir is a mount point"
with_items: ansible_mounts
when: item.mount == myvolume
我不确定这如何适用于所有系统,和/或ansible_mounts
是否包含操作系统的所有安装点或仅由ansible创建的安装点。
您可以使用Ansible的“命令”模块的“ stdout”来确定给定目录的安装状态,示例代码粘贴在这里:
- name: "check mount point {{ mount_dir }}"
command: mountpoint {{ mount_dir }}
register: mount_stat
failed_when: False
changed_when: False
- name: "debug"
when: mount_stat.stdout == "{{ mount_dir }} is a mountpoint"
debug:
msg: "{{ mount_dir }} is a mountpoint"
- name: "debug"
when: mount_stat.stdout == "{{ mount_dir }} is not a mountpoint"
debug:
msg: "{{ mount_dir }} is not a mountpoint"
有类似的困难,但是尝试这样的事情-
- name: testing for required mount points
fail:
msg: "{{ item }} must be a mount point"
when: not item|is_mount
with_items:
- /path/to/test
现在,如果我能弄清楚如何可靠地获得安装点的size,大声笑
顺便说一句,值得研究默认事实,例如{{ ansible_mounts }}
,尽管我的/ dev / shm没有显示在这里-不知道为什么。 Caveat脚本作者,ymmv。
您可以使用ansible_mounts
事实进行检查,尽管有些复杂,但无需运行额外的命令。
- debug:
msg: "{{ mount_point }} is mounted"
when: ansible_mounts | selectattr('mount', 'equalto', mount_point) | list | length > 0
- debug:
msg: "{{ mount_point }} is not mounted"
when: ansible_mounts | selectattr('mount', 'equalto', mount_point) | list | length == 0
其中mount_point
是要检查的目录路径。
请注意,Ansible事实不会自动更新,因此,如果在播放过程中挂载或卸载目录,除非重新运行设置模块进行更新,否则结果将是过时的。
- name: Gather facts again to update mount points
setup:
谢谢你。因为selectattr仅来自病房的那个版本,所以它在病房2.8上非常有用。