# #go #gcloud
#Вперед #gcloud
Вопрос:
Я пытаюсь использовать go api для gcloud для создания контейнера.
У меня настроен проект:
$ gcloud projects list
PROJECT_ID NAME PROJECT_NUMBER
sql-manager-293118 sql-manager 789332021319
Также настроены учетные данные моего приложения по умолчанию.
Приведенный ниже код работает нормально, но при вызове для создания службы я получаю приведенную ниже ошибку:
<p>The requested URL <code>/v1alpha1/projects/sql-manager-293118/services?alt=jsonamp;amp;prettyPrint=false</code> was not found on this server. <ins>That’s all we know.</ins>
Я также выполнял более простые запросы с использованием api (например, перечисляя все доступные местоположения для данной службы) и смог выполнить повторную обработку данных без проблем.
Любые рекомендации приветствуются.
package main
import (
"context"
"fmt"
// "sort"
"google.golang.org/api/option"
"google.golang.org/api/run/v1alpha1"
)
const (
createDefaultClientFlag = true
scopes = run.CloudPlatformScope
// List the Cloud Run services in this location
serviceName = "test"
locationsId = "us-central1"
projectId = "sql-manager-293118"
imageName = "gcr.io/cloudrun/hello"
)
func createDefaultClient(ctx context.Context) (*run.APIService, error) {
return run.NewService(ctx)
}
func main() {
// https://godoc.org/google.golang.org/api/run/v1#NewService
var err error = nil
var runService *run.APIService = nil
ctx := context.Background()
runService, err = createDefaultClient(ctx)
if err != nil {
fmt.Println("Error:", err)
return
}
projectsLocationsService := *run.NewProjectsLocationsService(runService)
// Define the service to deploy
tmpservice := amp;run.Service{
ApiVersion: "serving.knative.dev/v1alpha1",
Kind: "Service",
Metadata: amp;run.ObjectMeta{
Name: serviceName,
Namespace: projectId,
},
Spec: amp;run.ServiceSpec{
RunLatest: amp;run.ServiceSpecRunLatest{
Configuration: amp;run.ConfigurationSpec{
RevisionTemplate: amp;run.RevisionTemplate{
Metadata: amp;run.ObjectMeta{
DeletionGracePeriodSeconds: 0,
},
Spec: amp;run.RevisionSpec{
Container: amp;run.Container{
Image: imageName,
Resources: amp;run.ResourceRequirements{
Limits: map[string]string{"memory": "256Mi"},
},
Stdin: false,
StdinOnce: false,
Tty: false,
},
ContainerConcurrency: 80,
TimeoutSeconds: 300,
},
},
},
},
},
}
createCall := projectsLocationsService.Services.Create("projects/" projectId, tmpservice)
service, err := createCall.Do()
fmt.Println(service, err)
if err != nil {
fmt.Printf("Error creating new locationservice: %s", err)
}
fmt.Printf("%#v", service.Spec)
}
Комментарии:
1. Я думаю, что в документах есть ошибка. Просмотр документа об обнаружении сервиса ( ссылка ) и grep
v1alpha1/{ parent}/services
предполагает, чтоparent
строка должна быть"^projects/[^/] /locations/[^/] $"
, т. Е./projects/${PROJECT}/locations/us-central1/
. Это дало мне 400 (а не 404). Я предполагаю (!?), Что в моемamp;run.Service
тоже есть ошибка.
Ответ №1:
ДазВилкин был прав, я должен был использовать /projects/${PROJECT}/locations/us-central1/