Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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)
Exemple #4
0
 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())