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
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"])
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))
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
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"]) } }
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)
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")
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)
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)
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)