1. sonots

    No comment

    sonots
Changes in body
Source | HTML | Preview
@@ -1,105 +1,105 @@
cloud init のスクリプトをホストを再起動せずに何度も実行して開発するには次のようにすればよいようだ
## 前提知識
/etc/cloud/cloud.cfg には
```
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:
```
の3つのセクションがある。実行タイミングについては [Amazon Linuxのcloud-initの動きについて調べてみた](http://dev.classmethod.jp/cloud/aws/probe-cloud-init) の記事を参照すると良い。
## 開発実行のやり方
それぞれ以下のように実行すれば良い
1. `cloud_init_modules` セクションの実行
```
rm -rf /var/lib/cloud/* && \
cloud-init --debug init --local && \
cloud-init --debug init
```
2. `cloud_config_modules` セクションの実行
```
rm -rf /var/lib/cloud/* && \
cloud-init init --local && \
cloud-init init && \
cloud-init --debug modules --mode config
```
3. `cloud_final_modules` セクションの実行
```
rm -rf /var/lib/cloud/* && \
cloud-init init --local && \
cloud-init init && \
cloud-init modules --mode config && \
cloud-init --debug modules --mode final
```
## 補足
`/var/lib/cloud` の下はこんなかんじで、status.json や sem 以下のファイルに init が実行ずみであることなどが記録されているため、消さないと再実行できなくなっている。(status.json を消すだけではダメだった)
```
# 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
```
消した上で、
1. `cloud-init init --local` (`/etc/init.d/cloud-init-local start`)
1. `cloud-init init` (`/etc/init.d/cloud-init start`)
1. `cloud-init modules --mode config` (`/etc/init.d/cloud-config start`)
1. `cloud-init modules --mode final` (`/etc/init.d/cloud-final start`)
-の順番で実行されるのが前提となっているため、final を実行するには、前3つを実行しなければならない
+の順番で実行されるのが前提となっているため、final を実行するには、前3つを実行する
-なお、runcmd: で指定したコマンドは config ステージで `scripts/runcmd` が生成され、final ステージで実行されるようだ。
+例えば、`runcmd:` で指定したコマンドは config ステージで `scripts/runcmd` が生成され、final ステージで実行されるようだ。
# おわりに
もっとうまい方法があれば情報 welcome