func()

in gcloud/cloudresourcemanager.go [123:174]


func (c *Client) ProjectCreate(project, parent, parentType string) error {
	svc, err := c.getCloudResourceManagerService()
	if err != nil {
		return err
	}

	par := &cloudresourcemanager.ResourceId{}
	if parent != "" && parentType != "" {
		par.Id = parent
		par.Type = parentType
	}

	proj := cloudresourcemanager.Project{
		Name:      project,
		ProjectId: project,
		Parent:    par,
	}

	result, err := svc.Projects.Create(&proj).Do()
	if err != nil {
		if strings.Contains(err.Error(), "project_id must be at most 30 characters long") {
			return ErrorProjectCreateTooLong
		}
		if strings.Contains(err.Error(), "must be at least 6 characters long") {
			return ErrorProjectCreateTooShort
		}
		if strings.Contains(err.Error(), "project_id contains invalid characters") {
			return ErrorProjectInvalidCharacters
		}
		if strings.Contains(err.Error(), "entity already exists") {
			return ErrorProjectAlreadyExists
		}

		return err
	}

	for i := 0; i < 20; i++ {
		op, err := svc.Operations.Get(result.Name).Do()
		if err != nil {
			return fmt.Errorf("could not poll for project completion: %s", err)
		}
		if op.Done {
			if op.Error != nil {
				return fmt.Errorf("project creation was unsuccessful, reason: %s ", op.Error.Message)
			}
			return nil
		}
		time.Sleep(2 * time.Second)
	}

	return ErrorProjectCreateTooLong
}