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, [])
Example #2
0
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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
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)
Example #10
0
    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')
Example #11
0
def main():
    DeployedAppService(ResourceModelParser())\
        .refresh_ip()
Example #12
0
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'])
Example #16
0
def main():
    DeployedAppService(ResourceModelParser())\
        .destroy_vm()
Example #17
0
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'])