Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@sonots

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

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

24
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
24
Help us understand the problem. What is going on with this article?