Esempio n. 1
0
def get_inner_objects(vim,
                      base_obj,
                      path,
                      inner_type,
                      properties_to_collect=None,
                      all=False):
    """Gets the list of inner objects of the type specified."""
    client_factory = vim.client.factory
    base_type = base_obj._type
    traversal_spec = vutil.build_traversal_spec(client_factory, 'inner',
                                                base_type, path, False, [])
    object_spec = vutil.build_object_spec(client_factory, base_obj,
                                          [traversal_spec])
    property_spec = vutil.build_property_spec(
        client_factory,
        type_=inner_type,
        properties_to_collect=properties_to_collect,
        all_properties=all)
    property_filter_spec = vutil.build_property_filter_spec(
        client_factory, [property_spec], [object_spec])
    options = client_factory.create('ns0:RetrieveOptions')
    options.maxObjects = CONF.vmware.maximum_objects
    return vim.RetrievePropertiesEx(vim.service_content.propertyCollector,
                                    specSet=[property_filter_spec],
                                    options=options)
Esempio n. 2
0
    def _create_property_filter(self, property_collector, config):
        connection = self.connection
        vim = connection.vim
        service_content = vim.service_content
        client_factory = vim.client.factory

        if not config.cluster_name:
            LOG.info("No cluster specified")
            container = service_content.rootFolder
        else:
            container = get_cluster_ref_by_name(connection, config.cluster_name)
            if not container:
                LOG.error(_LE("Cannot find cluster with name '{}'").format(config.cluster_name))
                exit(2)

        container_view = connection.invoke_api(vim, 'CreateContainerView', service_content.viewManager,
                                               container=container,
                                               type=['VirtualMachine'],
                                               recursive=True)

        traversal_spec = vim_util.build_traversal_spec(client_factory, 'traverseEntities', 'ContainerView', 'view',
                                                       False, None)
        object_spec = vim_util.build_object_spec(client_factory, container_view, [traversal_spec])

        # Only static types work, so we have to get all hardware, still faster than retrieving individual items
        vm_properties = ['runtime.powerState', 'config.hardware.device']
        property_specs = [vim_util.build_property_spec(client_factory, 'VirtualMachine', vm_properties)]

        property_filter_spec = vim_util.build_property_filter_spec(client_factory, property_specs, [object_spec])

        return connection.invoke_api(vim, 'CreateFilter', property_collector, spec=property_filter_spec,
                                     partialUpdates=True)  # -> PropertyFilter
Esempio n. 3
0
    def _get_datacenter(vim, entity_ref, max_objects=100):
        """Get the inventory path of a managed entity.
        :param vim: Vim object
        :param entity_ref: managed entity reference
        :return: the datacenter of the entity_ref
        """
        client_factory = vim.client.factory
        property_collector = vim.service_content.propertyCollector

        prop_spec = vim_util.build_property_spec(client_factory, 'Datacenter', ['name'])
        select_set = vim_util.build_selection_spec(client_factory, 'ParentTraversalSpec')
        select_set = vim_util.build_traversal_spec(
            client_factory, 'ParentTraversalSpec', 'ManagedEntity', 'parent',
            False, [select_set])
        obj_spec = vim_util.build_object_spec(client_factory, entity_ref, select_set)
        prop_filter_spec = vim_util.build_property_filter_spec(client_factory,
                                                               [prop_spec], [obj_spec])
        options = client_factory.create('ns0:RetrieveOptions')
        options.maxObjects = max_objects
        retrieve_result = vim.RetrievePropertiesEx(
            property_collector,
            specSet=[prop_filter_spec],
            options=options)

        with vim_util.WithRetrieval(vim, retrieve_result) as objects:
            for obj in objects:
                if obj.obj._type == 'Datacenter':
                    return obj.obj
Esempio n. 4
0
 def test_build_traversal_spec(self):
     client_factory = mock.Mock()
     sel_spec = mock.Mock()
     traversal_spec = vim_util.build_traversal_spec(client_factory,
                                                    'dc_to_hf',
                                                    'Datacenter',
                                                    'hostFolder', False,
                                                    [sel_spec])
     self.assertEqual("dc_to_hf", traversal_spec.name)
     self.assertEqual("hostFolder", traversal_spec.path)
     self.assertEqual([sel_spec], traversal_spec.selectSet)
     self.assertFalse(traversal_spec.skip)
     self.assertEqual("Datacenter", traversal_spec.type)
Esempio n. 5
0
 def test_build_traversal_spec(self):
     client_factory = mock.Mock()
     sel_spec = mock.Mock()
     traversal_spec = vim_util.build_traversal_spec(client_factory,
                                                    'dc_to_hf',
                                                    'Datacenter',
                                                    'hostFolder', False,
                                                    [sel_spec])
     self.assertEqual("dc_to_hf", traversal_spec.name)
     self.assertEqual("hostFolder", traversal_spec.path)
     self.assertEqual([sel_spec], traversal_spec.selectSet)
     self.assertFalse(traversal_spec.skip)
     self.assertEqual("Datacenter", traversal_spec.type)
Esempio n. 6
0
def get_inner_objects(vim, base_obj, path, inner_type, properties_to_collect=None, all=False):
    """Gets the list of inner objects of the type specified."""
    client_factory = vim.client.factory
    base_type = base_obj._type
    traversal_spec = vutil.build_traversal_spec(client_factory, "inner", base_type, path, False, [])
    object_spec = vutil.build_object_spec(client_factory, base_obj, [traversal_spec])
    property_spec = vutil.build_property_spec(
        client_factory, type_=inner_type, properties_to_collect=properties_to_collect, all_properties=all
    )
    property_filter_spec = vutil.build_property_filter_spec(client_factory, [property_spec], [object_spec])
    options = client_factory.create("ns0:RetrieveOptions")
    options.maxObjects = CONF.vmware.maximum_objects
    return vim.RetrievePropertiesEx(
        vim.service_content.propertyCollector, specSet=[property_filter_spec], options=options
    )
Esempio n. 7
0
    def _get_portgroups(self, max_objects=100):
        """Get all portgroups on the switch"""
        vim = self.connection.vim
        property_collector = vim.service_content.propertyCollector

        traversal_spec = vim_util.build_traversal_spec(
                vim.client.factory,
                "dvs_to_dvpg",
                "DistributedVirtualSwitch",
                "portgroup",
                False,
                [])
        object_spec = vim_util.build_object_spec(
                vim.client.factory,
                self._dvs,
                [traversal_spec])
        property_spec = vim_util.build_property_spec(
                vim.client.factory,
                "DistributedVirtualPortgroup",
                ["key", "name", "config.configVersion", "customValue", "vm"])

        property_filter_spec = vim_util.build_property_filter_spec(
                vim.client.factory,
                [property_spec],
                [object_spec])
        options = vim.client.factory.create('ns0:RetrieveOptions')
        options.maxObjects = max_objects

        pc_result = vim.RetrievePropertiesEx(property_collector, specSet=[property_filter_spec],
                options=options)
        result = []

        with vim_util.WithRetrieval(vim, pc_result) as pc_objects:
            for objContent in pc_objects:
                props = {prop.name : prop.val for prop in objContent.propSet}
                props["ref"] = objContent.obj
                props["configVersion"] = props["config.configVersion"]
                result.append(props)

        return result