Help us understand the problem. What is going on with this article?

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

More than 5 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
ngyuki
テック系男子。 ただのやってみた系の記事ははてなブログに、それ以外の技術系のネタは Qiita に投稿します。
https://ngyuki.jp/
headjapan
中規模~大規模の安定した基幹システム・大規模サイトの分析・要件定義・設計・開発を得意とする、総合的な開発会社です。
http://www.headjapan.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした