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
}