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 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