Cloud-init

cloud-init用于在创建虚拟机时通过元数据服务对虚拟机基本配置,包括常见的主机名,用户,密码等等。同时用户可以通过user_data自定义一些数据对虚拟机进行配置,可以有配置文件cloud-config或者直接给定脚本,支持常见的shell cmd python脚本
 
 
博客
 

cloud-init for windows

- 启动一个云主机,制作模板
- 安装cloudbase-init.msi程序,见百度云盘
- 修改代码,允许重复加载插件(测试时使用)
   >程序:C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\Python27\Lib\site-packages\cloudbaseinit\init.py
   >方法:_exec_plugin
   >修改为:
   
plugin_name = plugin.get_name()
status = self._get_plugin_status(osutils, instance_id, plugin_name)
LOG.info('Executing plugin \'%s\'', plugin_name)
try:
    (status, reboot_required) = plugin.execute(service,
                                                  shared_data)
    self._set_plugin_status(osutils, instance_id, plugin_name,
                                    status)
     return reboot_required
except Exception, ex:
     LOG.error('plugin \'%(plugin_name)s\' failed with error '
                      '\'%(ex)s\'', {'plugin_name': plugin_name, 'ex': ex})
     LOG.exception(ex)

  

 
- 编写测试脚本
 
import os

def test() :
  fl = open('c:\hujin.log','wb')
  fl.write('hello,world')
  fl.close()

if main == 'name':
  test()

  

- 启动Cloud Initialization Service 服务
 
 
cloud-init for linux
待更新
 
 
源码流程说明
- 程序首先判断操作系统类型,加载对应的模块
- 加载服务,服务共分为四种:
 
  'cloudbaseinit.metadata.services.httpservice.HttpService',
  'cloudbaseinit.metadata.services.configdrive.ConfigDriveService',
  'cloudbaseinit.metadata.services.ec2service.EC2Service',
  'cloudbaseinit.metadata.services.maasservice.MaaSHttpService'

  

目前openstack中我们会用第一种,使用http获取openstack的元数据服务
- 加载插件,插件共分为:
 
  'cloudbaseinit.plugins.windows.mtu.MTUPlugin',
  'cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin',
  'cloudbaseinit.plugins.windows.sethostname.SetHostNamePlugin',
  'cloudbaseinit.plugins.windows.createuser.CreateUserPlugin',
  'cloudbaseinit.plugins.windows.networkconfig.NetworkConfigPlugin',
  'cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin',
  'cloudbaseinit.plugins.windows.sshpublickeys.'
  'SetUserSSHPublicKeysPlugin',
  'cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin',
  'cloudbaseinit.plugins.windows.userdata.UserDataPlugin',
  'cloudbaseinit.plugins.windows.setuserpassword.'
  'SetUserPasswordPlugin',
  'cloudbaseinit.plugins.windows.winrmlistener.'
  'ConfigWinRMListenerPlugin',
  'cloudbaseinit.plugins.windows.winrmcertificateauth.'
  'ConfigWinRMCertificateAuthPlugin',
  'cloudbaseinit.plugins.windows.localscripts.LocalScriptsPlugin',
上面windows中就是使用localscript插件
-  执行插件
- 根据配置重启机器
 
 
PS
目前主要功能有
  • 创建新用户
  • 修改用户密码
  • 添加用户到指定用户组
  • 获取用户home目录
  • 设置主机名
  • 获取网卡信息
  • 获取DHCP信息
  • 设置NTP
  • 设置静态IP
  • 判断服务是否存在
  • 获取服务状态
  • 设置服务启动模式
  • 启动服务
  • 关闭服务
  • 获取默认网关
  • 获取CD驱动
  • 获取物理磁盘
  • 创建防火墙规则
  • 删除防火墙规则
 
posted @ 2015-01-21 13:10 smallcoderhujin 阅读(...) 评论(...) 编辑 收藏