Source code for cfme.containers.image_registry

# -*- coding: utf-8 -*-
import attr
import random
from cached_property import cached_property

from navmazing import NavigateToSibling, NavigateToAttribute
from wrapanapi.containers.image_registry import ImageRegistry as ApiImageRegistry

from cfme.common import WidgetasticTaggable, TagPageView
from cfme.containers.provider import (navigate_and_get_rows, ContainerObjectAllBaseView,
                                      ContainerObjectDetailsBaseView)
from cfme.modeling.base import BaseCollection, BaseEntity
from cfme.utils.appliance import Navigatable
from cfme.utils.appliance.implementations.ui import CFMENavigateStep, navigator
from cfme.utils.providers import get_crud_by_name


[docs]class ImageRegistryAllView(ContainerObjectAllBaseView): SUMMARY_TEXT = "Image Registries"
[docs]class ImageRegistryDetailsView(ContainerObjectDetailsBaseView): pass
@attr.s
[docs]class ImageRegistry(BaseEntity, WidgetasticTaggable, Navigatable): PLURAL = 'Image Registries' all_view = ImageRegistryAllView details_view = ImageRegistryDetailsView host = attr.ib() provider = attr.ib() @cached_property def mgmt(self): return ApiImageRegistry(self.provider.mgmt, self.name, self.host, None) @property def name(self): return self.host @classmethod
[docs] def get_random_instances(cls, provider, count=1, appliance=None): """Generating random instances.""" ir_rows_list = navigate_and_get_rows(provider, cls, count, silent_failure=True) random.shuffle(ir_rows_list) return [cls(row.host.text, provider, appliance=appliance) for row in ir_rows_list]
@attr.s
[docs]class ImageRegistryCollection(BaseCollection): """Collection object for :py:class:`Image Registry`.""" ENTITY = ImageRegistry
[docs] def all(self): # container_image_registries table has ems_id, # join with ext_mgmgt_systems on id for provider name image_registry_table = self.appliance.db.client['container_image_registries'] ems_table = self.appliance.db.client['ext_management_systems'] image_registry_query = ( self.appliance.db.client.session .query(image_registry_table.host, ems_table.name) .join(ems_table, image_registry_table.ems_id == ems_table.id)) provider = None # filtered if self.filters.get('provider'): provider = self.filters.get('provider') image_registry_query = image_registry_query.filter(ems_table.name == provider.name) image_registries = [] for host, ems_name in image_registry_query.all(): image_registries.append( self.instantiate(host=host, provider=provider or get_crud_by_name(ems_name))) return image_registries
@navigator.register(ImageRegistryCollection, 'All')
[docs]class ImageRegistryAll(CFMENavigateStep): VIEW = ImageRegistryAllView prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self): self.prerequisite_view.navigation.select('Compute', 'Containers', 'Image Registries')
[docs] def resetter(self): # Reset view and selection self.view.toolbar.view_selector.select("List View") self.view.paginator.reset_selection()
@navigator.register(ImageRegistry, 'Details')
[docs]class ImageRegistryDetails(CFMENavigateStep): VIEW = ImageRegistryDetailsView prerequisite = NavigateToAttribute('parent', 'All')
[docs] def step(self): self.prerequisite_view.entities.get_entity(host=self.obj.host).click()
@navigator.register(ImageRegistry, 'EditTags')
[docs]class ImageRegistryEditTags(CFMENavigateStep): VIEW = TagPageView prerequisite = NavigateToSibling('Details')
[docs] def step(self): self.prerequisite_view.toolbar.policy.item_select('Edit Tags')