add migrate container in vclustermgr
This commit is contained in:
parent
0deaa377c6
commit
7736f219db
|
@ -728,6 +728,59 @@ class VclusterMgr(object):
|
|||
full_clusters.append(single_cluster)'''
|
||||
return [True, clusters]
|
||||
|
||||
def migrate_container(self, clustername, username, containername, new_host, proxy_public_ip, user_info):
|
||||
[status, info] = self.get_clusterinfo(clustername, username)
|
||||
if not status:
|
||||
return [False, "cluster not found"]
|
||||
if info['status'] != 'stopped':
|
||||
return [False, 'cluster is not stopped']
|
||||
|
||||
con_db = Container.query.get(containername)
|
||||
if con_db is None:
|
||||
return [False, 'Container not found']
|
||||
if host == new_host:
|
||||
return [False, 'Container has been on the new host']
|
||||
|
||||
oldworker = self.nodemgr.ip_to_rpc(con_db.host)
|
||||
if oldworker is None:
|
||||
return [False, "Old host worker can't be found or has been stopped."]
|
||||
oldworker.stop_container(containername)
|
||||
imagename = "migrate-" + containername + "-" + datetime.datetime.now().strftime("%Y-%m-%d")
|
||||
status,msg = oldworker.create_image(username,imagename,containername,"",10000)
|
||||
if not status:
|
||||
return [False, msg]
|
||||
#con_db.lastsave = datetime.datetime.now()
|
||||
#con_db.image = imagename
|
||||
|
||||
'''self.networkmgr.load_usrgw(username)
|
||||
proxy_server_ip = self.networkmgr.usrgws[username]
|
||||
[status, proxy_public_ip] = self.etcd.getkey("machines/publicIP/"+proxy_server_ip)
|
||||
if not status:
|
||||
logger.error("Fail to get proxy_public_ip %s."%(proxy_server_ip))
|
||||
return [False, "Fail to get proxy server public IP."]'''
|
||||
uid = json.loads(user_info)["data"]["id"]
|
||||
setting = {
|
||||
'cpu': con_db.setting_cpu,
|
||||
'memory': con_db.setting_mem,
|
||||
'disk': con_db.setting_disk
|
||||
}
|
||||
_, clusterid, cid = containername.split('-')
|
||||
hostname = "host-"+str(cid)
|
||||
gateway = self.networkmgr.get_usergw(username)
|
||||
image = {'name':imagename,'type':'private','owner':username }
|
||||
|
||||
worker = self.nodemgr.ip_to_rpc(new_host)
|
||||
if worker is None:
|
||||
self.imagemgr.removeImage(username,imagename)
|
||||
return [False, "New host worker can't be found or has been stopped."]
|
||||
status,msg = worker.create_container(containername, proxy_public_ip, username, uid, json.dumps(setting),
|
||||
clustername, str(clusterid), str(cid), hostname, con_db.ip, gateway, json.dumps(image))
|
||||
if not status:
|
||||
return [False, msg]
|
||||
oldworker.delete_container(containername)
|
||||
self.imagemgr.removeImage(username,imagename)
|
||||
return [True,""]
|
||||
|
||||
def is_cluster(self, clustername, username):
|
||||
[status, clusters] = self.list_clusters(username)
|
||||
if clustername in clusters:
|
||||
|
|
Loading…
Reference in New Issue