naz*_*erb 7 mount ansible ansible-playbook
在执行其他任务之前,我需要检查目录是否是挂载点.
我一直在查看文档,它似乎只能创建/销毁挂载点,而不仅仅是检查是否存在.从下面的链接.
http://docs.ansible.com/ansible/mount_module.html
我想知道是否有任何方法可以检查它是否与ansible存在,或者它是否必须是从ansible调用的其他语言.
Ber*_*ale 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
Run Code Online (Sandbox Code Playgroud)
问题是,mountpoint如果路径不是挂载点而命令生成stderr,那么你必须使用ignore_errors,这不是一个好的解决方案.
编辑1:@udondan提到,failed_when是一种更好的方法,ignore_errors因为它不输出错误.
如果您需要在路径不是挂载点时停止播放,则可能是您想要的.
我希望有人找到比这更好的解决方案.
注意:有些平台没有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
Run Code Online (Sandbox Code Playgroud)
我不确定这如何适用于所有系统和/或是否ansible_mounts包含操作系统的所有挂载点或仅包含使用 ansible 创建的挂载点。
您可以使用事实来检查这一点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
Run Code Online (Sandbox Code Playgroud)
其中mount_point是要检查的目录路径。
请注意,Ansible 事实不会自动更新,因此如果您在播放期间挂载或卸载目录,结果将过时,除非您通过重新运行安装模块来更新它们:
- name: Gather facts again to update mount points
setup:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11231 次 |
| 最近记录: |