检查目录是否是安装点?

问题描述 投票:7回答:6

在执行其他一些任务之前,我需要检查目录是否是安装点。

我一直在浏览文档,似乎只能创建/销毁挂载点,而不仅仅是检查是否存在。从下面的链接。

http://docs.ansible.com/ansible/mount_module.html

我想知道是否有任何方法可以检查ansible是否存在,或者必须是从ansible调用的其他某种语言。

ansible ansible-playbook mount
6个回答
12
投票

我已经尝试过mountstat模块。两者都不符合您的要求。

我设法仅使用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_whenignore_errors更好,因为它不会输出错误。

如果路径不是装载点,则需要停止剧本,这可能就是您想要的。

我希望有人能找到比这更好的解决方案。

NOTE:据我所知,有些平台没有mountpoint命令,据我所知Darwin(Mac OSX)和SunOS(Oracle Solaris),如果需要在这些系统上运行, '将需要找到另一个解决方法。


4
投票

经过一段时间的尝试,我想到了这个。

vars:
- myvolume: /backup

tasks:
- debug: msg="The dir is a mount point"
  with_items: ansible_mounts
  when: item.mount == myvolume

我不确定这如何适用于所有系统,和/或ansible_mounts是否包含操作系统的所有安装点或仅由ansible创建的安装点。


2
投票

您可以使用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"

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,大声笑

顺便说一句,值得研究默认事实,例如{{ ansible_mounts }},尽管我的/ dev / shm没有显示在这里-不知道为什么。 Caveat脚本作者,ymmv。


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:

0
投票

谢谢你。因为selectattr仅来自病房的那个版本,所以它在病房2.8上非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.