AC-*_*C-5 3 ansible ansible-facts
我正在尝试编写一个 Ansible playbook,它将识别 RHEL 机器上新添加的磁盘。计划是在创建新磁盘之前运行剧本并在该时间点缓存磁盘作为事实。创建新磁盘后,将再次运行相同的 playbook,并计算创建磁盘前后磁盘的差异。
例如,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
Run Code Online (Sandbox Code Playgroud)
添加 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
Run Code Online (Sandbox Code Playgroud)
理想情况下,我将能够收集以下形式的磁盘的初始列表:
['sda']
Run Code Online (Sandbox Code Playgroud)
并在创建磁盘后收集另一个形式的磁盘列表:
['sda', 'sdb', 'sdc', 'sdd', 'sde', 'sdf', 'sdg', 'sdh', 'sdi']
Run Code Online (Sandbox Code Playgroud)
计算两个列表之间的差异将产生:
['sdb', 'sdc', 'sdd', 'sde', 'sdf', 'sdg', 'sdh', 'sdi']
Run Code Online (Sandbox Code Playgroud)
这是8个新创建的磁盘。
如果可能,我试图避免使用shellorcommand模块调用。
这些信息是通过 ansible 的事实收集机制自动收集的。
请参阅从系统中发现的变量:事实。
例如:
#!/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
Run Code Online (Sandbox Code Playgroud)
如果我们改为在setup 模块上使用 gather_subset 配置,我们可以加快事实收集速度,并且只收集有关系统硬件的信息。
然后,我们可以将其与 pythonkeys()方法和 jinja2list过滤器结合起来,以产生您想要的输出。
#!/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
Run Code Online (Sandbox Code Playgroud)
还可以使用部分中的键配置要在ansible配置文件ansible.cfg 中收集哪些事实。gather_subset[defaults]
编辑:如果您想过滤掉各种磁盘类型,最简单的方法是使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11443 次 |
| 最近记录: |