Adds Windows licensing plugin
Adds support for performing an automated activation.
This commit is contained in:
parent
1ca4dd1d20
commit
10f416463b
@ -25,6 +25,7 @@ opts = [
|
|||||||
'cloudbaseinit.plugins.windows.sethostname.SetHostNamePlugin',
|
'cloudbaseinit.plugins.windows.sethostname.SetHostNamePlugin',
|
||||||
'cloudbaseinit.plugins.windows.createuser.CreateUserPlugin',
|
'cloudbaseinit.plugins.windows.createuser.CreateUserPlugin',
|
||||||
'cloudbaseinit.plugins.windows.networkconfig.NetworkConfigPlugin',
|
'cloudbaseinit.plugins.windows.networkconfig.NetworkConfigPlugin',
|
||||||
|
'cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin',
|
||||||
'cloudbaseinit.plugins.windows.sshpublickeys.'
|
'cloudbaseinit.plugins.windows.sshpublickeys.'
|
||||||
'SetUserSSHPublicKeysPlugin',
|
'SetUserSSHPublicKeysPlugin',
|
||||||
'cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin',
|
'cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin',
|
||||||
|
67
cloudbaseinit/plugins/windows/licensing.py
Normal file
67
cloudbaseinit/plugins/windows/licensing.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Copyright 2014 Cloudbase Solutions Srl
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from oslo.config import cfg
|
||||||
|
|
||||||
|
from cloudbaseinit.openstack.common import log as logging
|
||||||
|
from cloudbaseinit.osutils import factory as osutils_factory
|
||||||
|
from cloudbaseinit.plugins import base
|
||||||
|
|
||||||
|
opts = [
|
||||||
|
cfg.BoolOpt('activate_windows', default=False,
|
||||||
|
help='Activates Windows automatically'),
|
||||||
|
]
|
||||||
|
|
||||||
|
CONF = cfg.CONF
|
||||||
|
CONF.register_opts(opts)
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class WindowsLicensingPlugin(base.BasePlugin):
|
||||||
|
def _run_slmgr(self, osutils, args):
|
||||||
|
if osutils.check_sysnative_dir_exists():
|
||||||
|
cscript_dir = osutils.get_sysnative_dir()
|
||||||
|
else:
|
||||||
|
cscript_dir = osutils.get_system32_dir()
|
||||||
|
|
||||||
|
# Not SYSNATIVE, as it is already executed by a x64 process
|
||||||
|
slmgr_dir = osutils.get_system32_dir()
|
||||||
|
|
||||||
|
cscript_path = os.path.join(cscript_dir, "cscript.exe")
|
||||||
|
slmgr_path = os.path.join(slmgr_dir, "slmgr.vbs")
|
||||||
|
|
||||||
|
(out, err, exit_code) = osutils.execute_process(
|
||||||
|
[cscript_path, slmgr_path] + args, False)
|
||||||
|
|
||||||
|
if exit_code:
|
||||||
|
raise Exception('slmgr.vbs failed with error code %(exit_code)s.\n'
|
||||||
|
'Output: %(out)s\nError: %(err)s' %
|
||||||
|
{'exit_code': exit_code, 'out': out, 'err': err})
|
||||||
|
return out
|
||||||
|
|
||||||
|
def execute(self, service, shared_data):
|
||||||
|
if CONF.activate_windows:
|
||||||
|
osutils = osutils_factory.get_os_utils()
|
||||||
|
|
||||||
|
license_info = self._run_slmgr(osutils, ['/dlv'])
|
||||||
|
LOG.info('Microsoft Windows license info:\n%s' % license_info)
|
||||||
|
|
||||||
|
LOG.info("Activating Windows")
|
||||||
|
activation_result = self._run_slmgr(osutils, ['/ato'])
|
||||||
|
LOG.debug("Activation result:\n%s" % activation_result)
|
||||||
|
|
||||||
|
return (base.PLUGIN_EXECUTION_DONE, False)
|
Loading…
x
Reference in New Issue
Block a user