在执行其他任务之前,我需要检查目录是否是挂载点。
我一直在浏览文档,似乎只能创建/销毁挂载点,而不仅仅是检查是否存在挂载点。从下面的链接。
http://docs.ansible.com/ansible/mount_module.html
我想知道是否有任何方法可以检查它是否存在于ansible中,或者它是否必须是来自ansible的其他语言。
答案 0 :(得分:12)
我尝试了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
,这不是一个好的解决方案。
编辑1 :@udondan提到,failed_when
是一种比ignore_errors
更好的方法,因为它不会输出错误。
如果路径不是挂载点,则需要停止播放列表,这可能是您想要的。
我希望有人找到比这更好的解决方案。
注意:有些平台没有mountpoint
命令,据我所知Darwin(Mac OSX)和SunOS(Oracle Solaris),如果你需要这个在这些系统上工作,你需要找到另一种解决方法。
答案 1 :(得分:3)
经过一段时间的尝试,我想出了这个。
vars:
- myvolume: /backup
tasks:
- debug: msg="The dir is a mount point"
with_items: ansible_mounts
when: item.mount == myvolume
我不确定这适用于所有系统和/或ansible_mounts
是否包含操作系统的所有挂载点或仅包含使用ansible创建的挂载点。
答案 2 :(得分:2)
您可以使用Ansible“command”模块的“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"
答案 3 :(得分:2)
有类似的困难,但尝试这样的事情 -
- 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 ,那么大声笑
BTW,值得查看默认事实,例如{{ ansible_mounts }}
,虽然我的/ dev / shm没有显示 - 但不知道为什么。 警告脚本,ymmv。
答案 4 :(得分:0)
尽管有些麻烦,您可以使用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: