fix pre-demo bugs
diff --git a/start_vms.py b/start_vms.py
index 7317fd0..821c299 100644
--- a/start_vms.py
+++ b/start_vms.py
@@ -9,8 +9,7 @@
from cinderclient.v1.client import Client as c_client
from nodes.node import Node
-from nodes.openstack import get_floating_ip
-from utils import parse_creds
+
logger = logging.getLogger("io-perf-tool")
@@ -25,9 +24,23 @@
return name, passwd, tenant, auth_url
-def nova_connect():
- return n_client('1.1', *ostack_get_creds()
- )
+NOVA_CONNECTION = None
+
+
+def nova_connect(name=None, passwd=None, tenant=None, auth_url=None):
+ global NOVA_CONNECTION
+ if NOVA_CONNECTION is None:
+ if name is None:
+ name, passwd, tenant, auth_url = ostack_get_creds()
+ NOVA_CONNECTION = n_client('1.1', name, passwd, tenant, auth_url)
+ return NOVA_CONNECTION
+
+
+def nova_disconnect():
+ global NOVA_CONNECTION
+ if NOVA_CONNECTION is not None:
+ NOVA_CONNECTION.close()
+ NOVA_CONNECTION = None
def create_keypair(nova, name, key_path):
@@ -87,26 +100,21 @@
def launch_vms(config):
- creds = config['vm_params']['creds']
-
- # if creds != 'ENV':
- # raise ValueError("Only 'ENV' creds are supported")
-
logger.debug("Starting new nodes on openstack")
- conn = nova_connect()
params = config['vm_params'].copy()
count = params.pop('count')
if isinstance(count, basestring):
assert count.startswith("x")
- lst = conn.services.list(binary='nova-compute')
+ lst = NOVA_CONNECTION.services.list(binary='nova-compute')
srv_count = len([srv for srv in lst if srv.status == 'enabled'])
count = srv_count * int(count[1:])
- creds = params.pop('creds')
+ # vm_creds = config['vm_params']['creds'] ?????
+ vm_creds = params.pop('creds')
- for ip, _ in create_vms_mt(conn, count, **params):
- yield Node(creds.format(ip), [])
+ for ip, os_node in create_vms_mt(NOVA_CONNECTION, count, **params):
+ yield Node(vm_creds.format(ip), []), os_node.id
def create_vms_mt(nova, amount, keypair_name, img_name,
@@ -201,15 +209,21 @@
return flt_ip.ip, nova.servers.get(srv.id)
-def clear_nodes():
- nova = nova_connect()
- clear_all(nova)
+def clear_nodes(nodes_ids):
+ clear_all(NOVA_CONNECTION, nodes_ids, None)
-def clear_all(nova, name_templ="ceph-test-{0}"):
+def clear_all(nova, ids=None, name_templ="ceph-test-{0}"):
+
+ def need_delete(srv):
+ if name_templ is not None:
+ return re.match(name_templ.format("\\d+"), srv.name) is not None
+ else:
+ return srv.id in ids
+
deleted_srvs = set()
for srv in nova.servers.list():
- if re.match(name_templ.format("\\d+"), srv.name):
+ if need_delete(srv):
logger.debug("Deleting server {0}".format(srv.name))
nova.servers.delete(srv)
deleted_srvs.add(srv.id)
@@ -224,13 +238,14 @@
# wait till vm actually deleted
- cinder = c_client(*ostack_get_creds())
- for vol in cinder.volumes.list():
- if isinstance(vol.display_name, basestring):
- if re.match(name_templ.format("\\d+"), vol.display_name):
- if vol.status in ('available', 'error'):
- logger.debug("Deleting volume " + vol.display_name)
- cinder.volumes.delete(vol)
+ if name_templ is not None:
+ cinder = c_client(*ostack_get_creds())
+ for vol in cinder.volumes.list():
+ if isinstance(vol.display_name, basestring):
+ if re.match(name_templ.format("\\d+"), vol.display_name):
+ if vol.status in ('available', 'error'):
+ logger.debug("Deleting volume " + vol.display_name)
+ cinder.volumes.delete(vol)
logger.debug("Clearing done (yet some volumes may still deleting)")