Esempio n. 1
0
 def setUp(self):
     self.name = 'name'
     self.uuid = 'uuid'
     self.name_gen = Mock(return_value=self.name)
     self.pv_service = Mock()
     self.si = Mock()
     self.clone_parmas = Mock()
     self.clone_res = Mock()
     self.clone_res.error = None
     self.clone_res.vm = Mock()
     self.clone_res.vm.summary = Mock()
     self.clone_res.vm.summary.config = Mock()
     self.clone_res.vm.summary.config.uuid = self.uuid
     self.pv_service.CloneVmParameters = Mock(
         return_value=self.clone_parmas)
     self.pv_service.clone_vm = Mock(return_value=self.clone_res)
     self.image_deployer = Mock()
     self.image_deployer.deploy_image = Mock(return_value=True)
     self.vm = Mock()
     self.vm.config = Mock()
     self.vm.config.uuid = self.uuid
     self.pv_service.find_vm_by_name = Mock(return_value=self.vm)
     self.cs_helper = Mock()
     self.model_parser = ResourceModelParser()
     self.deployer = VirtualMachineDeployer(self.pv_service, self.name_gen,
                                            self.image_deployer,
                                            self.cs_helper,
                                            self.model_parser)
Esempio n. 2
0
    def test_refresh_ip_choose_ipv4(self):
        nic1 = Mock()
        nic1.network = 'A Network'
        nic1.ipAddress = ['192.168.1.1']

        nic2 = Mock()
        nic2.network = 'A Network'
        nic2.ipAddress = ['2001:0db8:0a0b:12f0:0000:0000:0000:0001']

        guest = Mock()
        guest.toolsStatus = 'toolsOk'
        guest.net = [nic1, nic2]

        vm = Mock()
        vm.guest = guest

        pyvmomi_service = Mock()
        pyvmomi_service.find_by_uuid = Mock(return_value=vm)

        ip_regex = self._create_custom_param('ip_regex', '')
        refresh_ip_timeout = self._create_custom_param('refresh_ip_timeout',
                                                       '10')

        resource_instance = create_autospec(ResourceInfo)
        resource_instance.ResourceModelName = 'Generic Deployed App'
        resource_instance.ResourceAttributes = {
            'vm_uuis': '123',
            'cloud_provider': 'vCenter'
        }
        resource_instance.VmDetails = create_autospec(ResourceInfoVmDetails)
        resource_instance.VmDetails.VmCustomParams = [
            ip_regex, refresh_ip_timeout
        ]

        refresh_ip_command = RefreshIpCommand(pyvmomi_service,
                                              ResourceModelParser(), Mock())
        session = Mock()
        session.UpdateResourceAddress = Mock(return_value=True)
        session.GetResourceDetails = Mock(return_value=resource_instance)
        si = Mock()

        center_resource_model = VMwarevCenterResourceModel()
        center_resource_model.default_datacenter = 'QualiSB'
        center_resource_model.holding_network = 'anetwork'
        cancellation_context = Mock()

        # Act
        refresh_ip_command.refresh_ip(
            si=si,
            session=session,
            vcenter_data_model=center_resource_model,
            vm_uuid='machine1',
            resource_name='default_network',
            cancellation_context=cancellation_context,
            logger=Mock())

        # Assert
        self.assertTrue(
            session.UpdateResourceAddress.called_with('machine1',
                                                      '192.168.1.1'))
 def __init__(self):
     # self.cs_helper = CloudshellDriverHelper()
     self.model_parser = ResourceModelParser()
     self.ip_manager = VMIPManager()
     self.task_waiter = SynchronousTaskWaiter()
     self.pv_service = pyVmomiService(SmartConnect, Disconnect,
                                      self.task_waiter)
Esempio n. 4
0
    def test_get_vcenter_data_model_empty_vcenter_name(self):
        # Arrange
        data_model_retriever = VCenterDataModelRetriever(ResourceModelParser())
        api = Mock()
        vcenter_resource = create_autospec(ResourceContextDetails)

        vcenter_resource.model = 'VMWare vCenter'
        vcenter_resource.attrib = {
            'user': '******',
            'password': '******',
            'default_dvswitch': '',
            'holding_network': '',
            'vm_cluster': '',
            'vm_resource_pool': '',
            'vm_storage': '',
            'vm_location': '',
            'shutdown_method': '',
            'ovf_tool_path': '',
            'execution_server_selector': '',
            'reserved_networks': '',
            'default_datacenter': '',
            'promiscuous_mode': ''
        }

        api.GetResourceDetails = Mock(return_value=vcenter_resource)

        # Act + Assert
        self.assertRaises(ValueError,
                          data_model_retriever.get_vcenter_data_model, api, '')
Esempio n. 5
0
    def test_get_vcenter_data_model(self):
        # Arrange
        data_model_retriever = VCenterDataModelRetriever(ResourceModelParser())
        api = Mock()
        vcenter_resource = create_autospec(ResourceContextDetails)

        vcenter_resource.model = 'VMWare vCenter'
        vcenter_resource.attrib = {
            'user': '******',
            'password': '******',
            'default_dvswitch': '',
            'holding_network': '',
            'vm_cluster': '',
            'vm_resource_pool': '',
            'vm_storage': '',
            'vm_location': '',
            'shutdown_method': '',
            'ovf_tool_path': '',
            'execution_server_selector': '',
            'reserved_networks': '',
            'default_datacenter': '',
            'promiscuous_mode': '',
            'behavior_during_save': '',
            'saved_sandbox_storage': ''
        }

        api.GetResourceDetails = Mock(return_value=vcenter_resource)

        # Act
        vcenter_data_model = data_model_retriever.get_vcenter_data_model(
            api, 'VMWare Center')

        # Assert
        self.assertEqual(vcenter_data_model.user, 'uzer')
    def test_parse_resource__info_model_missing_attribute(self):
        resource_model_parser = ResourceModelParser()

        attributes = {'Access Mode': 'Trunk'}

        self.assertRaises(ValueError,
                          resource_model_parser.convert_to_resource_model,
                          attributes, VLANAutoResourceModel)
Esempio n. 7
0
 def __init__(self):
     super(PaloAltoStaticShellDriver, self).__init__()
     self._cli = None
     self.cs_helper = CloudshellDriverHelper()
     self.model_parser = ResourceModelParser()
     self.ip_manager = VMIPManager()
     self.task_waiter = SynchronousTaskWaiter()
     self.pv_service = pyVmomiService(SmartConnect, Disconnect,
                                      self.task_waiter)
Esempio n. 8
0
    def test_refresh_ip_choose_ip_by_regex(self):
        nic1 = Mock()
        nic1.network = 'A Network'
        nic1.ipAddress = ['192.168.1.1']

        nic2 = Mock()
        nic2.network = 'A Network'
        nic2.ipAddress = ['111.111.111.111']

        guest = Mock()
        guest.toolsStatus = 'toolsOk'
        guest.net = [nic1, nic2]

        vm = Mock()
        vm.guest = guest

        pyvmomi_service = Mock()
        pyvmomi_service.find_by_uuid = Mock(return_value=vm)

        ip_regex = self._create_custom_param('ip_regex', '192\.168\..*')
        refresh_ip_timeout = self._create_custom_param('refresh_ip_timeout',
                                                       '10')

        resource_model = create_autospec(GenericDeployedAppResourceModel)
        resource_model.fullname = 'Generic Deployed App'
        resource_model.vm_uuid = '123',
        resource_model.cloud_provider = 'vCenter'
        resource_model.vm_custom_params = [ip_regex, refresh_ip_timeout]

        refresh_ip_command = RefreshIpCommand(pyvmomi_service,
                                              ResourceModelParser(), Mock())
        session = Mock()
        session.UpdateResourceAddress = Mock(return_value=True)
        session.GetResourceDetails = Mock(return_value=resource_model)
        si = Mock()

        center_resource_model = VMwarevCenterResourceModel()
        center_resource_model.default_datacenter = 'QualiSB'
        center_resource_model.holding_network = 'anetwork'
        cancellation_context = Mock()

        # Act
        refresh_ip_command.refresh_ip(
            si=si,
            session=session,
            vcenter_data_model=center_resource_model,
            resource_model=resource_model,
            cancellation_context=cancellation_context,
            logger=Mock(),
            app_request_json=Mock())

        # Assert
        self.assertTrue(
            session.UpdateResourceAddress.called_with('machine1',
                                                      '192.168.1.1'))
Esempio n. 9
0
    def test_resource_models(self):
        ns = {
            'default':
            'http://schemas.qualisystems.com/ResourceManagement/DataModelSchema.xsd'
        }
        #It didn't work with //..//..//.. so ?I used os.path.dirname X times
        datamodel_path = os.path.join(
            os.path.dirname(
                os.path.dirname(
                    os.path.dirname(os.path.dirname(
                        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(
                    'cloudshell.cp.vcenter.models.' + model_name)
            except ValueError as value_error:
                validation_errors.append(
                    'Failed to parse Model Name {0} with error {1}.'.format(
                        model_name, 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 test_parse_resource_info_model_with_specified_type_by_string(self):
        resource_model_parser = ResourceModelParser()

        attributes = {
            'Access Mode': 'Trunk',
            'VLAN ID': '123',
            'Allocation Ranges': '2-4094',
            'Virtual Network': '',
            'Isolation Level': 'Exclusive'
        }

        self.assertRaises(ValueError,
                          resource_model_parser.convert_to_resource_model,
                          attributes, 'VLANAutoResourceModel')
    def test_parse_resource_info_model(self):
        resource_model_parser = ResourceModelParser()

        attributes = {
            'Access Mode': 'Trunk',
            'VLAN Id': '123',
            'Allocation Ranges': '2-4094',
            'Virtual Network': '',
            'Isolation Level': 'Exclusive'
        }
        resource_model = resource_model_parser.convert_to_resource_model(
            attributes, VLANAutoResourceModel)

        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 test_parse_resource_info_model_class_does_not_exist(self):
        resource_model_parser = ResourceModelParser()

        self.assertRaises(ValueError,
                          resource_model_parser.convert_to_resource_model, {},
                          None)
Esempio n. 13
0
    def __init__(self):
        """
        Initialize the driver session, this function is called everytime a new instance of the driver is created
        in here the driver is going to be bootstrapped

        :param context: models.QualiDriverModels.InitCommandContext
        """
        self.cs_helper = CloudshellDriverHelper()
        synchronous_task_waiter = SynchronousTaskWaiter()
        pv_service = pyVmomiService(connect=SmartConnect,
                                    disconnect=Disconnect,
                                    task_waiter=synchronous_task_waiter)
        self.resource_model_parser = ResourceModelParser()
        port_group_name_generator = DvPortGroupNameGenerator()

        vnic_to_network_mapper = VnicToNetworkMapper(
            quali_name_generator=port_group_name_generator)
        resource_remover = CloudshellResourceRemover()
        ovf_service = OvfImageDeployerService(self.resource_model_parser)

        self.vm_loader = VMLoader(pv_service)

        vm_deployer = VirtualMachineDeployer(
            pv_service=pv_service,
            name_generator=generate_unique_name,
            ovf_service=ovf_service,
            cs_helper=self.cs_helper,
            resource_model_parser=ResourceModelParser())

        dv_port_group_creator = DvPortGroupCreator(
            pyvmomi_service=pv_service,
            synchronous_task_waiter=synchronous_task_waiter)
        virtual_machine_port_group_configurer = \
            VirtualMachinePortGroupConfigurer(pyvmomi_service=pv_service,
                                              synchronous_task_waiter=synchronous_task_waiter,
                                              vnic_to_network_mapper=vnic_to_network_mapper,
                                              vnic_service=VNicService(),
                                              name_gen=port_group_name_generator)
        virtual_switch_to_machine_connector = VirtualSwitchToMachineConnector(
            dv_port_group_creator, virtual_machine_port_group_configurer)
        # Command Wrapper
        self.command_wrapper = CommandWrapper(
            pv_service=pv_service,
            cloud_shell_helper=self.cs_helper,
            resource_model_parser=self.resource_model_parser,
            context_based_logger_factory=ContextBasedLoggerFactory())
        # Deploy Command
        self.deploy_command = DeployCommand(deployer=vm_deployer)

        # Virtual Switch Revoke
        self.virtual_switch_disconnect_command = \
            VirtualSwitchToMachineDisconnectCommand(
                pyvmomi_service=pv_service,
                port_group_configurer=virtual_machine_port_group_configurer,
                resource_model_parser=self.resource_model_parser)

        # Virtual Switch Connect
        virtual_switch_connect_command = \
            VirtualSwitchConnectCommand(
                pv_service=pv_service,
                virtual_switch_to_machine_connector=virtual_switch_to_machine_connector,
                dv_port_group_name_generator=DvPortGroupNameGenerator(),
                vlan_spec_factory=VlanSpecFactory(),
                vlan_id_range_parser=VLanIdRangeParser())
        self.connection_orchestrator = ConnectionCommandOrchestrator(
            connector=virtual_switch_connect_command,
            disconnector=self.virtual_switch_disconnect_command,
            resource_model_parser=self.resource_model_parser)

        # Destroy VM Command
        self.destroy_virtual_machine_command = \
            DestroyVirtualMachineCommand(pv_service=pv_service,
                                         resource_remover=resource_remover,
                                         disconnector=self.virtual_switch_disconnect_command)
        # Power Command
        self.vm_power_management_command = \
            VirtualMachinePowerManagementCommand(pyvmomi_service=pv_service,
                                                 synchronous_task_waiter=synchronous_task_waiter)

        ip_manager = VMIPManager()

        # Refresh IP command
        self.refresh_ip_command = RefreshIpCommand(
            pyvmomi_service=pv_service,
            resource_model_parser=ResourceModelParser(),
            ip_manager=ip_manager)

        # Save Snapshot
        self.snapshot_saver = SaveSnapshotCommand(
            pyvmomi_service=pv_service, task_waiter=synchronous_task_waiter)

        # Snapshot Restorer
        self.snapshot_restorer = SnapshotRestoreCommand(
            pyvmomi_service=pv_service, task_waiter=synchronous_task_waiter)

        self.snapshots_retriever = RetrieveSnapshotsCommand(
            pyvmomi_service=pv_service)
Esempio n. 14
0
    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.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)

        self.connection_details_retriever = ResourceConnectionDetailsRetriever(
            helpers)
        self.configurer = VirtualMachinePortGroupConfigurer(
            self.py_vmomi_service, self.synchronous_task_waiter,
            vnic_to_network_mapper, Mock(), 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)
Esempio n. 15
0
 def __init__(self):
     self.model_parser = ResourceModelParser()
     self.ip_manager = VMIPManager()
     self.task_waiter = SynchronousTaskWaiter()
     self.logger = get_qs_logger('VM AutoLoad')
     self.pv_service = pyVmomiService(SmartConnect, Disconnect, self.task_waiter)
 def __init__(self):
     self.parser = ResourceModelParser()
     self.pv_service = pyVmomiService(SmartConnect, Disconnect,
                                      SynchronousTaskWaiter())
     self.context_based_logger_factory = ContextBasedLoggerFactory()
Esempio n. 17
0
 def __init__(self):
     self.resource_model_parser = ResourceModelParser()
     self.cs_helper = CloudshellDriverHelper()