在不重新启动的情况下重新运行cloud-init脚本


要通过多次运行而无需重新启动主机来开发云初始化脚本,看来您可以执行以下

必备知识

/etc/cloud/cloud.cfg中的

1
2
3
4
5
6
7
8
9
10
11
cloud_init_modules:

...

# The modules that run in the 'config' stage
cloud_config_modules:

...

# The modules that run in the 'final' stage
cloud_final_modules:

分为三个部分。有关执行时间,请参阅我检查了Amazon Linux上cloud-init行为的文章。

如何执行开发

您可以如下执行每个操作

1. cloud_init_modules部分

的执行

1
2
3
rm -rf /var/lib/cloud/* && \
  cloud-init --debug init --local && \
  cloud-init --debug init

2.执行cloud_config_modules部分

1
2
3
4
rm -rf /var/lib/cloud/* && \
  cloud-init init --local && \
  cloud-init init && \
  cloud-init --debug modules --mode config

3.执行cloud_final_modules部分

1
2
3
4
5
rm -rf /var/lib/cloud/* && \
  cloud-init init --local && \
  cloud-init init && \
  cloud-init modules --mode config && \
  cloud-init --debug modules --mode final

补品376??9111

/var/lib/cloud下,它看起来像这样,并且由于它已记录在status.json和sem下的文件中,因此已经执行了init,因此除非将其删除,否则无法重新执行。 (仅删除status.json还不够)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# tree /var/lib/cloud/
/var/lib/cloud/
├── data
│   ├── instance-id
│   ├── previous-datasource
│   ├── previous-instance-id
│   └── status.json
├── handlers
├── instance -> /var/lib/cloud/instances/i-5d1d98af
├── instances
│   └── i-5d1d98af
│       ├── cloud-config.txt
│       ├── datasource
│       ├── handlers
│       ├── obj.pkl
│       ├── scripts
│       │   └── runcmd
│       ├── sem
│       │   └── consume_data
│       ├── user-data.txt
│       ├── user-data.txt.i
│       ├── vendor-data.txt
│       └── vendor-data.txt.i
├── scripts
│   ├── per-boot
│   ├── per-instance
│   ├── per-once
│   └── vendor
├── seed
└── sem

删除后,

  • cloud-init init --local(/etc/init.d/cloud-init-local start)

  • cloud-init init(/etc/init.d/cloud-init start)

  • cloud-init modules --mode config(/etc/init.d/cloud-config start)

  • cloud-init modules --mode final(/etc/init.d/cloud-final start)

  • 由于假定它们以

    的顺序执行,要执行final,请执行前三个命令。

    例如,由runcmd:指定的命令似乎在config阶段生成scripts/runcmd并在最后阶段执行它。因此,即使仅执行final,也不会有文件,也不会进行任何处理。

    综上所述

    信息欢迎

    如果有更好的方法