mirror of
https://github.com/rancher/os.git
synced 2025-08-31 14:23:11 +00:00
move dependencies to vendor
This commit is contained in:
10
vendor/google.golang.org/cloud/.travis.yml
generated
vendored
Normal file
10
vendor/google.golang.org/cloud/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
language: go
|
||||
go:
|
||||
- 1.4
|
||||
- tip
|
||||
install:
|
||||
- go get -v google.golang.org/cloud/...
|
||||
script:
|
||||
- openssl aes-256-cbc -K $encrypted_912ff8fa81ad_key -iv $encrypted_912ff8fa81ad_iv -in key.json.enc -out key.json -d
|
||||
- GCLOUD_TESTS_GOLANG_PROJECT_ID="dulcet-port-762" GCLOUD_TESTS_GOLANG_KEY="$(pwd)/key.json"
|
||||
go test -v -tags=integration google.golang.org/cloud/...
|
12
vendor/google.golang.org/cloud/AUTHORS
generated
vendored
Normal file
12
vendor/google.golang.org/cloud/AUTHORS
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# This is the official list of cloud authors for copyright purposes.
|
||||
# This file is distinct from the CONTRIBUTORS files.
|
||||
# See the latter for an explanation.
|
||||
|
||||
# Names should be added to this file as:
|
||||
# Name or Organization <email address>
|
||||
# The email address is not required for organizations.
|
||||
|
||||
Google Inc.
|
||||
Palm Stone Games, Inc.
|
||||
Péter Szilágyi <peterke@gmail.com>
|
||||
Tyler Treat <ttreat31@gmail.com>
|
66
vendor/google.golang.org/cloud/CONTRIBUTING.md
generated
vendored
Normal file
66
vendor/google.golang.org/cloud/CONTRIBUTING.md
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
# Contributing
|
||||
|
||||
1. Sign one of the contributor license agreements below.
|
||||
1. `go get golang.org/x/review/git-review` to install the code reviewing tool.
|
||||
1. Get the cloud package by running `go get -d google.golang.org/cloud`.
|
||||
If you've already got the package, make sure that the remote git origin
|
||||
is https://code.googlesource.com/gocloud.
|
||||
`git remote set-url origin https://code.googlesource.com/gocloud`
|
||||
1. Make changes and create a change by running `review change <name>`,
|
||||
provide a command message, and use `review mail` to create a Gerrit CL.
|
||||
1. Keep amending to the change and mail as your recieve feedback.
|
||||
|
||||
## Integration Tests
|
||||
|
||||
Additional to the unit tests, you may run the integration test suite.
|
||||
|
||||
To run the integrations tests, creating and configuration of a project in the
|
||||
Google Developers Console is required. Once you create a project, set the
|
||||
following environment variables to be able to run the against the actual APIs.
|
||||
|
||||
- **GCLOUD_TESTS_GOLANG_PROJECT_ID**: Developers Console project's ID (e.g. bamboo-shift-455)
|
||||
- **GCLOUD_TESTS_GOLANG_KEY**: The path to the JSON key file.
|
||||
- **GCLOUD_TESTS_GOLANG_BUCKET_NAME**: The test bucket name.
|
||||
|
||||
Install the [gcloud command-line tool][gcloudcli] to your machine and use it
|
||||
to create the indexes used in the datastore integration tests with indexes
|
||||
found in `datastore/testdata/index.yaml`:
|
||||
|
||||
From the project's root directory:
|
||||
|
||||
``` sh
|
||||
# Install the app component
|
||||
$ gcloud components update app
|
||||
|
||||
# Set the default project in your env
|
||||
$ gcloud config set project $GCLOUD_TESTS_GOLANG_PROJECT_ID
|
||||
|
||||
# Authenticate the gcloud tool with your account
|
||||
$ gcloud auth login
|
||||
|
||||
# Create the indexes
|
||||
$ gcloud preview datastore create-indexes datastore/testdata
|
||||
```
|
||||
|
||||
You can run the integration tests by running:
|
||||
|
||||
``` sh
|
||||
$ go test -v -tags=integration google.golang.org/cloud/...
|
||||
```
|
||||
|
||||
## Contributor License Agreements
|
||||
|
||||
Before we can accept your pull requests you'll need to sign a Contributor
|
||||
License Agreement (CLA):
|
||||
|
||||
- **If you are an individual writing original source code** and **you own the
|
||||
- intellectual property**, then you'll need to sign an [individual CLA][indvcla].
|
||||
- **If you work for a company that wants to allow you to contribute your work**,
|
||||
then you'll need to sign a [corporate CLA][corpcla].
|
||||
|
||||
You can sign these electronically (just scroll to the bottom). After that,
|
||||
we'll be able to accept your pull requests.
|
||||
|
||||
[gcloudcli]: https://developers.google.com/cloud/sdk/gcloud/
|
||||
[indvcla]: https://developers.google.com/open-source/cla/individual
|
||||
[corpcla]: https://developers.google.com/open-source/cla/corporate
|
22
vendor/google.golang.org/cloud/CONTRIBUTORS
generated
vendored
Normal file
22
vendor/google.golang.org/cloud/CONTRIBUTORS
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# People who have agreed to one of the CLAs and can contribute patches.
|
||||
# The AUTHORS file lists the copyright holders; this file
|
||||
# lists people. For example, Google employees are listed here
|
||||
# but not in AUTHORS, because Google holds the copyright.
|
||||
#
|
||||
# https://developers.google.com/open-source/cla/individual
|
||||
# https://developers.google.com/open-source/cla/corporate
|
||||
#
|
||||
# Names should be added to this file as:
|
||||
# Name <email address>
|
||||
|
||||
# Keep the list alphabetically sorted.
|
||||
|
||||
Andrew Gerrand <adg@golang.org>
|
||||
Brad Fitzpatrick <bradfitz@golang.org>
|
||||
Burcu Dogan <jbd@google.com>
|
||||
Dave Day <djd@golang.org>
|
||||
Glenn Lewis <gmlewis@google.com>
|
||||
Johan Euphrosine <proppy@google.com>
|
||||
Luna Duclos <luna.duclos@palmstonegames.com>
|
||||
Péter Szilágyi <peterke@gmail.com>
|
||||
Tyler Treat <ttreat31@gmail.com>
|
202
vendor/google.golang.org/cloud/LICENSE
generated
vendored
Normal file
202
vendor/google.golang.org/cloud/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2014 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
130
vendor/google.golang.org/cloud/README.md
generated
vendored
Normal file
130
vendor/google.golang.org/cloud/README.md
generated
vendored
Normal file
@@ -0,0 +1,130 @@
|
||||
# Google Cloud for Go
|
||||
|
||||
[](https://travis-ci.org/GoogleCloudPlatform/gcloud-golang)
|
||||
|
||||
**NOTE:** Github repo is a mirror of [https://code.googlesource.com/gocloud](https://code.googlesource.com/gocloud).
|
||||
|
||||
Go packages for Google Cloud Platform services. Supported APIs include:
|
||||
|
||||
* Google Cloud Datastore
|
||||
* Google Cloud Storage
|
||||
* Google Cloud Pub/Sub
|
||||
* Google Cloud Container Engine
|
||||
|
||||
``` go
|
||||
import "google.golang.org/cloud"
|
||||
```
|
||||
|
||||
> Note: This package is a work-in-progress, and may occasionally
|
||||
> make backwards-incompatible changes.
|
||||
|
||||
Documentation and examples are available at
|
||||
[https://godoc.org/google.golang.org/cloud](https://godoc.org/google.golang.org/cloud).
|
||||
|
||||
## Authorization
|
||||
|
||||
Authorization, throughout the package, is delegated to the godoc.org/golang.org/x/oauth2.
|
||||
Refer to the [godoc documentation](https://godoc.org/golang.org/x/oauth2)
|
||||
for examples on using oauth2 with the Cloud package.
|
||||
|
||||
## Google Cloud Datastore
|
||||
|
||||
[Google Cloud Datastore][cloud-datastore] ([docs][cloud-datastore-docs]) is a fully
|
||||
managed, schemaless database for storing non-relational data. Cloud Datastore
|
||||
automatically scales with your users and supports ACID transactions, high availability
|
||||
of reads and writes, strong consistency for reads and ancestor queries, and eventual
|
||||
consistency for all other queries.
|
||||
|
||||
Follow the [activation instructions][cloud-datastore-activation] to use the Google
|
||||
Cloud Datastore API with your project.
|
||||
|
||||
[https://godoc.org/google.golang.org/cloud/datastore](https://godoc.org/google.golang.org/cloud/datastore)
|
||||
|
||||
|
||||
```go
|
||||
type Post struct {
|
||||
Title string
|
||||
Body string `datastore:",noindex"`
|
||||
PublishedAt time.Time
|
||||
}
|
||||
keys := []*datastore.Key{
|
||||
datastore.NewKey(ctx, "Post", "post1", 0, nil),
|
||||
datastore.NewKey(ctx, "Post", "post2", 0, nil),
|
||||
}
|
||||
posts := []*Post{
|
||||
{Title: "Post 1", Body: "...", PublishedAt: time.Now()},
|
||||
{Title: "Post 2", Body: "...", PublishedAt: time.Now()},
|
||||
}
|
||||
if _, err := datastore.PutMulti(ctx, keys, posts); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
## Google Cloud Storage
|
||||
|
||||
[Google Cloud Storage][cloud-storage] ([docs][cloud-storage-docs]) allows you to store
|
||||
data on Google infrastructure with very high reliability, performance and availability,
|
||||
and can be used to distribute large data objects to users via direct download.
|
||||
|
||||
[https://godoc.org/google.golang.org/cloud/storage](https://godoc.org/google.golang.org/cloud/storage)
|
||||
|
||||
|
||||
```go
|
||||
// Read the object1 from bucket.
|
||||
rc, err := storage.NewReader(ctx, "bucket", "object1")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
slurp, err := ioutil.ReadAll(rc)
|
||||
rc.Close()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
```
|
||||
|
||||
## Google Cloud Pub/Sub (Alpha)
|
||||
|
||||
> Google Cloud Pub/Sub is in **Alpha status**. As a result, it might change in
|
||||
> backward-incompatible ways and is not recommended for production use. It is not
|
||||
> subject to any SLA or deprecation policy.
|
||||
|
||||
[Google Cloud Pub/Sub][cloud-pubsub] ([docs][cloud-pubsub-docs]) allows you to connect
|
||||
your services with reliable, many-to-many, asynchronous messaging hosted on Google's
|
||||
infrastructure. Cloud Pub/Sub automatically scales as you need it and provides a foundation
|
||||
for building your own robust, global services.
|
||||
|
||||
[https://godoc.org/google.golang.org/cloud/pubsub](https://godoc.org/google.golang.org/cloud/pubsub)
|
||||
|
||||
|
||||
```go
|
||||
// Publish "hello world" on topic1.
|
||||
msgIDs, err := pubsub.Publish(ctx, "topic1", &pubsub.Message{
|
||||
Data: []byte("hello world"),
|
||||
})
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
// Pull messages via subscription1.
|
||||
msgs, err := pubsub.Pull(ctx, "subscription1", 1)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome. Please, see the
|
||||
[CONTRIBUTING](https://github.com/GoogleCloudPlatform/gcloud-golang/blob/master/CONTRIBUTING.md)
|
||||
document for details. We're using Gerrit for our code reviews. Please don't open pull
|
||||
requests against this repo, new pull requests will be automatically closed.
|
||||
|
||||
[cloud-datastore]: https://cloud.google.com/datastore/
|
||||
[cloud-datastore-docs]: https://cloud.google.com/datastore/docs
|
||||
[cloud-datastore-activation]: https://cloud.google.com/datastore/docs/activate
|
||||
|
||||
[cloud-pubsub]: https://cloud.google.com/pubsub/
|
||||
[cloud-pubsub-docs]: https://cloud.google.com/pubsub/docs
|
||||
|
||||
[cloud-storage]: https://cloud.google.com/storage/
|
||||
[cloud-storage-docs]: https://cloud.google.com/storage/docs/overview
|
||||
[cloud-storage-create-bucket]: https://cloud.google.com/storage/docs/cloud-console#_creatingbuckets
|
49
vendor/google.golang.org/cloud/cloud.go
generated
vendored
Normal file
49
vendor/google.golang.org/cloud/cloud.go
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package cloud contains Google Cloud Platform APIs related types
|
||||
// and common functions.
|
||||
package cloud // import "google.golang.org/cloud"
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
"google.golang.org/cloud/internal"
|
||||
)
|
||||
|
||||
// NewContext returns a new context that uses the provided http.Client.
|
||||
// Provided http.Client is responsible to authorize and authenticate
|
||||
// the requests made to the Google Cloud APIs.
|
||||
// It mutates the client's original Transport to append the cloud
|
||||
// package's user-agent to the outgoing requests.
|
||||
// You can obtain the project ID from the Google Developers Console,
|
||||
// https://console.developers.google.com.
|
||||
func NewContext(projID string, c *http.Client) context.Context {
|
||||
if c == nil {
|
||||
panic("invalid nil *http.Client passed to NewContext")
|
||||
}
|
||||
return WithContext(context.Background(), projID, c)
|
||||
}
|
||||
|
||||
// WithContext returns a new context in a similar way NewContext does,
|
||||
// but initiates the new context with the specified parent.
|
||||
func WithContext(parent context.Context, projID string, c *http.Client) context.Context {
|
||||
// TODO(bradfitz): delete internal.Transport. It's too wrappy for what it does.
|
||||
// Do User-Agent some other way.
|
||||
if _, ok := c.Transport.(*internal.Transport); !ok {
|
||||
c.Transport = &internal.Transport{Base: c.Transport}
|
||||
}
|
||||
return internal.WithContext(parent, projID, c)
|
||||
}
|
36
vendor/google.golang.org/cloud/cloud_test.go
generated
vendored
Normal file
36
vendor/google.golang.org/cloud/cloud_test.go
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package cloud
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"google.golang.org/cloud/internal"
|
||||
)
|
||||
|
||||
func TestClientTransportMutate(t *testing.T) {
|
||||
c := &http.Client{Transport: http.DefaultTransport}
|
||||
NewContext("project-id", c)
|
||||
NewContext("project-id", c)
|
||||
|
||||
tr, ok := c.Transport.(*internal.Transport)
|
||||
if !ok {
|
||||
t.Errorf("Transport is expected to be an internal.Transport, found to be a %T", c.Transport)
|
||||
}
|
||||
if _, ok := tr.Base.(*internal.Transport); ok {
|
||||
t.Errorf("Transport's Base shouldn't have been an internal.Transport, found to be a %T", tr.Base)
|
||||
}
|
||||
}
|
37
vendor/google.golang.org/cloud/compute/metadata/go13.go
generated
vendored
Normal file
37
vendor/google.golang.org/cloud/compute/metadata/go13.go
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
// Copyright 2015 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// +build go1.3
|
||||
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
// This is a workaround for https://github.com/golang/oauth2/issues/70, where
|
||||
// net.Dialer.KeepAlive is unavailable on Go 1.2 (which App Engine as of
|
||||
// Jan 2015 still runs).
|
||||
//
|
||||
// TODO(bradfitz,jbd,adg): remove this once App Engine supports Go
|
||||
// 1.3+.
|
||||
func init() {
|
||||
go13Dialer = func() *net.Dialer {
|
||||
return &net.Dialer{
|
||||
Timeout: 750 * time.Millisecond,
|
||||
KeepAlive: 30 * time.Second,
|
||||
}
|
||||
}
|
||||
}
|
267
vendor/google.golang.org/cloud/compute/metadata/metadata.go
generated
vendored
Normal file
267
vendor/google.golang.org/cloud/compute/metadata/metadata.go
generated
vendored
Normal file
@@ -0,0 +1,267 @@
|
||||
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package metadata provides access to Google Compute Engine (GCE)
|
||||
// metadata and API service accounts.
|
||||
//
|
||||
// This package is a wrapper around the GCE metadata service,
|
||||
// as documented at https://developers.google.com/compute/docs/metadata.
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"google.golang.org/cloud/internal"
|
||||
)
|
||||
|
||||
type cachedValue struct {
|
||||
k string
|
||||
trim bool
|
||||
mu sync.Mutex
|
||||
v string
|
||||
}
|
||||
|
||||
var (
|
||||
projID = &cachedValue{k: "project/project-id", trim: true}
|
||||
projNum = &cachedValue{k: "project/numeric-project-id", trim: true}
|
||||
instID = &cachedValue{k: "instance/id", trim: true}
|
||||
)
|
||||
|
||||
var metaClient = &http.Client{
|
||||
Transport: &internal.Transport{
|
||||
Base: &http.Transport{
|
||||
Dial: dialer().Dial,
|
||||
ResponseHeaderTimeout: 750 * time.Millisecond,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// go13Dialer is nil until we're using Go 1.3+.
|
||||
// This is a workaround for https://github.com/golang/oauth2/issues/70, where
|
||||
// net.Dialer.KeepAlive is unavailable on Go 1.2 (which App Engine as of
|
||||
// Jan 2015 still runs).
|
||||
//
|
||||
// TODO(bradfitz,jbd,adg,dsymonds): remove this once App Engine supports Go
|
||||
// 1.3+ and go-app-builder also supports 1.3+, or when Go 1.2 is no longer an
|
||||
// option on App Engine.
|
||||
var go13Dialer func() *net.Dialer
|
||||
|
||||
func dialer() *net.Dialer {
|
||||
if fn := go13Dialer; fn != nil {
|
||||
return fn()
|
||||
}
|
||||
return &net.Dialer{
|
||||
Timeout: 750 * time.Millisecond,
|
||||
}
|
||||
}
|
||||
|
||||
// NotDefinedError is returned when requested metadata is not defined.
|
||||
//
|
||||
// The underlying string is the suffix after "/computeMetadata/v1/".
|
||||
//
|
||||
// This error is not returned if the value is defined to be the empty
|
||||
// string.
|
||||
type NotDefinedError string
|
||||
|
||||
func (suffix NotDefinedError) Error() string {
|
||||
return fmt.Sprintf("metadata: GCE metadata %q not defined", string(suffix))
|
||||
}
|
||||
|
||||
// Get returns a value from the metadata service.
|
||||
// The suffix is appended to "http://metadata/computeMetadata/v1/".
|
||||
//
|
||||
// If the requested metadata is not defined, the returned error will
|
||||
// be of type NotDefinedError.
|
||||
func Get(suffix string) (string, error) {
|
||||
// Using 169.254.169.254 instead of "metadata" here because Go
|
||||
// binaries built with the "netgo" tag and without cgo won't
|
||||
// know the search suffix for "metadata" is
|
||||
// ".google.internal", and this IP address is documented as
|
||||
// being stable anyway.
|
||||
url := "http://169.254.169.254/computeMetadata/v1/" + suffix
|
||||
req, _ := http.NewRequest("GET", url, nil)
|
||||
req.Header.Set("Metadata-Flavor", "Google")
|
||||
res, err := metaClient.Do(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
if res.StatusCode == http.StatusNotFound {
|
||||
return "", NotDefinedError(suffix)
|
||||
}
|
||||
if res.StatusCode != 200 {
|
||||
return "", fmt.Errorf("status code %d trying to fetch %s", res.StatusCode, url)
|
||||
}
|
||||
all, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(all), nil
|
||||
}
|
||||
|
||||
func getTrimmed(suffix string) (s string, err error) {
|
||||
s, err = Get(suffix)
|
||||
s = strings.TrimSpace(s)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *cachedValue) get() (v string, err error) {
|
||||
defer c.mu.Unlock()
|
||||
c.mu.Lock()
|
||||
if c.v != "" {
|
||||
return c.v, nil
|
||||
}
|
||||
if c.trim {
|
||||
v, err = getTrimmed(c.k)
|
||||
} else {
|
||||
v, err = Get(c.k)
|
||||
}
|
||||
if err == nil {
|
||||
c.v = v
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var onGCE struct {
|
||||
sync.Mutex
|
||||
set bool
|
||||
v bool
|
||||
}
|
||||
|
||||
// OnGCE reports whether this process is running on Google Compute Engine.
|
||||
func OnGCE() bool {
|
||||
defer onGCE.Unlock()
|
||||
onGCE.Lock()
|
||||
if onGCE.set {
|
||||
return onGCE.v
|
||||
}
|
||||
onGCE.set = true
|
||||
|
||||
// We use the DNS name of the metadata service here instead of the IP address
|
||||
// because we expect that to fail faster in the not-on-GCE case.
|
||||
res, err := metaClient.Get("http://metadata.google.internal")
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
onGCE.v = res.Header.Get("Metadata-Flavor") == "Google"
|
||||
return onGCE.v
|
||||
}
|
||||
|
||||
// ProjectID returns the current instance's project ID string.
|
||||
func ProjectID() (string, error) { return projID.get() }
|
||||
|
||||
// NumericProjectID returns the current instance's numeric project ID.
|
||||
func NumericProjectID() (string, error) { return projNum.get() }
|
||||
|
||||
// InternalIP returns the instance's primary internal IP address.
|
||||
func InternalIP() (string, error) {
|
||||
return getTrimmed("instance/network-interfaces/0/ip")
|
||||
}
|
||||
|
||||
// ExternalIP returns the instance's primary external (public) IP address.
|
||||
func ExternalIP() (string, error) {
|
||||
return getTrimmed("instance/network-interfaces/0/access-configs/0/external-ip")
|
||||
}
|
||||
|
||||
// Hostname returns the instance's hostname. This will probably be of
|
||||
// the form "INSTANCENAME.c.PROJECT.internal" but that isn't
|
||||
// guaranteed.
|
||||
//
|
||||
// TODO: what is this defined to be? Docs say "The host name of the
|
||||
// instance."
|
||||
func Hostname() (string, error) {
|
||||
return getTrimmed("network-interfaces/0/ip")
|
||||
}
|
||||
|
||||
// InstanceTags returns the list of user-defined instance tags,
|
||||
// assigned when initially creating a GCE instance.
|
||||
func InstanceTags() ([]string, error) {
|
||||
var s []string
|
||||
j, err := Get("instance/tags")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := json.NewDecoder(strings.NewReader(j)).Decode(&s); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// InstanceID returns the current VM's numeric instance ID.
|
||||
func InstanceID() (string, error) {
|
||||
return instID.get()
|
||||
}
|
||||
|
||||
// InstanceAttributes returns the list of user-defined attributes,
|
||||
// assigned when initially creating a GCE VM instance. The value of an
|
||||
// attribute can be obtained with InstanceAttributeValue.
|
||||
func InstanceAttributes() ([]string, error) { return lines("instance/attributes/") }
|
||||
|
||||
// ProjectAttributes returns the list of user-defined attributes
|
||||
// applying to the project as a whole, not just this VM. The value of
|
||||
// an attribute can be obtained with ProjectAttributeValue.
|
||||
func ProjectAttributes() ([]string, error) { return lines("project/attributes/") }
|
||||
|
||||
func lines(suffix string) ([]string, error) {
|
||||
j, err := Get(suffix)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s := strings.Split(strings.TrimSpace(j), "\n")
|
||||
for i := range s {
|
||||
s[i] = strings.TrimSpace(s[i])
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// InstanceAttributeValue returns the value of the provided VM
|
||||
// instance attribute.
|
||||
//
|
||||
// If the requested attribute is not defined, the returned error will
|
||||
// be of type NotDefinedError.
|
||||
//
|
||||
// InstanceAttributeValue may return ("", nil) if the attribute was
|
||||
// defined to be the empty string.
|
||||
func InstanceAttributeValue(attr string) (string, error) {
|
||||
return Get("instance/attributes/" + attr)
|
||||
}
|
||||
|
||||
// ProjectAttributeValue returns the value of the provided
|
||||
// project attribute.
|
||||
//
|
||||
// If the requested attribute is not defined, the returned error will
|
||||
// be of type NotDefinedError.
|
||||
//
|
||||
// ProjectAttributeValue may return ("", nil) if the attribute was
|
||||
// defined to be the empty string.
|
||||
func ProjectAttributeValue(attr string) (string, error) {
|
||||
return Get("project/attributes/" + attr)
|
||||
}
|
||||
|
||||
// Scopes returns the service account scopes for the given account.
|
||||
// The account may be empty or the string "default" to use the instance's
|
||||
// main account.
|
||||
func Scopes(serviceAccount string) ([]string, error) {
|
||||
if serviceAccount == "" {
|
||||
serviceAccount = "default"
|
||||
}
|
||||
return lines("instance/service-accounts/" + serviceAccount + "/scopes")
|
||||
}
|
128
vendor/google.golang.org/cloud/internal/cloud.go
generated
vendored
Normal file
128
vendor/google.golang.org/cloud/internal/cloud.go
generated
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package internal provides support for the cloud packages.
|
||||
//
|
||||
// Users should not import this package directly.
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
type contextKey struct{}
|
||||
|
||||
func WithContext(parent context.Context, projID string, c *http.Client) context.Context {
|
||||
if c == nil {
|
||||
panic("nil *http.Client passed to WithContext")
|
||||
}
|
||||
if projID == "" {
|
||||
panic("empty project ID passed to WithContext")
|
||||
}
|
||||
return context.WithValue(parent, contextKey{}, &cloudContext{
|
||||
ProjectID: projID,
|
||||
HTTPClient: c,
|
||||
})
|
||||
}
|
||||
|
||||
const userAgent = "gcloud-golang/0.1"
|
||||
|
||||
type cloudContext struct {
|
||||
ProjectID string
|
||||
HTTPClient *http.Client
|
||||
|
||||
mu sync.Mutex // guards svc
|
||||
svc map[string]interface{} // e.g. "storage" => *rawStorage.Service
|
||||
}
|
||||
|
||||
// Service returns the result of the fill function if it's never been
|
||||
// called before for the given name (which is assumed to be an API
|
||||
// service name, like "datastore"). If it has already been cached, the fill
|
||||
// func is not run.
|
||||
// It's safe for concurrent use by multiple goroutines.
|
||||
func Service(ctx context.Context, name string, fill func(*http.Client) interface{}) interface{} {
|
||||
return cc(ctx).service(name, fill)
|
||||
}
|
||||
|
||||
func (c *cloudContext) service(name string, fill func(*http.Client) interface{}) interface{} {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
if c.svc == nil {
|
||||
c.svc = make(map[string]interface{})
|
||||
} else if v, ok := c.svc[name]; ok {
|
||||
return v
|
||||
}
|
||||
v := fill(c.HTTPClient)
|
||||
c.svc[name] = v
|
||||
return v
|
||||
}
|
||||
|
||||
// Transport is an http.RoundTripper that appends
|
||||
// Google Cloud client's user-agent to the original
|
||||
// request's user-agent header.
|
||||
type Transport struct {
|
||||
// Base represents the actual http.RoundTripper
|
||||
// the requests will be delegated to.
|
||||
Base http.RoundTripper
|
||||
}
|
||||
|
||||
// RoundTrip appends a user-agent to the existing user-agent
|
||||
// header and delegates the request to the base http.RoundTripper.
|
||||
func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
req = cloneRequest(req)
|
||||
ua := req.Header.Get("User-Agent")
|
||||
if ua == "" {
|
||||
ua = userAgent
|
||||
} else {
|
||||
ua = fmt.Sprintf("%s %s", ua, userAgent)
|
||||
}
|
||||
req.Header.Set("User-Agent", ua)
|
||||
return t.Base.RoundTrip(req)
|
||||
}
|
||||
|
||||
// cloneRequest returns a clone of the provided *http.Request.
|
||||
// The clone is a shallow copy of the struct and its Header map.
|
||||
func cloneRequest(r *http.Request) *http.Request {
|
||||
// shallow copy of the struct
|
||||
r2 := new(http.Request)
|
||||
*r2 = *r
|
||||
// deep copy of the Header
|
||||
r2.Header = make(http.Header)
|
||||
for k, s := range r.Header {
|
||||
r2.Header[k] = s
|
||||
}
|
||||
return r2
|
||||
}
|
||||
|
||||
func ProjID(ctx context.Context) string {
|
||||
return cc(ctx).ProjectID
|
||||
}
|
||||
|
||||
func HTTPClient(ctx context.Context) *http.Client {
|
||||
return cc(ctx).HTTPClient
|
||||
}
|
||||
|
||||
// cc returns the internal *cloudContext (cc) state for a context.Context.
|
||||
// It panics if the user did it wrong.
|
||||
func cc(ctx context.Context) *cloudContext {
|
||||
if c, ok := ctx.Value(contextKey{}).(*cloudContext); ok {
|
||||
return c
|
||||
}
|
||||
panic("invalid context.Context type; it should be created with cloud.NewContext")
|
||||
}
|
1633
vendor/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go
generated
vendored
Normal file
1633
vendor/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
594
vendor/google.golang.org/cloud/internal/datastore/datastore_v1.proto
generated
vendored
Normal file
594
vendor/google.golang.org/cloud/internal/datastore/datastore_v1.proto
generated
vendored
Normal file
@@ -0,0 +1,594 @@
|
||||
// Copyright 2013 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// The datastore v1 service proto definitions
|
||||
|
||||
syntax = "proto2";
|
||||
|
||||
package datastore;
|
||||
option java_package = "com.google.api.services.datastore";
|
||||
|
||||
|
||||
// An identifier for a particular subset of entities.
|
||||
//
|
||||
// Entities are partitioned into various subsets, each used by different
|
||||
// datasets and different namespaces within a dataset and so forth.
|
||||
//
|
||||
// All input partition IDs are normalized before use.
|
||||
// A partition ID is normalized as follows:
|
||||
// If the partition ID is unset or is set to an empty partition ID, replace it
|
||||
// with the context partition ID.
|
||||
// Otherwise, if the partition ID has no dataset ID, assign it the context
|
||||
// partition ID's dataset ID.
|
||||
// Unless otherwise documented, the context partition ID has the dataset ID set
|
||||
// to the context dataset ID and no other partition dimension set.
|
||||
//
|
||||
// A partition ID is empty if all of its fields are unset.
|
||||
//
|
||||
// Partition dimension:
|
||||
// A dimension may be unset.
|
||||
// A dimension's value must never be "".
|
||||
// A dimension's value must match [A-Za-z\d\.\-_]{1,100}
|
||||
// If the value of any dimension matches regex "__.*__",
|
||||
// the partition is reserved/read-only.
|
||||
// A reserved/read-only partition ID is forbidden in certain documented contexts.
|
||||
//
|
||||
// Dataset ID:
|
||||
// A dataset id's value must never be "".
|
||||
// A dataset id's value must match
|
||||
// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99}
|
||||
message PartitionId {
|
||||
// The dataset ID.
|
||||
optional string dataset_id = 3;
|
||||
// The namespace.
|
||||
optional string namespace = 4;
|
||||
}
|
||||
|
||||
// A unique identifier for an entity.
|
||||
// If a key's partition id or any of its path kinds or names are
|
||||
// reserved/read-only, the key is reserved/read-only.
|
||||
// A reserved/read-only key is forbidden in certain documented contexts.
|
||||
message Key {
|
||||
// Entities are partitioned into subsets, currently identified by a dataset
|
||||
// (usually implicitly specified by the project) and namespace ID.
|
||||
// Queries are scoped to a single partition.
|
||||
optional PartitionId partition_id = 1;
|
||||
|
||||
// A (kind, ID/name) pair used to construct a key path.
|
||||
//
|
||||
// At most one of name or ID may be set.
|
||||
// If either is set, the element is complete.
|
||||
// If neither is set, the element is incomplete.
|
||||
message PathElement {
|
||||
// The kind of the entity.
|
||||
// A kind matching regex "__.*__" is reserved/read-only.
|
||||
// A kind must not contain more than 500 characters.
|
||||
// Cannot be "".
|
||||
required string kind = 1;
|
||||
// The ID of the entity.
|
||||
// Never equal to zero. Values less than zero are discouraged and will not
|
||||
// be supported in the future.
|
||||
optional int64 id = 2;
|
||||
// The name of the entity.
|
||||
// A name matching regex "__.*__" is reserved/read-only.
|
||||
// A name must not be more than 500 characters.
|
||||
// Cannot be "".
|
||||
optional string name = 3;
|
||||
}
|
||||
|
||||
// The entity path.
|
||||
// An entity path consists of one or more elements composed of a kind and a
|
||||
// string or numerical identifier, which identify entities. The first
|
||||
// element identifies a <em>root entity</em>, the second element identifies
|
||||
// a <em>child</em> of the root entity, the third element a child of the
|
||||
// second entity, and so forth. The entities identified by all prefixes of
|
||||
// the path are called the element's <em>ancestors</em>.
|
||||
// An entity path is always fully complete: ALL of the entity's ancestors
|
||||
// are required to be in the path along with the entity identifier itself.
|
||||
// The only exception is that in some documented cases, the identifier in the
|
||||
// last path element (for the entity) itself may be omitted. A path can never
|
||||
// be empty.
|
||||
repeated PathElement path_element = 2;
|
||||
}
|
||||
|
||||
// A message that can hold any of the supported value types and associated
|
||||
// metadata.
|
||||
//
|
||||
// At most one of the <type>Value fields may be set.
|
||||
// If none are set the value is "null".
|
||||
//
|
||||
message Value {
|
||||
// A boolean value.
|
||||
optional bool boolean_value = 1;
|
||||
// An integer value.
|
||||
optional int64 integer_value = 2;
|
||||
// A double value.
|
||||
optional double double_value = 3;
|
||||
// A timestamp value.
|
||||
optional int64 timestamp_microseconds_value = 4;
|
||||
// A key value.
|
||||
optional Key key_value = 5;
|
||||
// A blob key value.
|
||||
optional string blob_key_value = 16;
|
||||
// A UTF-8 encoded string value.
|
||||
optional string string_value = 17;
|
||||
// A blob value.
|
||||
optional bytes blob_value = 18;
|
||||
// An entity value.
|
||||
// May have no key.
|
||||
// May have a key with an incomplete key path.
|
||||
// May have a reserved/read-only key.
|
||||
optional Entity entity_value = 6;
|
||||
// A list value.
|
||||
// Cannot contain another list value.
|
||||
// Cannot also have a meaning and indexing set.
|
||||
repeated Value list_value = 7;
|
||||
|
||||
// The <code>meaning</code> field is reserved and should not be used.
|
||||
optional int32 meaning = 14;
|
||||
|
||||
// If the value should be indexed.
|
||||
//
|
||||
// The <code>indexed</code> property may be set for a
|
||||
// <code>null</code> value.
|
||||
// When <code>indexed</code> is <code>true</code>, <code>stringValue</code>
|
||||
// is limited to 500 characters and the blob value is limited to 500 bytes.
|
||||
// Exception: If meaning is set to 2, string_value is limited to 2038
|
||||
// characters regardless of indexed.
|
||||
// When indexed is true, meaning 15 and 22 are not allowed, and meaning 16
|
||||
// will be ignored on input (and will never be set on output).
|
||||
// Input values by default have <code>indexed</code> set to
|
||||
// <code>true</code>; however, you can explicitly set <code>indexed</code> to
|
||||
// <code>true</code> if you want. (An output value never has
|
||||
// <code>indexed</code> explicitly set to <code>true</code>.) If a value is
|
||||
// itself an entity, it cannot have <code>indexed</code> set to
|
||||
// <code>true</code>.
|
||||
// Exception: An entity value with meaning 9, 20 or 21 may be indexed.
|
||||
optional bool indexed = 15 [default = true];
|
||||
}
|
||||
|
||||
// An entity property.
|
||||
message Property {
|
||||
// The name of the property.
|
||||
// A property name matching regex "__.*__" is reserved.
|
||||
// A reserved property name is forbidden in certain documented contexts.
|
||||
// The name must not contain more than 500 characters.
|
||||
// Cannot be "".
|
||||
required string name = 1;
|
||||
|
||||
// The value(s) of the property.
|
||||
// Each value can have only one value property populated. For example,
|
||||
// you cannot have a values list of <code>{ value: { integerValue: 22,
|
||||
// stringValue: "a" } }</code>, but you can have <code>{ value: { listValue:
|
||||
// [ { integerValue: 22 }, { stringValue: "a" } ] }</code>.
|
||||
required Value value = 4;
|
||||
}
|
||||
|
||||
// An entity.
|
||||
//
|
||||
// An entity is limited to 1 megabyte when stored. That <em>roughly</em>
|
||||
// corresponds to a limit of 1 megabyte for the serialized form of this
|
||||
// message.
|
||||
message Entity {
|
||||
// The entity's key.
|
||||
//
|
||||
// An entity must have a key, unless otherwise documented (for example,
|
||||
// an entity in <code>Value.entityValue</code> may have no key).
|
||||
// An entity's kind is its key's path's last element's kind,
|
||||
// or null if it has no key.
|
||||
optional Key key = 1;
|
||||
// The entity's properties.
|
||||
// Each property's name must be unique for its entity.
|
||||
repeated Property property = 2;
|
||||
}
|
||||
|
||||
// The result of fetching an entity from the datastore.
|
||||
message EntityResult {
|
||||
// Specifies what data the 'entity' field contains.
|
||||
// A ResultType is either implied (for example, in LookupResponse.found it
|
||||
// is always FULL) or specified by context (for example, in message
|
||||
// QueryResultBatch, field 'entity_result_type' specifies a ResultType
|
||||
// for all the values in field 'entity_result').
|
||||
enum ResultType {
|
||||
FULL = 1; // The entire entity.
|
||||
PROJECTION = 2; // A projected subset of properties.
|
||||
// The entity may have no key.
|
||||
// A property value may have meaning 18.
|
||||
KEY_ONLY = 3; // Only the key.
|
||||
}
|
||||
|
||||
// The resulting entity.
|
||||
required Entity entity = 1;
|
||||
}
|
||||
|
||||
// A query.
|
||||
message Query {
|
||||
// The projection to return. If not set the entire entity is returned.
|
||||
repeated PropertyExpression projection = 2;
|
||||
|
||||
// The kinds to query (if empty, returns entities from all kinds).
|
||||
repeated KindExpression kind = 3;
|
||||
|
||||
// The filter to apply (optional).
|
||||
optional Filter filter = 4;
|
||||
|
||||
// The order to apply to the query results (if empty, order is unspecified).
|
||||
repeated PropertyOrder order = 5;
|
||||
|
||||
// The properties to group by (if empty, no grouping is applied to the
|
||||
// result set).
|
||||
repeated PropertyReference group_by = 6;
|
||||
|
||||
// A starting point for the query results. Optional. Query cursors are
|
||||
// returned in query result batches.
|
||||
optional bytes /* serialized QueryCursor */ start_cursor = 7;
|
||||
|
||||
// An ending point for the query results. Optional. Query cursors are
|
||||
// returned in query result batches.
|
||||
optional bytes /* serialized QueryCursor */ end_cursor = 8;
|
||||
|
||||
// The number of results to skip. Applies before limit, but after all other
|
||||
// constraints (optional, defaults to 0).
|
||||
optional int32 offset = 10 [default=0];
|
||||
|
||||
// The maximum number of results to return. Applies after all other
|
||||
// constraints. Optional.
|
||||
optional int32 limit = 11;
|
||||
}
|
||||
|
||||
// A representation of a kind.
|
||||
message KindExpression {
|
||||
// The name of the kind.
|
||||
required string name = 1;
|
||||
}
|
||||
|
||||
// A reference to a property relative to the kind expressions.
|
||||
// exactly.
|
||||
message PropertyReference {
|
||||
// The name of the property.
|
||||
required string name = 2;
|
||||
}
|
||||
|
||||
// A representation of a property in a projection.
|
||||
message PropertyExpression {
|
||||
enum AggregationFunction {
|
||||
FIRST = 1;
|
||||
}
|
||||
// The property to project.
|
||||
required PropertyReference property = 1;
|
||||
// The aggregation function to apply to the property. Optional.
|
||||
// Can only be used when grouping by at least one property. Must
|
||||
// then be set on all properties in the projection that are not
|
||||
// being grouped by.
|
||||
optional AggregationFunction aggregation_function = 2;
|
||||
}
|
||||
|
||||
// The desired order for a specific property.
|
||||
message PropertyOrder {
|
||||
enum Direction {
|
||||
ASCENDING = 1;
|
||||
DESCENDING = 2;
|
||||
}
|
||||
// The property to order by.
|
||||
required PropertyReference property = 1;
|
||||
// The direction to order by.
|
||||
optional Direction direction = 2 [default=ASCENDING];
|
||||
}
|
||||
|
||||
// A holder for any type of filter. Exactly one field should be specified.
|
||||
message Filter {
|
||||
// A composite filter.
|
||||
optional CompositeFilter composite_filter = 1;
|
||||
// A filter on a property.
|
||||
optional PropertyFilter property_filter = 2;
|
||||
}
|
||||
|
||||
// A filter that merges the multiple other filters using the given operation.
|
||||
message CompositeFilter {
|
||||
enum Operator {
|
||||
AND = 1;
|
||||
}
|
||||
|
||||
// The operator for combining multiple filters.
|
||||
required Operator operator = 1;
|
||||
// The list of filters to combine.
|
||||
// Must contain at least one filter.
|
||||
repeated Filter filter = 2;
|
||||
}
|
||||
|
||||
// A filter on a specific property.
|
||||
message PropertyFilter {
|
||||
enum Operator {
|
||||
LESS_THAN = 1;
|
||||
LESS_THAN_OR_EQUAL = 2;
|
||||
GREATER_THAN = 3;
|
||||
GREATER_THAN_OR_EQUAL = 4;
|
||||
EQUAL = 5;
|
||||
|
||||
HAS_ANCESTOR = 11;
|
||||
}
|
||||
|
||||
// The property to filter by.
|
||||
required PropertyReference property = 1;
|
||||
// The operator to filter by.
|
||||
required Operator operator = 2;
|
||||
// The value to compare the property to.
|
||||
required Value value = 3;
|
||||
}
|
||||
|
||||
// A GQL query.
|
||||
message GqlQuery {
|
||||
required string query_string = 1;
|
||||
// When false, the query string must not contain a literal.
|
||||
optional bool allow_literal = 2 [default = false];
|
||||
// A named argument must set field GqlQueryArg.name.
|
||||
// No two named arguments may have the same name.
|
||||
// For each non-reserved named binding site in the query string,
|
||||
// there must be a named argument with that name,
|
||||
// but not necessarily the inverse.
|
||||
repeated GqlQueryArg name_arg = 3;
|
||||
// Numbered binding site @1 references the first numbered argument,
|
||||
// effectively using 1-based indexing, rather than the usual 0.
|
||||
// A numbered argument must NOT set field GqlQueryArg.name.
|
||||
// For each binding site numbered i in query_string,
|
||||
// there must be an ith numbered argument.
|
||||
// The inverse must also be true.
|
||||
repeated GqlQueryArg number_arg = 4;
|
||||
}
|
||||
|
||||
// A binding argument for a GQL query.
|
||||
// Exactly one of fields value and cursor must be set.
|
||||
message GqlQueryArg {
|
||||
// Must match regex "[A-Za-z_$][A-Za-z_$0-9]*".
|
||||
// Must not match regex "__.*__".
|
||||
// Must not be "".
|
||||
optional string name = 1;
|
||||
optional Value value = 2;
|
||||
optional bytes cursor = 3;
|
||||
}
|
||||
|
||||
// A batch of results produced by a query.
|
||||
message QueryResultBatch {
|
||||
// The possible values for the 'more_results' field.
|
||||
enum MoreResultsType {
|
||||
NOT_FINISHED = 1; // There are additional batches to fetch from this query.
|
||||
MORE_RESULTS_AFTER_LIMIT = 2; // The query is finished, but there are more
|
||||
// results after the limit.
|
||||
NO_MORE_RESULTS = 3; // The query has been exhausted.
|
||||
}
|
||||
|
||||
// The result type for every entity in entityResults.
|
||||
required EntityResult.ResultType entity_result_type = 1;
|
||||
// The results for this batch.
|
||||
repeated EntityResult entity_result = 2;
|
||||
|
||||
// A cursor that points to the position after the last result in the batch.
|
||||
// May be absent.
|
||||
optional bytes /* serialized QueryCursor */ end_cursor = 4;
|
||||
|
||||
// The state of the query after the current batch.
|
||||
required MoreResultsType more_results = 5;
|
||||
|
||||
// The number of results skipped because of <code>Query.offset</code>.
|
||||
optional int32 skipped_results = 6;
|
||||
}
|
||||
|
||||
// A set of changes to apply.
|
||||
//
|
||||
// No entity in this message may have a reserved property name,
|
||||
// not even a property in an entity in a value.
|
||||
// No value in this message may have meaning 18,
|
||||
// not even a value in an entity in another value.
|
||||
//
|
||||
// If entities with duplicate keys are present, an arbitrary choice will
|
||||
// be made as to which is written.
|
||||
message Mutation {
|
||||
// Entities to upsert.
|
||||
// Each upserted entity's key must have a complete path and
|
||||
// must not be reserved/read-only.
|
||||
repeated Entity upsert = 1;
|
||||
// Entities to update.
|
||||
// Each updated entity's key must have a complete path and
|
||||
// must not be reserved/read-only.
|
||||
repeated Entity update = 2;
|
||||
// Entities to insert.
|
||||
// Each inserted entity's key must have a complete path and
|
||||
// must not be reserved/read-only.
|
||||
repeated Entity insert = 3;
|
||||
// Insert entities with a newly allocated ID.
|
||||
// Each inserted entity's key must omit the final identifier in its path and
|
||||
// must not be reserved/read-only.
|
||||
repeated Entity insert_auto_id = 4;
|
||||
// Keys of entities to delete.
|
||||
// Each key must have a complete key path and must not be reserved/read-only.
|
||||
repeated Key delete = 5;
|
||||
// Ignore a user specified read-only period. Optional.
|
||||
optional bool force = 6;
|
||||
}
|
||||
|
||||
// The result of applying a mutation.
|
||||
message MutationResult {
|
||||
// Number of index writes.
|
||||
required int32 index_updates = 1;
|
||||
// Keys for <code>insertAutoId</code> entities. One per entity from the
|
||||
// request, in the same order.
|
||||
repeated Key insert_auto_id_key = 2;
|
||||
}
|
||||
|
||||
// Options shared by read requests.
|
||||
message ReadOptions {
|
||||
enum ReadConsistency {
|
||||
DEFAULT = 0;
|
||||
STRONG = 1;
|
||||
EVENTUAL = 2;
|
||||
}
|
||||
|
||||
// The read consistency to use.
|
||||
// Cannot be set when transaction is set.
|
||||
// Lookup and ancestor queries default to STRONG, global queries default to
|
||||
// EVENTUAL and cannot be set to STRONG.
|
||||
optional ReadConsistency read_consistency = 1 [default=DEFAULT];
|
||||
|
||||
// The transaction to use. Optional.
|
||||
optional bytes /* serialized Transaction */ transaction = 2;
|
||||
}
|
||||
|
||||
// The request for Lookup.
|
||||
message LookupRequest {
|
||||
|
||||
// Options for this lookup request. Optional.
|
||||
optional ReadOptions read_options = 1;
|
||||
// Keys of entities to look up from the datastore.
|
||||
repeated Key key = 3;
|
||||
}
|
||||
|
||||
// The response for Lookup.
|
||||
message LookupResponse {
|
||||
|
||||
// The order of results in these fields is undefined and has no relation to
|
||||
// the order of the keys in the input.
|
||||
|
||||
// Entities found as ResultType.FULL entities.
|
||||
repeated EntityResult found = 1;
|
||||
|
||||
// Entities not found as ResultType.KEY_ONLY entities.
|
||||
repeated EntityResult missing = 2;
|
||||
|
||||
// A list of keys that were not looked up due to resource constraints.
|
||||
repeated Key deferred = 3;
|
||||
}
|
||||
|
||||
|
||||
// The request for RunQuery.
|
||||
message RunQueryRequest {
|
||||
|
||||
// The options for this query.
|
||||
optional ReadOptions read_options = 1;
|
||||
|
||||
// Entities are partitioned into subsets, identified by a dataset (usually
|
||||
// implicitly specified by the project) and namespace ID. Queries are scoped
|
||||
// to a single partition.
|
||||
// This partition ID is normalized with the standard default context
|
||||
// partition ID, but all other partition IDs in RunQueryRequest are
|
||||
// normalized with this partition ID as the context partition ID.
|
||||
optional PartitionId partition_id = 2;
|
||||
|
||||
// The query to run.
|
||||
// Either this field or field gql_query must be set, but not both.
|
||||
optional Query query = 3;
|
||||
// The GQL query to run.
|
||||
// Either this field or field query must be set, but not both.
|
||||
optional GqlQuery gql_query = 7;
|
||||
}
|
||||
|
||||
// The response for RunQuery.
|
||||
message RunQueryResponse {
|
||||
|
||||
// A batch of query results (always present).
|
||||
optional QueryResultBatch batch = 1;
|
||||
|
||||
}
|
||||
|
||||
// The request for BeginTransaction.
|
||||
message BeginTransactionRequest {
|
||||
|
||||
enum IsolationLevel {
|
||||
SNAPSHOT = 0; // Read from a consistent snapshot. Concurrent transactions
|
||||
// conflict if their mutations conflict. For example:
|
||||
// Read(A),Write(B) may not conflict with Read(B),Write(A),
|
||||
// but Read(B),Write(B) does conflict with Read(B),Write(B).
|
||||
SERIALIZABLE = 1; // Read from a consistent snapshot. Concurrent
|
||||
// transactions conflict if they cannot be serialized.
|
||||
// For example Read(A),Write(B) does conflict with
|
||||
// Read(B),Write(A) but Read(A) may not conflict with
|
||||
// Write(A).
|
||||
}
|
||||
|
||||
// The transaction isolation level.
|
||||
optional IsolationLevel isolation_level = 1 [default=SNAPSHOT];
|
||||
}
|
||||
|
||||
// The response for BeginTransaction.
|
||||
message BeginTransactionResponse {
|
||||
|
||||
// The transaction identifier (always present).
|
||||
optional bytes /* serialized Transaction */ transaction = 1;
|
||||
}
|
||||
|
||||
// The request for Rollback.
|
||||
message RollbackRequest {
|
||||
|
||||
// The transaction identifier, returned by a call to
|
||||
// <code>beginTransaction</code>.
|
||||
required bytes /* serialized Transaction */ transaction = 1;
|
||||
}
|
||||
|
||||
// The response for Rollback.
|
||||
message RollbackResponse {
|
||||
// Empty
|
||||
}
|
||||
|
||||
// The request for Commit.
|
||||
message CommitRequest {
|
||||
|
||||
enum Mode {
|
||||
TRANSACTIONAL = 1;
|
||||
NON_TRANSACTIONAL = 2;
|
||||
}
|
||||
|
||||
// The transaction identifier, returned by a call to
|
||||
// <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL.
|
||||
optional bytes /* serialized Transaction */ transaction = 1;
|
||||
// The mutation to perform. Optional.
|
||||
optional Mutation mutation = 2;
|
||||
// The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.
|
||||
optional Mode mode = 5 [default=TRANSACTIONAL];
|
||||
}
|
||||
|
||||
// The response for Commit.
|
||||
message CommitResponse {
|
||||
|
||||
// The result of performing the mutation (if any).
|
||||
optional MutationResult mutation_result = 1;
|
||||
}
|
||||
|
||||
// The request for AllocateIds.
|
||||
message AllocateIdsRequest {
|
||||
|
||||
// A list of keys with incomplete key paths to allocate IDs for.
|
||||
// No key may be reserved/read-only.
|
||||
repeated Key key = 1;
|
||||
}
|
||||
|
||||
// The response for AllocateIds.
|
||||
message AllocateIdsResponse {
|
||||
|
||||
// The keys specified in the request (in the same order), each with
|
||||
// its key path completed with a newly allocated ID.
|
||||
repeated Key key = 1;
|
||||
}
|
||||
|
||||
// Each rpc normalizes the partition IDs of the keys in its input entities,
|
||||
// and always returns entities with keys with normalized partition IDs.
|
||||
// (Note that applies to all entities, including entities in values.)
|
||||
service DatastoreService {
|
||||
// Look up some entities by key.
|
||||
rpc Lookup(LookupRequest) returns (LookupResponse) {
|
||||
};
|
||||
// Query for entities.
|
||||
rpc RunQuery(RunQueryRequest) returns (RunQueryResponse) {
|
||||
};
|
||||
// Begin a new transaction.
|
||||
rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) {
|
||||
};
|
||||
// Commit a transaction, optionally creating, deleting or modifying some
|
||||
// entities.
|
||||
rpc Commit(CommitRequest) returns (CommitResponse) {
|
||||
};
|
||||
// Roll back a transaction.
|
||||
rpc Rollback(RollbackRequest) returns (RollbackResponse) {
|
||||
};
|
||||
// Allocate IDs for incomplete keys (useful for referencing an entity before
|
||||
// it is inserted).
|
||||
rpc AllocateIds(AllocateIdsRequest) returns (AllocateIdsResponse) {
|
||||
};
|
||||
}
|
57
vendor/google.golang.org/cloud/internal/testutil/context.go
generated
vendored
Normal file
57
vendor/google.golang.org/cloud/internal/testutil/context.go
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2014 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Package testutil contains helper functions for writing tests.
|
||||
package testutil
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/oauth2"
|
||||
"golang.org/x/oauth2/google"
|
||||
"google.golang.org/cloud"
|
||||
)
|
||||
|
||||
const (
|
||||
envProjID = "GCLOUD_TESTS_GOLANG_PROJECT_ID"
|
||||
envPrivateKey = "GCLOUD_TESTS_GOLANG_KEY"
|
||||
)
|
||||
|
||||
func Context(scopes ...string) context.Context {
|
||||
key, projID := os.Getenv(envPrivateKey), os.Getenv(envProjID)
|
||||
if key == "" || projID == "" {
|
||||
log.Fatal("GCLOUD_TESTS_GOLANG_KEY and GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
|
||||
}
|
||||
jsonKey, err := ioutil.ReadFile(key)
|
||||
if err != nil {
|
||||
log.Fatalf("Cannot read the JSON key file, err: %v", err)
|
||||
}
|
||||
conf, err := google.JWTConfigFromJSON(jsonKey, scopes...)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return cloud.NewContext(projID, conf.Client(oauth2.NoContext))
|
||||
}
|
||||
|
||||
func NoAuthContext() context.Context {
|
||||
projID := os.Getenv(envProjID)
|
||||
if projID == "" {
|
||||
log.Fatal("GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
|
||||
}
|
||||
return cloud.NewContext(projID, &http.Client{Transport: http.DefaultTransport})
|
||||
}
|
BIN
vendor/google.golang.org/cloud/key.json.enc
generated
vendored
Normal file
BIN
vendor/google.golang.org/cloud/key.json.enc
generated
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user