コード例 #1
0
def create_nodes(cluster, hosts_dict):
    hosts = []
    new_nodes = []
    for host_dict in hosts_dict:
        zone = Zone.objects.get(name=host_dict["zone_name"])
        defaults = {
            "name": host_dict['name'],
            "ip": host_dict['ip'],
            "zone": zone,
            "status": Host.HOST_STATUS_CREATING,
            "auto_gather_info": False
        }
        if host_dict.get('new', False):
            result = Host.objects.update_or_create(defaults,
                                                   name=host_dict['name'])
            host = result[0]
            node = cluster.create_node(host_dict['role'], host)
            new_nodes.append(node)
            hosts.append(host)
    client = get_cloud_client(cluster.plan.mixed_vars)
    terraform_result = client.apply_terraform(cluster, hosts_dict)
    if not terraform_result:
        for node in new_nodes:
            node.host.delete()
            raise RuntimeError("create host error!")
    if cluster.plan.mixed_vars.get('provider') == 'openstack':
        print("sleep 20s,等待sshd服务可用")
        sleep(20)
    for host in hosts:
        host.gather_info(retry=5)
コード例 #2
0
 def get(self, request, *args, **kwargs):
     region_name = kwargs.get('region')
     region = get_object_or_404(Region, name=region_name)
     region.vars['provider'] = 'vsphere'
     client = get_cloud_client(region.vars)
     data = client.list_zone(region.cloud_region)
     return HttpResponse(json.dumps(data))
コード例 #3
0
 def create_image(self):
     try:
         self.change_status(Zone.ZONE_STATUS_INITIALIZING)
         client = get_cloud_client(self.region.vars)
         client.create_image(zone=self)
         self.change_status(Zone.ZONE_STATUS_READY)
     except Exception as e:
         self.change_status(Zone.ZONE_STATUS_ERROR)
コード例 #4
0
ファイル: api.py プロジェクト: zangqianglei/KubeOperator
 def get(self, request, *args, **kwargs):
     region_name = kwargs.get('region')
     region = get_object_or_404(Region, name=region_name)
     client = get_cloud_client(region.vars)
     models = client.get_flavors(region.cloud_region)
     if not models:
         return Response(data={'msg': "没有合适的flavor规格!请添加大于4C8G60G的flavor."}, status=status.HTTP_400_BAD_REQUEST)
     return HttpResponse(json.dumps(models))
コード例 #5
0
def delete_hosts(cluster):
    cloud_provider = get_cloud_client(cluster.plan.mixed_vars)
    result = cloud_provider.destroy_terraform(cluster.name)
    if not result:
        raise Exception('Destroy nodes error! ')
    else:
        cluster.change_to()
        nodes = Node.objects.filter(~Q(name__in=['::1', '127.0.0.1', 'localhost']))
        for node in nodes:
            node.host.delete()
コード例 #6
0
ファイル: models.py プロジェクト: leibo00109/KubeOperator
 def create_image(self):
     try:
         logger.info('upload os image')
         self.change_status(Zone.ZONE_STATUS_INITIALIZING)
         client = get_cloud_client(self.region.vars)
         client.create_image(zone=self)
         self.change_status(Zone.ZONE_STATUS_READY)
     except Exception as e:
         logger.error(msg='upload os image error!', exc_info=True)
         self.change_status(Zone.ZONE_STATUS_ERROR)
コード例 #7
0
def create_hosts(cluster):
    terraform_hosts = generate_host_model(cluster)
    cluster.set_terraform_hosts(terraform_hosts)
    cloud_provider = get_cloud_client(cluster.plan.mixed_vars)
    result = cloud_provider.apply_terraform(cluster=cluster)
    if result:
        for h in cluster.terraform_hosts.all():
            h.create_host()
        cluster.create_nodes_by_terraform()
    else:
        raise Exception('Create nodes error!')
コード例 #8
0
def add_hosts(cluster, num):
    terraform_hosts = add_terraform_host(cluster, num)
    cluster.set_terraform_hosts(terraform_hosts)
    cloud_provider = get_cloud_client(cluster.plan.mixed_vars)
    result = cloud_provider.apply_terraform(cluster=cluster)
    if result:
        for h in cluster.terraform_hosts.all():
            h.create_host()
        cluster.add_nodes_by_terraform()
    else:
        for host in terraform_hosts:
            host.delete()
        raise Exception('Add nodes error!')
コード例 #9
0
def scale_up(cluster, num):
    worker_size = cluster.worker_size

    new_hosts = []
    worker_hosts_new = []
    master_hosts_new = []
    remove_list = []
    add_list = []
    if worker_size > num:
        hosts = create_cluster_hosts(cluster)
        worker_hosts_new = list(filter(is_worker, hosts))
        master_hosts_new = list(filter(is_master, hosts))
        for i in range(worker_size - num):
            rm_worker = worker_hosts_new.pop()
            remove_list.append(rm_worker)
            cluster.set_worker_size(num)
        drain_workers(cluster, remove_list)
    elif worker_size < num:
        cluster.set_worker_size(num)
        hosts = create_cluster_hosts(cluster)
        worker_hosts_new = list(filter(is_worker, hosts))
        master_hosts_new = list(filter(is_master, hosts))
        for h in hosts:
            if h.get('new', None):
                add_list.append(h)
    new_hosts.extend(worker_hosts_new)
    new_hosts.extend(master_hosts_new)
    mix_vars = cluster.plan.mixed_vars
    mix_vars["hosts"] = new_hosts
    client = get_cloud_client(mix_vars)
    terraform_result = client.apply_terraform(cluster, mix_vars)
    if not terraform_result:
        raise RuntimeError("create host error!")
    for host in add_list:
        zone = Zone.objects.get(name=host["zone_name"])
        defaults = {
            "name": host['name'],
            "ip": host['ip'],
            "zone": zone,
            "username": '******',
            "password": '******'
        }
        h = Host.objects.update_or_create(defaults, name=host['name'])
        node = cluster.create_node(host['role'], h[0])
        cluster.add_to_new_node(node)
    for host in remove_list:
        cluster.change_to()
        node = Node.objects.get(name=host['name'])
        node.host.delete()
コード例 #10
0
def create_hosts(cluster):
    hosts = create_cluster_hosts(cluster)
    mix_vars = cluster.plan.mixed_vars
    mix_vars["hosts"] = hosts
    client = get_cloud_client(mix_vars)
    terraform_result = client.apply_terraform(cluster, mix_vars)
    if not terraform_result:
        raise RuntimeError("create host error!")
    for host in hosts:
        defaults = {
            "name": host['name'],
            "ip": host['ip'],
            "username": '******',
            "password": '******'
        }
        h = Host.objects.update_or_create(defaults, name=host['name'])
        cluster.create_node(host['role'], h)
コード例 #11
0
def create_nodes(cluster, hosts_dict):
    hosts = []
    new_nodes = []
    for host_dict in hosts_dict:
        zone = Zone.objects.get(name=host_dict["zone_name"])
        defaults = {
            "name": host_dict['name'],
            "ip": host_dict['ip'],
            "zone": zone,
            "status": Host.HOST_STATUS_CREATING,
            "auto_gather_info": False
        }
        if zone.vars.get('template_type') is not None and zone.vars[
                'template_type'] == 'customize' and zone.vars[
                    'template_password']:
            defaults['password'] = zone.vars['template_password']

        if host_dict.get('new', False):
            result = Host.objects.update_or_create(defaults,
                                                   name=host_dict['name'])
            host = result[0]
            node = cluster.create_node(host_dict['role'], host)
            item_resource = ItemResource.objects.get(resource_id=cluster.id)
            item_r = ItemResource(
                item_id=item_resource.item_id,
                resource_id=host.id,
                resource_type=ItemResource.RESOURCE_TYPE_HOST)
            item_r.save()
            new_nodes.append(node)
            hosts.append(host)
    client = get_cloud_client(cluster.plan.mixed_vars)
    terraform_result = client.apply_terraform(cluster, hosts_dict)
    if not terraform_result:
        for node in new_nodes:
            node.host.delete()
            raise RuntimeError("create host error!")
    if cluster.plan.mixed_vars.get('provider') == 'openstack':
        print("sleep 20s,等待sshd服务可用")
        sleep(20)
    for host in hosts:
        host.gather_info(retry=5)
コード例 #12
0
def create_nodes(cluster, hosts_dict):
    hosts = []
    for host_dict in hosts_dict:
        zone = Zone.objects.get(name=host_dict["zone_name"])
        defaults = {
            "name": host_dict['name'],
            "ip": host_dict['ip'],
            "zone": zone,
            "status": Host.HOST_STATUS_CREATING,
            "auto_gather_info": False
        }
        result = Host.objects.update_or_create(defaults, name=host_dict['name'])
        host = result[0]
        cluster.create_node(host_dict['role'], host)
        hosts.append(host)
    client = get_cloud_client(cluster.plan.mixed_vars)
    terraform_result = client.apply_terraform(cluster, hosts_dict)
    if not terraform_result:
        raise RuntimeError("create host error!")
    for host in hosts:
        host.gather_info()
コード例 #13
0
 def post(self, request):
     vars = request.data
     client = get_cloud_client(vars)
     data = client.list_region()
     return HttpResponse(json.dumps(data))
コード例 #14
0
 def get(self, request, *args, **kwargs):
     region_name = kwargs.get('region')
     region = get_object_or_404(Region, name=region_name)
     client = get_cloud_client(region.vars)
     return HttpResponse(json.dumps(client.get_flavors(region.cloud_region)))
コード例 #15
0
ファイル: api.py プロジェクト: zhouqiw/KubeOperator
 def post(self, request):
     vars = request.data
     vars['provider'] = 'vsphere'
     client = get_cloud_client(vars)
     data = client.list_region()
     return HttpResponse(json.dumps(data))