AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 951529
Accepted
João Pereira
João Pereira
Asked: 2019-01-31 08:09:21 +0800 CST2019-01-31 08:09:21 +0800 CST 2019-01-31 08:09:21 +0800 CST

Ansible - 删除给定磁盘列表上的所有分区

  • 772

我在做一些看似微不足道的事情时遇到了严重的麻烦,我想我可能走错了路。

场景非常简单,我有一个 host_group,其中有一个磁盘列表,例如:

磁盘:“['sdb','sdc']”

然后我有一个任务:

#Read device information (always use unit when probing)
- parted: device=/dev/{{ item }} unit=MiB   register: "{{ item }}_info"   with_items:
    -  "{{ disks }}"

这将读取磁盘的信息并将其存储在 2 个变量中:sdb_info 和 sdc_info

当我尝试删除给定磁盘上的所有分区时,问题就开始了,执行此操作的正常任务是:

# Remove all partitions from disk
- parted:
    device: /dev/sdc
    number: "{{ item.num }}"
    state: absent   with_items:
    - "{{ sdc_info.partitions }}"

这很好,但我无法调整它以支持磁盘列表。

我正在做类似的事情:

# Remove all partitions from disk
- parted:
    device: /dev/{{ item[0] }}
    number: "{{ item[1].num }}"
    state: absent   with_nested:
    - "{{ disks }}" 
    - "{{ {{ disks }}_info.partitions }}"

问题似乎是“{{ {{ disks }}_info.partitions }}”,因为我无法循环循环。我可能选择了一种非常愚蠢的方法....任何帮助将不胜感激。

ansible
  • 2 2 个回答
  • 3312 Views

2 个回答

  • Voted
  1. Best Answer
    Vladimir Botka
    2019-01-31T10:57:58+08:002019-01-31T10:57:58+08:00

    注册到单个变量info。

        - parted:
            device=/dev/{{ item }}
            unit=MiB
          register: info
          loop: "{{ disks }}"
    

    使用子元素来迭代磁盘和分区。例如

        - hosts: localhost 
          vars:
            disks:
              - sda
              - sdc
          tasks:
            - parted:
                device: "/dev/{{ item }}"
                unit: MiB
              register: info
              loop: "{{ disks }}"
            - debug:
                msg: "{{ item.0.disk.dev }} {{ item.1.num }}"
              loop: "{{ info.results|subelements('partitions') }}"
    

    给

        "msg": "/dev/sda 1"
        "msg": "/dev/sda 2"
        "msg": "/dev/sda 3"
        "msg": "/dev/sda 5"
        "msg": "/dev/sdc 1"
    
    • 4
  2. spaceman spiff
    2021-01-11T10:19:03+08:002021-01-11T10:19:03+08:00

    以下可用于在单个任务中清除所有现有分区:

    - command: wipefs -a {{ selected_device_id_path }}
    

    除了它是一个命令之外,这里的优点是分区删除过程在调用parted info可能已经(故意)以意想不到的方式更改的设备时不会因故障而脆弱parted。一种这样的情况是,如果通过设备(通过 virtio-blk)到 VM 并将其块大小设置为其本机值,这可能与 QEMU 的默认值(512 字节)不同。

    • 0

相关问题

  • 重复的 Ansible 任务

  • 无法形成站点中的文件的链接,该链接可用于使用 ansible 在远程服务器中启用的目录站点?

  • 如何执行 ansible 的特定角色?

  • Ansible 和 rbash

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve