38
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cloud-init のスクリプトを reboot せずに再実行するには

Last updated at Posted at 2015-08-10

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の動きについて調べてみた の記事を参照すると良い。

開発実行のやり方

それぞれ以下のように実行すれば良い

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)
  2. cloud-init init (/etc/init.d/cloud-init start)
  3. cloud-init modules --mode config (/etc/init.d/cloud-config start)
  4. cloud-init modules --mode final (/etc/init.d/cloud-final start)

の順番で実行されるのが前提となっているため、final を実行するには、前3つを実行する。

例えば、runcmd: で指定したコマンドは config ステージで scripts/runcmd が生成され、final ステージで実行されるようだ。なので final だけ実行してもファイルがなくて何も処理されない。

おわりに

もっとうまい方法があれば情報 welcome

38
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?