def _write_cloudbase_init_conf(self, cloudbaseinit_base_dir, local_base_dir, com_port="COM1", metadata_services=None, plugins=None): if metadata_services is None: metadata_services = CLOUDBASE_INIT_DEFAULT_METADATA_SVCS if plugins is None: plugins = CLOUDBASE_INIT_DEFAULT_PLUGINS elif type(plugins) is not list: raise exception.CoriolisException( "Invalid plugins parameter. Must be list.") LOG.info("Writing Cloudbase-Init configuration files") conf_dir = "%s\\conf" % cloudbaseinit_base_dir scripts_dir = self._get_cbslinit_scripts_dir(cloudbaseinit_base_dir) self._conn.exec_ps_command("mkdir '%s' -Force" % conf_dir, ignore_stdout=True) self._conn.exec_ps_command("mkdir '%s' -Force" % scripts_dir, ignore_stdout=True) conf_file_path = "%s\\cloudbase-init.conf" % conf_dir conf_content = ( "[DEFAULT]\n" "username = Admin\n" "groups = Administrators\n" "verbose = true\n" "bsdtar_path = %(bin_path)s\\bsdtar.exe\n" "mtools_path = %(bin_path)s\n" "logdir = %(log_path)s\n" "local_scripts_path = %(scripts_path)s\n" "stop_service_on_exit = false\n" "logfile = cloudbase-init.log\n" "default_log_levels = " "comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN\n" "allow_reboot = false\n" "plugins = %(plugins)s\n" "debug = true\n" "san_policy = OnlineAll\n" "metadata_services = %(metadata_services)s\n" "logging_serial_port_settings = %(com_port)s,9600,N,8\n" % { "bin_path": "%s\\Bin" % local_base_dir, "log_path": "%s\\Log" % local_base_dir, "scripts_path": "%s\\LocalScripts" % local_base_dir, "com_port": com_port, "metadata_services": ",".join(metadata_services), "plugins": ",".join(plugins) }) utils.write_winrm_file(self._conn, conf_file_path, conf_content) disks_script = os.path.join(utils.get_resources_bin_dir(), "bring-disks-online.ps1") self._write_local_script(cloudbaseinit_base_dir, disks_script, priority=99)
def run_user_script(self, user_script): if len(user_script) == 0: return script_path = "$env:TMP\\coriolis_user_script.ps1" try: utils.write_winrm_file( self._conn, script_path, user_script) except Exception as err: raise exception.CoriolisException( "Failed to copy user script to target system.") from err cmd = ('$ErrorActionPreference = "Stop"; powershell.exe ' '-NonInteractive -ExecutionPolicy RemoteSigned ' '-File "%(script)s" "%(os_root_dir)s"') % { "script": script_path, "os_root_dir": self._os_root_dir, } try: out = self._conn.exec_ps_command(cmd) LOG.debug("User script output: %s" % out) except Exception as err: raise exception.CoriolisException( "Failed to run user script.") from err
def _write_local_script(self, base_dir, script_path, priority=50): scripts_dir = self._get_cbslinit_scripts_dir(base_dir) script = "%s\\%d-%s" % (scripts_dir, priority, os.path.basename(script_path)) with open(script_path, 'r') as fd: contents = fd.read() utils.write_winrm_file(self._conn, script, contents)
def _write_static_ip_script(self, base_dir, nics_info, ips_info): scripts_dir = self._get_cbslinit_scripts_dir(base_dir) script_path = "%s\\01-static-ip-config.ps1" % scripts_dir nics_info_dump = json.dumps(nics_info) ips_info_dump = json.dumps(ips_info) contents = STATIC_IP_SCRIPT_TEMPLATE % { 'nics_info': base64.b64encode(nics_info_dump.encode()).decode(), 'ips_info': base64.b64encode(ips_info_dump.encode()).decode()} utils.write_winrm_file(self._conn, script_path, contents.encode())