Best Python code snippet using tempest_python
neutron-ha-tool.py
Source:neutron-ha-tool.py  
...133        LOG.info("No rebalancing required for 1 or fewer agents")134        return135    for l3_agent in agents:136        l3_agent_dict[l3_agent['id']] = \137            list_routers_on_l3_agent(qclient, l3_agent['id'])138    ordered_l3_agent_dict = OrderedDict(sorted(l3_agent_dict.items(),139                                               key=lambda t: len(t[0])))140    ordered_l3_agent_list = list(ordered_l3_agent_dict)141    num_agents = len(ordered_l3_agent_list)142    LOG.info("Agent list: %s", ordered_l3_agent_list[0:(num_agents-1/2)+1])143    i = 0144    for agent in ordered_l3_agent_list[0:num_agents-1/2]:145        low_agent_id = ordered_l3_agent_list[i]146        hgh_agent_id = ordered_l3_agent_list[-(i+1)]147        # do nothing if we end up comparing the same router148        if low_agent_id == hgh_agent_id:149            continue150        LOG.info("Examining low_agent=%s, high_agent=%s",151                 low_agent_id, hgh_agent_id)152        low_agent_router_count = len(l3_agent_dict[low_agent_id])153        hgh_agent_router_count = len(l3_agent_dict[hgh_agent_id])154        LOG.info("Low Count=%s, High Count=%s",155                 low_agent_router_count, hgh_agent_router_count)156        for router_id in l3_agent_dict[hgh_agent_id]:157            if low_agent_router_count >= hgh_agent_router_count:158                break159            else:160                LOG.info("Migrating router=%s from agent=%s to agent=%s",161                         router_id, hgh_agent_id, low_agent_id)162                try:163                    if not noop:164                        migrate_router(qclient, router_id, hgh_agent_id,165                                       low_agent_id)166                    low_agent_router_count += 1167                    hgh_agent_router_count -= 1168                except:169                    LOG.exception("Failed to migrate router=%s from agent=%s "170                                  "to agent=%s", router_id, hgh_agent_id,171                                  low_agent_id)172                    continue173        i += 1174def l3_agent_check(qclient):175    """176    Walk the l3 agents searching for agents that are offline.  Show routers177    that are offline and where we would migrate them to.178    :param qclient: A neutronclient179    """180    migration_count = 0181    agent_list = list_agents(qclient)182    agent_dead_list = agent_dead_id_list(agent_list, 'L3 agent')183    agent_alive_list = agent_alive_id_list(agent_list, 'L3 agent')184    LOG.info("There are %s offline L3 agents and %s online L3 agents",185             len(agent_dead_list), len(agent_alive_list))186    if len(agent_dead_list) > 0:187        for agent_id in agent_dead_list:188            LOG.info("Querying agent_id=%s for routers to migrate", agent_id)189            router_id_list = list_routers_on_l3_agent(qclient, agent_id)190            for router_id in router_id_list:191                try:192                    target_id = random.choice(agent_alive_list)193                except IndexError:194                    LOG.warn("There are no l3 agents alive we could "195                             "migrate routers onto.")196                    target_id = None197                migration_count += 1198                LOG.warn("Would like to migrate router=%s to agent=%s",199                         router_id, target_id)200        if migration_count > 0:201            sys.exit(2)202def l3_agent_migrate(qclient, noop=False, now=False):203    """204    Walk the l3 agents searching for agents that are offline.  For those that205    are offline, we will retrieve a list of routers on them and migrate them to206    a random l3 agent that is online.207    :param qclient: A neutronclient208    :param noop: Optional noop flag209    :param now: Optional. If false (the default), we'll wait for a random210                amount of time (between 30 and 60 seconds) before migration. If211                true, routers are migrated immediately.212    """213    migration_count = 0214    agent_list = list_agents(qclient)215    agent_dead_list = agent_dead_id_list(agent_list, 'L3 agent')216    agent_alive_list = agent_alive_id_list(agent_list, 'L3 agent')217    LOG.info("There are %s offline L3 agents and %s online L3 agents",218             len(agent_dead_list), len(agent_alive_list))219    if len(agent_dead_list) > 0:220        if len(agent_alive_list) < 1:221            LOG.exception("There are no l3 agents alive to migrate "222                          "routers onto")223        timeout = 0224        if not now:225            while timeout < TAKEOVER_DELAY:226                agent_list_new = list_agents(qclient)227                agent_dead_list_new = agent_dead_id_list(agent_list_new,228                                                         'L3 agent')229                if len(agent_dead_list_new) < len(agent_dead_list):230                    LOG.info("Skipping router failover since an agent came "231                             "online while ensuring agents offline for %s "232                             "seconds", TAKEOVER_DELAY)233                    sys.exit(0)234                LOG.info("Agent found offline for seconds=%s but waiting "235                         "seconds=%s before migration",236                         timeout, TAKEOVER_DELAY)237                timeout += 1238                time.sleep(1)239        for agent_id in agent_dead_list:240            LOG.info("Querying agent_id=%s for routers to migrate", agent_id)241            router_id_list = list_routers_on_l3_agent(qclient, agent_id)242            for router_id in router_id_list:243                target_id = random.choice(agent_alive_list)244                LOG.info("Migrating router=%s to agent=%s",245                         router_id, target_id)246                try:247                    if not noop:248                        migrate_router(qclient, router_id, agent_id, target_id)249                        migration_count += 1250                except:251                    LOG.exception("There was an error migrating a router")252                    continue253        LOG.info("%s routers required migration from offline L3 agents",254                 migration_count)255def replicate_dhcp(qclient, noop=False):256    """257    Retrieve a network list and then probe each DHCP agent to ensure258    they have that network assigned.259    :param qclient: A neutronclient260    :param noop: Optional noop flag261    """262    added = 0263    networks = list_networks(qclient)264    network_id_list = [n['id'] for n in networks]265    agents = list_agents(qclient, agent_type='DHCP agent')266    LOG.info("Replicating %s networks to %s DHCP agents", len(networks),267             len(agents))268    for dhcp_agent_id in [a['id'] for a in agents]:269        networks_on_agent = \270            qclient.list_networks_on_dhcp_agent(dhcp_agent_id)['networks']271        network_id_on_agent = [n['id'] for n in networks_on_agent]272        for network_id in network_id_list:273            if network_id not in network_id_on_agent:274                try:275                    dhcp_body = {'network_id': network_id}276                    if not noop:277                        qclient.add_network_to_dhcp_agent(dhcp_agent_id,278                                                          dhcp_body)279                    LOG.info("Added missing network=%s to dhcp agent=%s",280                             network_id, dhcp_agent_id)281                    added += 1282                except:283                    LOG.exception("Failed to add network_id=%s to"284                                  "dhcp_agent=%s", network_id, dhcp_agent_id)285                    continue286    LOG.info("Added %s networks to DHCP agents", added)287def migrate_router(qclient, router_id, agent_id, target_id):288    """289    Returns nothing, and raises on exception290    :param qclient: A neutronclient291    :param router_id: The id of the router to migrate292    :param agent_id: The id of the l3 agent to migrate from293    :param target_id: The id of the l3 agent to migrate to294    """295    # N.B. The neutron API will return "success" even when there is a296    # subsequent failure during the add or remove process so we must check to297    # ensure the router has been added or removed298    # remove the router from the dead agent299    qclient.remove_router_from_l3_agent(agent_id, router_id)300    # ensure it is removed or log an error301    if router_id in list_routers_on_l3_agent(qclient, agent_id):302        LOG.exception("Failed to remove router_id=%s from agent_id=%s",303                      router_id, agent_id)304    # add the router id to a live agent305    router_body = {'router_id': router_id}306    qclient.add_router_to_l3_agent(target_id, router_body)307    # ensure it is removed or log an error308    if router_id not in list_routers_on_l3_agent(qclient, target_id):309        LOG.exception("Failed to add router_id=%s from agent_id=%s",310                      router_id, agent_id)311def list_networks(qclient):312    """313    Return a list of network objects314    :param qclient: A neutronclient315    """316    resp = qclient.list_networks()317    LOG.debug("list_networks: %s", resp)318    return resp['networks']319def list_dhcp_agent_networks(qclient, agent_id):320    """321    Return a list of network ids assigned to a particular DHCP agent322    :param qclient: A neutronclient323    :param agent_id: A DHCP agent id324    """325    resp = qclient.list_networks_on_dhcp_agent(agent_id)326    LOG.debug("list_networks_on_dhcp_agent: %s", resp)327    return [s['id'] for s in resp['networks']]328def list_routers(qclient):329    """330    Return a list of router objects331    :param qclient: A neutronclient332    # {'routers': [333    #    {u'status': u'ACTIVE',334    #     u'external_gateway_info':335    #        {u'network_id': u'b970297c-d80e-4527-86d7-e49d2da9fdef'},336    #     u'name': u'router1',337    #     u'admin_state_up': True,338    #     u'tenant_id': u'5603b97ee7f047ea999e25492c7fcb23',339    #     u'routes': [],340    #     u'id': u'0a122e5c-1623-412e-8c53-a1e21d1daff8'}341    # ]}342    """343    resp = qclient.list_routers()344    LOG.debug("list_routers: %s", resp)345    return resp['routers']346def list_routers_on_l3_agent(qclient, agent_id):347    """348    Return a list of router ids on an agent349    :param qclient: A neutronclient350    """351    resp = qclient.list_routers_on_l3_agent(agent_id)352    LOG.debug("list_routers_on_l3_agent: %s", resp)353    return [r['id'] for r in resp['routers']]354def list_agents(qclient, agent_type=None):355    """Return a list of agent objects356    :param qclient: A neutronclient357    # {u'agents': [358    #   {u'binary': u'neutron-openvswitch-agent',359    #    u'description': None,360    #    u'admin_state_up': True,361    #    u'heartbeat_timestamp': u'2013-07-02 22:20:25',362    #    u'alive': True,363    #    u'topic': u'N/A',364    #    u'host': u'o3r3.int.san3.attcompute.com',365    #    u'agent_type': u'Open vSwitch agent',...quantum-ha-tool.py
Source:quantum-ha-tool.py  
...95        LOG.info("No rebalancing required for 1 or fewer agents")96        return97    for l3_agent in agents:98        num_routers=l3_agent['configurations']['routers']99        l3_agent_dict[l3_agent['id']] = list_routers_on_l3_agent(qclient, l3_agent['id'])100    ordered_l3_agent_dict = OrderedDict(sorted(l3_agent_dict.items(), key=lambda t: len(t[0])))101    ordered_l3_agent_list = list(ordered_l3_agent_dict)102    num_agents = len(ordered_l3_agent_list)103    LOG.info("Agent list: %s", ordered_l3_agent_list[0:(num_agents-1/2)+1])104    i=0105    for agent in ordered_l3_agent_list[0:num_agents-1/2]:106        low_agent_id=ordered_l3_agent_list[i]107        hgh_agent_id=ordered_l3_agent_list[-(i+1)]108        # do nothing if we end up comparing the same router109        if low_agent_id == hgh_agent_id:110            continue111        LOG.info("Examining low_agent=%s, high_agent=%s", low_agent_id, hgh_agent_id)112        low_agent_router_count = len(l3_agent_dict[low_agent_id])113        hgh_agent_router_count = len(l3_agent_dict[hgh_agent_id])114        LOG.info("Low Count=%s, High Count=%s", low_agent_router_count, hgh_agent_router_count)115        for router_id in l3_agent_dict[hgh_agent_id]:116            if low_agent_router_count >= hgh_agent_router_count:117                break118            else:119                LOG.info("Migrating router=%s from agent=%s to agent=%s", router_id, hgh_agent_id, low_agent_id)120                try:121                    if not noop:122                        migrate_router(qclient, router_id, hgh_agent_id, low_agent_id)123                    low_agent_router_count += 1124                    hgh_agent_router_count -= 1125                except:126                    LOG.traceback("Failed to migrate router=%s from agent=%s to agent=%s" % (router_id, hgh_agent_id, low_agent_id))127                    continue128        i+=1129def l3_agent_check(qclient, noop=False):130    """131    Walk the l3 agents searching for agents that are offline.  Show routers132    that are offline and where we would migrate them too.133    :param qclient: A quantumclient134    :param noop: Optional noop flag135    """136    migration_count = 0137    agent_list = list_agents(qclient)138    agent_dead_list = agent_dead_id_list(agent_list, 'L3 agent')139    agent_alive_list = agent_alive_id_list(agent_list, 'L3 agent')140    LOG.info("There are %s offline L3 agents and %s online L3 agents", len(agent_dead_list), len(agent_alive_list))141    if len(agent_dead_list) > 0:142       for agent_id in agent_dead_list:143           LOG.info("Querying agent_id=%s for routers to migrate", agent_id)144           router_id_list = list_routers_on_l3_agent(qclient, agent_id)145           for router_id in router_id_list:146               try:147                   target_id = choice(agent_alive_list)148               except:149                   LOG.warn("There are no l3 agents alive we could migrate routers onto")150                   target_id = None151               LOG.info("Would like to migrate router=%s to agent=%s", router_id, target_id)152def l3_agent_migrate(qclient, noop=False):153    """154    Walk the l3 agents searching for agents that are offline.  For those that are155    offline, we will retrieve a list of routers on them and migrate them to a156    random l3 agent that is online.157    :param qclient: A quantumclient158    :param noop: Optional noop flag159    """160    migration_count = 0161    agent_list = list_agents(qclient)162    agent_dead_list = agent_dead_id_list(agent_list, 'L3 agent')163    agent_alive_list = agent_alive_id_list(agent_list, 'L3 agent')164    LOG.info("There are %s offline L3 agents and %s online L3 agents", len(agent_dead_list), len(agent_alive_list))165    if len(agent_dead_list) > 0:166       if len(agent_alive_list) < 1:167           LOG.exception("There are no l3 agents alive to migrate routers onto")168       for agent_id in agent_dead_list:169           LOG.info("Querying agent_id=%s for routers to migrate", agent_id)170           router_id_list = list_routers_on_l3_agent(qclient, agent_id)171           for router_id in router_id_list:172               target_id = choice(agent_alive_list)173               LOG.info("Migrating router=%s to agent=%s", router_id, target_id)174               router_body = {'router_id': router_id}175               try:176                   if not noop:177                       migrate_router(qclient, router_id, agent_id, target_id)178                   migration_count+=1179               except:180                   LOG.exception("There was an error migrating a router")181                   continue182       LOG.info("%s routers required migration from offline L3 agents", migration_count)183def replicate_dhcp(qclient, noop=False):184    """185    Retrieve a network list and then probe each DHCP agent to ensure they have that186    network assigned.187    :param qclient: A quantumclient188    :param noop: Optional noop flag189    """190    added=0191    networks = list_networks(qclient)192    network_id_list = [n['id'] for n in networks]193    agents = list_agents(qclient, agent_type='DHCP agent')194    LOG.info("Replicating %s networks to %s DHCP agents", len(networks), len(agents))195    for dhcp_agent_id in [a['id'] for a in agents]:196       networks_on_agent = qclient.list_networks_on_dhcp_agent(dhcp_agent_id)['networks']197       network_id_on_agent = [n['id'] for n in networks_on_agent]198       for network_id in network_id_list:199           if network_id not in network_id_on_agent:200               try:201                   dhcp_body = {'network_id': network_id}202                   if not noop:203                       qclient.add_network_to_dhcp_agent(dhcp_agent_id, dhcp_body)204                   LOG.info("Added missing network=%s to dhcp agent=%s", network_id, dhcp_agent_id)205                   added+=1206               except:207                   LOG.exception("Failed to add network_id=%s to dhcp_agent=%s", network_id, dhcp_agent_id)208                   continue209    LOG.info("Added %s networks to DHCP agents", added)210def migrate_router(qclient, router_id, agent_id, target_id):211    """212    Returns nothing, and raises on exception213    :param qclient: A quantumclient214    :param router_id: The id of the router to migrate215    :param agent_id: The id of the l3 agent to migrate from216    :param target_id: The id of the l3 agent to migrate to217    """218    # N.B. The quantum API will return "success" even when there is a subsequent219    # failure during the add or remove process so we must check to ensure the220    # router has been added or removed221    # remove the router from the dead agent222    qclient.remove_router_from_l3_agent(agent_id, router_id)223    # ensure it is removed or log an error224    if router_id in list_routers_on_l3_agent(qclient, agent_id):225       LOG.exception("Failed to remove router_id=%s from agent_id=%s", router_id, agent_id)226    # add the router id to a live agent227    router_body = {'router_id': router_id}228    qclient.add_router_to_l3_agent(target_id, router_body)229    # ensure it is removed or log an error230    if router_id not in list_routers_on_l3_agent(qclient, target_id):231       LOG.exception("Failed to add router_id=%s from agent_id=%s", router_id, agent_id)232def list_networks(qclient):233    """234    Return a list of network objects235    :param qclient: A quantumclient236    """237    resp = qclient.list_networks()238    LOG.debug("list_networks: %s", resp)239    return resp['networks']240def list_dhcp_agent_networks(qclient, agent_id):241    """242    Return a list of network ids assigned to a particular DHCP agent243    :param qclient: A quantumclient244    :param agent_id: A DHCP agent id245    """246    resp = qclient.list_networks_on_dhcp_agent(agent_id)247    LOG.debug("list_networks_on_dhcp_agent: %s", resp)248    return [s['id'] for s in resp['networks']]249def list_routers(qclient):250    """251    Return a list of router objects252    :param qclient: A quantumclient253    # {'routers': [{u'status': u'ACTIVE', u'external_gateway_info': {u'network_id': u'b970297c-d80e-4527-86d7-e49d2da9fdef'}, u'name': u'router1',254    # u'admin_state_up': True, u'tenant_id': u'5603b97ee7f047ea999e25492c7fcb23', u'routes': [], u'id': u'0a122e5c-1623-412e-8c53-a1e21d1daff8'},255    """256    resp = qclient.list_routers()257    LOG.debug("list_routers: %s", resp)258    return resp['routers']259def list_routers_on_l3_agent(qclient, agent_id):260    """261    Return a list of router ids on an agent262    :param qclient: A quantumclient263    """264    resp = qclient.list_routers_on_l3_agent(agent_id)265    LOG.debug("list_routers_on_l3_agent: %s", resp)266    return [r['id'] for r in resp['routers']]267def list_agents(qclient, agent_type=None):268    """269    Return a list of agent objects270    :param qclient: A quantumclient271    # openvswitch272    #273    # {u'agents': [{u'binary': u'quantum-openvswitch-agent', u'description': None, u'admin_state_up': True, u'heartbeat_timestamp': u'2013-07-02 22:20:25'274    # u'alive': True, u'topic': u'N/A', u'host': u'o3r3.int.san3.attcompute.com', u'agent_type': u'Open vSwitch agent', u'created_at': u'2013-07-02 14:50:57',275    # u'started_at': u'2013-07-02 14:50:57', u'id': u'3a577f1d-d86e-4f1a-a395-8d4c8e4df1e2', u'configurations': {u'devices': 10}},276    #277    # dhcp278    #...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
