代码之家  ›  专栏  ›  技术社区  ›  Paul Hodges

确认安装点集存在的最简单非shell方法,每个安装点具有自定义的最小大小

  •  0
  • Paul Hodges  · 技术社区  · 7 年前

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

    致命:[tstServer]:失败=&燃气轮机;{“failed”:true,“msg”:“模板字符串时出错:没有名为“selectattr”的筛选器。字符串:{{ansible\u mounts | selectattr('mount',equalto',item.mount)}}}”

    使用jinja 2.6。不知道为什么selectattr()不存在。

    什么时候 , 失败 明确肯定 , 带_项 带嵌套的 , 合并()

    建议?

    附录: fail: ... when: not item.mount|is_mount

    ...这很有趣,因为 /dev/shm 以这种方式显示为装载点(并从类似命令的位置显示) df mount )它不包括在 ansible_mounts .

    ansible_底座 with_nested 对于 /开发/shm . 这让我成了一只悲伤的熊猫。

    进一步的

    事实证明,我必须检查一个挂载点(/tmp),该挂载点通常可以通过常见的文件系统获得——最好的选项是ansible\u挂载一个(/dev/shm)是tempfs——最简单的似乎是df,它也可以处理/tmp——以及oracle管理的一组,因此它们只能通过fdisk使用。

    最后,我不得不检查每个系统的十几个驱动器,但该/tmp是唯一可用于ansible_挂载的驱动器。话虽如此,我的问题变得毫无意义的方式,我问它。。。

    谢谢你的意见。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Konstantin Suvorov    7 年前

    为什么不更新Jinja2?

    documentation :

    selectattr()

        2
  •  0
  •   Paul Hodges    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 坐骑,没有其他东西能给我尺寸。

    为什么不包括挂载是df显示的呢?

    用一个简短的脚本,我可以用-

    - 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 没有显示 /开发/shm tmpfs 攀登希望这至少能帮到别人。