gpt4 book ai didi

ansible - 如何使用 Ansible 收集有关磁盘的信息

转载 作者:行者123 更新时间:2023-12-04 16:42:31 24 4
gpt4 key购买 nike

我正在尝试编写一个 Ansible 剧本,它将识别 RHEL 机器上新添加的磁盘。计划是在创建新磁盘之前运行剧本并在该时间点缓存磁盘作为事实。创建新磁盘后,将再次运行相同的剧本,并计算磁盘创建前后的差异。

例如,lsblk 最初返回以下内容:

NAME              SIZE  TYPE
sda 100G disk
├─sda1 1G part
└─sda2 99G part
├─rhel-root 50G lvm
├─rhel-swap 7.9G lvm
└─rhel-home 41.1G lvm
sr0 1024M rom

添加 8 个新磁盘后,lsblk 返回:

NAME              SIZE  TYPE
sda 100G disk
├─sda1 1G part
└─sda2 99G part
├─rhel-root 50G lvm
├─rhel-swap 7.9G lvm
└─rhel-home 41.1G lvm
sdb 18.6G disk
sdc 18.6G disk
sdd 18.6G disk
sde 18.6G disk
sdf 18.6G disk
sdg 18.6G disk
sdh 18.6G disk
sdi 18.6G disk
sr0 1024M rom

理想情况下,我将能够收集以下形式的初始磁盘列表:

['sda']

并在创建磁盘后收集另一个形式的磁盘列表:

['sda', 'sdb', 'sdc', 'sdd', 'sde', 'sdf', 'sdg', 'sdh', 'sdi']

计算两个列表之间的差异会产生:

['sdb', 'sdc', 'sdd', 'sde', 'sdf', 'sdg', 'sdh', 'sdi']

这是8个新创建的磁盘。

我尽量避免使用 shellcommand 模块调用。

最佳答案

此信息是通过 ansible 的 fact gathering 自动收集的机制。

参见 Variables discovered from systems: Facts .

例如:

#!/usr/bin/env ansible-playbook
- name: Lets look at some disks
hosts: localhost
become: false
gather_facts: true
tasks:
- name: Output disk information
debug:
var: hostvars[inventory_hostname].ansible_devices

如果我们改为在 setup module 上使用 gather_subset 配置相反,我们可以加快事实收集速度,只收集有关系统硬件的信息。

然后我们可以将它与 python keys() 方法和 jinja2 list 过滤器结合起来以产生您想要的输出。

#!/usr/bin/env ansible-playbook
- name: Lets look at some disks
hosts: localhost
become: false
gather_facts: false
tasks:
- name: Collect only facts about hardware
setup:
gather_subset:
- hardware

- name: Output disks
debug:
var: hostvars[inventory_hostname].ansible_devices.keys() | list

也可以配置在 ansible 配置文件中收集哪些事实 ansible.cfg使用 [defaults] 部分中的 gather_subset 键。

编辑:如果您想过滤掉各种磁盘类型,最简单的方法是使用 map('regex_search', '*search string*') 来提取您想要的值。您可以通过 select('string') 删除空值。

例如 sd* 形式的磁盘:

#!/usr/bin/env ansible-playbook
- name: Lets look at some disks
hosts: localhost
become: false
gather_facts: false
tasks:
- name: Collect only facts about hardware
setup:
gather_subset:
- hardware

- name: Output disks
debug:
var: hostvars[inventory_hostname].ansible_devices.keys() | map('regex_search', 'sd.*') | select('string') | list

关于ansible - 如何使用 Ansible 收集有关磁盘的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57102717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com