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

时间:2022-09-23 19:59:02

最近在做一个功能,虚拟机开机时初始化用户、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、初始化ip2、初始化主机名3、初始化用户4、自动扩展磁盘

业务场景

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

时序图

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

虚拟机模板制作 使用cloudbase-init初始化windows虚拟机


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

使用cloudbase-init初始化windows虚拟机初始化ipcloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin

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

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

    解决方法

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

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

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

cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin

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

allow_reboot=true

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

      cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin

       其中username为模板中用户名

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

        cloudbaseinit.plugins.common.userdata.UserDataPlugin

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

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