最简单的非 shell 方法来确认安装点集存在,每个自定义最小大小
Simplest non-shell way to confirm set of mount points exist with custom minimum size for each
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() 过滤器,但它不可用。
fatal: [tstServer]: FAILED! => {"failed": true, "msg": "template error while templating string: no filter named 'selectattr'. String: {{ ansible_mounts | selectattr( 'mount', 'equalto', item.mount ) }}"}
使用神社 2.6。不知道为什么 selectattr() 不存在。
(如果有人关心的话,这是詹金斯的输出。)
很高兴使用 when、fail、assert、with_items, with_nested, combine(), and/or 其他任何东西;只是还没有找到使它整洁的正确组合。我宁愿它不需要十几个步骤 - 一个将是理想的。
建议?
附录:
我可以通过 fail: ... when: not item.mount|is_mount
一步轻松确认挂载点
...这很有趣,因为虽然 /dev/shm
以这种方式显示为挂载点(以及来自 df
& mount
之类的命令),但它不包含在 ansible_mounts
.
这意味着我不能只使用 ansible_mounts
在单独的 with_nested
中检查 /dev/shm
的文件大小。这让我很伤心熊猫。
进一步附录:
事实证明我必须检查一个挂载点 (/tmp),该挂载点通常可通过通常的文件系统使用 - 最佳选择 ansible_mounts! - 一个 (/dev/shm) 是 tempfs - 最简单的似乎是 df,它也可以处理 /tmp - 以及 oracle 管理的一堆,所以它们只能通过 fdisk 获得。
最后发现我必须检查每个系统的十几个驱动器,但是 /tmp 是 ansible_mounts 唯一可用的驱动器。话虽如此,我的问题就像我问的那样变得没有实际意义...
感谢您的输入。
为什么不更新 Jinja2?
selectattr()
New in version 2.7.
回答第一部分。
- 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
装载,没有其他东西给我尺寸。
为什么它不包括 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
坐骑。希望至少能帮到一些人。
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() 过滤器,但它不可用。
fatal: [tstServer]: FAILED! => {"failed": true, "msg": "template error while templating string: no filter named 'selectattr'. String: {{ ansible_mounts | selectattr( 'mount', 'equalto', item.mount ) }}"}
使用神社 2.6。不知道为什么 selectattr() 不存在。
(如果有人关心的话,这是詹金斯的输出。)
很高兴使用 when、fail、assert、with_items, with_nested, combine(), and/or 其他任何东西;只是还没有找到使它整洁的正确组合。我宁愿它不需要十几个步骤 - 一个将是理想的。
建议?
附录:
我可以通过 fail: ... when: not item.mount|is_mount
...这很有趣,因为虽然 /dev/shm
以这种方式显示为挂载点(以及来自 df
& mount
之类的命令),但它不包含在 ansible_mounts
.
这意味着我不能只使用 ansible_mounts
在单独的 with_nested
中检查 /dev/shm
的文件大小。这让我很伤心熊猫。
进一步附录:
事实证明我必须检查一个挂载点 (/tmp),该挂载点通常可通过通常的文件系统使用 - 最佳选择 ansible_mounts! - 一个 (/dev/shm) 是 tempfs - 最简单的似乎是 df,它也可以处理 /tmp - 以及 oracle 管理的一堆,所以它们只能通过 fdisk 获得。
最后发现我必须检查每个系统的十几个驱动器,但是 /tmp 是 ansible_mounts 唯一可用的驱动器。话虽如此,我的问题就像我问的那样变得没有实际意义...
感谢您的输入。
为什么不更新 Jinja2?
selectattr()
New in version 2.7.
回答第一部分。
- 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
装载,没有其他东西给我尺寸。
为什么它不包括 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
坐骑。希望至少能帮到一些人。