【问题标题】:How to check linux disk size is less than 10GB using ansible playbook?如何使用 ansible playbook 检查 linux 磁盘大小小于 10GB?
【发布时间】:2023-03-26 12:15:01
【问题描述】:

我需要检查所有服务器磁盘大小小于 10GB 的 linux 服务器,并且如果它以 MB、GB、1TB 为单位也应该显示输出,它应该显示为相同。 我已经使用下面的代码来检查 ansible playbook 中的磁盘大小

- name: Get disk info
    set_fact:
      disk_size: "{{ item.value.size }}"      
    with_dict:
      - "{{ ansible_facts['devices'] }}"  
    ignore_errors: yes    
    tags: get_disk_info
  # - debug:
  #     msg: "{{ disk_size }}"
  #   ignore_errors: yes
  #   tags: get_disk_info
  - debug:
      msg: >
           {% if disk_size > 10 %} 
            Disk Size {{ disk_size }} -> PASS 
           {% else %} 
            Disk Size {{ disk_size }} -> FAIL
           {% endif %}
    tags: get_disk_info

如果服务器的磁盘大小为 55MB,它也会将输出显示为 PASS,但根据代码中的上述条件,它应该显示为 FAIL..

如果在所有方面都应该大于 10GB,请帮助我在这本剧本中获得 PASS

【问题讨论】:

标签: python ansible jinja2


【解决方案1】:

例如,要将所有单位转换为 GB,我建议您使用自定义过滤器:

您在 playbook 文件夹中创建一个文件夹 filter_plugins(我已将文件命名为 myfilters.py 和过滤器 convertToGB

过滤器:

#!/usr/bin/python
import re
class FilterModule(object):
    def filters(self):
        return {
            'convertToGB': self.convertToGB
        }

    def convertToGB(self, obj):
        # keep only digit and . 
        value = float(re.sub('[^\d\.]', '', obj))
        if obj.endswith('GB'):
            return value
        elif obj.endswith('TB'):
            return value * 1024

        return value

您可以轻松修改自定义插件...

剧本:

- name: playbook1.0
  hosts: all
  gather_facts: yes

  tasks:
    - name: Get disk info
      set_fact:
        disk_size: "{{ item.value.size }}"      
      with_dict:
        - "{{ ansible_facts['devices'] }}"  

    - debug:
        msg: >
            {% if (disk_size | convertToGB) > 10 %} 
              Disk Size {{ disk_size }} -> PASS 
            {% else %} 
              Disk Size {{ disk_size }} -> FAIL
            {% endif %}

没有自定义过滤器你必须像这样修改你的模板:

  tasks:
    - name: Get disk info
      set_fact:
        disk_size: "{{ item.value.size }}"      
      with_dict:
        - "{{ ansible_facts['devices'] }}"  
      

    - debug:
        msg: >
            {% set value = (disk_size.split(' ')[0] | float) %}
            {% set unit = disk_size.split(' ')[1] %} 
            {% set multiplier = 1.0 %}            
            {% if 'GB' in unit %}
            {%   set multiplier = 1.0 %}
            {% elif 'TB' in unit %}
            {%   set multiplier = 1024 %}
            {% endif %}
            {% if (value * multiplier) > 10 %} 
              Disk Size {{ disk_size }} -> PASS 
            {% else %} 
              Disk Size {{ disk_size }} -> FAIL
            {% endif %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 2023-04-05
    • 2012-09-13
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    相关资源
    最近更新 更多