Source code for cfme.services.catalogs.orchestration_template

# -*- coding: utf-8 -*-
from widgetastic.widget import Text, Checkbox
from widgetastic_patternfly import BootstrapSelect, Button, Input
from widgetastic_manageiq import ScriptBox, Table
from navmazing import NavigateToAttribute, NavigateToSibling
from utils.update import Updateable
from utils.pretty import Pretty
from utils.appliance import Navigatable
from utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to


from . import ServicesCatalogView


[docs]class OrchestrationTemplatesView(ServicesCatalogView): title = Text("#explorer_title_text") @property def is_displayed(self): return ( super(OrchestrationTemplatesView, self).is_displayed and self.title.text == 'All Orchestration Templates' and self.orchestration_templates.is_opened and self.orchestration_templates.tree.currently_selected == ["All Orchestration Templates"])
[docs]class CopyTemplateForm(ServicesCatalogView): title = Text('#explorer_title_text') name = Input(name='name') description = Input(name="description") draft = Checkbox(name='draft') content = ScriptBox(locator="//pre[@class=' CodeMirror-line ']/span") cancel_button = Button('Cancel')
[docs]class TemplateForm(CopyTemplateForm): template_type = BootstrapSelect("type")
[docs]class AddTemplateView(TemplateForm): add_button = Button("Add") @property def is_displayed(self): return ( self.title.text == "Adding a new Orchestration Template" and self.orchestration_templates.is_opened )
[docs]class EditTemplateView(TemplateForm): save_button = Button('Save') reset_button = Button('Reset') @property def is_displayed(self): return ( self.title.text == "Editing {}".format(self.obj.name) and self.orchestration_templates.is_opened )
[docs]class CopyTemplateView(CopyTemplateForm): add_button = Button("Add") @property def is_displayed(self): return ( self.is_displayed and self.title.text == "Copying {}".format(self.obj.name) and self.orchestration_templates.is_opened )
[docs]class DetailsTemplateView(ServicesCatalogView): @property def is_displayed(self): """ Removing last 's' character from template_type. For ex. 'CloudFormation Templates' -> 'CloudFormation Template'""" return ( self.title.text == '{} "{}"'.format(self.obj.template_type[:-1], self.obj.template_name) and self.orchestration_templates.is_opened )
[docs]class TemplateTypeView(ServicesCatalogView): templates = Table("//table[@class='table table-striped table-bordered " "table-hover table-selectable]'") @property def is_displayed(self): return ( self.title.text == 'All {}'.format(self.obj.template_type) and self.orchestration_templates.is_opened )
[docs]class DialogForm(ServicesCatalogView): title = Text('#explorer_title_text') name = Input(name='dialog_name')
[docs]class AddDialogView(DialogForm): add_button = Button("Save") @property def is_displayed(self): return ( self.title.text == 'Adding a new Service Dialog from ' 'Orchestration Template "{}"'.format(self.obj.name) and self.orchestration_templates.is_opened )
[docs]class OrchestrationTemplate(Updateable, Pretty, Navigatable): def __init__(self, template_type=None, template_name=None, description=None, draft=None, content=None, appliance=None): Navigatable.__init__(self, appliance) self.template_type = template_type self.template_name = template_name self.description = description self.draft = draft self.content = content
[docs] def create(self, content): view = navigate_to(self, "AddTemplate") if self.template_type == "CloudFormation Templates": temp_type = "Amazon CloudFormation" elif self.template_type == "Heat Templates": temp_type = "OpenStack Heat" elif self.template_type == "Azure Templates": temp_type = "Microsoft Azure" else: raise Exception("ERROR template_type needs to be one of the above") view.fill({'name': self.template_name, 'description': self.description, 'template_type': temp_type, 'content': content}) view.add_button.click() view.flash.assert_success_message('Orchestration Template ' '"{}" was saved'.format(self.template_name))
[docs] def update(self, updates): view = navigate_to(self, "Edit") view.fill({'description': updates.get('description'), 'name': updates.get('template_name'), 'draft': updates.get('draft'), 'content': updates.get('content')}) view.save_button.click() view.flash.assert_success_message('Orchestration Template "{}" was saved'.format( self.template_name))
[docs] def delete(self): view = navigate_to(self, "Details") view.configuration.item_select("Remove this Orchestration Template", handle_alert=True) view.flash.assert_success_message('Orchestration Template "{}" was deleted.'.format( self.template_name))
[docs] def delete_all_templates(self): view = navigate_to(self, "TemplateType") from cfme.web_ui import paginator paginator.check_all() view.configuration.item_select("Remove selected Orchestration Templates", handle_alert=True)
[docs] def copy_template(self, template_name, content, draft=None, description=None): view = navigate_to(self, "CopyTemplate") view.fill({'name': template_name, 'content': content, 'draft': draft, 'description': description }) view.add_button.click() view.flash.assert_success_message('Orchestration Template "{}" was saved'.format( template_name))
[docs] def create_service_dialog_from_template(self, dialog_name, template_name): view = navigate_to(self, "AddDialog") view.fill({'name': dialog_name}) view.add_button.click() view.flash.assert_success_message('Service Dialog "{}" was successfully created'.format( dialog_name)) return template_name
@navigator.register(OrchestrationTemplate, 'All')
[docs]class All(CFMENavigateStep): prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn') VIEW = OrchestrationTemplatesView
[docs] def step(self): self.prerequisite_view.navigation.select('Services', 'Catalogs') self.view.orchestration_templates.tree.click_path("All Orchestration Templates")
[docs] def am_i_here(self, *args, **kwargs): return self.view.is_displayed
@navigator.register(OrchestrationTemplate, 'Details')
[docs]class Details(CFMENavigateStep): prerequisite = NavigateToSibling('All') VIEW = DetailsTemplateView
[docs] def step(self): self.view.orchestration_templates.tree.click_path("All Orchestration Templates", self.obj.template_type, self.obj.template_name)
[docs] def am_i_here(self, *args, **kwargs): return self.view.is_displayed
@navigator.register(OrchestrationTemplate, 'TemplateType')
[docs]class TemplateType(CFMENavigateStep): prerequisite = NavigateToSibling('All') VIEW = TemplateTypeView
[docs] def step(self): self.view.orchestration_templates.tree.click_path("All Orchestration Templates", self.obj.template_type)
@navigator.register(OrchestrationTemplate, 'AddDialog')
[docs]class AddDialog(CFMENavigateStep): prerequisite = NavigateToSibling('Details') VIEW = AddDialogView
[docs] def step(self): self.view.configuration.item_select('Create Service Dialog from Orchestration Template')
@navigator.register(OrchestrationTemplate, 'Edit')
[docs]class EditTemplate(CFMENavigateStep): prerequisite = NavigateToSibling('Details') VIEW = EditTemplateView
[docs] def step(self): self.view.configuration.item_select("Edit this Orchestration Template")
@navigator.register(OrchestrationTemplate, 'AddTemplate')
[docs]class AddTemplate(CFMENavigateStep): prerequisite = NavigateToSibling('TemplateType') VIEW = AddTemplateView
[docs] def step(self): self.view.configuration.item_select("Create new Orchestration Template")
@navigator.register(OrchestrationTemplate, 'CopyTemplate')
[docs]class CopyTemplate(CFMENavigateStep): prerequisite = NavigateToSibling('Details') VIEW = CopyTemplateView
[docs] def step(self): self.view.configuration.item_select("Copy this Orchestration Template")