Example #1
0
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'))
Example #2
0
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'))
Example #3
0
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()
Example #4
0
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'))
Example #5
0
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()
Example #6
0
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'))