¡@

Home 

OpenStack Study: check_nsx_config.py

OpenStack Index

**** CubicPower OpenStack Study ****

def help(name):

    print("Usage: %s path/to/neutron/plugin/ini/config/file" % name)

    sys.exit(1)

**** CubicPower OpenStack Study ****

def get_nsx_controllers(cluster):

    return cluster.nsx_controllers

**** CubicPower OpenStack Study ****

def config_helper(config_entity, cluster):

    try:

        return nsxlib.do_request('GET',

                                 "/ws.v1/%s?fields=uuid" % config_entity,

                                 cluster=cluster).get('results', [])

    except Exception as e:

        msg = (_("Error '%(err)s' when connecting to controller(s): %(ctl)s.")

               % {'err': str(e),

                  'ctl': ', '.join(get_nsx_controllers(cluster))})

        raise Exception(msg)

**** CubicPower OpenStack Study ****

def get_control_cluster_nodes(cluster):

    return config_helper("control-cluster/node", cluster)

**** CubicPower OpenStack Study ****

def get_gateway_services(cluster):

    ret_gw_services = {"L2GatewayServiceConfig": [],

                       "L3GatewayServiceConfig": []}

    gw_services = config_helper("gateway-service", cluster)

    for gw_service in gw_services:

        ret_gw_services[gw_service['type']].append(gw_service['uuid'])

    return ret_gw_services

**** CubicPower OpenStack Study ****

def get_transport_zones(cluster):

    transport_zones = config_helper("transport-zone", cluster)

    return [transport_zone['uuid'] for transport_zone in transport_zones]

**** CubicPower OpenStack Study ****

def get_transport_nodes(cluster):

    transport_nodes = config_helper("transport-node", cluster)

    return [transport_node['uuid'] for transport_node in transport_nodes]

**** CubicPower OpenStack Study ****

def is_transport_node_connected(cluster, node_uuid):

    try:

        return nsxlib.do_request('GET',

                                 "/ws.v1/transport-node/%s/status" % node_uuid,

                                 cluster=cluster)['connection']['connected']

    except Exception as e:

        msg = (_("Error '%(err)s' when connecting to controller(s): %(ctl)s.")

               % {'err': str(e),

                  'ctl': ', '.join(get_nsx_controllers(cluster))})

        raise Exception(msg)

**** CubicPower OpenStack Study ****

def main():

    if len(sys.argv) != 2:

        help(sys.argv[0])

    args = ['--config-file']

    args.append(sys.argv[1])

    config.parse(args)

    print("----------------------- Database Options -----------------------")

    print("\tconnection: %s" % cfg.CONF.database.connection)

    print("\tretry_interval: %d" % cfg.CONF.database.retry_interval)

    print("\tmax_retries: %d" % cfg.CONF.database.max_retries)

    print("-----------------------    NSX Options   -----------------------")

    print("\tNSX Generation Timeout %d" % cfg.CONF.NSX.nsx_gen_timeout)

    print("\tNumber of concurrent connections to each controller %d" %

          cfg.CONF.NSX.concurrent_connections)

    print("\tmax_lp_per_bridged_ls: %s" % cfg.CONF.NSX.max_lp_per_bridged_ls)

    print("\tmax_lp_per_overlay_ls: %s" % cfg.CONF.NSX.max_lp_per_overlay_ls)

    print("-----------------------  Cluster Options -----------------------")

    print("\trequested_timeout: %s" % cfg.CONF.req_timeout)

    print("\tretries: %s" % cfg.CONF.retries)

    print("\tredirects: %s" % cfg.CONF.redirects)

    print("\thttp_timeout: %s" % cfg.CONF.http_timeout)

    cluster = nsx_utils.create_nsx_cluster(

        cfg.CONF,

        cfg.CONF.NSX.concurrent_connections,

        cfg.CONF.NSX.nsx_gen_timeout)

    nsx_controllers = get_nsx_controllers(cluster)

    num_controllers = len(nsx_controllers)

    print("Number of controllers found: %s" % num_controllers)

    if num_controllers == 0:

        print("You must specify at least one controller!")

        sys.exit(1)

    get_control_cluster_nodes(cluster)

    for controller in nsx_controllers:

        print("\tController endpoint: %s" % controller)

        gateway_services = get_gateway_services(cluster)

        default_gateways = {

            "L2GatewayServiceConfig": cfg.CONF.default_l2_gw_service_uuid,

            "L3GatewayServiceConfig": cfg.CONF.default_l3_gw_service_uuid}

        errors = 0

        for svc_type in default_gateways.keys():

            for uuid in gateway_services[svc_type]:

                print("\t\tGateway(%s) uuid: %s" % (svc_type, uuid))

            if (default_gateways[svc_type] and

                default_gateways[svc_type] not in gateway_services[svc_type]):

                print("\t\t\tError: specified default %s gateway (%s) is "

                      "missing from NSX Gateway Services!" % (

                          svc_type,

                          default_gateways[svc_type]))

                errors += 1

        transport_zones = get_transport_zones(cluster)

        print("\tTransport zones: %s" % transport_zones)

        if cfg.CONF.default_tz_uuid not in transport_zones:

            print("\t\tError: specified default transport zone "

                  "(%s) is missing from NSX transport zones!"

                  % cfg.CONF.default_tz_uuid)

            errors += 1

        transport_nodes = get_transport_nodes(cluster)

        print("\tTransport nodes: %s" % transport_nodes)

        node_errors = []

        for node in transport_nodes:

            if not is_transport_node_connected(cluster, node):

                node_errors.append(node)

    # Use different exit codes, so that we can distinguish

    # between config and runtime errors

    if len(node_errors):

        print("\nThere are one or mode transport nodes that are "

              "not connected: %s. Please, revise!" % node_errors)

        sys.exit(10)

    elif errors:

        print("\nThere are %d errors with your configuration. "

              "Please, revise!" % errors)

        sys.exit(12)

    else:

        print("Done.")