Source code for cfme.networks.cloud_network

import attr

from navmazing import NavigateToAttribute, NavigateToSibling
from widgetastic.exceptions import NoSuchElementException

from cfme.common import WidgetasticTaggable
from cfme.exceptions import ItemNotFound
from cfme.networks.views import (CloudNetworkAddView, CloudNetworkEditView, CloudNetworkDetailsView,
                                 CloudNetworkView)
from cfme.utils import providers, version
from cfme.modeling.base import BaseCollection, BaseEntity, parent_of_type
from cfme.utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to
from cfme.utils.wait import wait_for


@attr.s
[docs]class CloudNetwork(WidgetasticTaggable, BaseEntity): """Class representing cloud networks in cfme database""" in_version = ('5.8', version.LATEST) category = 'networks' page_name = 'cloud_network' string_name = 'CloudNetwork' quad_name = None db_types = ['CloudNetwork'] name = attr.ib() provider_obj = attr.ib() @property def provider(self): from cfme.networks.provider import NetworkProvider return parent_of_type(self, NetworkProvider) @property def exists(self): try: navigate_to(self, 'Details') except (ItemNotFound, NoSuchElementException): return False else: return True @property def parent_provider(self): """ Return object of parent cloud provider """ view = navigate_to(self, 'Details') provider_name = view.entities.relationships.get_text_of('Parent ems cloud') return providers.get_crud_by_name(provider_name) @property def network_type(self): """ Return type of network """ view = navigate_to(self, 'Details') return view.entities.properties.get_text_of('Type') @property def cloud_tenant(self): """Return name of tenant that network belongs to""" view = navigate_to(self, 'Details') return view.entities.relationships.get_text_of('Cloud tenant')
[docs] def edit(self, name, change_external=None, change_admin_state=None, change_shared=None): """Edit cloud network Args: name: (str) new network name change_external: (bool) is network external change_admin_state: (bool) network's administrative state, 'Up' or 'Down' change_shared: (bool) is network shared, 'Yes' or 'No' """ view = navigate_to(self, 'Edit') view.fill({'network_name': name, 'ext_router': change_external, 'administrative_state': change_admin_state, 'shared': change_shared}) view.save.click() view.flash.assert_success_message('Cloud Network "{}" updated'.format(name)) self.name = name
[docs] def delete(self): """Delete this cloud network""" view = navigate_to(self, 'Details') view.toolbar.configuration.item_select('Delete this Cloud Network', handle_alert=True) view.flash.assert_success_message('The selected Cloud Network was deleted')
@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 CloudNetworkCollection(BaseCollection): """Collection object for Cloud Network object""" ENTITY = CloudNetwork
[docs] def create(self, name, tenant, provider, network_manager, network_type, is_external=False, admin_state=True, is_shared=False): """Create cloud network Args: name: (str) name of the network tenant: (str) name of cloud tenant to place network to provider: crud object of Openstack Cloud provider network_manager: (str) name of network manager network_type: (str) type of network, such as 'VXLAN', 'VLAN', 'GRE' etc. is_external: (bool) is network external admin_state: (bool) network's initial administrative state, True stands for 'Up', False - 'Down' is_shared: (bool) is network shared Returns: instance of cfme.networks.cloud_network.CloudNetwork """ view = navigate_to(self, 'Add') view.fill({'network_manager': network_manager, 'cloud_tenant': tenant, 'network_type': network_type, 'network_name': name, 'ext_router': is_external, 'administrative_state': admin_state, 'shared': is_shared}) view.add.click() view.flash.assert_success_message('Cloud Network "{}" created'.format(name)) network = self.instantiate(name, provider) # Refresh provider's relationships to have new network displayed wait_for(provider.is_refreshed, func_kwargs=dict(refresh_delta=10), timeout=600) wait_for(lambda: network.exists, timeout=100, fail_func=network.browser.refresh) return network
[docs] def all(self): if self.filters.get('parent'): view = navigate_to(self.filters.get('parent'), 'CloudNetworks') else: view = navigate_to(self, 'All') list_networks_obj = view.entities.get_all(surf_pages=True) return [self.instantiate(name=n.name, provider_obj=None) for n in list_networks_obj]
@navigator.register(CloudNetworkCollection, 'All')
[docs]class All(CFMENavigateStep): VIEW = CloudNetworkView prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self): self.prerequisite_view.navigation.select('Networks', 'Networks')
@navigator.register(CloudNetwork, 'Details')
[docs]class Details(CFMENavigateStep): prerequisite = NavigateToAttribute('parent', 'All') VIEW = CloudNetworkDetailsView
[docs] def step(self): self.prerequisite_view.entities.get_entity(by_name=self.obj.name).click()
@navigator.register(CloudNetworkCollection, 'Add')
[docs]class Add(CFMENavigateStep): prerequisite = NavigateToSibling('All') VIEW = CloudNetworkAddView
[docs] def step(self): self.prerequisite_view.toolbar.configuration.item_select('Add a new Cloud Network')
@navigator.register(CloudNetwork, 'Edit')
[docs]class Edit(CFMENavigateStep): prerequisite = NavigateToSibling('Details') VIEW = CloudNetworkEditView
[docs] def step(self): self.prerequisite_view.toolbar.configuration.item_select('Edit this Cloud Network')