Exemplo n.º 1
0
 def _check_link_state(self, LinkUpTimeout):
     self._IxNetwork.info('Checking virtual port link states')
     view = StatViewAssistant(self._IxNetwork,
                              'Port Statistics',
                              Timeout=LinkUpTimeout)
     view.AddRowFilter('Port Name', StatViewAssistant.REGEX,
                       self._get_name_regex())
     view.CheckCondition('Link State',
                         StatViewAssistant.REGEX,
                         '^Link Up$',
                         Timeout=LinkUpTimeout)
Exemplo n.º 2
0
    def test_can_get_view_names(self, mock_request):
        test_platform = TestPlatform('127.0.0.1',
                                     rest_port=11009,
                                     platform='windows')

        # use the default session and get the root node of the hierarchy
        ixnetwork = test_platform.Sessions.find().Ixnetwork

        #GetViewNames fetches all the available view on Ixnetwork server.
        statList = StatViewAssistant.GetViewNames(ixnetwork)
        assert (len(statList) == 3)
Exemplo n.º 3
0
    def test_cannot_find_invalid_view_name(self, mock_request):
        test_platform = TestPlatform('127.0.0.1',
                                     rest_port=11009,
                                     platform='windows')

        # use the default session and get the root node of the hierarchy
        ixnetwork = test_platform.Sessions.find().Ixnetwork

        try:
            StatViewAssistant(ixnetwork, 'Port Stattics', Timeout=5)
        except NotFoundError as e:
            ixnetwork.info(e)
Exemplo n.º 4
0
    ixNetwork.Globals.Licensing.LicensingServers = licenseServerIp
    ixNetwork.Globals.Licensing.Mode = licenseMode
    ixNetwork.Globals.Licensing.Tier = licenseTier

    # Assign ports
    testPorts = []
    vportList = [vport.href for vport in ixNetwork.Vport.find()]
    for port in portList:
        testPorts.append(dict(Arg1=port[0], Arg2=port[1], Arg3=port[2]))

    ixNetwork.AssignPorts(testPorts, [], vportList, forceTakePortOwnership)

    ixNetwork.StartAllProtocols(Arg1='sync')

    ixNetwork.info('Verify protocol sessions\n')
    protocolsSummary = StatViewAssistant(ixNetwork, 'Protocols Summary')
    protocolsSummary.CheckCondition('Sessions Not Started',
                                    StatViewAssistant.EQUAL, 0)
    protocolsSummary.CheckCondition('Sessions Down', StatViewAssistant.EQUAL,
                                    0)
    ixNetwork.info(protocolsSummary)

    # Get the Traffic Item name for getting Traffic Item statistics.
    trafficItem = ixNetwork.Traffic.TrafficItem.find()[0]

    trafficItem.Generate()
    ixNetwork.Traffic.Apply()
    ixNetwork.Traffic.Start()

    # StatViewAssistant could also filter by regex, LESS_THAN, GREATER_THAN, EQUAL.
    # Examples:
Exemplo n.º 5
0
 def StatViewAssistant(self, ViewName, Timeout=180, LocalCsvStorage=None):
     """Get an instance of the StatViewAssistant class
     """
     return StatViewAssistant(self._ixnetwork, ViewName, Timeout, LocalCsvStorage)
Exemplo n.º 6
0
"""

from ixnetwork_restpy.testplatform.testplatform import TestPlatform
from ixnetwork_restpy.assistants.statistics.statviewassistant import StatViewAssistant
from ixnetwork_restpy.errors import *


# connect to a windows test platform using the default api server rest port
test_platform = TestPlatform('127.0.0.1', rest_port=11009, platform='windows')

# use the default session and get the root node of the hierarchy
ixnetwork = test_platform.Sessions.find().Ixnetwork

ixnetwork.info('negative test')
try:
    StatViewAssistant(ixnetwork, 'my test view', Timeout=5)
except NotFoundError as e:
    ixnetwork.info(e)

# get a list of all current statistic views that can be used in the StatViewAssistant
print(StatViewAssistant.GetViewNames(ixnetwork))

# create a stat view assistant for a statistics view
port_statistics = StatViewAssistant(ixnetwork, 'Port Statistics')

# print all the rows for a statistics view
print(port_statistics)

# add a filter so that only a single row is retrieved
port_statistics.AddRowFilter('Port Name', StatViewAssistant.REGEX, 'Port 1$')
print(port_statistics)
    ipv4DstFieldObj = ipv4StackObj.Field.find(DisplayName='Destination Address')
    ipv4DstFieldObj.ValueType = 'increment'
    ipv4DstFieldObj.StartValue = "1.1.1.2"
    ipv4DstFieldObj.StepValue = "0.0.0.1"
    ipv4DstFieldObj.CountValue = 1

    trafficItem.Generate()
    ixNetwork.Traffic.Apply()
    ixNetwork.Traffic.Start()

    # StatViewAssistant could also filter by REGEX, LESS_THAN, GREATER_THAN, EQUAL. 
    # Examples:
    #    flowStatistics.AddRowFilter('Port Name', StatViewAssistant.REGEX, '^Port 1$')
    #    flowStatistics.AddRowFilter('Tx Frames', StatViewAssistant.LESS_THAN, 50000)

    flowStatistics = StatViewAssistant(ixNetwork, 'Flow Statistics')
    ixNetwork.info('{}\n'.format(flowStatistics))

    for rowNumber,flowStat in enumerate(flowStatistics.Rows):
        ixNetwork.info('\n\nSTATS: {}\n\n'.format(flowStat))
        ixNetwork.info('\nRow:{}  TxPort:{}  RxPort:{}  TxFrames:{}  RxFrames:{}\n'.format(
            rowNumber, flowStat['Tx Port'], flowStat['Rx Port'],
            flowStat['Tx Frames'], flowStat['Rx Frames']))

    trafficItemStatistics = StatViewAssistant(ixNetwork, 'Traffic Item Statistics')
    ixNetwork.info('{}\n'.format(trafficItemStatistics))
    
    # Get the statistic values
    txFrames = trafficItemStatistics.Rows[0]['Tx Frames']
    rxFrames = trafficItemStatistics.Rows[0]['Rx Frames']
    ixNetwork.info('Traffic Item Stats:\n\tTxFrames: {}  RxFrames: {}\n'.format(txFrames, rxFrames))
Exemplo n.º 8
0
def main():
    logging.basicConfig(filename='../ansible.log', level=logging.DEBUG)

    # Define the available arguments/parameters that a user can pass to this module.
    params = {
        'apiServerIp': {
            'type': 'str',
            'required': True,
            'default': None
        },
        'apiServerIpPort': {
            'type': 'int',
            'required': False,
            'default': 11009
        },
        'username': {
            'type': 'str',
            'required': False,
            'default': 'admin',
            'no_log': False
        },
        'password': {
            'type': 'str',
            'required': False,
            'default': 'admin',
            'no_log': False
        },
        'licenseServerIp': {
            'type': 'list',
            'required': True,
            'default': None
        },
        'licenseMode': {
            'type': 'str',
            'required': True,
            'default': None
        },
        'licenseTier': {
            'type': 'str',
            'required': False,
            'default': 'tier3'
        },
        'portList': {
            'type': 'list',
            'required': True,
            'default': None
        },
        'forceTakePortOwnership': {
            'type': 'bool',
            'required': False,
            'default': True
        },
        'debugMode': {
            'type': 'str',
            'required': False,
            'default': False
        },
    }

    result = dict(changed=False, message='')
    module = AnsibleModule(argument_spec=params, supports_check_mode=True)

    if module.check_mode:
        module.exit_json(**result)

    module.params['name'] = 'Custom Ansible module for NGPF BGP configuration'

    try:

        testPlatform = TestPlatform(ip_address=module.params['apiServerIp'],
                                    rest_port=module.params['apiServerIpPort'],
                                    log_file_name='restpy.log')

        # Console output verbosity: None|request|'request response'
        testPlatform.Trace = 'request_response'

        testPlatform.Authenticate(module.params['username'],
                                  module.params['password'])
        session = testPlatform.Sessions.add()
        ixNetwork = session.Ixnetwork

        ixNetwork.NewConfig()

        ixNetwork.Globals.Licensing.LicensingServers = module.params[
            'licenseServerIp']
        ixNetwork.Globals.Licensing.Mode = module.params['licenseMode']
        ixNetwork.Globals.Licensing.Tier = module.params['licenseTier']

        # Create vports and name them so you could get the vports by the name when creating Topology.
        vport1 = ixNetwork.Vport.add(Name='Port1')
        vport2 = ixNetwork.Vport.add(Name='Port2')

        # Assign ports
        testPorts = []
        vportList = [vport.href for vport in ixNetwork.Vport.find()]
        for port in module.params['portList']:
            testPorts.append(dict(Arg1=port[0], Arg2=port[1], Arg3=port[2]))

        ixNetwork.AssignPorts(testPorts, [], vportList,
                              module.params['forceTakePortOwnership'])

        ixNetwork.info('Creating Topology Group 1')
        topology1 = ixNetwork.Topology.add(Name='Topology 1', Ports=vport1)
        deviceGroup1 = topology1.DeviceGroup.add(Name='DG1', Multiplier='1')
        ethernet1 = deviceGroup1.Ethernet.add(Name='Eth1')
        ethernet1.Mac.Increment(start_value='00:01:01:01:00:01',
                                step_value='00:00:00:00:00:01')
        ethernet1.EnableVlans.Single(True)

        ixNetwork.info('Configuring vlanID')
        vlanObj = ethernet1.Vlan.find()[0].VlanId.Increment(start_value=103,
                                                            step_value=0)

        ixNetwork.info('Configuring IPv4')
        ipv4 = ethernet1.Ipv4.add(Name='Ipv4')
        ipv4.Address.Increment(start_value='1.1.1.1', step_value='0.0.0.1')
        ipv4.GatewayIp.Increment(start_value='1.1.1.2', step_value='0.0.0.0')

        ixNetwork.info('Configuring BgpIpv4Peer 1')
        bgp1 = ipv4.BgpIpv4Peer.add(Name='Bgp1')
        bgp1.DutIp.Increment(start_value='1.1.1.2', step_value='0.0.0.0')
        bgp1.Type.Single('internal')
        bgp1.LocalAs2Bytes.Increment(start_value=101, step_value=0)

        ixNetwork.info('Configuring Network Group 1')
        networkGroup1 = deviceGroup1.NetworkGroup.add(Name='BGP-Routes1',
                                                      Multiplier='100')
        ipv4PrefixPool = networkGroup1.Ipv4PrefixPools.add(
            NumberOfAddresses='1')
        ipv4PrefixPool.NetworkAddress.Increment(start_value='10.10.0.1',
                                                step_value='0.0.0.1')
        ipv4PrefixPool.PrefixLength.Single(32)

        topology2 = ixNetwork.Topology.add(Name='Topology 2', Ports=vport2)
        deviceGroup2 = topology2.DeviceGroup.add(Name='DG2', Multiplier='1')

        ethernet2 = deviceGroup2.Ethernet.add(Name='Eth2')
        ethernet2.Mac.Increment(start_value='00:01:01:02:00:01',
                                step_value='00:00:00:00:00:01')
        ethernet2.EnableVlans.Single(True)

        ixNetwork.info('Configuring vlanID')
        vlanObj = ethernet2.Vlan.find()[0].VlanId.Increment(start_value=103,
                                                            step_value=0)

        ixNetwork.info('Configuring IPv4 2')
        ipv4 = ethernet2.Ipv4.add(Name='Ipv4-2')
        ipv4.Address.Increment(start_value='1.1.1.2', step_value='0.0.0.1')
        ipv4.GatewayIp.Increment(start_value='1.1.1.1', step_value='0.0.0.0')

        ixNetwork.info('Configuring BgpIpv4Peer 2')
        bgp2 = ipv4.BgpIpv4Peer.add(Name='Bgp2')
        bgp2.DutIp.Increment(start_value='1.1.1.1', step_value='0.0.0.0')
        bgp2.Type.Single('internal')
        bgp2.LocalAs2Bytes.Increment(start_value=101, step_value=0)

        ixNetwork.info('Configuring Network Group 2')
        networkGroup2 = deviceGroup2.NetworkGroup.add(Name='BGP-Routes2',
                                                      Multiplier='100')
        ipv4PrefixPool = networkGroup2.Ipv4PrefixPools.add(
            NumberOfAddresses='1')
        ipv4PrefixPool.NetworkAddress.Increment(start_value='20.20.0.1',
                                                step_value='0.0.0.1')
        ipv4PrefixPool.PrefixLength.Single(32)

        ixNetwork.StartAllProtocols(Arg1='sync')

        ixNetwork.info('Verify protocol sessions\n')
        protocolsSummary = StatViewAssistant(ixNetwork, 'Protocols Summary')
        protocolsSummary.CheckCondition('Sessions Not Started',
                                        StatViewAssistant.EQUAL, 0)
        protocolsSummary.CheckCondition('Sessions Down',
                                        StatViewAssistant.EQUAL, 0)
        ixNetwork.info(protocolsSummary)

        ixNetwork.info('Create Traffic Item')
        trafficItem = ixNetwork.Traffic.TrafficItem.add(Name='BGP Traffic',
                                                        BiDirectional=False,
                                                        TrafficType='ipv4')

        ixNetwork.info('Add endpoint flow group')
        trafficItem.EndpointSet.add(Sources=topology1, Destinations=topology2)

        # Note: A Traffic Item could have multiple EndpointSets (Flow groups).
        #       Therefore, ConfigElement is a list.
        ixNetwork.info('Configuring config elements')
        configElement = trafficItem.ConfigElement.find()[0]
        configElement.FrameRate.Rate = 28
        configElement.FrameRate.Type = 'framesPerSecond'
        configElement.TransmissionControl.FrameCount = 10000
        configElement.TransmissionControl.Type = 'fixedFrameCount'
        configElement.FrameRateDistribution.PortDistribution = 'splitRateEvenly'
        configElement.FrameSize.FixedSize = 128
        trafficItem.Tracking.find()[0].TrackBy = ['flowGroup0']

        trafficItem.Generate()
        ixNetwork.Traffic.Apply()
        ixNetwork.Traffic.Start()

        # StatViewAssistant could also filter by REGEX, LESS_THAN, GREATER_THAN, EQUAL.
        # Examples:
        #    flowStatistics.AddRowFilter('Port Name', StatViewAssistant.REGEX, '^Port 1$')
        #    flowStatistics.AddRowFilter('Tx Frames', StatViewAssistant.LESS_THAN, 50000)

        flowStatistics = StatViewAssistant(ixNetwork, 'Flow Statistics')
        ixNetwork.info('{}\n'.format(flowStatistics))

        for rowNumber, flowStat in enumerate(flowStatistics.Rows):
            ixNetwork.info('\n\nSTATS: {}\n\n'.format(flowStat))
            ixNetwork.info(
                '\nRow:{}  TxPort:{}  RxPort:{}  TxFrames:{}  RxFrames:{}\n'.
                format(rowNumber, flowStat['Tx Port'], flowStat['Rx Port'],
                       flowStat['Tx Frames'], flowStat['Rx Frames']))

        flowStatistics = StatViewAssistant(ixNetwork,
                                           'Traffic Item Statistics')
        ixNetwork.info('{}\n'.format(flowStatistics))

        if module.params['debugMode'] == False:
            # For linux and connection_manager only
            session.remove()

        result['result'] = 'Passed'
        module.exit_json(**result)

    except Exception as errMsg:
        module.fail_json(result='Failed', msg=errMsg)

        if module.params['debugMode'] == False and 'session' in locals():
            session.remove()
Exemplo n.º 9
0
    pe2Bgp.Evpn.Single(True)
    pe2Bgp.FilterEvpn.Single(True)

    pe2Evi = pe2Bgp.BgpIPv4EvpnEvi.add()
    pe2Evi.RdEvi.ValueList(['1', '2'])

    ce2Pool = pe2DevGroup1.NetworkGroup.add(Name='CE2')
    ce2MacPool = ce2Pool.MacPools.add(Name='Mac - Customers')

    pe2Evi.EnableL3vniTargetList.Single(True)
    ce2V4Pool = ce2MacPool.Ipv4PrefixPools.add(Name='L3 - Customers')

    ixNetwork.StartAllProtocols(Arg1='sync')

    ixNetwork.info('Verify protocol sessions\n')
    protocolsSummary = StatViewAssistant(ixNetwork, 'Protocols Summary')
    protocolsSummary.AddRowFilter('Protocol Type', StatViewAssistant.REGEX,
                                  '(?i)^BGP?')
    protocolsSummary.CheckCondition('Sessions Not Started',
                                    StatViewAssistant.GREATER_THAN_OR_EQUAL, 0)
    protocolsSummary.CheckCondition('Sessions Down', StatViewAssistant.EQUAL,
                                    0)
    ixNetwork.info(protocolsSummary)

    ixNetwork.info('Create Traffic Item')
    traffCe1ToCe2 = ixNetwork.Traffic.TrafficItem.add(
        Name='CE1 to CE2 Traffic', BiDirectional=False, TrafficType='ipv4')
    ixNetwork.info('Add endpoint flow group')
    traffCe1ToCe2.EndpointSet.add(Sources=ce1V4Pool, Destinations=ce2V4Pool)
    configElement = traffCe1ToCe2.ConfigElement.find()[0]
    configElement.FrameRate.update(Type='percentLineRate', Rate=50)
Exemplo n.º 10
0
    def getStatsPage(self,
                     viewObject=None,
                     viewName='Flow Statistics',
                     csvFile=None,
                     csvEnableFileTimestamp=False,
                     displayStats=True,
                     silentMode=True,
                     ignoreError=False):
        """
        Description
            Get stats by the statistic name or get stats by providing a view object handle.

        Parameters
            csvFile = None or <filename.csv>.
                      None will not create a CSV file.
                      Provide a <filename>.csv to record all stats to a CSV file.
                      Example: getStats(sessionUrl, csvFile='Flow_Statistics.csv')

            csvEnableFileTimestamp = True or False. If True,
                                    timestamp will be appended to the filename.

            displayStats: True or False. True=Display stats.

            ignoreError: True or False.  Returns None if viewName is not found.

            viewObject: The view object:
                        A view object handle could be obtained by calling getViewObject().

            viewName options (Not case sensitive):
               NOTE: Not all statistics are listed here.
                  You could get the statistic viewName directly from the IxNetwork GUI in the
                  statistics.

            'Port Statistics'
            'Tx-Rx Frame Rate Statistics'
            'Port CPU Statistics'
            'Global Protocol Statistics'
            'Protocols Summary'
            'Port Summary'
            'BGP Peer Per Port'
            'OSPFv2-RTR Drill Down'
            'OSPFv2-RTR Per Port'
            'IPv4 Drill Down'
            'L2-L3 Test Summary Statistics'
            'Flow Statistics'
            'Traffic Item Statistics'
            'IGMP Host Drill Down'
            'IGMP Host Per Port'
            'IPv6 Drill Down'
            'MLD Host Drill Down'
            'MLD Host Per Port'
            'PIMv6 IF Drill Down'
            'PIMv6 IF Per Port'
            'Flow View'

         Note: Not all of the viewNames are listed here. You have to get the exact names from
               the IxNetwork GUI in statistics based on your protocol(s).

         Return a dictionary of all the stats: statDict[rowNumber][columnName] == statValue
           Get stats on row 2 for 'Tx Frames' = statDict[2]['Tx Frames']
        """
        rowStats = None
        try:
            TrafficItemStats = StatViewAssistant(self.ixNetwork, viewName)
        except Exception as err:
            self.ixnObj.logInfo("Error in getstats {}".format(err))
            raise Exception('getStats: Failed to get stats values')

        trafficItemStatsDict = {}
        columnCaptions = TrafficItemStats.ColumnHeaders

        if csvFile is not None:
            csvFileName = csvFile.replace(' ', '_')
            if csvEnableFileTimestamp:
                timestamp = datetime.datetime.now().strftime('%H%M%S')
                if '.' in csvFileName:
                    csvFileNameTemp = csvFileName.split('.')[0]
                    csvFileNameExtension = csvFileName.split('.')[1]
                    csvFileName = csvFileNameTemp + '_' + timestamp + '.' + csvFileNameExtension
                else:
                    csvFileName = csvFileName + '_' + timestamp

            csvFile = open(csvFileName, 'w')
            csvWriteObj = csv.writer(csvFile)
            csvWriteObj.writerow(columnCaptions)
            for rowNumber, stat in enumerate(TrafficItemStats.Rows):
                rowStats = stat.RawData
            for row in rowStats:
                csvWriteObj.writerow(row)
            csvFile.close()

        for rowNumber, stat in enumerate(TrafficItemStats.Rows):
            if displayStats:
                self.ixnObj.logInfo('\n Row: {}'.format(rowNumber + 1),
                                    timestamp=False)
            statsDict = {}
            for column in columnCaptions:
                statsDict[column] = stat[column]
                if displayStats:
                    self.ixnObj.logInfo('\t%s: %s' % (column, stat[column]),
                                        timestamp=False)
            trafficItemStatsDict[rowNumber + 1] = statsDict

        return trafficItemStatsDict