您的位置:首页 > 大数据 > 云计算

使用cloudbase-init初始化windows虚拟机

2016-10-14 16:14 2041 查看
最近在做一个功能,虚拟机开机时初始化用户、ip信息。linux系统的通过自启动脚本搞定了,windows的采用cloudbase-init 搞定。

CloudBase-init简介

cloudbase-init 是 Windows 和其他系统的云初始化程序,可以设置主机名、创建用户、设置静态ip、设置密码等。对应的linux初始化程序是cloudinit,都是开源的Python项目。官方文档:http://cloudbase-init.readthedocs.io/en/latest/index.html

cloudbase-init主要包括两部分services和plugins。Service主要为plugins提供数据来源,来源包括指定的云服务(openstack、ec2等)、本地配置文件(iso文件、物理磁盘)等。plugins即为执行相关操作的插件,像初始化ip、创建用户等。

实现功能

1、初始化ip
2、初始化主机名
3、初始化用户
4、自动扩展磁盘

业务场景

我们的业务场景是通过iso创建虚拟机----》导出虚拟机模板-----》通过模板创建虚拟机,

时序图

虚拟机模板制作

Windows-CloudBaseinit-service

A metadata service hasthe role of pulling the guest provided data (configuration information) andexposing it to the Plugins fora
general and basic initialization of the instance.

Cloudbaseinit可以通过Http或者本地文件来获取元数据。

在此,我们使用ConfigDriveService,因此,配置

metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService

Windows-CloudBaseinit-plugins

初始化ipcloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin

    发现问题:ip初始化有时候能成功有时候不能成功。

    
原因:cloudbaseinit运行时网卡设备未准备好。

    解决方法

  修改C:\ProgramFiles\CloudbaseSolutions\Cloudbase-Init\Python\Lib\site-packages\cloudbase\plugins\common\networkconfig.py文件。在获取network_adapters位置添加如下代码:

初始化主机名

cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin

Windows修改主机名后需重启,所以必须在conf文件中添加

allow_reboot=true

初始化administrator密码

      
cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin

       
其中username为模板中用户名

初始化磁盘

        cloudbaseinit.plugins.common.userdata.UserDataPlugin

           通过userdataplugin执行脚本,实现磁盘挂载。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Openstack 云平台