通过 IBM SmartCloud init 启动云实例

启动时通过使用启动脚本来使用配置数据

IBM® SmartCloud init 是从开源 cloud-init 包上获得灵感而开发出来的一个启动脚本,是为了使用配置数据而在虚拟机启动时执行的独立组件。了解如何使用 IBM SmartCloud init 来启动云实例或者支持程序包(比如 Puppet 策略和 Maestro bundle)的已排序列表。

Giuseppe Ciano, 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 杰出工程师, IBM

在 2000 年,Andrew Trossman 和他人共同创立了 ThinkDynamics,是实用计算软件的早期开发人员。IBM 于 2003 年收购了 ThinkDynamics 公司,然后该公司开始涉足云计算领域。自收购以来,Andrew 一直致力于推广 Tivoli 中的云技术,他的技术影响了 Tivoli、Rational、WebSphere、IBM Systems Group 和 Global Services。Andrew 是部署自动化、数据中心虚拟化和云计算方面的专家。



John Ryding, 软件工程师, IBM

John Ryding 的专长包括 DevOps 持续交付、Web 应用程序架构、Web UI 开发、云、通信和协作技术。



James A. Lindeman, 软件工程研究员, IBM

James A. Lindeman 是 IBM Research 的一名软件工程研究员。他研究诸如虚拟化和智慧的地球计划之类的主题;他曾是 pSeries 分区固件的技术负责人。



2013 年 2 月 28 日

IBM SmartCloud™ init(一个 IBM SmartCloud 支持包)是从开源 cloud-init 包上获得灵感而开发出来的第一个启动脚本。它最初是采用 ICON bundle 的形式在 Image Construction and Composition Tools (ICON) 和 IBM SmartCloud Provisioning 1.2 之间的集成上下文中开发的,后来扩展成为 IBM SmartCloud Provisioning 2.1 中的一个关键组件。

IBM SmartCloud init 是一个简单的独立组件,该组件在虚拟机 (VM) 启动时执行,以便使用被格式为多个部分组成的多用途 Internet 邮件扩展 (MIME) 的配置数据。IBM SmartCloud init 会获得此输入数据,并查看与每个部分关联的内容类型。如果内容类型是已知的,那么 IBM SmartCloud init 会调用相关使用者。

利用 IBM SmartCloud init 脚本的可能用例

第一个用例和相关的 MIME 类型是支持 ICON 生成的开放虚拟化格式 (OVF) 镜像。当前的实现只处理一种内容类型(应用程序/ovf-param)和一个使用者来处理 OVF 元数据,并将相关部分作为激活引擎 (AE) 的 OVF-env.xml 进行保存。

您可以使用 IBM SmartCloud init 来初始化一个在启动时执行了一系列操作的云实例,比如安装一系列 Red Hat 软件包 (RPM),并在启动时执行命令,或者在启动时下载和执行脚本(这对于虚拟机到虚拟机的转换非常有用)。或者,您可以对该脚本进行扩展,以支持程序包的已排序列表,例如:

先决条件

为了简便起见,IBM SmartCloud init 的核心并没有任何先决条件。确切地说,它在 Linux® 中是一个 shell 脚本,在 Windows® 中是一个 Microsoft® Visual Basic® Scripting Edition (.vbs) 脚本。但是,如果部分处理程序(例如,Python)需要的话,该脚本可能需要其他先决条件。在这种情况下,指导方针是安装先决条件,并在处理部分处理程序之前利用 #cloud_config 部分。

  • IBM Tivoli® Endpoint Manager(TEM 或 BigFix)Fixlet(通过在启动 VM 时部署 BigFix 代理和 Fixlet)
  • Chef Recipes
  • Puppet 策略
  • ICON/Image Construction and Composition Tool (ICCT) bundle(用于安装任何 IBM 中间件,如 IBM DB2® 或 WebSphere® 应用服务器)
  • Maestro bundle
  • IBM Workload Deployer (IWD) 脚本程序包
  • RPM 和 Debian 本机程序包

您可以使用指向储存库搜索顺序的统一资源标识符来下载用于执行的程序包。其他用例包括支持 Maestro 使用包含 IBM SmartCloud init 首次启动脚本的任何镜像,该脚本将下载和安装 Maestro 代理,并扩展 IBM SmartCloud Provisioning 安装程序,以便创建一个基本的 Red Hat Enterprise Linux 镜像,该镜像具有已安装的 IBM SmartCloud init 程序包。这样,任何根据该镜像创建的新实例都可以在激活时自动执行任务。


IBM SmartCloud 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 添加将在启动时使用组策略编辑器运行的脚本。
  3. 单击Computer Configuration > Windows Settings > Scripts,然后双击 Startup
  4. 单击 Add,然后键入 c:\Windows\Setup\IBM\scp-cloud-init.cmd 作为该程序(无参数)。
  5. 单击 OK,再次单击 OK 退出启动脚本窗口,然后退出 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 SmartCloud init 的行为,用户可以在实例启动时提供用户数据。使用 iaas-run-instances--user-data--user-data-file 参数执行该操作或者在 IBM SmartCloud Provisioning Web 控制台中的 Launch Instance 面板传递参数。可以使用两种方法检索用户数据:调用 URL http://169.254.169.254/latest/user-data 或者直接从磁盘 (Windows) 或 CD-ROM (Linux) 检索。IBM SmartCloud init 将要处理的用户数据必须是以下类型之一:

  • MIME 多部分存档。这组规则可应用于这个多部分文件的每个部分。使用多部分 MIME 文件,用户可以指定多个数据类型。例如,他们既可以指定 user-data 脚本,也可以指定 cloud-config 类型。
  • User-data 脚本。该脚本开头是:#!Content-Type: text/x-shellscript,并且在首次启动时,都将在 rc.local-like 级别上执行。(rc.local-like 意味着 “在启动序列中非常靠后”)。
  • OVF 参数。该类型以 #ovf-parametersContent-Type: text/ovf-parameters 开头。该内容为 ovf-env.xml 文件,可用于将 ovf-env.xml 文件传递给 Virtual Solutions Activation Engine(VSAE,位于 /opt/ibm/ae/AP 下),以便处理激活脚本。
  • 云配置数据。该类型以 #cloud-configContent-Type: text/cloud-config 开头。该内容为 “云配置” 数据,可用于安装 RPM 或者调用命令或脚本。
  • Chef Recipes。该类型以 #chef-recipesContent-Type: text/chef-recipes 开头。使用该内容可以支持 chef recipes。
  • Init 卷。该类型以 #init-volumesContent-Type: text/init-volumes 开头。使用该内容可告知如何装载附加的卷,并且可以选择首先对它们进行格式化。

OVF 参数语法

在 IBM SmartCloud Provisioning 1.2 for Linux 和 IBM SmartCloud Provisioning 2.1 for Windows 中实现的 OVF 参数语法包含 ovf-env.xml 文件,该文件被传递给 /opt/ibm/ae/AP 下的 VSAE(对于 Linux)以及 Windows 上的 C:\windows\setup\ibm\AP。清单 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 SmartCloud 还支持使用可选的 /opt/ibm/scp/default-ovf-env.xml 文件。该文件可以包含默认的设置,在 AE-class(脚本)基础上,这些设置会被用户数据中提供的 ovf-env.xml 文件覆盖。如果用户数据中不包含任何 OVF 参数部分,那么此默认文件会被用作 AE 的 ovf-env.xml 文件。default-ovf-env.xml 文件允许云镜像提供程序在首次启动 VM 期间使用 AE 脚本,比如用于重新安装 IBM Tivoli Monitoring (ITM) 代理的脚本,无需在每次部署期间将适当的参数向下传递给较高的 OVF 管理层,例如, 如果 /opt/ibm/scp/default-ovf-env.xml 文件包含以下代码:

<?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,则会将这两行代码合并到用户数据的 ovf-env.xml 文件中。它专门用于尽可能在 Windows 中支持此 default-ovf-env.xml 功能。

User-data 脚本(已在 Linux 和 Windows 中实现)

user-data 脚本是添加在首次启动时在 rc.local-like 级别上执行的脚本的一种简单方法。目前,对于 Linux scp-cloud-init,这些命令是在 /etc/rc.local 脚本的末尾处运行的,然后从该脚本中删除。

云配置语法(已在 Linux 中实现,正努力争取在 Windows 中实现)

云配置是通过用户数据执行某些操作的一种简单方法。使用 cloud-config 语法,用户可以采用用户友好的格式指定某些事项。例如,通过 cloud-config 语法,用户可以在首次启动时运行几个命令。这些命令的输出显示在控制台输出中:

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 服务器上。

加载项和脚本程序包以一个列表的形式提供的,并且根据 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"]

该程序包是一个 .zip 文件,此文件包含一个 cbscript.json 文件以及要调用的脚本。清单 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 bundle 语法(未实现)

ICCT bundle 语法提供一种下载和安装 ICCT bundle 的方法。

以下代码将安装 ICCT bundle:

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-handler 必须是包含 list_types 方法和 handle_type 方法的 Python 代码。一旦读取这一节之后,就会调用 list_types 方法。该方法必须返回此 part-handler 处理的 MIME 类型列表。然后 IBM SmartCloud Provisioning Cloud-init 将在开头处、在收到的每个部分以及在结尾处分别调用一次 handle_type 方法。执行 beginend 调用是为了允许部分处理程序执行初始化或拆卸。

清单 6 显示了 part-handler 的一个示例。

清单 6. 部分处理程序示例
#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 SmartCloud Provisioning iaas-describe-volumes 应用程序编程接口 (API) 中由其标签字段指定。该标签值是一个随机的 4 个字节的值,它在创建卷式编写为主引导记录的 Disk Signature 字段,该字段允许该脚本区分多个附加的卷。下面是 mount 命令的两个示例:

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

每个卷都是一个新航,每个参数一个 <parameter-name>=<value> 对(由一个或多个空格分隔)。两个必要的参数是 labelmount_dir。可选的参数是卷磁盘中分区号的 part_num(默认值为无分区),format 用于指定文件系统类型,可以使用此类型在装载之前对该卷进行格式化,format_label 用于指定在格式化时将会应用的文件系统标签。

用户数据示例

识别前缀为 # 的标头非常重要,该前缀意味着所有用户数据只包含一个节类型 (section type),因为它没有 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>

同样,单个 user-data 脚本如下所示:

#!/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),为指定的边界附加了一个 -- 前缀。还请注意,尽管 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 SmartCloud init 在以下目录中创建了日志文件:

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

    请注意,如果使用组策略在启动时执行此脚本,%TEMP% 会解析为 C:\Windows\Temp。当由 Administrator 帐户执行时,该目录会变为 C:\Users\Administrator\Local Settings\Temp。来自该脚本的消息也会记录在 Windows 事件日志记录程序中,可以从事件查看器的控制面板项中查看它们(来源是 “SCP cloud init”)。

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

当脚本检测到自身正在一个新的 VM 中运行时,它会清除这些日志文件,防止保留 VM 镜像所在的父 VM 中的潜在敏感数据。


设计细节

IBM SmartCloud init 扩展的主要设计点是通过提供特定内容类型的特定使用者(为本文中列出的每一项提供一个使用者)来实现可插拔的功能。一个想法是在特定文件夹中部署使用者,让 IBM SmartCloud init 扫描该文件夹,并查看可用的使用者,以便了解哪些使用者可以管理哪些内容类型。通过采用这种方法,您可以在 Guest 操作系统上包含下载和安装事项的代码(就像 BigFix 目前使用 Fixlets 方法所做的一样)。


结束语

仍然存在一些悬而未决的问题。第一,IBM 是否应该使 IBM SmartCloud init 成为 AE 的替代项?是否存在任何 AE 能够完成,但 IBM SmartCloud init 不能完成的事项?IBM SmartCloud init 没有替换 OVF 和 VSAE,但提供了一个灵活的、可扩展的动态机制,您可以在选择时利用该机制。考虑到 IBM SmartCloud Provisioning 1.2 创建了第一个支持 OVF 的管理规定,并且连接到 UI、镜像元数据中,当然应该通过 OVF 部分处理程序来连接到来宾操作系统。您可以添加 TEM、ITM 和其他许多 Tivoli 规定,还可以添加来自开源 cloud-init 的更典型的内容。

同样,用户是否应该仅在初始镜像创建时或在部署时使用该工具,还是在两种情况都能使用该工具?IBM SmartCloud init 组件可以在调用捕获镜像 API 之前进行每个 bundle 的安装(或 Fixlet、chef recipe等)。它不需要为捕获而进行 VSAE 清理,因为当这是一个新实例时,scp-cloud-init 脚本会进行检测(通过检测媒体访问控制地址更改)并自动进行清理,然后将 ovf-env.xml 文件转发给它。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 社区。探索由开发人员推动的博客、论坛、群组和维基,并与其他 developerWorks 用户进行交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=859825
ArticleTitle=通过 IBM SmartCloud init 启动云实例
publish-date=02282013