0

ansible_mounts 是一个字典数组,就像这样 -

    "ansible_mounts": [
       {
           "device": "/dev/mapper/vg_centos67template-lv_root",
           "fstype": "ext4",
           "mount": "/",
           "options": "rw",
           "size_available": 8806977536,
           "size_total": 37458894848,
           "uuid": "N/A"
       },
       {
           "device": "/dev/sda1",
           "fstype": "ext4",
           "mount": "/boot",
           "options": "rw",
           "size_available": 369055744,
           "size_total": 499355648,
           "uuid": "N/A"
       },
   ],  

我需要确认存在一组具有最小尺寸的特定挂载点。我对此数据结构有控制权,但现在它的结构类似 -

requiredMounts:  
 - { mount: /tmp,     size_min:   2147483648, }  
 - { mount: /dev/shm, size_min: 204010946560, }  

我希望使用像 grep 这样的 selectattr() 过滤器,但它不可用。

致命:[tstServer]:失败!=> {"failed": true, "msg": "模版字符串时出现模板错误:没有名为 'selectattr' 的过滤器。字符串:{{ ansible_mounts | selectattr('mount', 'equalto', item.mount ) }}" }

使用神社 2.6。不知道为什么 selectattr() 不存在。
(这是詹金斯的输出,如果有人关心的话。)

乐于使用whenfailassertwith_itemswith_nestedcombine()和/或其他任何东西;只是还没有找到合适的组合来使它整洁。我宁愿它不采取十几个步骤 - 一个将是理想的。

建议?

附录:我可以通过一个步骤轻松地确认安装点fail: ... when: not item.mount|is_mount

...这很有趣,因为虽然/dev/shm以这种方式显示为挂载点(以及从df&之类的命令mount),但它不包含在ansible_mounts.

这意味着我不能只用ansible_mounts单独with_nested的 for来检查文件大小/dev/shm。这让我变成了一只悲伤的熊猫。

进一步的附录:

事实证明,我必须检查一个通常可通过常用文件系统获得的挂载点 (/tmp) - 最佳选项 ansible_mounts!- 一个 (/dev/shm) 是 tempfs - 最简单的似乎是 df,它也可以处理 /tmp - 以及 oracle 管理的一堆,所以它们只能通过 fdisk 获得。

最后,我必须检查每个系统的十几个驱动器,但 /tmp 是 ansible_mounts 唯一可用的驱动器。话虽这么说,我的问题变得像我问的那样没有意义......

感谢您的输入。

4

2 回答 2

0

回答第一部分。

- name: testing for required mount points
  fail:
    msg: "{{ item.mount }} must be a mount point"
  when: not item.mount|is_mount
  with_items: "{{ requiredMounts }}"  

不过,仍然很难找到一种简单、可靠、非脚本的方式来 git 挂载点大小。{{ ansible_mounts }}没有显示我的共享内存/dev/shm安装,也没有其他任何东西给我大小。

为什么它不包括安装是 df 显示的呢?

是否有另一种方法可以在没有 shell 调用的情况下访问挂载点分配?

使用一个简短的脚本,我可以做到这一点 -

- name: check mount point space allocation
  shell: df -B 1 {{ reqMount.mount }} | grep {{ reqMount.mount }} | { read x siz x; echo $siz; }
  register: mountStat

- name: Confirm mount point minimum size
  fail:
    msg: "mountpoint '{{ reqMount.mount }}' of {{ mountStat.stdout }} bytes must be at least {{ reqMount.size_min }} bytes."
  when: mountStat.stdout|int < reqMount.size_min|int  

...但我不喜欢使用一些我认为可能应该有几行注释来解释它的脚本。(我应该费心提到 awk 让我觉得很脏吗?)

还尝试了该parted模块,但是我的逻辑挂载点是文件系统目录,除了可以轻松地为我提供每个目录的分区外,我什么也没看到df,因此如果我仍然调用它,则几乎没有理由添加步骤。

作为附录,ansible_mounts未显示的原因/dev/shm可能是因为它是tmpfs坐骑。希望至少可以帮助某人。

于 2017-09-25T16:50:43.667 回答
0

为什么不更新 Jinja2?

文档

selectattr()2.7 版中的新功能。

于 2017-09-23T08:22:47.137 回答