def test_resource_models(self): ns = { 'default': 'http://schemas.qualisystems.com/ResourceManagement/DataModelSchema.xsd' } datamodel_path = os.path.join( os.path.dirname(__file__), '../../vCenterShellPackage/DataModel/datamodel.xml') tree = ET.parse(datamodel_path) root = tree.getroot() resource_models = root.findall('.//default:ResourceModel', ns) self.assertGreater(len(resource_models), 0) validation_errors = [] for resource_model in resource_models: model_name = ResourceModelParser().get_resource_model_class_name( resource_model.attrib['Name']) try: klass = ResourceModelParser().get_class('models.' + model_name) except ValueError as value_error: validation_errors.append(value_error.message) continue attribute_names = self.get_model_attributes(ns, resource_model) for attribute_name in attribute_names: if not hasattr(klass, attribute_name): validation_errors.append( 'attribute {0} is missing on class {1}'.format( attribute_name, model_name)) for validation_error in validation_errors: print validation_error self.assertSequenceEqual(validation_errors, [])
def main(): # get vlan auto resource model resource_context = helpers.get_resource_context_details() resource_model_parser = ResourceModelParser() vlan_auto_resource_model = resource_model_parser.convert_to_resource_model(resource_context) # get reservation details reservation_context = helpers.get_reservation_context_details() # Start api session api = helpers.get_api_session() vlan_service_provider = VlanResolverProvider(vlan_resource_model=vlan_auto_resource_model, pool_id=reservation_context.domain, reservation_id=reservation_context.id, owner_id=resource_context.name, api=api) if not vlan_service_provider.is_vlan_resolved(): # resolve vlan id vlan_id = vlan_service_provider.resolve_vlan_auto() vlan_id = str(vlan_id) # set resolved vlan id to virtual network attribute api.SetServiceAttributesValues(reservation_context.id, resource_context.name, [AttributeNameValue( vlan_auto_resource_model.virtual_network_attribute, vlan_id)]) _logger.info("{0} resolved vlan id {1} successfully".format(resource_context.name, vlan_id)) else: vlan_id = str(vlan_auto_resource_model.virtual_network) _logger.info("{0} already has a resolved vlan id: {1}".format(resource_context.name, vlan_id)) # command result for programmatic use set_command_result(vlan_id)
def test_app_templates(self): xml_files = self.get_app_templates_xml_files() for xml_file in xml_files: tree = ET.parse(xml_file) root = tree.getroot() deployment_nodes = root.findall('.//DeploymentService') validation_errors = [] for deployment_node in deployment_nodes: resource_model_name = self.get_class_name_from_model_node( deployment_node) try: klass = ResourceModelParser().get_class( 'models.' + resource_model_name) except ValueError as value_error: validation_errors.append(value_error.message) continue attribute_names = self.get_template_attributes(deployment_node) for attribute_name in attribute_names: if not hasattr(klass, attribute_name): validation_errors.append( 'attribute {0} is missing on class {1}'.format( attribute_name, resource_model_name)) for validation_error in validation_errors: print validation_error self.assertSequenceEqual(validation_errors, [])
def test_parse_resource_model(self): resource_model_parser = ResourceModelParser() resource_info = create_autospec(ResourceContextDetails) resource_info.model = 'VLAN Auto' resource_info.attrib = {'Access Mode': 'Trunk', 'VLAN Id': '123', 'Allocation Ranges': '2-4094', 'Virtual Network': '', 'Isolation Level': 'Exclusive'} resource_model = resource_model_parser.convert_to_resource_model(resource_info) self.assertEqual(resource_model.access_mode, 'Trunk') self.assertEqual(resource_model.vlan_id, '123') self.assertEqual(resource_model.isolation_level, 'Exclusive') self.assertEqual(resource_model.allocation_ranges, '2-4094') self.assertEqual(resource_model.virtual_network, '') self.assertEqual(resource_model.virtual_network_attribute, 'Virtual Network')
def __init__(self): py_vmomi_service = pyVmomiService(SmartConnect, Disconnect) cloudshell_data_retriever_service = CloudshellDataRetrieverService() resource_connection_details_retriever = ResourceConnectionDetailsRetriever( helpers, cloudshell_data_retriever_service) resource_remover = CloudshellResourceRemover(helpers) command_wrapper = CommandWrapper(getLogger, py_vmomi_service) template_deployer = VirtualMachineDeployer(py_vmomi_service, generate_unique_name) deploy_from_template_command = DeployFromTemplateCommand( template_deployer) resource_model_parser = ResourceModelParser() vc_model_retriever = VCenterDataModelRetriever(helpers, resource_model_parser) vc_data_model = vc_model_retriever.get_vcenter_data_model() #vnic_to_network_mapper = VnicToNetworkMapper(name_generator, vc_data_model.default_network) port_group_name_generator = DvPortGroupNameGenerator() vnic_to_network_mapper = VnicToNetworkMapper(port_group_name_generator) # Virtual Switch Connect synchronous_task_waiter = SynchronousTaskWaiter() dv_port_group_creator = DvPortGroupCreator(py_vmomi_service, synchronous_task_waiter) virtual_machine_port_group_configurer = VirtualMachinePortGroupConfigurer( py_vmomi_service, synchronous_task_waiter, vnic_to_network_mapper, VNicService()) virtual_switch_to_machine_connector = VirtualSwitchToMachineConnector( dv_port_group_creator, virtual_machine_port_group_configurer) virtual_switch_connect_command = VirtualSwitchConnectCommand( py_vmomi_service, virtual_switch_to_machine_connector, DvPortGroupNameGenerator(), VlanSpecFactory(), VLanIdRangeParser(), getLogger('VirtualSwitchConnectCommand')) # Virtual Switch Revoke virtual_switch_disconnect_command = \ VirtualSwitchToMachineDisconnectCommand(py_vmomi_service, virtual_machine_port_group_configurer, vc_data_model.default_network) destroy_virtual_machine_command = DestroyVirtualMachineCommand( py_vmomi_service, resource_remover, virtual_switch_disconnect_command) # Power Command vm_power_management_command = VirtualMachinePowerManagementCommand( py_vmomi_service, synchronous_task_waiter) # Refresh IP command refresh_ip_command = RefreshIpCommand( py_vmomi_service, cloudshell_data_retriever_service, helpers, resource_model_parser) self.commandExecuterService = CommandExecuterService( jsonpickle, helpers, command_wrapper, resource_connection_details_retriever, vc_data_model, destroy_virtual_machine_command, deploy_from_template_command, virtual_switch_connect_command, virtual_switch_disconnect_command, vm_power_management_command, refresh_ip_command)
def test_parse_resource_info_model_class_does_not_exist(self): resource_model_parser = ResourceModelParser() resource_info = create_autospec(ResourceInfo) resource_info.ResourceModelName = 'NOT EXISTS' self.assertRaises(ValueError, resource_model_parser.convert_to_resource_model, resource_info)
def test_parse_resource__info_model_missing_attribute(self): resource_model_parser = ResourceModelParser() resource_info = create_autospec(ResourceInfo) resource_info.ResourceModelName = 'VLAN Auto' resource_info.ResourceAttributes = {'Access Mode': 'Trunk'} self.assertRaises(ValueError, resource_model_parser.convert_to_resource_model, resource_info)
def test_parse_resource_model_missing_attribute(self): resource_model_parser = ResourceModelParser() resource_info = create_autospec(ResourceContextDetails) # ResourceInfo({'Name': '', 'ResourceModelName': 'Simple'}) resource_info.model = 'VLAN Auto' resource_info.attrib = {'Access Mode': 'Trunk'} self.assertRaises(ValueError, resource_model_parser.convert_to_resource_model, resource_info)
def main(): # get vlan auto resource model resource_context = helpers.get_resource_context_details() resource_model_parser = ResourceModelParser() vlan_auto_resource_model = resource_model_parser.convert_to_resource_model( resource_context) # get reservation details reservation_context = helpers.get_reservation_context_details() # Start api session api = helpers.get_api_session() vlan_service_provider = VlanResolverProvider( vlan_resource_model=vlan_auto_resource_model, pool_id=reservation_context.domain, reservation_id=reservation_context.id, owner_id=resource_context.name, api=api) if not vlan_service_provider.is_vlan_resolved(): # resolve vlan id vlan_id = vlan_service_provider.resolve_vlan_auto() vlan_id = str(vlan_id) # set resolved vlan id to virtual network attribute api.SetServiceAttributesValues( reservation_context.id, resource_context.name, [ AttributeNameValue( vlan_auto_resource_model.virtual_network_attribute, vlan_id) ]) _logger.info("{0} resolved vlan id {1} successfully".format( resource_context.name, vlan_id)) else: vlan_id = str(vlan_auto_resource_model.virtual_network) _logger.info("{0} already has a resolved vlan id: {1}".format( resource_context.name, vlan_id)) # command result for programmatic use set_command_result(vlan_id)
def test_parse_resource_model(self): resource_model_parser = ResourceModelParser() resource_info = create_autospec(ResourceContextDetails) resource_info.model = 'VLAN Auto' resource_info.attrib = { 'Access Mode': 'Trunk', 'VLAN Id': '123', 'Allocation Ranges': '2-4094', 'Virtual Network': '', 'Isolation Level': 'Exclusive' } resource_model = resource_model_parser.convert_to_resource_model( resource_info) self.assertEqual(resource_model.access_mode, 'Trunk') self.assertEqual(resource_model.vlan_id, '123') self.assertEqual(resource_model.isolation_level, 'Exclusive') self.assertEqual(resource_model.allocation_ranges, '2-4094') self.assertEqual(resource_model.virtual_network, '') self.assertEqual(resource_model.virtual_network_attribute, 'Virtual Network')
def main(): DeployedAppService(ResourceModelParser())\ .refresh_ip()
def main(): DeployedAppService(ResourceModelParser())\ .power_on()
def setUp(self): self._si = None self.virtual_machine_path = 'SergiiT' self.virtual_machine_name = 'JustTestNeedToBeRemoved' self.vm_uuid = "422254d5-5226-946e-26fb-60c21898b731" self.vcenter_name = "QualiSB" self.port_group_path = 'QualiSB' self.dv_switch_path = 'QualiSB' self.network_path = 'QualiSB' self.dv_switch_name = 'dvSwitch-SergiiT' self.dv_port_group_name = 'aa-dvPortGroup3B' self.network = Mock() self.network.key = "network-key" self.network.config.distributedVirtualSwitch.uuid = "422254d5-5226-946e-26fb-60c21898b73f" self.py_vmomi_service = Mock() self.vm = Mock() self.vm.config.hardware = Mock() self.vnic = Mock(spec=vim.vm.device.VirtualEthernetCard) self.vnic.deviceInfo = Mock() self.vm.config.hardware.device = [self.vnic] self.py_vmomi_service.find_by_uuid = lambda a, b, c: self.vm self.py_vmomi_service.find_network_by_name = Mock( return_value=self.network) self.synchronous_task_waiter = Mock() self.synchronous_task_waiter.wait_for_task = Mock( return_value="TASK OK") self.si = Mock() resource_model_parser = ResourceModelParser() #vc_model_retriever = VCenterDataModelRetriever(helpers, resource_model_parser, cloudshell_data_retriever_service) #vc_data_model = vc_model_retriever.get_vcenter_data_model() vc_data_model = Mock() name_generator = generate_unique_name #vnic_to_network_mapper = VnicToNetworkMapper(name_generator, vc_data_model.default_network) vnic_to_network_mapper = VnicToNetworkMapper(name_generator) helpers = Mock() cs_retriever_service = Mock() session = Mock() resource_context = Mock() connection_details = Mock() helpers.get_resource_context_details = Mock( return_value=resource_context) helpers.get_api_session = Mock(return_value=session) cs_retriever_service.getVCenterConnectionDetails = Mock( return_value=connection_details) retriever = ResourceConnectionDetailsRetriever(helpers, cs_retriever_service) self.data_retriever_service = CloudshellDataRetrieverService() self.connection_details_retriever = ResourceConnectionDetailsRetriever( helpers, self.data_retriever_service, ) self.configurer = VirtualMachinePortGroupConfigurer( self.py_vmomi_service, self.synchronous_task_waiter, vnic_to_network_mapper, Mock()) # pyvmomi_service, synchronous_task_waiter, vnic_to_network_mapper, vnic_common self.creator = DvPortGroupCreator(self.py_vmomi_service, self.synchronous_task_waiter) self.connector = VirtualSwitchToMachineConnector( self.creator, self.configurer)
def get_class_name_from_model_node(self, model_node): resource_model = model_node.attrib['Name'] return ResourceModelParser.get_resource_model_class_name(resource_model)
def get_attribute_name_from_attribute_node(self, attribute_node): return ResourceModelParser.get_property_name_from_attribute_name(attribute_node.attrib['Name'])
def main(): DeployedAppService(ResourceModelParser())\ .destroy_vm()
def main(): DeployedAppService(ResourceModelParser())\ .connect()
def get_class_name_from_model_node(self, model_node): resource_model = model_node.attrib['Name'] return ResourceModelParser.get_resource_model_class_name( resource_model)
def get_attribute_name_from_attribute_node(self, attribute_node): return ResourceModelParser.get_property_name_from_attribute_name( attribute_node.attrib['Name'])