예제 #1
0
def _get_barbican_secret_payload(ctxt, secret_ref):
    session = keystone.create_keystone_session(ctxt)
    barbican = barbican_client.Client(session=session)
    sec = utils.retry_on_error()(barbican.secrets.get)(secret_ref)
    # NOTE: accessing `payload` leads to another API call being made:
    payload = utils.retry_on_error()(getattr)(sec, "payload")
    return payload
예제 #2
0
 def _setup_writer(self, ssh):
     self._copy_writer(ssh)
     paths = utils.retry_on_error()(self._setup_certificates)(ssh)
     self._crt = paths["local"]["client_crt"]
     self._key = paths["local"]["client_key"]
     self._ca = paths["local"]["ca_crt"]
     utils.retry_on_error()(self._init_writer)(ssh, paths["remote"])
예제 #3
0
 def init_replicator(self):
     self._credentials = utils.retry_on_error()(
         self._setup_replicator)(self._ssh)
     utils.retry_on_error()(
         self._init_replicator_client)(self._credentials)
     LOG.debug(
         "Disk status after Replicator initialization: %s",
         self._cli.get_status(device=None, brief=True))
예제 #4
0
    def _install_cloudbase_init(self,
                                download_url,
                                metadata_services=None,
                                enabled_plugins=None,
                                com_port="COM1"):
        self._event_manager.progress_update("Adding cloudbase-init")
        cloudbaseinit_base_dir = "%sCloudbase-Init" % self._os_root_dir

        key_name = str(uuid.uuid4())
        self._load_registry_hive(
            "HKLM\\%s" % key_name,
            "%sWindows\\System32\\config\\SYSTEM" % self._os_root_dir)
        try:
            cloudbaseinit_zip_path = "c:\\cloudbaseinit.zip"

            self._event_manager.progress_update("Downloading cloudbase-init")
            utils.retry_on_error(sleep_seconds=5)(self._conn.download_file)(
                download_url, cloudbaseinit_zip_path)

            self._event_manager.progress_update("Installing cloudbase-init")
            self._expand_archive(cloudbaseinit_zip_path,
                                 cloudbaseinit_base_dir)

            log_dir = "%s\\Log" % cloudbaseinit_base_dir
            self._conn.exec_ps_command("mkdir '%s' -Force" % log_dir,
                                       ignore_stdout=True)
            local_base_dir = "C%s" % cloudbaseinit_base_dir[1:]

            self._write_cloudbase_init_conf(
                cloudbaseinit_base_dir,
                local_base_dir,
                metadata_services=metadata_services,
                plugins=enabled_plugins,
                com_port=com_port)

            image_path = (
                '"%(path)s\\Bin\\OpenStackService.exe" cloudbase-init '
                '"%(path)s\\Python\\Python.exe" '
                '"%(path)s\\Python\\Scripts\\cloudbase-init.exe" '
                '--config-file "%(path)s\\conf\\cloudbase-init.conf"' % {
                    'path': local_base_dir
                })

            self._event_manager.progress_update("Enabling cloudbase-init")

            if self._check_cloudbase_init_exists(key_name):
                self._setup_existing_cbslinit_service(key_name, image_path)
            else:
                self._create_service(
                    key_name=key_name,
                    service_name=CLOUDBASEINIT_SERVICE_NAME,
                    image_path=image_path,
                    display_name="Cloud Initialization Service",
                    description="Service wrapper for cloudbase-init")
        finally:
            self._unload_registry_hive("HKLM\\%s" % key_name)

        return cloudbaseinit_base_dir
예제 #5
0
 def setup_writer(self):
     _disable_lvm2_lvmetad(self._ssh)
     self._copy_writer(self._ssh)
     paths = utils.retry_on_error()(self._setup_certificates)(self._ssh)
     utils.retry_on_error()(self._init_writer)(self._ssh, paths)
     return {
         "ip": self._ip,
         "port": self._writer_port,
         "certificates": {
             "client_crt": self._read_remote_file_sudo(paths["client_crt"]),
             "client_key": self._read_remote_file_sudo(paths["client_key"]),
             "ca_crt": self._read_remote_file_sudo(paths["ca_crt"])
         }
     }
예제 #6
0
 def _fetch_remote_file(self, ssh, remote_file, local_file):
     with open(local_file, 'wb') as fd:
         utils.exec_ssh_cmd(
             ssh,
             "sudo chmod +r %s" % remote_file, get_pty=True)
         data = utils.retry_on_error()(
             utils.read_ssh_file)(ssh, remote_file)
         fd.write(data)
예제 #7
0
    def mount_os(self):
        self._refresh_storage()
        self._bring_all_disks_online()
        self._set_basic_disks_rw_mode()
        self._set_foreign_disks_rw_mode()
        self._import_foreign_disks()
        self._refresh_storage()
        fs_roots = utils.retry_on_error(sleep_seconds=5)(
            self._get_fs_roots)(fail_if_empty=True)
        system_drive = self._get_system_drive()

        for fs_root in [r for r in fs_roots if not r[:-1] == system_drive]:
            if self._conn.test_path("%sWindows\\System32" % fs_root):
                return fs_root, None

        raise exception.OperatingSystemNotFound("root partition not found")
예제 #8
0
 def _fetch_remote_file(self, ssh, remote_file, local_file):
     # TODO(gsamfira): make this re-usable
     with open(local_file, 'wb') as fd:
         data = utils.retry_on_error()(utils.read_ssh_file)(ssh,
                                                            remote_file)
         fd.write(data)
예제 #9
0
 def init_replicator(self):
     utils.retry_on_error()(self._setup_replicator)(self._ssh)
     self._credentials = self._fetch_certificates()
     utils.retry_on_error()(
         self._init_replicator_client)(self._credentials)
예제 #10
0
 def init_replicator(self):
     self._credentials = utils.retry_on_error()(self._setup_replicator)(
         self._ssh)
     utils.retry_on_error()(self._init_replicator_client)(self._credentials)