Exemplo n.º 1
0
def process_links(info, callback):
    '''
    Process link header, calls callback for every link header with the URL and relation as options.
    '''
    if 'link' in info:
        link = info['link']
        for url, relation in re.findall(r'<([^>]+)>;rel="(\w+)"', link):
            callback(unquote(url), relation)
    def get_dvs_portgroup(self):
        pgroups = self.pgs

        pglist = []
        for pg in pgroups:
            trunk = False
            pvlan = False
            vlanInfo = pg.config.defaultPortConfig.vlan
            cl1 = vim.dvs.VmwareDistributedVirtualSwitch.TrunkVlanSpec
            cl2 = vim.dvs.VmwareDistributedVirtualSwitch.PvlanSpec
            vlan_id_list = []
            if isinstance(vlanInfo, cl1):
                trunk = True
                for item in vlanInfo.vlanId:
                    if item.start == item.end:
                        vlan_id_list.append(str(item.start))
                    else:
                        vlan_id_list.append(str(item.start) + '-' + str(item.end))
            elif isinstance(vlanInfo, cl2):
                pvlan = True
                vlan_id_list.append(str(vlanInfo.pvlanId))
            else:
                vlan_id_list.append(str(vlanInfo.vlanId))

            if self.cmp_vlans:
                if self.vlan_match(pg.config.uplink, self.module.params['show_uplink'], vlan_id_list):
                    pglist.append(dict(
                        name=unquote(pg.name),
                        trunk=trunk,
                        pvlan=pvlan,
                        vlan_id=','.join(vlan_id_list),
                        dvswitch=pg.config.distributedVirtualSwitch.name))
            else:
                pglist.append(dict(
                    name=unquote(pg.name),
                    trunk=trunk,
                    pvlan=pvlan,
                    vlan_id=','.join(vlan_id_list),
                    dvswitch=pg.config.distributedVirtualSwitch.name))

        return pglist
    def gather_cluster_info(self):
        """
        Gather information about cluster
        """
        results = dict(changed=False, clusters=dict())

        if self.schema == 'summary':
            for cluster in self.cluster_objs:
                # Default values
                ha_failover_level = None
                ha_restart_priority = None
                ha_vm_tools_monitoring = None
                ha_vm_min_up_time = None
                ha_vm_max_failures = None
                ha_vm_max_failure_window = None
                ha_vm_failure_interval = None
                enabled_vsan = False
                vsan_auto_claim_storage = False
                hosts = []

                # Hosts
                for host in cluster.host:
                    hosts.append({
                        'name':
                        host.name,
                        'folder':
                        self.get_vm_path(self.content, host),
                    })

                # HA
                das_config = cluster.configurationEx.dasConfig
                if das_config.admissionControlPolicy:
                    ha_failover_level = das_config.admissionControlPolicy.failoverLevel
                if das_config.defaultVmSettings:
                    ha_restart_priority = das_config.defaultVmSettings.restartPriority,
                    ha_vm_tools_monitoring = das_config.defaultVmSettings.vmToolsMonitoringSettings.vmMonitoring,
                    ha_vm_min_up_time = das_config.defaultVmSettings.vmToolsMonitoringSettings.minUpTime,
                    ha_vm_max_failures = das_config.defaultVmSettings.vmToolsMonitoringSettings.maxFailures,
                    ha_vm_max_failure_window = das_config.defaultVmSettings.vmToolsMonitoringSettings.maxFailureWindow,
                    ha_vm_failure_interval = das_config.defaultVmSettings.vmToolsMonitoringSettings.failureInterval,

                # DRS
                drs_config = cluster.configurationEx.drsConfig

                # VSAN
                if hasattr(cluster.configurationEx, 'vsanConfigInfo'):
                    vsan_config = cluster.configurationEx.vsanConfigInfo
                    enabled_vsan = vsan_config.enabled
                    vsan_auto_claim_storage = vsan_config.defaultConfig.autoClaimStorage

                tag_info = []
                if self.params.get('show_tag'):
                    vmware_client = VmwareRestClient(self.module)
                    tag_info = vmware_client.get_tags_for_cluster(
                        cluster_mid=cluster._moId)

                resource_summary = self.to_json(cluster.GetResourceUsage())
                if '_vimtype' in resource_summary:
                    del resource_summary['_vimtype']

                results['clusters'][unquote(cluster.name)] = dict(
                    hosts=hosts,
                    enable_ha=das_config.enabled,
                    ha_failover_level=ha_failover_level,
                    ha_vm_monitoring=das_config.vmMonitoring,
                    ha_host_monitoring=das_config.hostMonitoring,
                    ha_admission_control_enabled=das_config.
                    admissionControlEnabled,
                    ha_restart_priority=ha_restart_priority,
                    ha_vm_tools_monitoring=ha_vm_tools_monitoring,
                    ha_vm_min_up_time=ha_vm_min_up_time,
                    ha_vm_max_failures=ha_vm_max_failures,
                    ha_vm_max_failure_window=ha_vm_max_failure_window,
                    ha_vm_failure_interval=ha_vm_failure_interval,
                    enabled_drs=drs_config.enabled,
                    drs_enable_vm_behavior_overrides=drs_config.
                    enableVmBehaviorOverrides,
                    drs_default_vm_behavior=drs_config.defaultVmBehavior,
                    drs_vmotion_rate=drs_config.vmotionRate,
                    enabled_vsan=enabled_vsan,
                    vsan_auto_claim_storage=vsan_auto_claim_storage,
                    tags=tag_info,
                    resource_summary=resource_summary,
                    moid=cluster._moId,
                    datacenter=get_parent_datacenter(cluster).name)
        else:
            for cluster in self.cluster_objs:
                results['clusters'][unquote(cluster.name)] = self.to_json(
                    cluster, self.properties)

        self.module.exit_json(**results)
Exemplo n.º 4
0
    def gather_dvs_portgroup_info(self):
        dvs_lists = self.dvsls
        result = dict()
        for dvs in dvs_lists:
            result[dvs.name] = list()
            for dvs_pg in dvs.portgroup:
                network_policy = dict()
                teaming_policy = dict()
                port_policy = dict()
                vlan_info = dict()

                if self.module.params[
                        'show_network_policy'] and dvs_pg.config.defaultPortConfig.securityPolicy:
                    network_policy = dict(
                        forged_transmits=dvs_pg.config.defaultPortConfig.
                        securityPolicy.forgedTransmits.value,
                        promiscuous=dvs_pg.config.defaultPortConfig.
                        securityPolicy.allowPromiscuous.value,
                        mac_changes=dvs_pg.config.defaultPortConfig.
                        securityPolicy.macChanges.value)
                if self.module.params['show_teaming_policy']:
                    # govcsim does not have uplinkTeamingPolicy, remove this check once
                    # PR https://github.com/vmware/govmomi/pull/1524 merged.
                    if dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy:
                        teaming_policy = dict(
                            policy=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.policy.value,
                            inbound_policy=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.reversePolicy.value,
                            notify_switches=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.notifySwitches.value,
                            rolling_order=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.rollingOrder.value,
                        )

                if self.params['show_port_policy']:
                    # govcsim does not have port policy
                    if dvs_pg.config.policy:
                        port_policy = dict(
                            block_override=dvs_pg.config.policy.
                            blockOverrideAllowed,
                            ipfix_override=dvs_pg.config.policy.
                            ipfixOverrideAllowed,
                            live_port_move=dvs_pg.config.policy.
                            livePortMovingAllowed,
                            network_rp_override=dvs_pg.config.policy.
                            networkResourcePoolOverrideAllowed,
                            port_config_reset_at_disconnect=dvs_pg.config.
                            policy.portConfigResetAtDisconnect,
                            security_override=dvs_pg.config.policy.
                            securityPolicyOverrideAllowed,
                            shaping_override=dvs_pg.config.policy.
                            shapingOverrideAllowed,
                            traffic_filter_override=dvs_pg.config.policy.
                            trafficFilterOverrideAllowed,
                            uplink_teaming_override=dvs_pg.config.policy.
                            uplinkTeamingOverrideAllowed,
                            vendor_config_override=dvs_pg.config.policy.
                            vendorConfigOverrideAllowed,
                            vlan_override=dvs_pg.config.policy.
                            vlanOverrideAllowed)

                if self.params['show_vlan_info']:
                    vlan_info = self.get_vlan_info(
                        dvs_pg.config.defaultPortConfig.vlan)

                dvpg_details = dict(
                    portgroup_name=unquote(dvs_pg.name),
                    num_ports=dvs_pg.config.numPorts,
                    dvswitch_name=dvs_pg.config.distributedVirtualSwitch.name,
                    description=dvs_pg.config.description,
                    type=dvs_pg.config.type,
                    teaming_policy=teaming_policy,
                    port_policy=port_policy,
                    network_policy=network_policy,
                    vlan_info=vlan_info,
                    key=dvs_pg.key,
                )
                result[dvs.name].append(dvpg_details)

        return result
    def gather_dvs_portgroup_info(self):
        dvs_lists = self.dvsls
        result = dict()
        for dvs in dvs_lists:
            switch_supports_mac_learning = dvs_supports_mac_learning(dvs)
            result[dvs.name] = list()
            for dvs_pg in dvs.portgroup:
                mac_learning = dict()
                network_policy = dict()
                teaming_policy = dict()
                port_policy = dict()
                vlan_info = dict()
                active_uplinks = list()
                standby_uplinks = list()

                if dvs_pg.config.type == 'ephemeral':
                    port_binding = 'ephemeral'
                else:
                    port_binding = 'static'

                if dvs_pg.config.autoExpand is True:
                    port_allocation = 'elastic'
                else:
                    port_allocation = 'fixed'

                # If the dvSwitch supports MAC learning, it's a version where securityPolicy is deprecated
                if self.module.params['show_network_policy']:
                    if switch_supports_mac_learning and dvs_pg.config.defaultPortConfig.macManagementPolicy:
                        network_policy = dict(
                            forged_transmits=dvs_pg.config.defaultPortConfig.
                            macManagementPolicy.forgedTransmits,
                            promiscuous=dvs_pg.config.defaultPortConfig.
                            macManagementPolicy.allowPromiscuous,
                            mac_changes=dvs_pg.config.defaultPortConfig.
                            macManagementPolicy.macChanges)
                    elif dvs_pg.config.defaultPortConfig.securityPolicy:
                        network_policy = dict(
                            forged_transmits=dvs_pg.config.defaultPortConfig.
                            securityPolicy.forgedTransmits.value,
                            promiscuous=dvs_pg.config.defaultPortConfig.
                            securityPolicy.allowPromiscuous.value,
                            mac_changes=dvs_pg.config.defaultPortConfig.
                            securityPolicy.macChanges.value)

                if self.module.params[
                        'show_mac_learning'] and switch_supports_mac_learning:
                    macLearningPolicy = dvs_pg.config.defaultPortConfig.macManagementPolicy.macLearningPolicy
                    mac_learning = dict(
                        allow_unicast_flooding=macLearningPolicy.
                        allowUnicastFlooding,
                        enabled=macLearningPolicy.enabled,
                        limit=macLearningPolicy.limit,
                        limit_policy=macLearningPolicy.limitPolicy)

                if self.module.params['show_teaming_policy']:
                    # govcsim does not have uplinkTeamingPolicy, remove this check once
                    # PR https://github.com/vmware/govmomi/pull/1524 merged.
                    if dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy:
                        teaming_policy = dict(
                            policy=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.policy.value,
                            inbound_policy=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.reversePolicy.value,
                            notify_switches=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.notifySwitches.value,
                            rolling_order=dvs_pg.config.defaultPortConfig.
                            uplinkTeamingPolicy.rollingOrder.value,
                        )

                if self.module.params['show_uplinks'] and \
                        dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy and \
                        dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy.uplinkPortOrder:
                    active_uplinks = dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy.uplinkPortOrder.activeUplinkPort
                    standby_uplinks = dvs_pg.config.defaultPortConfig.uplinkTeamingPolicy.uplinkPortOrder.standbyUplinkPort

                if self.params['show_port_policy']:
                    # govcsim does not have port policy
                    if dvs_pg.config.policy:
                        port_policy = dict(
                            block_override=dvs_pg.config.policy.
                            blockOverrideAllowed,
                            ipfix_override=dvs_pg.config.policy.
                            ipfixOverrideAllowed,
                            live_port_move=dvs_pg.config.policy.
                            livePortMovingAllowed,
                            network_rp_override=dvs_pg.config.policy.
                            networkResourcePoolOverrideAllowed,
                            port_config_reset_at_disconnect=dvs_pg.config.
                            policy.portConfigResetAtDisconnect,
                            security_override=dvs_pg.config.policy.
                            securityPolicyOverrideAllowed,
                            shaping_override=dvs_pg.config.policy.
                            shapingOverrideAllowed,
                            traffic_filter_override=dvs_pg.config.policy.
                            trafficFilterOverrideAllowed,
                            uplink_teaming_override=dvs_pg.config.policy.
                            uplinkTeamingOverrideAllowed,
                            vendor_config_override=dvs_pg.config.policy.
                            vendorConfigOverrideAllowed,
                            vlan_override=dvs_pg.config.policy.
                            vlanOverrideAllowed)

                if self.params['show_vlan_info']:
                    vlan_info = self.get_vlan_info(
                        dvs_pg.config.defaultPortConfig.vlan)

                dvpg_details = dict(
                    portgroup_name=unquote(dvs_pg.name),
                    num_ports=dvs_pg.config.numPorts,
                    dvswitch_name=dvs_pg.config.distributedVirtualSwitch.name,
                    description=dvs_pg.config.description,
                    type=dvs_pg.config.type,
                    port_binding=port_binding,
                    port_allocation=port_allocation,
                    teaming_policy=teaming_policy,
                    port_policy=port_policy,
                    mac_learning=mac_learning,
                    network_policy=network_policy,
                    vlan_info=vlan_info,
                    key=dvs_pg.key,
                    active_uplinks=active_uplinks,
                    standby_uplinks=standby_uplinks,
                )
                result[dvs.name].append(dvpg_details)

        return result