Ansible:使用ansible事实,如何根据存储控制器值获取磁盘设备,然后将设备设置为变量

问题描述 投票:5回答:1

上下文:我的系统包含来自不同存储控制器的磁盘组合,因此每种类型的磁盘都有不同的用途。在我去的时候,我是新手学习和学习的。编写一个从每种类型的控制器获取磁盘的剧本,以便我可以设置它们。

防爆。以下是来自#'filter = ansible_devices *'的示例输出... sdz设备来自SATA控制器。在我的其他主机上它可能并不总是sdz ..所以我想得到设备名称并存储在一个变量中,如果事实上设备有“主机”:“SATA控制器”。我想也许我需要遍历ansible_devices词典,找到匹配的键(“主机”:“SATA控制器”),然后获取它的父命令即设备。有没有办法做到这一点......或更简单的方法? :)

"sdz": {
            "holders": [
                "mpathz"
            ],
            "host": "SATA controller: Intel Corporation C610/X99 series chipset 6-Port SATA Controller [AHCI mode] (rev 05)",
            "links": {
                "ids": [
                    "ata-SAMSUNG_MZ7GE960HMHP-00003_S1Y2NYAFC02269",
                    "wwn-0x50025388003aeb2a"
                ],
                "labels": [],
                "masters": [
                    "dm-19"
                ],
                "uuids": []
            },
            "model": "SAMSUNG MZ7GE960",
            "partitions": {},
            "removable": "0",
            "rotational": "0",
            "sas_address": null,
            "sas_device_handle": null,
            "scheduler_mode": "cfq",
            "sectors": "1875385008",
            "sectorsize": "512",
            "serial": "S1Y2NYAFC02269",
            "size": "894.25 GB",
            "support_discard": "512",
            "vendor": "ATA",
            "virtual": 1,
            "wwn": "0x50025388003aeb2a"
ansible ansible-facts
1个回答
6
投票

假设ansible_devices已经设置为变量,那么剧本中的任务片段应该这样做

 tasks:

    - name: get device name
      set_fact:
        device_name: "{{ item.key }}"
      no_log: True
      with_dict: "{{ ansible_devices }}"
      when: "item.value.host.startswith('SATA')"

    - name: show all values for selected device name
      debug: var=ansible_devices[device_name]

    - name: show only device name
      debug: var=device_name

set_fact将获取您的设备名称。这两个调试语句将分别转储所有设备值和设备名称。

© www.soinside.com 2019 - 2024. All rights reserved.