def _setup_lb_network_and_servers(cmgr, x_name, **kwargs):
    num_servers = kwargs.pop('num_servers', 2)
    username = kwargs.pop('username', 'cirros')
    password = kwargs.pop('password', 'cubswin:)')
    image_id = kwargs.pop('image_id', None)
    image_name = kwargs.pop('image_name', None)
    flavor_id = kwargs.pop('flavor_id', 1)
    extra_timeout = kwargs.pop('server_extra_wait_time', 1)
    my_name = data_utils.rand_name(x_name)
    cidr = kwargs.pop('cidr', '10.199.88.0/24')
    port = kwargs.pop('port', 80)
    public_network_id = kwargs.pop('public_network_id', None)
    # NSX-v plugin need to use exclusive router for its lbaas env
    # Overwrite it if your env requiring a different type
    router_type = kwargs.pop('router_type', 'exclusive')
    router, network, subnet = create_networks(cmgr, my_name, cidr,
                                              router_type=router_type,
                                              **kwargs)
    sg = NET.create_security_group_loginable(cmgr, my_name, http=True)
    # ssh keypair
    keypair = make_ssh_keypair(cmgr, my_name)
    kp_filename = keypair_to_tempfile_json(keypair)
    servers = {}
    for sid in range(1, (num_servers + 1)):
        server_name = "%s-%d" % (my_name, sid)
        server = NET.create_server_on_network(
            cmgr, network['id'], security_group_name_or_id=sg['id'],
            key_name=keypair['name'], server_name=server_name,
            image_id=image_id, image_name=image_name,
            flavor_id=flavor_id, wait_on_boot=False)
        servers[server['id']] = dict(server=server, fip=None)

    # servers need in status=ACTIVE before assign floatingip to them
    # vm1 should be active by now
    for server_id in servers.keys():
        waiters.wait_for_server_status(
            cmgr.manager.servers_client, server_id, 'ACTIVE',
            extra_timeout=extra_timeout)

    for server_id, server in servers.items():
        server['fip'] = NET.create_floatingip_for_server(cmgr, server_id,
                                                         public_network_id)
        server['server'] = cmgr.nova('server-show', server_id)
        img_id = server['server']['image']['id']
        img_name = cmgr.nova('image-show', img_id).get('name', '')
        server['image_name'] = img_name

    lb_env = dict(
        name=my_name, username=username, password=password,
        keypair=keypair, kp_filename=kp_filename,
        security_group=sg,
        router=router, port=port, network=network, subnet=subnet,
        servers=servers)
    return lb_env
def setup_mtz_simple(cmgr, x_name, **kwargs):
    x_name = x_name or data_utils.rand_name('mtz-i')
    wait4server_active = kwargs.pop('wait4servers', True)
    tenant_cmgr = kwargs.pop('for_tenant', None)
    if tenant_cmgr:
        # in this condition, cmgr must have admin privilege
        tenant_id = tenant_cmgr.manager.credentials.tenant_id
    else:
        tenant_cmgr = cmgr
        tenant_id = kwargs.pop('tenant_id', None)
        if tenant_id:
            msg = "tenant_id not supported, use for_tenant=tenant_cmgr"
            raise exceptions.NotImplementedError(msg)
    router_type = kwargs.pop('router_type', 'shared')
    scope_id_list = kwargs.pop('scope_id_list', [])
    mtz_ip = netaddr.IPNetwork(kwargs.pop('cidr', '10.199.1.0/24'))
    mask_bits = kwargs.pop('mask_bits', (mtz_ip.prefixlen + 3))
    cidr_list = [x for x in mtz_ip.subnet(mask_bits)]
    net_list = []
    for ix, scope_id in enumerate(scope_id_list):
        subnet_cidr = str(cidr_list[ix])
        name = x_name + ("-%d" % (ix + 1))
        network_subnet = create_mtz_networks(cmgr, scope_id, subnet_cidr,
                                             name=name, tenant_id=tenant_id,
                                             **kwargs)
        net_list.append(network_subnet)
    # server_create does not accept tenant_id, always use tenant_cmgr
    router = NET.create_router_and_add_interfaces(tenant_cmgr,
                                                  x_name + "-router",
                                                  net_list,
                                                  router_type=router_type,
                                                  tenant_id=tenant_id)
    sg = NET.create_security_group_loginable(tenant_cmgr, x_name,
                                             tenant_id=tenant_id)
    security_group_id = sg['id']
    net_id_servers = {}
    for ix, (network, subnet) in enumerate(net_list):
        net_id = network['id']
        vm = NET.create_server_on_network(
            tenant_cmgr, net_id,
            security_group_name_or_id=security_group_id,
            server_name=network['name'])
        net_id_servers[net_id] = dict(server=vm,
                                      network=network, subnet=subnet)
    if wait4server_active:
        try:
            wait_for_servers_active(cmgr, net_id_servers)
        except Exception:
            # if servers failed to be ACTIVE, we want to examine them
            pass
    return (router, net_id_servers, sg)
demo = osn.get_mcli("demo", password="******")
pub = demo.qsvc("net-show public")
mynet = demo.qsvc("net-show private")

fip_list = []
for ix in range(6):
    fip = demo.qsvc("floatingip-create", pub["id"])
    fip_list.append(fip)

from operator import itemgetter

fip2_list = sorted(fip_list, key=itemgetter("floating_ip_address"), reverse=True)

demo_sg = NETS.create_security_group_loginable(demo, "demo_sg_login")
demo_img = demo.nova("image-list", name=u"cirros-0.3.3-x86_64-disk")[0]

server_list = []
for ix in range(6):
    sv_name = "demo-sv-%d" % ix
    server = NETS.create_server_on_network(
        demo, mynet["id"], sv_name, image_id=demo_img["id"], security_group_name_or_id=demo_sg["id"], wait_on_boot=False
    )
    server_list.append(server)

# waitfor all servers become ACTIVE
fip3 = {}
for ix in range(6):
    fip = NETS.associate_floatingip_to_server(demo, fip_list[ix], server_list[ix])
    fip3[fip.get("floating_ip_address")] = fip_list
def add_server_to_lb_network(cmgr, on_network_id, security_group_name_or_id,
                             sid_range, keypair_name=None,
                             username='******', password='******',
                             flavor_id=1, image_id=None, image_name=None,
                             public_network_id=None, extra_timeout=10,
                             build_timeout=900, build_interval=5.0,
                             halt=False):
    if halt:
        import pdb;
        pdb.set_trace()
    lb_network = cmgr.qsvc('net-show', on_network_id)
    lb_network_name = lb_network.get('name', None)
    sg = cmgr.qsvc('security-group-show', security_group_name_or_id)
    if keypair_name is None:
        # ssh keypair
        keypair = make_ssh_keypair(cmgr, lb_network_name)
        keypair_name = keypair['name']
    else:
        keypair = None

    servers = {}
    for sid in sid_range:
        server_name = "%s-%s" % (lb_network_name, sid)
        server = NET.create_server_on_network(
            cmgr, on_network_id, security_group_name_or_id=sg['id'],
            key_name=keypair_name, server_name=server_name,
            image_id=image_id, image_name=image_name,
            flavor_id=flavor_id, wait_on_boot=False)
        servers[server['id']] = dict(server=server, fip=None)

    # servers need in status=ACTIVE before assign floatingip to them
    # vm1 should be active by now
    for server_id in servers.keys():
        waiters.wait_for_server_status(
            cmgr.manager.servers_client, server_id, 'ACTIVE',
            extra_timeout=extra_timeout)

    for server_id, server in servers.items():
        server['fip'] = NET.create_floatingip_for_server(cmgr, server_id,
                                                         public_network_id)
        server['server'] = cmgr.nova('server-show', server_id)
        img_id = server['server']['image']['id']
        img_name = cmgr.nova('image-show', img_id).get('name', '')
        server['image_name'] = img_name

    # wait for servers having their floating-ip (CH+newton takes long time)
    timeout = extra_timeout + build_timeout
    t0 = time.time()
    for server_id, server in servers.items():
        while True:
            elapse_time = time.time() - t0
            sv = cmgr.nova('server-show', server_id)
            if get_server_ip_address(sv, 'floating', lb_network_name):
                msg = ("Take %d seconds to assign floating-ip to server[%s]"
                       % (int(elapse_time), sv.get('name')))
                U.log_msg(msg, 'OS-LBaaS')
                break
            if elapse_time > timeout:
                raise Exception("Server did not get its floating-ip.")
            time.sleep(build_interval)

    lb_env = dict(
        username=username, password=password,
        keypair_name=keypair_name, keypair=keypair,
        security_group=sg, servers=servers)
    return lb_env