简单的非 - 壳方法来确认设置的安装点具有自定义的最小尺寸的每个
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_items,with_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的驱动器。这就是说,我的问题变得没有问题,我问它的方式...
感谢您的意见。
对第一部分有答案。尽管如此,仍然很难找到一种简单的,可靠的,非脚本的方法来加载挂载点大小。 {{ 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
挂载。希望至少可以帮助别人。
尝试了其他各种努力。还没有弄清楚在这种环境下究竟是如何。 '需求已经满足:Jinja2在/ usr/lib/python2.6/site-packages/Jinja2-2.6-py2.6.egg' –
'pip install Jinja2 == 2.8'? –
你知道,我花了至少一个小时试图找到特定的语法,只是不断循环。谢谢! :) 但是'{{ansible_mounts}}'仍然没有显示我的'/ dev/shm'挂载,所以我必须找到另一种方法来检查大小。 :( –