내 예제 코드는 다음과 같습니다. 하단의 질문은 다음과 같습니다.
hw.j2
:
System Total Memory : {{ ansible_memtotal_mb }}
Free Memory : {{ ansible_memfree_mb }}
System Total CPU : {{ ansible_processor_cores }}
System Virtual CPU : {{ ansible_processor_vcpus }}
Disks capacities
/dev/sda : {{ ansible_devices.sda.size }}
/dev/sdb : {{ ansible_devices.sdb.size }}
/dev/sdc : {{ ansible_devices.sdc.size }}
collecthw.yml
:
---
- name: Collect information
become: yes
hosts: clients
tasks:
- name: use template from labs/hw.j2
template:
src: hw.j2
dest: hw.{{ ansible_facts.hostname }}.txt
owner: corona
group: corona
mode: '0600'
잘 작동하지만 ..
이제 내 질문은 다음과 같습니다.
- 관리 노드의 모든 /dev/sd*를 반복하고 해당 디스크 크기를 수집하는 방법은 무엇입니까?
- 이것이 디스크 크기인데, 디스크에서 사용되지 않은 디스크 공간은 어떻습니까?
답변이나 다른 조언을 얻기 위해 시간과 노력을 쏟을 수 있는 분들께 미리 감사드립니다. 초보자입니다 xD
답변1
예를 들어 loop*
디스플레이 크기를 제외한 모든 장치를 선택합니다.
- set_fact:
my_devices: "{{ ansible_devices.keys()|
reject('match', '^loop(.*)$')|
list }}"
- debug:
msg: "{{ item }} {{ ansible_devices[item].size }}"
loop: "{{ my_devices }}"
주다
msg: nvme0n1 238.47 GB
Q1:"관리 노드의 모든 /dev/sd*를 반복하고 해당 디스크 크기를 수집하는 방법은 무엇입니까?"
A1: 위 코드에서reject
필터링select
select('match', '^sd(.*)$')|
그리고 아래 템플릿을 사용하세요
{% for dev in my_devices %}
{{ dev }}: {{ ansible_devices[dev].size }}
{% endfor %}
Q2:"디스크에 사용되지 않은 디스크 공간은 어떻습니까?"
A2: 변수를 사용하여 ansible_mounts
사용되지 않는 공간을 표시하십시오. 예를 들어
- set_fact:
my_devs: "{{ my_devs|default([]) +
[ansible_mounts|
selectattr('device', 'match', my_regex)|
list|
json_query(my_query)]|first }}"
loop: "{{ my_devices }}"
vars:
my_regex: '^(.*){{ item }}(.*)$'
my_query: '[].[device, size_total, size_available]'
- debug:
msg: "dev: {{ item.0 }}
size[MB]: {{ (item.1|int / 1000000)|int }}
free[MB]: {{ (item.2|int / 1000000)|int }}"
loop: "{{ my_devs }}"
주다
msg: 'dev: /dev/nvme0n1p6 size[MB]: 41015 free[MB]: 12677'
msg: 'dev: /dev/nvme0n1p7 size[MB]: 109899 free[MB]: 39896'
msg: 'dev: /dev/nvme0n1p2 size[MB]: 100 free[MB]: 45'
아래 템플릿을 사용하여 사용되지 않은 공간을 바이트 단위로 저장하세요.
{% for dev in my_devs %}
{{ dev[0] }}: {{ dev[2] }}
{% endfor %}
답변2
알았어, 드디어 답을 찾았어. jinja 템플릿의 기본값입니다.
아래 예제 코드:
vi hw.j2
디스크 용량
/dev/sda : {{ ansible_devices.sda.size|default("NONE", true) }}
/dev/sdb : {{ ansible_devices.sdb.size|default("NONE ", true) }}
/dev/sdc : {{ ansible_devices.sdc.size|default("NONE", true) }}
/dev/sdz : {{ ansible_devices.sdz.size|default("NONE", true) }
client@ cat list-hw.r8s2.txt
디스크 용량
/dev/sda : 20.00GB
/dev/sdb : 20.00GB
/dev/sdc : 20.00GB
/dev/sdz : NONE