通过使用事实,如何识别尚未安装的所有磁盘,然后再进行安装?

时间:2019-07-30 09:19:13

标签: ansible ansible-facts

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

我一直在看这个旧答案:Ansible - using with_items and when conditional to 我认为这可能是有用的,也可能是适应性的。但是我烦躁的伍德努还不够强。我需要高手。

无功能代码

最终结果应该是。 放入一些新磁盘或与文件系统一起使用的磁盘。运行剧本,看看它们是否已安装在/ mnt / serialnumber

1 个答案:

答案 0 :(得分:0)

Ansible被设计为是幂等的,因此,如果已经使用期望的文件系统对它进行了分区和/或格式化,则执行格式化或装入分区之类的操作不会产生任何影响。

您的问题听起来像是您希望Ansible表现得更像一种通用语言;如果有帮助,可以将Ansible视为一种工具/语言,它使使事物看起来具有某种方式。并且系统的哪些部分已经正确(例如,分区1存在,或格式化为“ ext4”),然后Ansible说:“很好,没错,让我们继续下一步。”

想象一下Ansible是一名(非常)初级系统管理员,您必须以清单格式来解释这些事情。这样,您的情况就会变成这样-您的问题是“无功能代码”,因此我将保持较高级别:

  1. 列出所有可能的磁盘,并将其称为“ my_disk_list”。
  my_disk_list:
  - "sdb"
  - "sdc"
  - "sdd"
  1. 确保每个磁盘都有一个分区
    • 提示:with_items: my_disk_list
  2. 确保每个分区#1的格式均为ext4
    • 提示:另一个with_items和带有filesystem的{​​{1}}模块。
  3. 确保已创建每个安装点
    • 提示:另一个force: no
  4. 将它们安装在“ / mount / my_disk_name”
    • 提示:您猜对了,还有一个with_items

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

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