示例#1
0
def ltm_build():
    if change == 'change':
        try:
            ltm.pools.pool.create(name=pool_name, monitor=monitor)
            pool = ltm.pools.pool.load(name=pool_name)

            for node in nodes:
                ltm.nodes.node.create(partition='Common',
                                      name=node['name'],
                                      address=node['address'])
                pool.members_s.members.create(partition='Common',
                                              name=node['name'] + ':' +
                                              member_port)
            params = {
                'name': vs_name,
                'destination': f'{vip}:{port}',
                'mask': '255.255.255.255',
                'pool': pool_name,
                'profiles': profiles,
                'partition': 'Common',
                'sourceAddressTranslation': {
                    'type': 'automap'
                },
            }
            ltm.virtuals.virtual.create(**params)
            print('Build Complete...', '\n')
            time.sleep(1)
            virtual = ltm.virtuals.virtual.load(partition='Common',
                                                name=vs_name)
            virtual_stats = Stats(virtual.stats.load())
            pool_stats = Stats(pool.stats.load())
            print(f'Pool {pool_name} status:',
                  pool_stats.stat.status_availabilityState['description'])
            print(f'Virtual Server {vs_name} status:',
                  virtual_stats.stat.status_availabilityState['description'])
        except iControlUnexpectedHTTPError:
            print('Duplicate Objects Exist...Build Failed')
            sys.exit()
    elif change == 'rollback':
        try:
            virtual = ltm.virtuals.virtual.load(partition='Common',
                                                name=vs_name)
            virtual.delete()
            pool = ltm.pools.pool.load(name=pool_name)
            pool.delete()
            for node in nodes:
                ltm.nodes.node.load(partition='Common',
                                    name=node['name']).delete()
            print('Rollback Complete...')
        except iControlUnexpectedHTTPError:
            print(
                'One of more objects couldn\'t be found...Rollback Failed...')
            sys.exit()
示例#2
0
 def check_node_connections(self, check_connections):
     """ Check if the number of connections in a node is 0"""
     for member in check_connections:
         node = self.conn.ltm.nodes.node.load(name=member.split(':')[0], partition='Common')
         node_stat = Stats(node.stats.load())
         logging.info('Number of current connections on node {} = {}'.format(member,
                                                                             node_stat.stat.serverside_curConns.value))
         while int(node_stat.stat.serverside_curConns.value) > 0:
             logging.info('Current Sessions of node {} is {}'.format(member, node_stat.stat.curSessions.value))
             logging.info('Current Connections of node {} is {}'.format(member,
                                                                        node_stat.stat.serverside_curConns.value))
             node = self.conn.ltm.nodes.node.load(name=member.split(':')[0], partition='Common')
             node_stat = Stats(node.stats.load())
             logging.info('Sleeping for 30secs')
             time.sleep(30)
示例#3
0
 def is_deployed(self):
     try:
         res = self.client.api.tm.vcmp.guests.guest.load(name=self.want.name)
         stats = Stats(res.stats.load())
         if stats.stat['requestedState']['description'] == 'deployed':
             if stats.stat['vmStatus']['description'] == 'running':
                 return True
     except iControlUnexpectedHTTPError:
         pass
     return False
示例#4
0
 def get_pool_stats(self, mgmt, pool_name, part):
     #List for stats from all members 
     output = []
     """Return all pool stats object (dict of dicts)"""
     #load pool and member information
     pool_data = mgmt.tm.ltm.pools.pool.load(name=pool_name, partition=part)
     poolstats = pool_data.members_s.get_collection()
     for member in poolstats:
         #stats module needs to be used here to work with the stats.load() returned data
         output.append(Stats(member.stats.load()))
     return output
示例#5
0
    def get_pool_stats(self, pool):
        ''' HTTP GET an F5 pool by name in the /Common partition.
            Then load the pool members statistics and return them
            as a dictionary object.

            API Result:
            {'/Common/example-server': {
                'addr': {'description': '2001:200:0:1300::100'},
                'connq_ageEdm': {'value': 0},
                'connq_ageEma': {'value': 0},
                'connq_ageHead': {'value': 0},
                'connq_ageMax': {'value': 0},
                'connq_depth': {'value': 0},
                'connq_serviced': {'value': 0},
                'curSessions': {'value': 0},
                'monitorRule': {'description': 'none'},
                'monitorStatus': {'description': 'unchecked'},
                'nodeName': {'description': '/Common/example-server},
                'poolName': {'description': '/Common/example-pool'},
                'port': {'value': 80},
                'serverside_bitsIn': {'value': 3998642720},
                'serverside_bitsOut': {'value': 869489671944},
                'serverside_curConns': {'value': 0},
                'serverside_maxConns': {'value': 121},
                'serverside_pktsIn': {'value': 6641290},
                'serverside_pktsOut': {'value': 72555193},
                'serverside_totConns': {'value': 98443},
                'sessionStatus': {'description': 'enabled'},
                'status_availabilityState': {'description': 'unknown'},
                'status_enabledState': {'description': 'enabled'},
                'status_statusReason':
                {'description': 'Pool member does not have service checking
                                 enabled'},
                'totRequests': {'value': 98443}
            }, ...
        '''
        stats = {}
        my_pool = self.mgmt.tm.ltm.pools.pool.load(partition='Common',
                                                   name=pool)
        my_pool_mbrs = my_pool.members_s.get_collection()
        for pool_mbr in my_pool_mbrs:
            mbr_stats = Stats(pool_mbr.stats.load())
            # Create a new dictionary with the node name as the key
            dict_ = {mbr_stats.stat.nodeName.description: mbr_stats.stat}
            stats.update(dict_)
        # Return { node: node_stats_dict } to Robot Keyword
        logger.info(stats)
        return stats
示例#6
0
    def is_configured(self):
        """Checks to see if guest is disabled

        A disabled guest is fully disabled once their Stats go offline.
        Until that point they are still in the process of disabling.

        :return:
        """
        try:
            res = self.client.api.tm.vcmp.guests.guest.load(name=self.want.name)
            Stats(res.stats.load())
            return False
        except iControlUnexpectedHTTPError as ex:
            if 'Object not found - ' in str(ex):
                return True
            raise
示例#7
0
    def interface_stats(self, interface):
        ''' Load interface statistics given an interface name.

            Example: interface_stats('2.1')
            Return dictionary:
            {'counters_bitsIn': {'value': 41830832},
            'counters_bitsOut': {'value': 9579368},
            'counters_dropsAll': {'value': 7483},
            'counters_errorsAll': {'value': 0},
            'counters_pktsIn': {'value': 60724},
            'counters_pktsOut': {'value': 13908},
            'mediaActive': {'description': '10000LR-FD'},
            'tmName': {'description': '2.1'},
            'status': {'description': 'up'}}
        '''
        interface = self.mgmt.tm.net.interfaces.interface.load(name=interface)
        interface_stats = Stats(interface.stats.load())
        logger.info(interface_stats.stat)
        return interface_stats.stat
    def available_vips(self):
        """ Shows VIP status as a pre-check """
        existing_vips = virtuals.get_collection()
        vip_list = {}
        for item in existing_vips:
            vip_list[item.destination] = item.name

        print('I have found {0} VIPs '.format(len(vip_list)))
        print('*' * 100)

        for k, v in vip_list.items():
            partition_split = k.split('/')
            partition = partition_split[1]
            vip = ltm.virtuals.virtual.load(name=v, partition=partition)
            vip_stats = Stats(vip.stats.load())
            virt_server = vip_stats.stat['destination']['description']
            status = vip_stats.stat['status_availabilityState']['description']
            logger.info(
                'Partition :{0:<15} VIP Name: {1:<45} VIP IP:{2:<35}Status: {3:<15}'
                .format(partition, v, virt_server, status))
示例#9
0
    def test_get_typed_pool_facts(self, *args):
        set_module_args(dict(
            include='pool',
            password='******',
            server='localhost',
            user='******'
        ))

        fixture1 = load_fixture('load_gtm_pool_a_collection.json')
        fixture2 = load_fixture('load_gtm_pool_a_example_stats.json')
        collection = [FakeARecord(attrs=x) for x in fixture1['items']]
        stats = Stats(FakeStatResource(fixture2['entries']))

        client = AnsibleF5Client(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            f5_product_name=self.spec.f5_product_name
        )

        # Override methods in the specific type of manager
        tfm = TypedPoolFactManager(client)
        tfm.read_collection_from_device = Mock(return_value=collection)
        tfm.read_stats_from_device = Mock(return_value=stats.stat)

        tm = PoolFactManager(client)
        tm.version_is_less_than_12 = Mock(return_value=False)
        tm.get_manager = Mock(return_value=tfm)

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(client)
        mm.get_manager = Mock(return_value=tm)
        mm.gtm_provisioned = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert 'pool' in results
        assert len(results['pool']) > 0
        assert 'load_balancing_mode' in results['pool'][0]
示例#10
0
def print_states(virtual_servers):
    print("")
    print("Virtual Server states:")
    for virt in virtual_servers:
        myvirt = mgmt.tm.ltm.virtuals.virtual.load(name=virt)
        if myvirt.to_dict().get("enabled"):
            confstate = "Enabled"
            txt_colour = "\033[32m"  # Green
        elif myvirt.to_dict().get("disabled"):
            confstate = "Disabled"
            txt_colour = "\033[31m"  # Red
        else:
            confstate = "UNKNOWN"
            txt_colour = "\033[34m"  # Blue

        virtstats = Stats(myvirt.stats.load())
        operstate = virtstats.stat['status_availabilityState']['description']
        if operstate == 'offline':
            txt_colour = "\033[31m"  # Red
        elif confstate != 'Disabled' and operstate == 'unknown':
            txt_colour = "\033[34m"  # Blue

        print(f"- {virt}: {txt_colour}{confstate} ({operstate}) \033[0m")
    print("")
示例#11
0
 def HA_status(self,mgmt):
     x = Stats(mgmt.tm.cm.failover_status.load())
     output = x.stat['status']['description']
     return output
示例#12
0
 def get_pool_state(self, p_name, p_partition='Common'):
     """ Function to retrieve current pool availability status """
     pool_stat = self.mgmt.tm.ltm.pools.pool.load(name=p_name,
                                                  partition=p_partition)
     stats = Stats(pool_stat.stats.load())
     return stats.stat.status_availabilityState['description']
示例#13
0
 def get_virtual_state(self, v_name, v_partition='Common'):
     """ Function to retrieve current virtual server availability status """
     virtual_stat = self.mgmt.tm.ltm.virtuals.virtual.load(
         name=v_name, partition=v_partition)
     stats = Stats(virtual_stat.stats.load())
     return stats.stat.status_availabilityState['description']
示例#14
0
#########################################################################
# title: Collect_Pool_Stats.py                                          #
# author: Dario Garrido                                                 #
# date: 20200409                                                        #
# description: Collect Pool Stats from an already kwown Pool name       #
#########################################################################

from f5.bigip import ManagementRoot
from f5.utils.responses.handlers import Stats

# ----------------------------------------------------------

session = ManagementRoot("F5_mgmt_IP", "username", "password", token=True)

pool = session.tm.ltm.pools.pool.load(name='testPool')
# https:// <F5_mgmt_IP>/mgmt/tm/ltm/pool/testPool
poolstats = Stats(pool.stats.load())
# https:// <F5_mgmt_IP>/mgmt/tm/ltm/pool/testPool/stats
for key, value in poolstats.stat.items():
    if value.get('description') != None:
        print("{}: {}".format(key, value.get('description')))
    elif value.get('value') != None:
        print("{}: {}".format(key, value.get('value')))

# ----------------------------------------------------------
示例#15
0
#########################################################################
# title: Collect_VS_Stats.py                                            #
# author: Dario Garrido                                                 #
# date: 20200409                                                        #
# description: Collect VS Stats from an already kwown VS name           #
#########################################################################

from f5.bigip import ManagementRoot
from f5.utils.responses.handlers import Stats

# ----------------------------------------------------------

session = ManagementRoot("F5_mgmt_IP", "username", "password", token=True)

virtual = session.tm.ltm.virtuals.virtual.load(name='testVS')
#https:// <F5_mgmt_IP>/mgmt/tm/ltm/virtual/testVS
virtualstats = Stats(virtual.stats.load())
#https:// <F5_mgmt_IP>/mgmt/tm/ltm/virtual/testVS/stats
for key, value in virtualstats.stat.items():
    if value.get('description') != None:
        print("{}: {}".format(key, value.get('description')))
    elif value.get('value') != None:
        print("{}: {}".format(key, value.get('value')))

# ----------------------------------------------------------
 def read_stats_from_device(self, resource):
     stats = Stats(resource.stats.load())
     return stats.stat
for pool in all_pools:
    for member in pool.members_s.get_collection():
        for membadd in member_list:
            if member.address == membadd:
                print(pool.name + "," + member.name + ',' + member.address)
                poolmemblist.append(pool.name + "," + member.name + ',' +
                                    member.address)

pool_list = []
#
#
for poolnam in poolmemblist:
    poolna = poolnam.split(',')
    #print(poolna[0])
    my_pool = mgmt.tm.ltm.pools.pool.load(partition='Common', name=poolna[0])
    pool_stats = Stats(my_pool.stats.load())
    #print(pool_stats.stat.status_availabilityState)
    currm = pool_stats.stat.availableMemberCnt['value']
    if currm <= 1 and action != 'enabled':
        print("pool : {} = pool_member 少於1 : {}".format(poolna[0], currm))
        continue
    else:
        print("\t" + poolna[0] + "\t" + poolna[1])
        pooln = mgmt.tm.ltm.pools.pool.load(name=poolna[0], partition='Common')
        pm1 = pooln.members_s.members.load(partition='Common', name=poolna[1])
        if Dev_status in ["active"]:
            for member in [pm1]:
                if action == 'enabled':
                    # enables member
                    logger.info('enables member %s, previous state: %s' %
                                (member.name, member.state))
示例#18
0
 #pmaddrsp1 = [i.split('|')[1] for i in pmaddrsp]
 if aabbcc in ["active"]:
     for i in pmaddrsp:
         try:
             pamaddrsp1 = i.split('|')[1]
             pamaddrsp0 = i.split('|')[0]
             if pamaddrsp1 in member_list:
                 print("poolName :{} poomMember :{} poolMemberaddr: {}".
                       format(pmname, pamaddrsp0, pamaddrsp1))
                 pooln = mgmt.tm.ltm.pools.pool.load(name=pmname,
                                                     partition='Common')
                 #pm1 = pooln.members_s.members.load(partition='Common', name=pamaddrsp0)
                 member = pooln.members_s.members.load(
                     partition='Common', name=pamaddrsp0)
                 #my_pool = mgmt.tm.ltm.pools.pool.load(partition='Common', name=pmname)
                 pool_stats = Stats(pooln.stats.load())
                 #print(pool_stats.stat.status_availabilityState)
                 currm = pool_stats.stat.availableMemberCnt['value']
                 if action == 'enabled':
                     # enables member
                     logger.info(
                         'enables member %s, previous state: %s' %
                         (member.name, member.state))
                     member.state = 'user-up'
                     member.session = 'user-enabled'
                 elif action == 'checked':
                     # Checl online member
                     stt = member.session
                     #logger.info('checked online member %s, previous state: %s' %
                     #                        (member.name, member.state))
                     print(
password = sys.argv[5]
host_ip = sys.argv[1]
fnames = sys.argv[2]
poolnames = sys.argv[3]
now = datetime.datetime.now()
mgmt = ManagementRoot(host_ip, username, password, token=True)

my_pool = mgmt.tm.ltm.pools.pool.load(partition='Common', name=(poolnames))

my_pool_mbrs = my_pool.members_s.get_collection()
Count = 0
print("\n")
print("\033[0;37;44m\tCurrent Run date and time : \033[0m")
print(now.strftime("\033[0;37;45m\t%Y-%m-%d %H:%M:%S\t\t\033[0m"))
for pool_mbr in my_pool_mbrs:
    mbr_stats = Stats(pool_mbr.stats.load())
    dic_test = mbr_stats.stat.nodeName
    dic_test1 = dic_test['description']
    dic_test2 = dic_test1.replace('/Common/', '')
    dic_btest = mbr_stats.stat.status_availabilityState
    dic_btest1 = dic_btest['description']
    dic_ctest = mbr_stats.stat.serverside_curConns
    dic_ctest1 = dic_ctest['value']
    dic_dtest = mbr_stats.stat.status_enabledState
    dic_dtest1 = dic_dtest['description']
    Count = ((Count + 1))
    #print ( "%s_%02d pool_member: [ %s ] 主機狀態 : %s  目前連線數 : \033[43m[ %s ]\033[0m" % (fnames, Count, dic_test2, dic_btest1,  dic_ctest1) )
    if (dic_btest1 == 'available' or dic_dtest1 != 'enabled'
            or dic_btest1 == 'offline'):
        if (dic_dtest1 == 'enabled' and dic_btest1 == 'available'):
            print(
    u = list()
    for member in pool.members_s.get_collection():
        test.append((member.name).encode("utf-8"))
    for line in r:
        for i in test:
            if line in i:
                s.append((pool.name).encode("utf-8"))
                break
            else:
                continue
#print s
#sample=list()
for pool in pools:
    sample = list()
    man = list()
    for i in s:
        if pool.name not in i: continue
        else:
            print pool.name
            for member in pool.members_s.get_collection():
                sample.append((member.name).encode("utf-8"))
                mbr_stats = Stats(member.stats.load())
                #                print(mbr_stats.stat.status_availabilityState['description'])
                print member.name, "STATE: ", mbr_stats.stat.status_availabilityState[
                    'description']
#                words = ["001","002"]
            if all('002' and '001' in i for i in sample):
                print "!!!NO REDUNDANT MEMBERS AVAILABLE!!!" '\n'
            else:
                print "***REDUNDANT MEMBERS AVAILABLE***" '\n'
 member = poolna.members_s.get_collection()
 for nod_ip in member:
     ckip = nod_ip.address
     for node_list in member_list:
         if node_list in ckip:
             print("\t" + poolna.name + "\t" + nod_ip.name)
             pooln = mgmt.tm.ltm.pools.pool.load(name=poolna.name,
                                                 partition='Common')
             pm1 = pooln.members_s.members.load(partition='Common',
                                                name=nod_ip.name)
             if aabbcc in ["active"]:
                 for member in [pm1]:
                     time.sleep(1)
                     my_pool = mgmt.tm.ltm.pools.pool.load(
                         partition='Common', name=poolna.name)
                     pool_stats = Stats(my_pool.stats.load())
                     #print(pool_stats.stat.status_availabilityState)
                     currm = pool_stats.stat.availableMemberCnt['value']
                     if currm <= 1:
                         print(currm)
                         continue
                     else:
                         if action == 'enabled':
                             # enables member
                             logger.info(
                                 'enables member %s, previous state: %s' %
                                 (member.name, member.state))
                             member.state = 'user-up'
                             member.session = 'user-enabled'
                         elif action == 'disabled':
                             # disables member
示例#22
0
# REQUIREMENTS: ---
#         BUGS: ---
#        NOTES: ---
#       AUTHOR: Oscarob Wu([email protected]), 
# ORGANIZATION: 
#      VERSION: 1.0
#      Created Time: 2021-01-25 09:29:36
#      Last modified: 2021-01-25 09:37
#     REVISION: ---
#===============================================================================
from f5.bigip import ManagementRoot
from f5.utils.responses.handlers import Stats
from pprint import pprint
#  Get login password from CLI
F5_host = input('F5_Host: ')
F5_user = input('Username: '******'Password: '******'Common', name='my_virtual')
my_pool = mgmt.tm.ltm.pools.pool.load(partition='Common', name='my_pool')

v_stats = Stats(my_virtual.stats.load())
p_stats = Stats(my_pool.stats.load())

pprint(v_stats.stat)
pprint(p_stats.stat)
print(v_stats.stat.status_availabilityState)
print(p_stats.stat.status_availabilityState)