Edited at

cloud-init を None データソースで動作確認する

More than 3 years have passed since last update.

AWS の CentOS 6 に cloud-init をインストールしていろいろ試してみようと思ったのですが、動きを確認するためにいちいちインスタンスを起動していたのではたまらんわーっと思いました。

そこで、None データソースを使ってローカルの環境で簡単に確認できるようにしてみました。


インストール

yum でインストールします。

yum install cloud-init


cloud.cfg

datasource_listNone データソースだけを指定し、datasource でメタデータとユーザーデータを指定します。

ユーザーデータは #include/etc/cloud/user-data を読み込むようにします。

cloud_***_modules には動作を試したいモジュールを記述します。


/etc/cloud/cloud.cfg

datasource_list: [None]

datasource:
None:
metadata:
userdata_raw: |
#include
/etc/cloud/user-data

cloud_init_modules:
- bootcmd
- set-hostname
- update-hostname

cloud_config_modules:
- runcmd

cloud_final_modules:
- scripts-user



user-data

ユーザーデータをそれっぽく作ります。


/etc/cloud/user-data

#cloud-config

hostname: oreore.example.net
fqdn: oreore.example.net

bootcmd:
- ["bash", "-c", "echo `date`: bootcmd | tee -a /tmp/bootcmd"]

runcmd:
- ["bash", "-c", "echo `date`: runcmd | tee -a /tmp/runcmd"]



動作確認用のスクリプト

リブートせずに動作確認するために次のスクリプトを作成します。


cloud-init-test

#!/bin/bash

rm -f /etc/hostname
hostname localhost.localdomain

rm -f /tmp/bootcmd
rm -f /tmp/runcmd

if [ "first" == "$1" ]; then
rm -fr /var/lib/cloud/*
fi

for x in cloud-init-local cloud-init cloud-config cloud-final; do
service $x start
done



初回ブート時

スクリプトに first と引数を付けて実行します。これは初回ブート時の動作です。

# ./cloud-init-test first

ホスト名が設定されていることを確認します。

# hostname

oreore.example.net

# cat /etc/hostname
oreore.example.net

bootcmd が実行されていることを確認します。

# cat /tmp/bootcmd

Sun Nov 16 16:58:36 JST 2014: bootcmd

runcmd が実行されていることを確認します。

# cat /tmp/runcmd

Sun Nov 16 16:58:37 JST 2014: runcmd


2回目以降のブート時

スクリプトに引数を付けずに実行します。これは2回目以降のブート時の動作です。

# ./cloud-init-test

ホスト名が設定されていることを確認します。

# hostname

oreore.example.net

# cat /etc/hostname
oreore.example.net

bootcmd が実行されていることを確認します。

# cat /tmp/bootcmd

Sun Nov 16 16:59:23 JST 2014: bootcmd

runcmd は実行されませんでした。runcmd は初回のブート時にだけ実行されるもののようです。

# cat /tmp/runcmd

cat: /tmp/runcmd: No such file or directory