Add new internal upload target for Google Cloud Platform and osbuild-upload-gcp CLI tool which uses the API. Supported features are: - Authenticate with GCP using explicitly provided JSON credentials file or let the authentication be handled automatically by the Google cloud client library. The later is useful e.g. when the worker is running in GCP VM instance, which has associated permissions with it. - Upload an existing image file into existing Storage bucket. - Verify MD5 checksum of the uploaded image file against the local file's checksum. - Import the uploaded image file into Compute Node as an Image. - Delete the uploaded image file after a successful image import. - Delete all cache files from storage created as part of the image import build job. - Share the imported image with a list of specified accounts. GCP-specific image type is not yet added, since GCP supports importing VMDK and VHD images, which the osbuild-composer already supports. Update go.mod, vendor/ content and SPEC file with new dependencies. Signed-off-by: Tomas Hozza <thozza@redhat.com>
135 lines
4.2 KiB
Go
135 lines
4.2 KiB
Go
// Copyright 2011 Google Inc. All rights reserved.
|
|
// Use of this source code is governed by the Apache 2.0
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package appengine provides basic functionality for Google App Engine.
|
|
//
|
|
// For more information on how to write Go apps for Google App Engine, see:
|
|
// https://cloud.google.com/appengine/docs/go/
|
|
package appengine // import "google.golang.org/appengine"
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
"golang.org/x/net/context"
|
|
|
|
"google.golang.org/appengine/internal"
|
|
)
|
|
|
|
// The gophers party all night; the rabbits provide the beats.
|
|
|
|
// Main is the principal entry point for an app running in App Engine.
|
|
//
|
|
// On App Engine Flexible it installs a trivial health checker if one isn't
|
|
// already registered, and starts listening on port 8080 (overridden by the
|
|
// $PORT environment variable).
|
|
//
|
|
// See https://cloud.google.com/appengine/docs/flexible/custom-runtimes#health_check_requests
|
|
// for details on how to do your own health checking.
|
|
//
|
|
// On App Engine Standard it ensures the server has started and is prepared to
|
|
// receive requests.
|
|
//
|
|
// Main never returns.
|
|
//
|
|
// Main is designed so that the app's main package looks like this:
|
|
//
|
|
// package main
|
|
//
|
|
// import (
|
|
// "google.golang.org/appengine"
|
|
//
|
|
// _ "myapp/package0"
|
|
// _ "myapp/package1"
|
|
// )
|
|
//
|
|
// func main() {
|
|
// appengine.Main()
|
|
// }
|
|
//
|
|
// The "myapp/packageX" packages are expected to register HTTP handlers
|
|
// in their init functions.
|
|
func Main() {
|
|
internal.Main()
|
|
}
|
|
|
|
// IsDevAppServer reports whether the App Engine app is running in the
|
|
// development App Server.
|
|
func IsDevAppServer() bool {
|
|
return internal.IsDevAppServer()
|
|
}
|
|
|
|
// IsStandard reports whether the App Engine app is running in the standard
|
|
// environment. This includes both the first generation runtimes (<= Go 1.9)
|
|
// and the second generation runtimes (>= Go 1.11).
|
|
func IsStandard() bool {
|
|
return internal.IsStandard()
|
|
}
|
|
|
|
// IsFlex reports whether the App Engine app is running in the flexible environment.
|
|
func IsFlex() bool {
|
|
return internal.IsFlex()
|
|
}
|
|
|
|
// IsAppEngine reports whether the App Engine app is running on App Engine, in either
|
|
// the standard or flexible environment.
|
|
func IsAppEngine() bool {
|
|
return internal.IsAppEngine()
|
|
}
|
|
|
|
// IsSecondGen reports whether the App Engine app is running on the second generation
|
|
// runtimes (>= Go 1.11).
|
|
func IsSecondGen() bool {
|
|
return internal.IsSecondGen()
|
|
}
|
|
|
|
// NewContext returns a context for an in-flight HTTP request.
|
|
// This function is cheap.
|
|
func NewContext(req *http.Request) context.Context {
|
|
return internal.ReqContext(req)
|
|
}
|
|
|
|
// WithContext returns a copy of the parent context
|
|
// and associates it with an in-flight HTTP request.
|
|
// This function is cheap.
|
|
func WithContext(parent context.Context, req *http.Request) context.Context {
|
|
return internal.WithContext(parent, req)
|
|
}
|
|
|
|
// BlobKey is a key for a blobstore blob.
|
|
//
|
|
// Conceptually, this type belongs in the blobstore package, but it lives in
|
|
// the appengine package to avoid a circular dependency: blobstore depends on
|
|
// datastore, and datastore needs to refer to the BlobKey type.
|
|
type BlobKey string
|
|
|
|
// GeoPoint represents a location as latitude/longitude in degrees.
|
|
type GeoPoint struct {
|
|
Lat, Lng float64
|
|
}
|
|
|
|
// Valid returns whether a GeoPoint is within [-90, 90] latitude and [-180, 180] longitude.
|
|
func (g GeoPoint) Valid() bool {
|
|
return -90 <= g.Lat && g.Lat <= 90 && -180 <= g.Lng && g.Lng <= 180
|
|
}
|
|
|
|
// APICallFunc defines a function type for handling an API call.
|
|
// See WithCallOverride.
|
|
type APICallFunc func(ctx context.Context, service, method string, in, out proto.Message) error
|
|
|
|
// WithAPICallFunc returns a copy of the parent context
|
|
// that will cause API calls to invoke f instead of their normal operation.
|
|
//
|
|
// This is intended for advanced users only.
|
|
func WithAPICallFunc(ctx context.Context, f APICallFunc) context.Context {
|
|
return internal.WithCallOverride(ctx, internal.CallOverrideFunc(f))
|
|
}
|
|
|
|
// APICall performs an API call.
|
|
//
|
|
// This is not intended for general use; it is exported for use in conjunction
|
|
// with WithAPICallFunc.
|
|
func APICall(ctx context.Context, service, method string, in, out proto.Message) error {
|
|
return internal.Call(ctx, service, method, in, out)
|
|
}
|