class CreateEnvironmentDialog(AbstractDialog): def __init__(self): self.name = Input( xpath=".//input[@name='name']", element_name="Name" ) self.nameErrorMessage = HtmlElement( xpath="//div[contains(@class,'control-group') and " ".//input[contains(@name, 'name')]]" "//span[@class='help-inline']", element_name="name error message" ) self.version = Select( xpath=".//select[@name='release']", element_name="Version" ) AbstractDialog.__init__(self) def populate(self, name, version, submit=False): environment = Storage.get_current(TD_Cluster.NAME) environment.name = name environment.version = version rl = ResultList("Populate create new Environment dialog") \ .push(self.name.set_value(name)) \ .push(self.version.set_value(version)) if submit: rl.push(self.create()) return rl def verify_name_error(self, value): return self.nameErrorMessage.verify_value(value)
def __init__(self, parent=None): self.log_node = Select( xpath=".//div[contains(@class,'log-type-filter')]/select", element_name="Logs") self.source = Select( xpath=".//div[contains(@class,'log-source-filter')]/select", element_name="Source") self.level = Select( xpath=".//div[contains(@class,'log-level-filter')]/select", element_name="Min. level") self.show_button = Button( xpath=".//button[contains(@class,'show-logs-btn')]", element_name="Show") self.table_logs = HtmlElement( xpath=".//table[contains(@class,'table-logs')]", element_name="Logs table") AbstractView.__init__(self, parent)
def __init__(self, parent=None): self.addNodes = Link( xpath="//div//a[@class='btn btn-success btn-add-nodes']", element_name="Add nodes" ) self.deleteNodes = Button( xpath="//button[contains(@class,'btn-delete-nodes')]", element_name="Delete nodes" ) self.reassignRoles = Button( xpath="//button[contains(@class, 'btn-assign-roles')]" "and contains(text(),'Reassign Roles')]", element_name="Reassign roles" ) self.assignRoles = Button( xpath="//button[contains(" "@class, 'btn btn-success btn-assign-roles') " "and contains(text(),'Assign Roles')]", element_name="Assign roles" ) self.environment_status = HtmlElement( xpath="//div[@class='environment-status']", element_name="Environment status" ) self.groupBy = Select( xpath="//div[@class='cluster-toolbar-item nodes-filter']" "//select[@name='grouping']", element_name="Select group by" ) self.backToEnvironmentNodeList = Button( xpath="//div[@class='btn btn-go-to-cluster']", element_name="Back to Environment Node List" ) self.nodelist = HtmlElement( xpath="//div[@class='node-groups' and " "contains(div[@class='row-fluid node-group-header']" "//h4/text(),'{role}')]", element_name="'{role}' block" ) self.deploymentMode = Button( xpath="//button[contains(@class,'btn btn-cluster-actions')]", element_name="Deployment mode" ) self.alertError = HtmlElement( xpath="//div[contains(@class, 'alert-block') " "and contains(@class, 'global-error')]/p", element_name="Alert Error" ) AbstractView.__init__(self, parent)
def __init__(self): self.name = Input( xpath=".//input[@name='name']", element_name="Name" ) self.nameErrorMessage = HtmlElement( xpath="//div[contains(@class,'control-group') and " ".//input[contains(@name, 'name')]]" "//span[@class='help-inline']", element_name="name error message" ) self.version = Select( xpath=".//select[@name='release']", element_name="Version" ) AbstractDialog.__init__(self)
class Cluster_Logs_View(AbstractView): def __init__(self, parent=None): self.log_node = Select( xpath=".//div[contains(@class,'log-type-filter')]/select", element_name="Logs") self.source = Select( xpath=".//div[contains(@class,'log-source-filter')]/select", element_name="Source") self.level = Select( xpath=".//div[contains(@class,'log-level-filter')]/select", element_name="Min. level") self.show_button = Button( xpath=".//button[contains(@class,'show-logs-btn')]", element_name="Show") self.table_logs = HtmlElement( xpath=".//table[contains(@class,'table-logs')]", element_name="Logs table") AbstractView.__init__(self, parent) def set_log(self, value): return self.log_node.set_value(value) def set_source(self, name, value): return self.source.set_value(value) def set_level(self, name, value): return self.level.set_value(value) def set_log_filter(self, log, source, level): return ResultList("Set log filter parameters")\ .push(self.log_node.set_value(log))\ .push(self.source.set_value(source))\ .push(self.level.set_value(level))
def __init__(self): self.activationKey = Input( xpath=".//input[@name='activation_key']", element_name="Activation key" ) self.deploymentMode = Radio( xpath=".//div[contains(@class, 'mode-control-group')]" "//label[div[contains(@class, 'parameter-name') " "and text()='{mode}']]", element_name="Deployment mode [{mode}]" ) self.downloadType = Radio( xpath=".//div[contains(@class, 'custom-tumbler') " "and input[@type='radio' and @value='{type}']]", element_name="Download type [{type}]" ) self.instruction = HtmlElement( xpath=".//div[@class='alert alert-info rhel-license hide']", element_name="Instruction to deploy RHOS" ) self.message_configuration_ready = HtmlElement( xpath=".//div[contains(text(), 'Configuration is finished and " "now you can create your cluster!')]", element_name="Message: ready to create environment" ) self.name = Input( xpath=".//input[@name='name']", element_name="Name" ) self.nameErrorMessage = HtmlElement( xpath="//div[contains(@class,'control-group') and " ".//input[contains(@name, 'name')]]" "//span[@class='help-inline']", element_name="name error message" ) self.parameter_radio = Radio( xpath=".//label[contains(@class,'parameter-box') and " "div[contains(@class,'parameter-name')]/text()='{name}']", element_name="Parameter {name}" ) self.parameter_checkbox = Checkbox( xpath=".//label[contains(@class,'parameter-box') and " "div[contains(@class,'parameter-name')]='{name}']//" "input[@type='checkbox']", element_name="Parameter {name}") self.password = Input( xpath=".//input[@name='password']", element_name="Password" ) self.releaseDescription = HtmlElement( xpath=".//div[@class='release-description help-block']", element_name="Release description" ) self.serverHostname = Input( xpath=".//input[@name='satellite']", element_name="Satellite server hostname" ) self.storage_cinder = Radio( xpath=".//div[contains(@class, 'span6') and contains(./h5/text(), " "'Cinder backend')]//label[contains(@class,'parameter-box') " "and div[contains(@class,'parameter-name')]" "/text()='{name}']", element_name="Cinder backend {name}" ) self.storage_glance = Radio( xpath=".//div[contains(@class, 'span6') and contains(./h5/text(), " "'Glance backend')]//label[contains(@class,'parameter-box') " "and div[contains(@class,'parameter-name')]" "/text()='{name}']", element_name="Glance backend {name}" ) self.username = Input( xpath=".//input[@name='username']", element_name="Username" ) self.version = Select( xpath=".//select[@name='release']", element_name="Version" ) AbstractDialog.__init__(self)
class CreateEnvironmentDialog(AbstractDialog): def __init__(self): self.activationKey = Input( xpath=".//input[@name='activation_key']", element_name="Activation key" ) self.deploymentMode = Radio( xpath=".//div[contains(@class, 'mode-control-group')]" "//label[div[contains(@class, 'parameter-name') " "and text()='{mode}']]", element_name="Deployment mode [{mode}]" ) self.downloadType = Radio( xpath=".//div[contains(@class, 'custom-tumbler') " "and input[@type='radio' and @value='{type}']]", element_name="Download type [{type}]" ) self.instruction = HtmlElement( xpath=".//div[@class='alert alert-info rhel-license hide']", element_name="Instruction to deploy RHOS" ) self.message_configuration_ready = HtmlElement( xpath=".//div[contains(text(), 'Configuration is finished and " "now you can create your cluster!')]", element_name="Message: ready to create environment" ) self.name = Input( xpath=".//input[@name='name']", element_name="Name" ) self.nameErrorMessage = HtmlElement( xpath="//div[contains(@class,'control-group') and " ".//input[contains(@name, 'name')]]" "//span[@class='help-inline']", element_name="name error message" ) self.parameter_radio = Radio( xpath=".//label[contains(@class,'parameter-box') and " "div[contains(@class,'parameter-name')]/text()='{name}']", element_name="Parameter {name}" ) self.parameter_checkbox = Checkbox( xpath=".//label[contains(@class,'parameter-box') and " "div[contains(@class,'parameter-name')]='{name}']//" "input[@type='checkbox']", element_name="Parameter {name}") self.password = Input( xpath=".//input[@name='password']", element_name="Password" ) self.releaseDescription = HtmlElement( xpath=".//div[@class='release-description help-block']", element_name="Release description" ) self.serverHostname = Input( xpath=".//input[@name='satellite']", element_name="Satellite server hostname" ) self.storage_cinder = Radio( xpath=".//div[contains(@class, 'span6') and contains(./h5/text(), " "'Cinder backend')]//label[contains(@class,'parameter-box') " "and div[contains(@class,'parameter-name')]" "/text()='{name}']", element_name="Cinder backend {name}" ) self.storage_glance = Radio( xpath=".//div[contains(@class, 'span6') and contains(./h5/text(), " "'Glance backend')]//label[contains(@class,'parameter-box') " "and div[contains(@class,'parameter-name')]" "/text()='{name}']", element_name="Glance backend {name}" ) self.username = Input( xpath=".//input[@name='username']", element_name="Username" ) self.version = Select( xpath=".//select[@name='release']", element_name="Version" ) AbstractDialog.__init__(self) def select_deployment_mode(self, value): return self.deploymentMode.find(mode=value).click() def populate(self, settings, clickNext=False): environment = Storage.get_current(TD_Cluster.NAME) environment.name = settings["name"] environment.version = settings["version"] rl = ResultList("Populate create new Environment dialog") rl.push(self.name.set_value(settings["name"])) rl.push(WaitBot().wait_loading()) rl.push(self.version.set_value(settings["version"])) rl.push(self.name.click()) if "rh" in settings and len(settings["rh"]) > 0 and \ self.instruction.is_visible(): rh = settings["rh"] self.wait_loading() rl.push(self.select_download_mode(rh["mode"])) rl.push(self.username.set_value(rh["username"])) rl.push(self.password.set_value(rh["password"])) if rh["mode"] == 'rhn': rl.push(self.serverHostname.set_value(rh["host"])) rl.push(self.activationKey.set_value(rh["activation_key"])) if clickNext: self.wait_loading() rl.push(self.clickNext()) WaitBot().wait_loading() return rl def verify_name_error(self, value): return self.nameErrorMessage.verify_value(value) def verify_release_description(self, value): return self.releaseDescription.verify_value_contains(value) def select_download_mode(self, value): return self.downloadType.find(type=value).set_value("on") def set_parameter_radio(self, name, value): return self.parameter_radio.find(name=name).set_value(value) def set_parameter_checkbox(self, name, value): return self.parameter_checkbox.find(name=name).set_value(value) def create_environment(self, settings): """ :param settings: { "name": "", "version": "", "rh": { "mode": "", "username": "", "password": "", "host": "", "activation_key": "" }, "deployment_mode": "", "compute_type": "", "network": "", "storage": { "cinder": "", "glance": "" }, "services":{ "savanna": True, "murano": True } } """ rl = ResultList("Create new environment") rl.push(self.populate(settings, True)) rl.push(self.select_deployment_mode(settings["deployment_mode"])) rl.push(self.clickNext(())) #Set compute type (hypervisor) if "compute_type" in settings: rl.push(self.set_parameter_radio( settings["compute_type"], Radio.VALUE_ON)) rl.push(self.clickNext()) # Set network type if "network" in settings: rl.push(self.set_parameter_radio( settings["network"], Radio.VALUE_ON)) rl.push(self.clickNext()) if "storage" in settings: storage = settings["storage"] # Set cinder backend if "cinder" in storage: rl.push( self.storage_cinder.find(storage["cinder"]) .set_value(Radio.VALUE_ON)) # Set glance backend if "glance" in storage: rl.push( self.storage_glance.find(storage["glance"]) .set_value(Radio.VALUE_ON)) rl.push(self.clickNext()) if "services" in settings: services = settings["services"] if "savanna" in services and services["savanna"]: rl.push(self.set_parameter_checkbox( "Install Savanna", Checkbox.VALUE_ON)) if "murano" in services and services["murano"]: rl.push(self.set_parameter_checkbox( "Install Murano", Checkbox.VALUE_ON)) rl.push(self.clickNext()) rl.push(self.create()) return rl
def __init__(self, parent=None): self.save_settings = Button( xpath=".//div[contains(@class, 'apply-btn')]", element_name="Save Settings") self.cancel_changes = Button( xpath=".//div[contains(@class, 'btn-revert-changes')]", element_name="Cancel Changes") self.verify_networks = Button( xpath=".//div[contains(@class, 'verify-networks-btn')]", element_name="Verify networks") self.flat_dhcp_manager = Radio(xpath=".//div[@class='custom-tumbler' " "and input[@value='FlatDHCPManager']]", element_name="FlatDHCP Manager") self.vlan_manager = Radio(xpath=".//div[@class='custom-tumbler' " "and input[@value='VlanManager']]", element_name="Vlan Manager") self.ip_range_row = HtmlElement( xpath=".//div[@class='{name}']/" "div[contains(@class,'range-row ')][{num}]", element_name="Range row {name} [{num}]") self.public_vlan_id = Input( xpath=".//input[@name='public-vlan_start']", element_name="Public VLAN ID") self.public_netmask = Input(xpath=".//input[@name='public-netmask']", element_name="Public Netmask") self.public_gateway = Input(xpath=".//input[@name='public-gateway']", element_name="Public Gateway") self.management_cidr = Input(xpath=".//input[@name='management-cidr']", element_name="Management CIDR") self.management_vlan_id = Input( xpath=".//input[@name='management-vlan_start']", element_name="Management VLAN ID") self.storage_cidr = Input(xpath=".//input[@name='storage-cidr']", element_name="Storage CIDR") self.storage_vlan_id = Input( xpath=".//input[@name='storage-vlan_start']", element_name="Storage VLAN ID") self.vm_networks_cidr = Input(xpath=".//input[@name='fixed-cidr']", element_name="VM Networks CIDR") self.vm_networks_vlan_id = Input( xpath=".//input[@name='fixed-vlan_start']", element_name="VM Networks VLAN ID") self.vm_networks_vlan_id_range_start = Input( xpath=".//input[@name='fixed-vlan_range-start']", element_name="VM Networks VLAN ID range start") self.vm_networks_vlan_id_range_end = Input( xpath=".//input[@name='fixed-vlan_range-end']", element_name="VM Networks VLAN ID range end") self.vm_networks_number_of_networks = Input( xpath=".//input[@name='fixed-amount']", element_name="VM Networks. Number of networks") self.vm_networks_size_of_networks = Select( xpath=".//select[@name='fixed-network_size']", element_name="VM Networks. Size of networks") self.verify_networks = Button( xpath=".//button[contains(@class,'verify-networks-btn')]", element_name="Verify networks") self.cancel_changes = Button( xpath=".//button[contains(@class, 'btn-revert-changes')]", element_name="Cancel changes") self.save_settings = Button( xpath=".//button[contains(@class, 'btn-success apply-btn')]", element_name="Save settings") AbstractView.__init__(self, parent)