Exemple #1
0
 def create(self, request, *args, **kwargs):
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     self.perform_create(serializer)
     headers = self.get_success_headers(serializer.data)
     if request.data.get('item_name'):
         item = Item.objects.get(name=request.data.get('item_name'))
         cluster = Cluster.objects.get(name=request.data.get('name'))
         itemResource = ItemResource(item_id=item.id, resource_id=cluster.id,
                                     resource_type=ItemResource.RESOURCE_TYPE_CLUSTER)
         itemResource.save()
     return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Exemple #2
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)