def container_start(request, id): user = request.user container = models.Containers.objects.get(id=int(id)) try: if container: docker_cli = DockerApi(container.node.node_ip) containers = docker_cli.containers() docker_cli.start(container.container_name) container.status = True return HttpResponseRedirect(reverse('listcontainerurl')) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl'))
def container_start(request,id): user = request.user container = models.Containers.objects.get(id=int(id)) try: if container: docker_cli = DockerApi(container.node.node_ip) containers = docker_cli.containers() docker_cli.start(container.container_name) container.status = True return HttpResponseRedirect(reverse('listcontainerurl')) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl'))
def check_containers(node_ip): if node_ip: name_list = [] try: docker_cli = DockerApi(node_ip) containers = docker_cli.containers() # print containers except: # pass print traceback.format_exc() con_info = {} for i in containers: if re.match('Exited',i['Status']): con_info['status'] = False else: con_info['status'] = True con_info['image'] = i['Image'].encode('utf-8') con_info['container_name'] = i['Names'][0].encode('utf-8').replace('/','') name_list.append(con_info['container_name']) con_info['create_time'] = timestamp_datetime(int(i['Created'])) con_info['container_id'] = i['Id'].encode('utf-8') if con_info['status']: con_info['container_ip'] = match_ip(docker_cli.exec_start(docker_cli.exec_create(con_info['container_name'],'ip addr')['Id'])) else: con_info['container_ip'] = '' container = models.Containers.objects.filter(node__node_ip=node_ip).filter(container_name=con_info['container_name']) if container: if container[0].status != con_info['status']: container[0].status = con_info['status'] if container[0].container_ip != con_info['container_ip'] and con_info['container_ip']: container[0].container_ip = con_info['container_ip'] else: try: models.Containers.objects.create(user=models.User.objects.get(username='******'),container_name=con_info['container_name'],container_id=con_info['container_id'],container_ip=con_info['container_ip'],image=con_info['image'],create_time=con_info['create_time'],node=models.Node.objects.get(node_ip=node_ip),status= con_info['status']) except: print traceback.format_exc() try: container_list = models.Containers.objects.filter(node__node_ip=node_ip).filter(node__node_ip=node_ip) if container_list: for i in container_list: if i.container_name not in name_list: i.delete() except: # pass print traceback.format_exc()
def container_create(request): user = request.user try: if request.method == 'POST' and request.POST.get( 'container') and request.POST.get('image'): container = request.POST.get('container').encode("utf-8") image = request.POST.get('image').encode("utf-8") node = request.POST.get('node').encode("utf-8") if node == "random": try: create_node = models.Node.objects.get(weight_type="True") docker_cli = DockerApi(create_node.node_ip) registry_node = models.Node.objects.get( node_type="registory") repository = "%s:5000/%s:latest" % (registry_node.node_ip, image) if not models.Images.objects.filter( repository=repository).filter( node__node_ip=create_node.node_ip): images = docker_cli.pull( "%s:5000/%s" % (registry_node.node_ip, image)) # print images cmd = "/usr/bin/sh /root/create_docker_container_use_dhcp_ip.sh %s %s:5000/%s" % ( container, registry_node.node_ip, image) # cmd ="ifconfig" # print cmd ssh_docker = paramiko.SSHClient() ssh_docker.set_missing_host_key_policy( paramiko.AutoAddPolicy()) ssh_docker.connect(create_node.node_ip, 22, "root", create_node.root_password, timeout=5) stdin, stdout, stderr = ssh_docker.exec_command(cmd) # print "#####" # stdin.write("Y") #简单交互,输入 ‘Y’ create_container_info = stdout.readlines() print create_container_info try: for info in create_container_info: # print type(info) # print info if re.search('Container_name', info): tag = 0 node_count = models.Node.objects.all().count() tag = int(create_node.weight) % node_count + 1 if tag == node_count: tag = 1 # print create_node.node_ip # print create_node.weight_type create_node.weight_type = False create_node.save() # print create_node.node_ip # print create_node.weight_type now_create_node = models.Node.objects.get( weight=tag) # print now_create_node.node_ip # print now_create_node.weight_type now_create_node.weight_type = True now_create_node.save() # print now_create_node.node_ip # print now_create_node.weight_type create_container = eval(info.strip('\n')) containers = docker_cli.containers() cont_id = '' cont_image = '' for i in containers: if i['Names'][0].encode('utf-8').replace( '/', '') == container: cont_id = i['Id'].encode('utf-8') cont_image = i['Image'].encode('utf-8') if cont_id: models.Containers.objects.create( user=user, container_name=container, container_id=cont_id, container_ip=create_container[ "Container_ip"], image=cont_image, create_time=create_container[ "Container_create"], node=create_node) except: print traceback.format_exc() except: print traceback.format_exc() else: try: create_node = models.Node.objects.get(node_ip=node) docker_cli = DockerApi(create_node.node_ip) registry_node = models.Node.objects.get( node_type="registory") repository = "%s:5000/%s:latest" % (registry_node.node_ip, image) if not models.Images.objects.filter( repository=repository).filter( node__node_ip=create_node.node_ip): images = docker_cli.pull( "%s:5000/%s" % (registry_node.node_ip, image)) # print images cmd = "/usr/bin/sh /root/create_docker_container_use_dhcp_ip.sh %s %s:5000/%s" % ( container, registry_node.node_ip, image) # cmd ="ifconfig" ssh_docker = paramiko.SSHClient() ssh_docker.set_missing_host_key_policy( paramiko.AutoAddPolicy()) ssh_docker.connect(create_node.node_ip, 22, "root", create_node.root_password, timeout=5) stdin, stdout, stderr = ssh_docker.exec_command(cmd) #stdin.write("Y") #简单交互,输入 ‘Y’ create_container_info = stdout.readlines() for info in create_container_info: if re.search('Container_name', info): create_container = eval(info.strip('\n')) containers = docker_cli.containers() cont_id = '' cont_image = '' for i in containers: if i['Names'][0].encode('utf-8').replace( '/', '') == container: cont_id = i['Id'].encode('utf-8') cont_image = i['Image'].encode('utf-8') if cont_id: models.Containers.objects.create( user=user, container_name=container, container_id=cont_id, container_ip=create_container[ "Container_ip"], image=cont_image, create_time=create_container[ "Container_create"], node=create_node) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl')) else: nodes = models.Node.objects.filter(node_type='node') images = models.Images.objects.filter(image_type='True') return render_to_response('docker/addcontainer.html', { 'user': user, 'nodes': nodes, 'images': images }) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl'))
def check_containers(node_ip): if node_ip: name_list = [] try: docker_cli = DockerApi(node_ip) containers = docker_cli.containers() # print containers except: # pass print traceback.format_exc() con_info = {} for i in containers: if re.match('Exited', i['Status']): con_info['status'] = False else: con_info['status'] = True con_info['image'] = i['Image'].encode('utf-8') con_info['container_name'] = i['Names'][0].encode('utf-8').replace( '/', '') name_list.append(con_info['container_name']) con_info['create_time'] = timestamp_datetime(int(i['Created'])) con_info['container_id'] = i['Id'].encode('utf-8') if con_info['status']: con_info['container_ip'] = match_ip( docker_cli.exec_start( docker_cli.exec_create(con_info['container_name'], 'ip addr')['Id'])) else: con_info['container_ip'] = '' container = models.Containers.objects.filter( node__node_ip=node_ip).filter( container_name=con_info['container_name']) if container: if container[0].status != con_info['status']: container[0].status = con_info['status'] if container[0].container_ip != con_info[ 'container_ip'] and con_info['container_ip']: container[0].container_ip = con_info['container_ip'] else: try: models.Containers.objects.create( user=models.User.objects.get(username='******'), container_name=con_info['container_name'], container_id=con_info['container_id'], container_ip=con_info['container_ip'], image=con_info['image'], create_time=con_info['create_time'], node=models.Node.objects.get(node_ip=node_ip), status=con_info['status']) except: print traceback.format_exc() try: container_list = models.Containers.objects.filter( node__node_ip=node_ip).filter(node__node_ip=node_ip) if container_list: for i in container_list: if i.container_name not in name_list: i.delete() except: # pass print traceback.format_exc()
def container_create(request): user = request.user try: if request.method == 'POST' and request.POST.get('container') and request.POST.get('image'): container = request.POST.get('container').encode("utf-8") image = request.POST.get('image').encode("utf-8") node = request.POST.get('node').encode("utf-8") if node == "random": try: create_node = models.Node.objects.get(weight_type="True") docker_cli = DockerApi(create_node.node_ip) registry_node = models.Node.objects.get(node_type="registory") repository="%s:5000/%s:latest" % (registry_node.node_ip,image) if not models.Images.objects.filter(repository=repository).filter(node__node_ip=create_node.node_ip): images = docker_cli.pull("%s:5000/%s" % (registry_node.node_ip,image)) # print images cmd = "/usr/bin/sh /root/create_docker_container_use_dhcp_ip.sh %s %s:5000/%s" % (container,registry_node.node_ip,image) # cmd ="ifconfig" # print cmd ssh_docker = paramiko.SSHClient() ssh_docker.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_docker.connect(create_node.node_ip,22,"root",create_node.root_password,timeout=5) stdin, stdout, stderr = ssh_docker.exec_command(cmd) # print "#####" # stdin.write("Y") #简单交互,输入 ‘Y’ create_container_info = stdout.readlines() print create_container_info try: for info in create_container_info: # print type(info) # print info if re.search('Container_name',info): tag = 0 node_count = models.Node.objects.all().count() tag = int(create_node.weight)%node_count + 1 if tag == node_count: tag = 1 # print create_node.node_ip # print create_node.weight_type create_node.weight_type=False create_node.save() # print create_node.node_ip # print create_node.weight_type now_create_node = models.Node.objects.get(weight=tag) # print now_create_node.node_ip # print now_create_node.weight_type now_create_node.weight_type=True now_create_node.save() # print now_create_node.node_ip # print now_create_node.weight_type create_container = eval(info.strip('\n')) containers = docker_cli.containers() cont_id = '' cont_image = '' for i in containers: if i['Names'][0].encode('utf-8').replace('/','') == container: cont_id=i['Id'].encode('utf-8') cont_image = i['Image'].encode('utf-8') if cont_id: models.Containers.objects.create(user=user,container_name=container,container_id=cont_id,container_ip = create_container["Container_ip"],image=cont_image,create_time=create_container["Container_create"],node=create_node) except: print traceback.format_exc() except: print traceback.format_exc() else: try: create_node = models.Node.objects.get(node_ip=node) docker_cli = DockerApi(create_node.node_ip) registry_node = models.Node.objects.get(node_type="registory") repository="%s:5000/%s:latest" % (registry_node.node_ip,image) if not models.Images.objects.filter(repository=repository).filter(node__node_ip=create_node.node_ip): images = docker_cli.pull("%s:5000/%s" % (registry_node.node_ip,image)) # print images cmd = "/usr/bin/sh /root/create_docker_container_use_dhcp_ip.sh %s %s:5000/%s" % (container,registry_node.node_ip,image) # cmd ="ifconfig" ssh_docker = paramiko.SSHClient() ssh_docker.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_docker.connect(create_node.node_ip,22,"root",create_node.root_password,timeout=5) stdin, stdout, stderr = ssh_docker.exec_command(cmd) #stdin.write("Y") #简单交互,输入 ‘Y’ create_container_info = stdout.readlines() for info in create_container_info: if re.search('Container_name',info): create_container = eval(info.strip('\n')) containers = docker_cli.containers() cont_id = '' cont_image = '' for i in containers: if i['Names'][0].encode('utf-8').replace('/','') == container: cont_id=i['Id'].encode('utf-8') cont_image = i['Image'].encode('utf-8') if cont_id: models.Containers.objects.create(user=user,container_name=container,container_id=cont_id,container_ip = create_container["Container_ip"],image=cont_image,create_time=create_container["Container_create"],node=create_node) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl')) else: nodes = models.Node.objects.filter(node_type='node') images = models.Images.objects.filter(image_type='True') return render_to_response('docker/addcontainer.html',{'user':user,'nodes':nodes,'images':images}) except: print traceback.format_exc() return HttpResponseRedirect(reverse('listcontainerurl'))