简单的非 - 壳方法来确认设置的安装点具有自定义的最小尺寸的每个

问题描述:

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, } 

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

致命:[tstServer]:FAILED! => {“failed”:true,“msg”:“template templating string error:no filter named'selectattr'。String:{{ansible_mounts | selectattr('mount','equalto',item.mount)}} }

使用忍者2.6。不知道为什么selectattr()不在那里。
(这是詹金斯输出,如果有人问津。)

乐于使用失败断言with_itemswith_nested结合(),和/或其他任何;只是没有找到相当合适的组合来使它整洁。我宁愿不要采取十几步 - 一个会是理想的。

对此提出建议?

附录: 我可以一步一个fail: ... when: not item.mount|is_mount

...这是有趣的,很容易确认的安装点,因为虽然/dev/shm节目作为挂载点的这种方式(从命令状df & mount)它不包含在ansible_mounts中。

这意味着我不能只使用ansible_mounts来检查/dev/shm的单独with_nested中的文件大小。这让我成为一只伤心的熊猫。

进一步编:

原来我要检查一个挂载点(/ tmp目录),其一般可通过正常的文件系统 - 最佳选择ansible_mounts! - 一个(/ dev/shm)是tempfs - 最简单的似乎是df,它也可以处理/ tmp - 以及oracle管理的一些,所以它们只能通过fdisk来使用。

最后事实证明,我必须为每个系统检查十几个驱动器,但是/ tmp是唯一可用于ansible_mounts的驱动器。这就是说,我的问题变得没有问题,我问它的方式...

感谢您的意见。

为什么不更新Jinja2?

documentation

selectattr()新的2.7版。

+0

尝试了其他各种努力。还没有弄清楚在这种环境下究竟是如何。 '需求已经满足:Jinja2在/ usr/lib/python2.6/site-packages/Jinja2-2.6-py2.6.egg' –

+1

'pip install Jinja2 == 2.8'? –

+0

你知道,我花了至少一个小时试图找到特定的语法,只是不断循环。谢谢! :) 但是'{{ansible_mounts}}'仍然没有显示我的'/ dev/shm'挂载,所以我必须找到另一种方法来检查大小。 :( –

对第一部分有答案。尽管如此,仍然很难找到一种简单的,可靠的,非脚本的方法来加载挂载点大小。 {{ ansible_mounts }}不显示我的共享内存/dev/shm安装,没有别的给我的大小。

为什么不包括那个mount是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挂载。希望至少可以帮助别人。