IBM SmarterCloud init を使用してクラウド・インスタンスをブートする

ブート・スクリプトを使用してスタートアップ時に構成データを利用する

IBM SmarterCloud init は、オープンソースの cloud-init パッケージに着想を得たブート・スクリプトであり、仮想マシンのブート時に構成データを利用するために実行されるスタンドアロンのコンポーネントです。IBM SmarterCloud init を使用してクラウド・インスタンスをブートする方法、また Puppet ポリシーや Maestro バンドルといったパッケージの順序付きリストをサポートする方法について学びましょう。

Giuseppe Ciano, Chief Designer of Tivoli Cloud Solutions, IBM

Giuseppe Ciano は 1997年にソフトウェア・エンジニアとして IBM の Rome SWG Tivoli Lab に入社しました。彼は Tivoli シリーズのさまざまな製品の開発者および設計者として 11 年間働いてきました。彼は現在、IBM Service Delivery Manager 製品などの Tivoli Cloud Solutions のチーフ・デザイナーです。彼は StereoCable の設計者でもあります。



Andrew Trossman, IBM Distinguished Engineer, IBM

Andrew Trossman は 2000年、初期のユーティリティー・コンピューティング・ソフトウェア開発企業 ThinkDynamics を共同で設立しました。この企業は 2003年、IBM がクラウドを開発する過程で IBM に買収されました。その買収以降も、彼は Tivoli 内部でクラウド技術の限界を押し上げてきました。そうした中で彼が技術的影響を与えた領域には、Tivoli、Rational、WebSphere、IBM Systems Group、Global Services があります。彼はデプロイメントの自動化、データ・センターの仮想化、クラウド・コンピューティングの専門家です。



John Ryding, Software Engineer, IBM

John Ryding の専門は、DevOps と継続的なデリバリー、Web アプリケーション・アーキテクチャー、Web UI 開発、クラウド、コミュニケーション、コラボレーションなどの技術です。



James A. Lindeman, Software Engineering Researcher, IBM Research

James A. Lindeman は IBM Research のソフトウェア・エンジニア・リサーチャーです。彼は仮想化や Smarter Planet イニシアチブなどのトピックに従事しています。彼は一時、pSeries パーティション・ファームウェアの技術リーダーでした。



2012年 12月 20日

IBM SmarterCloud init (IBM SmarterCloud イネーブルメント・バンドル) はオープンソースの cloud-init パッケージに着想を得た、最初に実行されるブート・スクリプトです。IBM SmarterCloud init は ICON (Image Construction and Composition Tools) と IBM SmarterCloud Provisioning 1.2 とを ICON バンドルの形で統合するために作成されたものですが、その後拡張され、IBM SmarterCloud Provisioning 2.1 の重要なコンポーネントとなりました。

IBM SmarterCloud init は、MIME (Multipurpose Internet Mail Extensions) マルチパート形式の構成データを利用するために仮想マシン (VM) のブート時に実行される単純なスタンドアロンのコンポーネントです。IBM SmarterCloud init はこの構成データを入力として取り込み、各パートに関連付けられたコンテンツ・タイプを調べます。コンテンツ・タイプが既知の場合には、IBM SmarterCloud init はそのコンテンツ・タイプに関連するコンシューマーを呼び出します。

IBM SmarterCloud init スクリプトを活用する例

IBM SmarterCloud init スクリプトを使用する最初の例、そして関連する MIME タイプは、ICON によって生成される OVF (Open Virtualization Format) イメージをサポートするものでした。現在の実装では 1 つのコンテンツ・タイプ (application/ovf-param) のみを処理することができ、1 つのコンシューマーのみが OVF メタデータを処理することができ、関連するパートは AE (Activation Engine) 用の OVF-env.xml として保存されます。

IBM SmarterCloud init を使用すると、クラウド・インスタンスのブートストラップ動作としてアクションのリストを実行することができます。例えば、ブート時に一連の RPM (Red Hat Package Manager) をインストールしたり、ブート時に複数のコマンドを実行したり、あるいはブート時に複数のスクリプトをダウンロードして実行したりすることができます (これは 1 つの仮想システムから別の仮想システムに変換する場合に便利です)。あるいは、この IBM SmarterCloud init スクリプトを拡張し、以下のようにパッケージの順序付きリストをサポートすることもできます。

前提条件

軽量で単純になるように、IBM SmarterCloud init のコア部分には何も前提条件はありません。コア部分は Linux ではシェル・スクリプトであり、Windows の場合は Microsoft Visual Basic Scripting Edition (.vbs) スクリプトです。ただしパート・ハンドラーによっては、スクリプトに前提条件が追加で必要になる場合があります (例えば Python など)。その場合の指針としては、パート・ハンドラーを処理する前に #cloud_config パートを利用して前提条件をインストールするようにします。

  • IBM Tivoli Endpoint Manager (TEM、つまり BigFix) の Fixlet (VM がブートされるときに BigFix エージェントと Fixlet がデプロイされます)
  • Chef レシピ
  • Puppet ポリシー
  • ICON/ICCT (Image Construction and Composition Tool) バンドル (IBM DB2 や WebSphere Application Server など、任意の IBM ミドルウェアをインストールします)
  • Maestro バンドル
  • IWD (IBM Workload Deployer) スクリプト・パッケージ
  • RPM や Debian のネイティブ・パッケージ

リポジトリーの検索順序を提示する Uniform Resource Identifier を指定して、実行用のパッケージをダウンロードすることができます。IBM SmarterCloud init スクリプトを使用する他の例としては、最初に実行されるブート・スクリプト IBM SmarterCloud init が含まれた任意のイメージを Maestro で扱えるようにすることで、Maestro エージェントをダウンロードしてインストールし、IBM SmarterCloud Provisioning インストーラーを拡張して、インストール済みの IBM SmarterCloud init パッケージが含まれた Red Hat Enterprise Linux ベース・イメージを作成することができます。このようにすることで、そのイメージから作成される新しいインスタンスはすべて、起動時に自動的に複数のタスクを実行するようになります。


IBM SmarterCloud init に含まれるもの

scp-cloud-init は、Linux と Windows で利用できる単純なコンポーネントです。Linux の scp-cloud-init には scp-cloud-init ファイルが含まれています。ラン・レベル 3 と 5 を使用するイメージにこのファイルをインストールする最も容易な方法は、以下のコマンドを実行することです。

cp -f scp-cloud-init.sh /etc/init.d/scp-cloud-init 2>/dev/null
chkconfig scp-cloud-init on

ディスクをマウントしようとしていて chkconfig を使用できない場合には、リスト 1 のコマンドを使用して手作業で rc#.d リンクを生成することができます。

リスト 1. 手作業で rc#.d リンクを生成するためのコマンド
if [ -d /etc/rc3.d ]; then
   ln -fs ../init.d/scp-cloud-init /etc/rc3.d/S11scp-cloud-init
   chmod 755 /etc/rc3.d/S11scp-cloud-init 2>/dev/null
fi
if [ -d /etc/init.d/rc3.d ]; then
   ln -fs ../scp-cloud-init /etc/init.d/rc3.d/S11scp-cloud-init
   chmod 755 /etc/init.d/rc3.d/S11scp-cloud-init 2>/dev/null
fi
if [ -d /etc/rc5.d ]; then
   ln -fs ../init.d/scp-cloud-init /etc/rc5.d/S11scp-cloud-init
   chmod 755 /etc/rc5.d/S11scp-cloud-init 2>/dev/null
fi
if [ -d /etc/init.d/rc5.d ]; then
   ln -fs ../scp-cloud-init /etc/init.d/rc5.d/S11scp-cloud-init
   chmod 755 /etc/init.d/rc5.d/S11scp-cloud-init 2>/dev/null
fi 
# The S## above should be after the "network" but before any activation.* (AE) scripts.

Windows の scp-cloud-init には scp-cloud-init.cmd ファイルと scp-cloud-init.vbs ファイルが含まれています。これらのファイルをイメージにインストールしてスタートアップ時に実行するには、以下のようにします。

  1. scp-cloud-init.* ファイルを C:\windows\setup\ibm などのディレクトリーにコピーします。
  2. gpedit.msc を実行することで、スタートアップ時に実行するスクリプトを Group Policy Editor を使用して追加します。
  3. 「Computer Configuration (コンピューターの構成)」 > 「Windows Settings (Windows の設定)」 > 「Scripts (スクリプト)」の順にクリックし、「Startup (スタートアップ)」をダブルクリックします。
  4. Add (追加)」をクリックし、プログラムとして「c:\Windows\Setup\IBM\scp-cloud-init.cmd」(指定する引数はありません) と入力します。
  5. OK」をクリックした後、再度「OK」をクリックすることで、「Startup Scripts (スタートアップ スクリプト)」のウィンドウを終了し、gpedit アプリケーションを終了します。

レジストリー・キーを HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run に追加する従来の方法 (下記) は、管理者がログインした場合にのみスクリプトを実行し、システムのスタートアップ時に自動的にスクリプトを実行するわけではないようです。

"reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
   /f /v a-cloud-init 
   /d c:\windows\setup\ibm\scp-cloud-init.cmd"

scp-cloud-init は Linux では RPM パッケージであり、Windows では .msi ファイルです。


ユーザー・データの入力フォーマット

IBM SmarterCloud init の動作は、ユーザーがインスタンスを起動する際に提供可能なユーザー・データによって構成されます。構成には、--user-data または --user-data-file を指定して iaas-run-instances を実行するか、あるいは IBM SmarterCloud Provisioning の Web コンソールの「Launch Instance (インスタンスを起動)」パネルでユーザー・データを渡します。ユーザー・データを取得する方法は 2 通りあり、URL http://169.254.169.254/latest/user-data を呼び出すか、ディスク (Windows の場合) または CD-ROM (Linux の場合) から直接取得するかのいずれかです。IBM SmarterCloud init が処理するユーザー・データは、以下のいずれかのタイプでなければなりません。

  • MIME マルチパート・アーカイブ: このアーカイブに含まれるルールのリストがマルチパート・ファイルの各パートに適用されます。MIME マルチパート・ファイルを使用すると、ユーザーはいくつものタイプのデータを指定することができます。例えば、ユーザーはユーザー・データ・スクリプトとクラウド構成の両方のタイプを指定することができます。
  • ユーザー・データ・スクリプト: このスクリプトは #! または Content-Type: text/x-shellscript で始まり、最初のブート時に rc.local-like レベルで実行されます (rc.local-like は「ブート・シーケンスの非常に遅い段階」を意味します)。
  • OVF パラメーター: このタイプは #ovf-parameters または Content-Type: text/ovf-parameters で始まります。このユーザー・データは ovf-env.xml ファイルであり、/opt/ibm/ae/AP の下にある VSAE (Virtual Solutions Activation Engine) に ovf-env.xml ファイルを渡して起動スクリプトを処理するために使用されます。
  • クラウド構成データ: このタイプは #cloud-config または Content-Type: text/cloud-config で始まります。このユーザー・データは「クラウド構成」データであり、RPM のインストールに使用されたり、コマンドやスクリプトの呼び出しに使用されたりします。
  • IWD スクリプト・パッケージ: このタイプは #cloud-iwd または Content-Type: text/cloud-iwd で始まります。このユーザー・データを使用して IWD スクリプト・パッケージをダウンロードし、インストールします。
  • ICCT バンドル: このタイプは #icct-bundles または Content-Type: text/icct-bundles で始まります。このユーザー・データを使用して ICCT バンドルをダウンロードし、インストールします。
  • Chef レシピ: このタイプは #chef-recipes または Content-Type: text/chef-recipes で始まります。このユーザー・データを使用して Chef レシピをサポートします。
  • パート・ハンドラー: このタイプは #part-handler または Content-Type: text/part-handler で始まります。パート・ハンドラーはユーザー・データを利用して動的な動作を追加するための単純な手段です。
  • init ボリューム: このタイプは #init-volumes または Content-Type: text/init-volumes で始まります。このユーザー・データを使用することで、アタッチされたボリュームのマウント方法、さらにはオプションでこれらのボリュームの最初のフォーマット方法を指定することができます。

OVF パラメーターを使用する構文

OVF パラメーターを使用する構文は、Linux 用の IBM SmarterCloud Provisioning 1.2 と Windows 用の IBM SmarterCloud Provisioning 2.1 で実装されており、この構文には ovf-env.xml ファイルが含まれます。このファイルは /opt/ibm/ae/AP (Linux の場合) または C:\windows\setup\ibm\AP (Windows の場合) の下にある VSAE に渡されます。リスト 2 は OVF 環境ファイルを示しています。

リスト 2. OVF 環境ファイル
<?xml version="1.0" encoding="utf-8" ?>
   <ovfenv:Environment xmlns:ovfenv="http://schemas.dmtf.org/ovf/environment/1"
      ovfenv:id="LINUX">
   <ovfenv:PropertySection>
   <ovfenv:Property ovfenv:key="ConfigTEMAgent.TEMServerHostname" 
      ovfenv:value="tem- server1.romleba.it.ibm.com"/>
   <ovfenv:Property ovfenv:key="ConfigTEMAgent.TEMServerPort" 
      ovfenv:value="9090"/>
   </ovfenv:PropertySection></ovfenv:Environment>

Linux の場合、IBM SmarterCloud にはオプションとして /opt/ibm/scp/default-ovf-env.xml ファイルを含めることができます。このファイルにはデフォルトの設定が含まれており、ユーザー・データで提供される ovf-env.xml ファイルによって AE-class (スクリプト) に基づいて上書きされます。ユーザー・データに OVF パラメーター部分が含まれていない場合には、このデフォルト・ファイルが AE の ovf-env.xml ファイルとして使用されます。default-ovf-env.xml ファイルを使用すると、クラウド・イメージのプロバイダーは AE スクリプトを使用することができます。AE スクリプトの例としては、例えば /opt/ibm/scp/default-ovf-env.xml ファイルに以下のコードが含まれている場合に、VM を最初にブートする際に IBM Tivoli Monitoring (ITM) エージェントを再インストールし、デプロイメントのたびに上位の OVF 管理層から適切なパラメーターが渡されるよう要求されることがないようにするためのスクリプトなどがあります。

<?xml version="1.0" encoding="ASCII"?>
<ovfenv:Environment xmlns:ovfenv="http://schemas.dmtf.org/ovf/environment/1" 
   ovfenv:id="RHEL">
<ovfenv:PropertySection>
<ovfenv:Property ovfenv:key="ConfigPWD_ROOT.password" 
   ovfenv:value="passw0rd"/>
<ovfenv:Property 
   ovfenv:key="ITMInstall.nfspath" 
   ovfenv:value="idpx1mgr.cloud9.ibm.com:/software/monitoring/ITM"/>
<ovfenv:Property ovfenv:key="ITMInstall.scriptname" 
   ovfenv:value="scripts/V3_install.guest.lz.sh"/>
</ovfenv:PropertySection>
</ovfenv:Environment>

ユーザー・データの ovf-env.xml ファイルで ovfenv:key="ConfigPWD_ROOT.anything" のように指定されている場合、default-ovf-env.xml ファイルのその行はユーザー・データの ovf-env.xml ファイルにはマージされません。ただしユーザー・データが ITMInstall を参照していない場合には、その 2 行がユーザー・データの ovf-env.xml ファイルにマージされます。Windows では、可能な場合にはこの default-ovf-env.xml 機能がサポートされるように作られています。

ユーザー・データ・スクリプト (Linux と Windows に実装済み)

ユーザー・データ・スクリプトを使用すると、最初のブートの際に rc.local-like レベルで実行されるスクリプトを容易に追加することができます。現状では、Linux の scp-cloud-init の場合、これらのコマンドは /etc/rc.local スクリプトの最後に実行され、実行後にスクリプトから削除されます。

クラウド構成の構文 (Linux には実装済み、Windows では実装を開発中)

クラウド構成の構文を使用する方法は、ユーザー・データを使用して特定のアクションを実行するための簡単な方法です。クラウド構成の構文を使用すると、ユーザーは人間に理解できるフォーマットで特定の動作を規定することができ、例えばユーザーは最初のブートの際にいくつものコマンドを実行することができます。これらのコマンドを実行した結果は以下のようにコンソール出力に表示されます。

runcmd:
- [ wget, "http://slashdot.org", -O, /tmp/index.html ]
- [ sh, -xc, "echo $(date) ': hello world!'" ]

同様に、ユーザーは以下のようにしてブート時にいくつものパッケージをインストールすることができます。

packages:
- pkg1
- pkg2

IWD スクリプト・パッケージの構文 (Linux と Windows に実装済み)

IWD スクリプトを使用すると、HTTP サーバー上にある IWD のアドオンとスクリプト・パッケージをダウンロードすることができます。

IWD 3.1.0.x の場合、これらのアドオンとスクリプト・パッケージは /drouter/ramdisk2/mnt/raid-volume/raid0/rainmaker-scripts ディレクトリーにありますが、scp-cloud-init の場合はアドオンとスクリプト・パッケージが HTTP サーバー上になければなりません。

アドオンとスクリプト・パッケージの一覧は 1 つのリストとして提供され、リスト内では IWD のユーザー・インターフェース (UI) に定義されている順序で並べられています。アドオンとスクリプト・パッケージをインストールするにはリスト 3 のコードを使用します。

リスト 3. アドオンとスクリプト・パッケージをインストールする
Content-type: text/cloud-iwd
Cookie:	SimpleToken=mytoken
IPs: 9.123.141.38,10.10.0.11,172.16.0.11,9.168.105.232
scripts:
- https://SmartCloudProvisioning/resources/addons/5/defaultadduserwin.zip 
   [USERNAME="pino",PASSWORD="mypass"]
- https://9.168.58.195/resources/addons/5/defaultadduserwin.zip
   [USERNAME="pino",PASSWORD="mypass"]
- https://9.152.137.41/resources/scripts/7/scriptArchive.zip 
   [HelloWorld1="hello-peter"]

パッケージは、cbscript.json ファイルと呼び出す対象のスクリプトが含まれた .zip ファイルです。リスト 4 は cbscript.json の例です。

リスト 4. cbscript.json の例
[
 {
   "description": "RM05015",
   "command": "sh /tmp/defaultadduser/adduser",
   "log": "/tmp/defaultadduser",
   "location": "/tmp/defaultadduser",
   "timeout": 120000,
   "type": "ADDON_USER",
   "keys":
     [
       {
         "scriptkey": "USERNAME",
         "scriptvalue": "",
         "scriptdefaultvalue": ""
       },
       {
         "scriptkey": "PASSWORD",
         "scriptvalue": "",
         "scriptdefaultvalue": "",
         "type": "password"
       }
     ]
 }
]

リスト 5 にスクリプトの例を示します。

リスト 5. スクリプトの例
 #!/bin/sh
 # Default add-on script to create a user.  This script must be run as root!
 ...
 ...
 # User add-on scripts may define parameters for any required information.
 # Parameter values are passed as environment variables when the script
 # is run.  This default user add-on script accepts the following parameters: 
 #
 # USERNAME - User name of the user to be added. 
 #
 # PASSWORD - Password to be set for the new user.  If not supplied, no
 #   password is set for the user.
 echo "*** creating user ${USERNAME}"
 useradd -m ${USERNAME}
 if [ -n "$PASSWORD" ]
 then
   echo "*** setting password for user ${USERNAME}"
   case $(uname) in
       AIX)
           echo "${USERNAME}:${PASSWORD}" | /usr/bin/chpasswd -c
           ;;
       *)
           echo ${PASSWORD} | /usr/bin/passwd --stdin ${USERNAME}
           ;;
   esac
 fi

ICCT バンドルの構文 (まだ実装されていません)

ICCT バンドルの構文を使用すると、ICCT バンドル・パッケージをダウンロードしてインストールすることができます。

ICCT バンドルをインストールするコードを以下に示します。

icct_bundles:
- https://9.168.58.195/resources/bundles/5/com.ibm.icon.enablement.iscp_1.0.0.1.ras 
   <JSON data>
- https://9.168.58.195/resources/bundles/8/TEM_Agent_1.0.0.1.ras <JSON data>

パート・ハンドラーの構文 (まだ実装されていません)

part-handler は、そのハンドラーのファイル名に応じて /var/lib/cloud/data のファイルに書き込まれます。part-handlerlist_types メソッドと handle_type メソッドを含む Python コードでなければなりません。このパートが読み込まれると、list_types メソッドが呼び出されます。この list_types メソッドは、part-handler によって処理される MIME タイプのリストを返す必要があります。すると IBM SmarterCloud Provisioning の cloud-inithandle_type メソッドを最初に一度、各パートを受信するたびに一度、そして最後に一度、呼び出します。beginend を呼び出すことにより、パート・ハンドラーは初期化または終了処理を実行することができます。

リスト 6 は part-handler の例を示しています。

リスト 6. part-handler の例
#part-handler
def list_types():
   # return a list of mime-types that are handled by this module
   return(["text/plain", "text/go-cubs-go"])
def handle_part(data,ctype,filename,payload,frequency):
   # data: the cloudinit object
   # ctype: '__begin__', '__end__', or the specific mime-type of the part
   # filename: the filename for the part, or dynamically generated part if
   #           no filename is given attribute is present
   # payload: the content of the part (empty for begin or end)
   # frequency: the frequency that this cloud-init run is running for
   #            this is either 'per-instance' or 'always'.  'per-instance'
   #            will be invoked only on the first boot.  'always' will
   #            will be called on subsequent boots.
   if ctype == "__begin__":
      print "my handler is beginning, frequency=%s" % frequency
      return
   if ctype == "__end__":
      print "my handler is ending, frequency=%s" % frequency
      return
   print "==== received ctype=%s filename=%s ====" % (ctype,filename)
   print payload
   print "==== end ctype=%s filename=%s" % (ctype, filename)

init ボリュームの構文 (Linux に実装済み)

この構文は、アタッチされたボリュームを scp-cloud-init によってマウントする方法を指示します。マウント方法は IBM SmarterCloud Provisioning の iaas-describe-volumes API (Application Programming Interface) のラベル・フィールドで指定します。このラベルの値はランダムな 4 バイトの値であり、ボリュームが作成されるとマスター・ブート・レコードのディスク署名フィールドに書き込まれます。このラベルの値により、このスクリプトはアタッチされた複数のボリュームを区別することができます。以下に mount コマンドの例を 2 つ挙げます。

#init-volumes
label=5000ff02 format=ext3 mount_dir=/test_output format_label=test-output
label=2303ff04 mount_dir=/test_input

各ボリュームは新しい行であり、パラメーターごとに <parameter-name>=<value> のペアが 1 つ以上のスペースで区切られています。labelmount_dir の 2 つのパラメーターは必須です。オプションのパラメーターには、ボリューム・ディスク内のパーティション番号用の part_num (デフォルトではパーティションはありません)、マウント前にボリュームをフォーマットするためのファイルシステム・タイプを指定する format、フォーマット中に適用されるファイルシステム・ラベルを指定する format_label があります。

ユーザー・データの例

覚えておくべき重要なことは、ヘッダーの先頭に # が付いている場合、そのユーザー・データのすべてが単一のタイプのセクションのみで構成されており、end-boundary マーカーはないことを示しているということです。リスト 7 は OVF パラメーター・セクションのみで構成されるユーザー・データの例です。

リスト 7. OVF パラメーター・セクションのみで構成されるユーザー・データの例
#ovf-parameters
<?xml version="1.0" encoding="ASCII"?>
<ovfenv:Environment xmlns:ovfenv="http://schemas.dmtf.org/ovf/environment/1" 
   ovfenv:id="RHEL">
  <ovfenv:PropertySection>
    <ovfenv:Property ovfenv:key="ConfigPWD_ROOT.password" ovfenv:value="PASSWORD"/>
  </ovfenv:PropertySection>
</ovfenv:Environment>

同様に、単一のユーザー・データ・スクリプトは以下のようになります。

#!/bin/bash
echo "I am a user-data script that runs at the end of /etc/rc.local"

複数のパートを使用するには、Content-Type:: ヘッダーと適切な終了境界を使用します。デフォルトの境界は --::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary:::::::::: ですが、この境界を最初のパートのヘッダーで boundary="<boundary-goes-here>" を使用して定義し直すこともできます。MIME RFC (Request for Comments) に従い、指定された境界には -- 接頭辞が追加されることに注意してください。また、MIME RFC では許されていますが、このスクリプトでは最初のパートのヘッダー以外では境界を変更することはできないことにも注意してください。

リスト 8 にマルチパートのユーザー・データの例を示します。

リスト 8. マルチパートのユーザー・データの例
Content-type: multipart/mixed; 
   boundary="::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::"
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: text/plain
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: application/ovf_parameters
<?xml version="1.0" encoding="utf-8" ?>
<ovfenv:Environment xmlns:ovfenv="http://schemas.dmtf.org/ovf/environment/1"  
   ovfenv:id="LINUX">
<ovfenv:PropertySection>
<ovfenv:Property ovfenv:key="ConfigITMAgent.server" 
   ovfenv:value="srv1.romelab.it.ibm.com"/>
<ovfenv:Property ovfenv:key="ConfigITMAgent.port" ovfenv:value="11111"/>
<ovfenv:Property ovfenv:key="ConfigDB2.db2admin_password" 
   ovfenv:value="password"/>
<ovfenv:Property ovfenv:key="ConfigDB2.port" ovfenv:value="22222"/>
<ovfenv:Property ovfenv:key="ITMConfig.server name" 
   ovfenv:value="srv2.romelab.it.ibm.com"/>
<ovfenv:Property ovfenv:key="ITMConfig.port" ovfenv:value="333333"/>
</ovfenv:PropertySection></ovfenv:Environment>
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: application/user_data
my user data ....
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: text/x-shellscript
dir c:\temp
copy c:\temp\web_console.log c:\temp\web_console.bak 
echo pino > c:\temp\test
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: text/cloud-config

--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::
Content-type: text/cloud-iwd
Cookie:	SimpleToken=mytoken
IPs: 9.123.141.38,10.10.0.11,172.16.0.11,9.168.105.232
scripts:
- https://SmartCloudProvisioning/resources/addons/5/defaultadduserwin.zip 
   [USERNAME="pino",PASSWORD="mypass"]
- https://9.168.58.195/resources/addons/5/defaultadduserwin.zip 
   [USERNAME="pino",PASSWORD="mypass"]
- https://9.152.137.41/resources/scripts/7/scriptArchive.zip [HelloWorld1="hello-peter"]
--::::::::::IBM-Tivoli-SmartCloud-Provisioning-Boundary::::::::::

MIME-Version: 1.0
Content-type: multipart/mixed; boundary="XXXXboundary text"
echo "This is a multipart message in MIME format"
--XXXXboundary text
Content-type: text/cloud-config;
runcmd:
- [ echo, "I am in cloud-config" ]
- [ curl, -o, /tmp/index.html, "http://slashdot.org" ]
- [ echo, "I am a following print command" ]
--XXXXboundary text
Content-type: wtf/fake;
Verifying handling of unrecognized MIME part
--XXXXboundary text
Content-type: application/ovf_parameters;
<?xml version="1.0" encoding="ASCII"?>
<ovfenv:Environment xmlns:ovfenv="http://schemas.dmtf.org/ovf/environment/1" 
   ovfenv:id="RHEL">
<ovfenv:PropertySection>
<ovfenv:Property ovfenv:key="ConfigPWD_ROOT.password" 
   ovfenv:value="PASSWORD"/>
</ovfenv:PropertySection>
</ovfenv:Environment>
--XXXXboundary text--

保守性

IBM SmarterCloud init は以下のディレクトリーにログ・ファイルを作成します。

  • Windows: %TEMP%/scp-cloud-init-<date><time>.log

    注意する点として、グループ・ポリシーを使用してこのスクリプトがスタートアップ時に実行されると、%TEMP% が解決されて C:\Windows\Temp になります。管理者アカウントで実行されると、%TEMP% は C:\Users\Administrator\Local Settings\Temp になります。このスクリプトからのメッセージも Windows のイベント・ロガーに記録されるので、「コントロール パネル」配下の「イベント ビューアー」に (ソースは「SCP cloud init」として) 表示することができます。

  • Linux: /opt/ibm/scp/scp-cloud-init.log

スクリプトが新しい VM で実行されていることをスクリプト自らが検出すると、VM イメージの元となった親 VM からの、機密情報の可能性があるデータが保持されることがないように、これらのログ・ファイルはパージされます。


設計の詳細

IBM SmarterCloud init 拡張機能を設計する上での主なポイントは、この拡張機能をプラガブルにすることです。そのためには、この記事でリストアップした項目ごとに、個々のコンテンツ・タイプを使用する特定のコンシューマーを提供するようにします。1 つの方法として、個々のフォルダーにコンシューマーをデプロイし、IBM SmarterCloud init にそのフォルダーをスキャンさせて利用可能なコンシューマーを調べさせることで、どのコンシューマーがどのコンテンツ・タイプを扱えるのかを認識させる方法があります。こうすることで、ゲスト・オペレーティング・システム上にコードを配置し、そのコードによって (現在 BigFix が Fixlet を使用して行っている方法と同じように) さまざまなものをダウンロードしてインストールすることができます。


まとめ

まだ答えていない質問がいくつか残っています。第 1 に、IBM は IBM SmarterCloud init を AE に代わるものとするのでしょうか?また、AE では可能であって IBM SmarterCloud init では不可能なことが何かあるのでしょうか? IBM SmarterCloud init は OVF や VSAE を置き換えるわけではなく、皆さんが自由に活用できる、柔軟で拡張可能な動的メカニズムを提供するものです。SmarterCloud Provisioning 1.2 が、OVF をサポートするための最初の管理方式を作成し、OVF パート・ハンドラーを介して UI、イメージのメタデータ、そしてもちろんゲストに接続したことを考えてみてください。IBM SmarterCloud init が提供するメカニズムには、TEM (IBM Tivoli Endpoint Manager)、ITM (IBM Tivoli Monitorin)、そしてその他多くの Tivoli 製品を追加できるのみならず、オープンソースの cloud-init からも一般的な機能を追加することができます。

第 2 に、ユーザーがこのツールを使用するのは、最初にイメージを作成する時のみ、それともデプロイする時のみ、もしくはその両方、のいずれにするべきなのでしょうか? IBM SmarterCloud init コンポーネントにより、イメージ取り込み用の API を呼び出す前に各バンドル (または Fixlet、Chef レシピなど) をインストールすることができます。IBM SmarterCloud init はイメージを取り込むために VSAE をクリーンアップする必要はありません。なぜなら、新しいインスタンスの場合、scp-cloud-init スクリプトは (MAC (Media Access Control: メディア・アクセス制御) アドレスの変更を検出することによって) 新しいインスタンスであることを検出し、そのインスタンスに ovf-env.xml ファイルを転送する前に自動的にクリーンアップを行うからです。

参考文献

学ぶために

  • developerWorks でクラウド開発者のためのリソースを調べてください。クラウドにデプロイするためにプロジェクトを構築しているアプリケーション開発者やサービス開発者の知識や経験を発見し、共有することができます。
  • Twitter で developerWorks をフォローしてください。
  • developerWorks On demand demos をご覧ください。初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。

製品や技術を入手するために

  • 皆さんに最適な方法で IBM 製品を評価してください。製品の試用版をダウンロードする方法、オンラインで製品を試す方法、クラウド環境で製品を使う方法、あるいは SOA Sandbox で数時間を費やし、サービス指向アーキテクチャーの効率的な実装方法を学ぶ方法などがあります。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=851777
ArticleTitle=IBM SmarterCloud init を使用してクラウド・インスタンスをブートする
publish-date=12202012