(self)
| 291 | return {k: v for k, v in self._specs.items() if k not in self.spec_deleted} |
| 292 | |
| 293 | def load(self): |
| 294 | # type: () -> None |
| 295 | for k, v in self.mgr.get_store_prefix(SPEC_STORE_PREFIX).items(): |
| 296 | service_name = k[len(SPEC_STORE_PREFIX):] |
| 297 | try: |
| 298 | j = cast(Dict[str, dict], json.loads(v)) |
| 299 | if ( |
| 300 | (self.mgr.migration_current or 0) < 3 |
| 301 | and j['spec'].get('service_type') == 'nfs' |
| 302 | ): |
| 303 | self.mgr.log.debug(f'found legacy nfs spec {j}') |
| 304 | queue_migrate_nfs_spec(self.mgr, j) |
| 305 | |
| 306 | if ( |
| 307 | (self.mgr.migration_current or 0) < 6 |
| 308 | and j['spec'].get('service_type') == 'rgw' |
| 309 | ): |
| 310 | queue_migrate_rgw_spec(self.mgr, j) |
| 311 | |
| 312 | spec = ServiceSpec.from_json(j['spec']) |
| 313 | created = str_to_datetime(cast(str, j['created'])) |
| 314 | self._specs[service_name] = spec |
| 315 | self.spec_created[service_name] = created |
| 316 | |
| 317 | if 'deleted' in j: |
| 318 | deleted = str_to_datetime(cast(str, j['deleted'])) |
| 319 | self.spec_deleted[service_name] = deleted |
| 320 | |
| 321 | if 'needs_configuration' in j: |
| 322 | self._needs_configuration[service_name] = cast(bool, j['needs_configuration']) |
| 323 | |
| 324 | if 'rank_map' in j and isinstance(j['rank_map'], dict): |
| 325 | self._rank_maps[service_name] = {} |
| 326 | for rank_str, m in j['rank_map'].items(): |
| 327 | try: |
| 328 | rank = int(rank_str) |
| 329 | except ValueError: |
| 330 | logger.exception(f"failed to parse rank in {j['rank_map']}") |
| 331 | continue |
| 332 | if isinstance(m, dict): |
| 333 | self._rank_maps[service_name][rank] = {} |
| 334 | for gen_str, name in m.items(): |
| 335 | try: |
| 336 | gen = int(gen_str) |
| 337 | except ValueError: |
| 338 | logger.exception(f"failed to parse gen in {j['rank_map']}") |
| 339 | continue |
| 340 | if isinstance(name, str) or m is None: |
| 341 | self._rank_maps[service_name][rank][gen] = name |
| 342 | |
| 343 | self.mgr.log.debug('SpecStore: loaded spec for %s' % ( |
| 344 | service_name)) |
| 345 | except Exception as e: |
| 346 | self.mgr.log.warning('unable to load spec for %s: %s' % ( |
| 347 | service_name, e)) |
| 348 | pass |
| 349 | |
| 350 | def save( |
nothing calls this directly
no test coverage detected