import attr
from navmazing import NavigateToAttribute
from cfme.common import WidgetasticTaggable
from cfme.exceptions import ItemNotFound
from cfme.modeling.base import BaseCollection, BaseEntity, parent_of_type
from cfme.networks.views import SecurityGroupDetailsView, SecurityGroupView
from cfme.utils import version
from cfme.utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to
@attr.s
[docs]class SecurityGroup(WidgetasticTaggable, BaseEntity):
"""Class representing security group in sdn"""
in_version = ('5.8', version.LATEST)
category = 'networks'
string_name = 'SecurityGroup'
quad_name = None
db_types = ['SecurityGroup']
name = attr.ib()
@property
def provider(self):
from cfme.networks.provider import NetworkProvider
return parent_of_type(self, NetworkProvider)
@property
def network_provider(self):
""" Returns network provider """
# security group collection contains reference to provider
if self.provider:
return self.provider
# otherwise get provider name from ui
view = navigate_to(self, 'Details')
try:
prov_name = view.entities.relationships.get_text_of("Network Manager")
collection = self.appliance.collections.network_provider
return collection.instantiate(name=prov_name)
except ItemNotFound: # BZ 1480577
return None
@attr.s
[docs]class SecurityGroupCollection(BaseCollection):
""" Collection object for SecurityGroup object
Note: Network providers object are not implemented in mgmt
"""
ENTITY = SecurityGroup
[docs] def all(self):
if self.filters.get('parent'):
view = navigate_to(self.filters.get('parent'), 'SecurityGroups')
else:
view = navigate_to(self, 'All')
list_networks_obj = view.entities.get_all(surf_pages=True)
return [self.instantiate(name=s.name) for s in list_networks_obj]
@navigator.register(SecurityGroupCollection, 'All')
[docs]class All(CFMENavigateStep):
VIEW = SecurityGroupView
prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self):
self.prerequisite_view.navigation.select('Networks', 'Security Groups')
@navigator.register(SecurityGroup, 'Details')
[docs]class Details(CFMENavigateStep):
prerequisite = NavigateToAttribute('parent', 'All')
VIEW = SecurityGroupDetailsView
[docs] def step(self):
self.prerequisite_view.entities.get_entity(name=self.obj.name).click()