如何使用 ansible playbook 检查 linux 磁盘大小是否小于 10GB?
How to check linux disk size is less than 10GB using ansible playbook?
我需要检查服务器磁盘大小小于 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,请帮助我在这个剧本中获得通过
例如,为了将所有单位转换为 GB,我建议您使用自定义过滤器:
您在剧本文件夹中创建了一个文件夹 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 %}
我需要检查服务器磁盘大小小于 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,请帮助我在这个剧本中获得通过
例如,为了将所有单位转换为 GB,我建议您使用自定义过滤器:
您在剧本文件夹中创建了一个文件夹 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 %}