cloud-init:延迟disk_setup和fs_setup

Chr*_*uez 6 amazon-ec2 cloud-init terraform

我有一个 cloud-init 文件,它设置了 AWS 实例的所有要求,其中一部分要求是格式化和挂载 EBS 卷。问题是,在某些实例上,卷附加是在实例启动后发生的,因此当 cloud-init 执行时,卷/dev/xvdf尚不存在并且会失败。

我有类似的东西:

#cloud-config

resize_rootfs: false
disk_setup:
    /dev/xvdf:
        table_type: 'gpt'
        layout: true
        overwrite: false

fs_setup:
    - label: DATA
      filesystem: 'ext4'
      device: '/dev/xvdf'
      partition: 'auto'

mounts:
    - [xvdf, /data, auto, "defaults,discard", "0", "0"]
Run Code Online (Sandbox Code Playgroud)

并且希望sleep 60在磁盘配置块之前有类似的东西。

如果整个 cloud-init 的执行可以被延迟,那对我也有用。

另外,我正在使用 terraform 来创建基础设施。

谢谢!

Chr*_*uez 5

我通过两个更改解决了该问题:

  1. 更改了安装选项,添加了nofail选项。
  2. 在块中添加了一行runcmd,删除了 disk_setup 的信号量文件。

所以我的新 cloud-init 文件现在看起来像这样:

#cloud-config

resize_rootfs: false
disk_setup:
    /dev/xvdf:
        table_type: 'gpt'
        layout: true
        overwrite: false

fs_setup:
    - label: DATA
      filesystem: 'ext4'
      device: '/dev/xvdf'
      partition: 'auto'

mounts:
    - [xvdf, /data, auto, "defaults,discard", "0", "0"]
    
runcmd:
    - [rm, -f, /var/lib/cloud/instances/*/sem/config_disk_setup]

power_state:
    mode: reboot
    timeout: 30
Run Code Online (Sandbox Code Playgroud)

disk_setup它将重新启动,然后再次执行该模块。此时,该卷将被附加,因此操作不会失败。

我想这是解决这个问题的一种黑客方法,所以如果有人有更好的答案(比如如何延迟整个 cloud-init 执行)请分享。