通过使用ansible-facts,如何识别所有尚未挂载的磁盘然后挂载?

1 ansible ansible-facts

我有许多磁盘,其中有 1 个分区,已用 ext4 预格式化。有时新磁盘是空白的。我需要能够将它们粘贴在我们的任何 ubuntu 服务器中,运行一个 ansible playbook:识别(新)磁盘确保它尚未安装确保我们不会触及根磁盘(如果是新的)创建分区和 ext4 文件系统。为新磁盘创建挂载点,例如“/mnt/{newdiskserial}”,将其存储在变量中,以便我可以扩展 playbook 功能挂载新磁盘

我一直在看这个旧答案:Ansible - using with_items 并且当有条件时 我认为它可能可用或适应性强。但我的ansible woodoo不够强大。我需要一只高水平的手。

无功能代码

最终结果应该是。放入一些新磁盘或带有文件系统的旧磁盘。运行 playbook 并查看它们已安装在 /mnt/serialnumber 中

dan*_*der 5

Ansible 被设计为幂等的,因此如果分区已经使用您期望的文件系统进行分区和/或格式化,那么采取格式化或安装分区等操作不会产生任何影响。

你的问题听起来像是你希望 Ansible 表现得更像一种通用语言;如果有帮助的话,请将 Ansible 视为一种工具/语言,无论如何,它都能事情看起来像某种特定的方式。系统的哪些部分已经正确(例如分区 1 存在,或格式化为“ext4”),然后 Ansible 会说“很好,这是正确的,让我们继续下一步。”

将 Ansible 想象为一名(非常)初级的系统管理员,您必须以清单格式向其解释事情。那么你的情况会是这样的 - 你的问题是“没有功能代码”,所以我会保持这个高水平:

  1. 列出所有可能的磁盘并将其命名为“my_disk_list”。
  my_disk_list:
  - "sdb"
  - "sdc"
  - "sdd"
Run Code Online (Sandbox Code Playgroud)
  1. 确保每个磁盘都有一个分区
    • 暗示:with_items: my_disk_list
  2. 确保每个分区 #1 均已格式化ext4
    • 提示:另一个with_itemsfilesystem带有force: no.
  3. 确保每个挂载点都已创建
    • 提示:还有一个with_items
  4. 将它们安装在“/mount/my_disk_name”
    • 提示:你猜对了,还有另一个with_items

如果您register在每个部分中使用该命令,则可以跟踪每个步骤中更改或保留的操作。

如果您需要使用磁盘序列号进行挂载,则必须循环遍历每个磁盘的 Ansible“setup:”模块事实,并使用它来设置挂载点。

  • 谢谢,这实际上是一个非常有用的答案。我会尝试以这种方式构建它。我将在这里报告进度/分享结果代码。 (2认同)