目前所支持的windows镜像都是未激活状态,未激活状态下很多功能无法使用。

以后将要实现的功能是,windows虚机启动后,网络正常后能与KMS服务器通信,自动激活key

目前想到两种办法:

1、bat批处理脚本,开启自动运行,利用slmgr激活

2、cloudbase-init的LocalScriptsPlugin功能,将写好的脚本放在 cloudbaseinit.plugins.common.localscripts目录下

3、cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin插件,该插件在代码里能实现set kms主机,及slmgr直接注入key

from oslo_log import log as oslo_logging
from cloudbaseinit import conf as cloudbaseinit_conf
from cloudbaseinit import constant
from cloudbaseinit.osutils import factory as osutils_factory
from cloudbaseinit.plugins.common import base
from cloudbaseinit.utils.windows import licensing CONF = cloudbaseinit_conf.CONF
LOG = oslo_logging.getLogger(__name__) class WindowsLicensingPlugin(base.BasePlugin): def _set_product_key(self, service, manager):
if not CONF.set_kms_product_key and not CONF.set_avma_product_key:
return description, license_family, is_current = manager.get_kms_product()
if is_current:
LOG.info('Product "%s" is already the current one, no need to set '
'a product key', description)
else:
use_avma = service.get_use_avma_licensing()
if use_avma is None:
use_avma = CONF.set_avma_product_key
LOG.debug("Use AVMA: %s", use_avma) product_key = None
if use_avma:
product_key = manager.get_volume_activation_product_key(
license_family, constant.VOL_ACT_AVMA)
if not product_key:
LOG.error("AVMA product key not found for this OS") if not product_key and CONF.set_kms_product_key:
product_key = manager.get_volume_activation_product_key(
license_family, constant.VOL_ACT_KMS)
if not product_key:
LOG.error("KMS product key not found for this OS") if product_key:
LOG.info("Setting product key: %s", product_key)
manager.set_product_key(product_key) def _set_kms_host(self, service, manager):
kms_host = service.get_kms_host() or CONF.kms_host
if kms_host:
LOG.info("Setting KMS host: %s", kms_host)
manager.set_kms_host(*kms_host.split(':')) def _activate_windows(self, service, manager):
if CONF.activate_windows:
# note(alexpilotti): KMS clients activate themselves
# so this could be skipped if a KMS host is set
LOG.info("Activating Windows")
activation_result = manager.activate_windows()
LOG.debug("Activation result:\n%s" % activation_result) def _log_licensing_info(self, manager):
if CONF.log_licensing_info:
license_info = manager.get_licensing_info()
LOG.info('Microsoft Windows license info:\n%s' % license_info) def execute(self, service, shared_data):
osutils = osutils_factory.get_os_utils() if osutils.is_nano_server():
LOG.info("Licensing info and activation are not available on "
"Nano Server")
else:
manager = licensing.get_licensing_manager() eval_end_date = manager.is_eval()
if eval_end_date:
LOG.info("Evaluation license, skipping activation. "
"Evaluation end date: %s", eval_end_date)
else:
self._set_product_key(service, manager)
self._set_kms_host(service, manager)
self._activate_windows(service, manager)
manager.refresh_status() self._log_licensing_info(manager) return base.PLUGIN_EXECUTION_DONE, False

cloudbase-init-master.cloudbaseinit.plugins.windows.licensing.py

cloud-init配置文件,需要开启cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin插件,activate_windows=true,check_latest_version=false

参考:http://cloudbase-init.readthedocs.io/en/latest/plugins.html#winrm-listener-main

windows auto activate的更多相关文章

  1. 12c windows auto installl

    --config for oralce_envset ORACLE_HOME=c:\app\oracle\product\12.1.0\dbhome_1set ORACLE_SID=testuatse ...

  2. 微软移除WIN10密码过期政策Microsoft Removes Password-Expiration Policy in Windows 10

    Microsoft this week announced a series of changes to the security baseline in Windows 10, including ...

  3. 在windows里安装系统7、8、10或Offcie或Visio等推荐的激活工具

    不多说,直接上干货! (1)激活Windows或者Office前,你务必先进去KMSAuto Net的System界面,安装KMS-host Service; (2)然后回到Main主界面,选择Act ...

  4. windows下安装anaconda和tensorflow

    anaconda确实很好用,省去了很多麻烦,现在我个人推荐直接使用anaconda. anaconda的特点:可以存在多个python环境,要使用某一个环境的话,就需要切换到这个环境,安装.卸载包都是 ...

  5. dhcp、tftp及pxe简介

    DHCP: 全称:Dynamic Host Configuration Protocol  动态主机配置协议 DHCP配置内容: IP/Netmask Gateway DNS Server bootp ...

  6. eclipse keys

    Navigate Open Declaration F3 Editing Script Source Source Mark Occurrences Alt+Shift+O Editing PHP s ...

  7. Linux系统学习之 一:新手必须掌握的Linux命令1

    2018-10-03 16:04:12 一.常用系统工作命令 1.wget 命令 作用:用于在终端中下载网络文件. 格式:wget [参数] 下载地址 参数及作用: -b : 后台下载模式 -d:显示 ...

  8. PXE批量部署安装Linux系统

    PXE介绍 1)Preboot Excution Environment 预启动执行环境 2)Intel公司研发 3)基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映 ...

  9. python使用总结

    近来公司的测试部门要我们开发,按他们给我测试案例,写vba脚本,方便他们做自动化测试,老大把这事交给了我做.之前没写过vba,很多API都不会用,边写边谷歌,写得很慢. 我记得测试第一次做的是打开关闭 ...

随机推荐

  1. 转:adb操作命令详解及大全

    说到 ADB 大家应该都不陌生,即 Android Debug Bridge,Android调试桥,身为 Android 开发的我们,熟练使用 ADB 命令将会大大提升我们的开发效率, ADB 的命令 ...

  2. 2017.11.23 利用Cookie管理实现自动登陆

    Cookie管理 Cookie对象是由服务器产生并保存在客户端的信息,常用他记录用户个人信息以及个性化设置.用户每次访问网点时,应用程序就可以检索以前保存的信息 Cookie对象属于的类是javax. ...

  3. 20145238-荆玉茗 《Java程序设计》第3周学习总结

    20145238 <Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: ·类定义时使用class关键字 ·如果要将x绑定到新建的对象上,可以使用"="制定 ...

  4. Eclipse Python插件 PyDev

    PyDev for Eclipse 是一个功能强大且易用的 Eclipse Python IDE 插件.本文将向读者介绍 PyDev 开源项目及其安装配置方法,并在此基础上详细介绍如何利用 PyDev ...

  5. MyEclipse中安装findBugs插件(摘)

    安装方法如下: 1.首先从findbugs网站下载插件:http://findbugs.sourceforge.net/downloads.html 2.将下载回来的zip包解压,得到文件夹:edu. ...

  6. Aspects– iOS的AOP面向切面编程的库

    简介 一个简洁高效的用于使iOS支持AOP面向切面编程的库.它可以帮助你在不改变一个类或类实例的代码的前提下,有效更改类的行为.比iOS传统的 AOP方法,更加简单高效.支持在方法执行的前/后或替代原 ...

  7. 两种js方法发起微信支付:WeixinJSBridge,wx.chooseWXPay区别

    原文链接:https://www.2cto.com/weixin/201507/412752.html 1.为什么会有两种JS方法可以发起微信支付? 当你登陆微信公众号之后,左边有两个菜单栏,一个是微 ...

  8. PHP开发环境搭建一:PHP集成环境XAMPP 的安装与配置

    1. XMAPP简介 XAMPP(Apache+MySQL/MariaDB+PHP+Perl)开头的X代表X-OS,代表可以在任何常见操作系统下使用,包括Windows.Mac.Linux,开源平台. ...

  9. java 二进制、位运算、和移位运算符(2013-07-30-bd 写的日志迁移

    二进制是逢2进位的进位制,0.1是基本算符, 1字节=8位 比如 int a =1 ;int 占4个字节在计算机里表示为: java中的4个位运算,分别是“按位与&.按位或|.按位异或^,按位 ...

  10. foreachRDD,foreach,foreachPartition区别联系

    foreachRDD(SparkStreaming): SparkStreaming是流式实时处理数据,就是将数据流按照定义的时间进行分割(就是"批处理").每一个时间段内处理到的 ...