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>
100 lines
No EOL
4.7 KiB
Markdown
100 lines
No EOL
4.7 KiB
Markdown
# Go App Engine packages
|
|
|
|
[](https://travis-ci.org/golang/appengine)
|
|
|
|
This repository supports the Go runtime on *App Engine standard*.
|
|
It provides APIs for interacting with App Engine services.
|
|
Its canonical import path is `google.golang.org/appengine`.
|
|
|
|
See https://cloud.google.com/appengine/docs/go/
|
|
for more information.
|
|
|
|
File issue reports and feature requests on the [GitHub's issue
|
|
tracker](https://github.com/golang/appengine/issues).
|
|
|
|
## Upgrading an App Engine app to the flexible environment
|
|
|
|
This package does not work on *App Engine flexible*.
|
|
|
|
There are many differences between the App Engine standard environment and
|
|
the flexible environment.
|
|
|
|
See the [documentation on upgrading to the flexible environment](https://cloud.google.com/appengine/docs/flexible/go/upgrading).
|
|
|
|
## Directory structure
|
|
|
|
The top level directory of this repository is the `appengine` package. It
|
|
contains the
|
|
basic APIs (e.g. `appengine.NewContext`) that apply across APIs. Specific API
|
|
packages are in subdirectories (e.g. `datastore`).
|
|
|
|
There is an `internal` subdirectory that contains service protocol buffers,
|
|
plus packages required for connectivity to make API calls. App Engine apps
|
|
should not directly import any package under `internal`.
|
|
|
|
## Updating from legacy (`import "appengine"`) packages
|
|
|
|
If you're currently using the bare `appengine` packages
|
|
(that is, not these ones, imported via `google.golang.org/appengine`),
|
|
then you can use the `aefix` tool to help automate an upgrade to these packages.
|
|
|
|
Run `go get google.golang.org/appengine/cmd/aefix` to install it.
|
|
|
|
### 1. Update import paths
|
|
|
|
The import paths for App Engine packages are now fully qualified, based at `google.golang.org/appengine`.
|
|
You will need to update your code to use import paths starting with that; for instance,
|
|
code importing `appengine/datastore` will now need to import `google.golang.org/appengine/datastore`.
|
|
|
|
### 2. Update code using deprecated, removed or modified APIs
|
|
|
|
Most App Engine services are available with exactly the same API.
|
|
A few APIs were cleaned up, and there are some differences:
|
|
|
|
* `appengine.Context` has been replaced with the `Context` type from `golang.org/x/net/context`.
|
|
* Logging methods that were on `appengine.Context` are now functions in `google.golang.org/appengine/log`.
|
|
* `appengine.Timeout` has been removed. Use `context.WithTimeout` instead.
|
|
* `appengine.Datacenter` now takes a `context.Context` argument.
|
|
* `datastore.PropertyLoadSaver` has been simplified to use slices in place of channels.
|
|
* `delay.Call` now returns an error.
|
|
* `search.FieldLoadSaver` now handles document metadata.
|
|
* `urlfetch.Transport` no longer has a Deadline field; set a deadline on the
|
|
`context.Context` instead.
|
|
* `aetest` no longer declares its own Context type, and uses the standard one instead.
|
|
* `taskqueue.QueueStats` no longer takes a maxTasks argument. That argument has been
|
|
deprecated and unused for a long time.
|
|
* `appengine.BackendHostname` and `appengine.BackendInstance` were for the deprecated backends feature.
|
|
Use `appengine.ModuleHostname`and `appengine.ModuleName` instead.
|
|
* Most of `appengine/file` and parts of `appengine/blobstore` are deprecated.
|
|
Use [Google Cloud Storage](https://godoc.org/cloud.google.com/go/storage) if the
|
|
feature you require is not present in the new
|
|
[blobstore package](https://google.golang.org/appengine/blobstore).
|
|
* `appengine/socket` is not required on App Engine flexible environment / Managed VMs.
|
|
Use the standard `net` package instead.
|
|
|
|
## Key Encode/Decode compatibiltiy to help with datastore library migrations
|
|
|
|
Key compatibility updates have been added to help customers transition from google.golang.org/appengine/datastore to cloud.google.com/go/datastore.
|
|
The `EnableKeyConversion` enables automatic conversion from a key encoded with cloud.google.com/go/datastore to google.golang.org/appengine/datastore key type.
|
|
|
|
### Enabling key conversion
|
|
|
|
Enable key conversion by calling `EnableKeyConversion(ctx)` in the `/_ah/start` handler for basic and manual scaling or any handler in automatic scaling.
|
|
|
|
#### 1. Basic or manual scaling
|
|
|
|
This start handler will enable key conversion for all handlers in the service.
|
|
|
|
```
|
|
http.HandleFunc("/_ah/start", func(w http.ResponseWriter, r *http.Request) {
|
|
datastore.EnableKeyConversion(appengine.NewContext(r))
|
|
})
|
|
```
|
|
|
|
#### 2. Automatic scaling
|
|
|
|
`/_ah/start` is not supported for automatic scaling and `/_ah/warmup` is not guaranteed to run, so you must call `datastore.EnableKeyConversion(appengine.NewContext(r))`
|
|
before you use code that needs key conversion.
|
|
|
|
You may want to add this to each of your handlers, or introduce middleware where it's called.
|
|
`EnableKeyConversion` is safe for concurrent use. Any call to it after the first is ignored. |