mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	Add Kubernetes auth providers (#2147)
* Import auth providers for K8s * Vendor updates for K8s auth providers * Remove Azure since it is not compiling * Update vendor to remove Azure dependencies
This commit is contained in:
		
				
					committed by
					
						 Miek Gieben
						Miek Gieben
					
				
			
			
				
	
			
			
			
						parent
						
							fb971ffff3
						
					
				
				
					commit
					1018a8267a
				
			
							
								
								
									
										25
									
								
								vendor/cloud.google.com/go/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/cloud.google.com/go/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| sudo: false | ||||
| language: go | ||||
| go: | ||||
| - 1.6.x | ||||
| - 1.7.x | ||||
| - 1.8.x | ||||
| - 1.9.x | ||||
| - 1.10.x | ||||
| - 1.11.x | ||||
| install: | ||||
| - go get -v cloud.google.com/go/... | ||||
| script: | ||||
| - openssl aes-256-cbc -K $encrypted_a8b3f4fc85f4_key -iv $encrypted_a8b3f4fc85f4_iv -in keys.tar.enc -out keys.tar -d | ||||
| - tar xvf keys.tar | ||||
| - GCLOUD_TESTS_GOLANG_PROJECT_ID="dulcet-port-762" | ||||
|   GCLOUD_TESTS_GOLANG_KEY="$(pwd)/dulcet-port-762-key.json" | ||||
|   GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID="gcloud-golang-firestore-tests" | ||||
|   GCLOUD_TESTS_GOLANG_FIRESTORE_KEY="$(pwd)/gcloud-golang-firestore-tests-key.json" | ||||
|   GCLOUD_TESTS_GOLANG_KEYRING="projects/dulcet-port-762/locations/us/keyRings/go-integration-test" | ||||
|   GCLOUD_TESTS_GOLANG_ENABLE_REPLAY=yes | ||||
|   travis_wait ./run-tests.sh $TRAVIS_COMMIT | ||||
| env: | ||||
|   matrix: | ||||
|     # The GCLOUD_TESTS_API_KEY environment variable. | ||||
|     secure: VdldogUOoubQ60LhuHJ+g/aJoBiujkSkWEWl79Zb8cvQorcQbxISS+JsOOp4QkUOU4WwaHAm8/3pIH1QMWOR6O78DaLmDKi5Q4RpkVdCpUXy+OAfQaZIcBsispMrjxLXnqFjo9ELnrArfjoeCTzaX0QTCfwQwVmigC8rR30JBKI= | ||||
							
								
								
									
										15
									
								
								vendor/cloud.google.com/go/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								vendor/cloud.google.com/go/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| # 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. | ||||
|  | ||||
| Filippo Valsorda <hi@filippo.io> | ||||
| Google Inc. | ||||
| Ingo Oeser <nightlyone@googlemail.com> | ||||
| Palm Stone Games, Inc. | ||||
| Paweł Knap <pawelknap88@gmail.com> | ||||
| Péter Szilágyi <peterke@gmail.com> | ||||
| Tyler Treat <ttreat31@gmail.com> | ||||
							
								
								
									
										915
									
								
								vendor/cloud.google.com/go/CHANGES.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										915
									
								
								vendor/cloud.google.com/go/CHANGES.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,915 @@ | ||||
| # Changes | ||||
|  | ||||
| ## v0.28.0 | ||||
|  | ||||
| - bigtable: | ||||
|   - Emulator returns Unimplemented for snapshot RPCs. | ||||
| - bigquery: | ||||
|   - Support zero-length repeated, nested fields. | ||||
| - cloud assets: | ||||
|   - Add v1beta client. | ||||
| - datastore: | ||||
|   - Don't nil out transaction ID on retry. | ||||
| - firestore: | ||||
|   - BREAKING CHANGE: When watching a query with Query.Snapshots, QuerySnapshotIterator.Next | ||||
|   returns a QuerySnapshot which contains read time, result size, change list and the DocumentIterator | ||||
|   (previously, QuerySnapshotIterator.Next returned just the DocumentIterator). See: https://godoc.org/cloud.google.com/go/firestore#Query.Snapshots. | ||||
|   - Add array-contains operator. | ||||
| - IAM: | ||||
|   - Add iam/credentials/apiv1 client. | ||||
| - pubsub: | ||||
|   - Canceling the context passed to Subscription.Receive causes Receive to return when | ||||
|   processing finishes on all messages currently in progress, even if new messages are arriving. | ||||
| - redis: | ||||
|   - Add redis/apiv1 client. | ||||
| - storage: | ||||
|   - Add Reader.Attrs. | ||||
|   - Deprecate several Reader getter methods: please use Reader.Attrs for these instead. | ||||
|   - Add ObjectHandle.Bucket and ObjectHandle.Object methods. | ||||
|  | ||||
| ## v0.27.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - Allow modification of encryption configuration and partitioning options to a table via the Update call. | ||||
|   - Add a SchemaFromJSON function that converts a JSON table schema. | ||||
| - bigtable: | ||||
|   - Restore cbt count functionality. | ||||
| - containeranalysis: | ||||
|   - Add v1beta client. | ||||
| - spanner: | ||||
|   - Fix a case where an iterator might not be closed correctly. | ||||
| - storage: | ||||
|   - Add ServiceAccount method https://godoc.org/cloud.google.com/go/storage#Client.ServiceAccount. | ||||
|   - Add a method to Reader that returns the parsed value of the Last-Modified header. | ||||
|  | ||||
| ## v0.26.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - Support filtering listed jobs  by min/max creation time. | ||||
|   - Support data clustering (https://godoc.org/cloud.google.com/go/bigquery#Clustering). | ||||
|   - Include job creator email in Job struct. | ||||
| - bigtable: | ||||
|   - Add `RowSampleFilter`. | ||||
|   - emulator: BREAKING BEHAVIOR CHANGE: Regexps in row, family, column and value filters | ||||
|     must match the entire target string to succeed. Previously, the emulator was | ||||
|     succeeding on  partial matches. | ||||
|     NOTE: As of this release, this change only affects the emulator when run | ||||
|     from this repo (bigtable/cmd/emulator/cbtemulator.go). The version launched | ||||
|     from `gcloud` will be updated in a subsequent `gcloud` release. | ||||
| - dataproc: Add apiv1beta2 client. | ||||
| - datastore: Save non-nil pointer fields on omitempty. | ||||
| - logging: populate Entry.Trace from the HTTP X-Cloud-Trace-Context header. | ||||
| - logging/logadmin:  Support writer_identity and include_children. | ||||
| - pubsub: | ||||
|   - Support labels on topics and subscriptions. | ||||
|   - Support message storage policy for topics. | ||||
|   - Use the distribution of ack times to determine when to extend ack deadlines. | ||||
|     The only user-visible effect of this change should be that programs that | ||||
|     call only `Subscription.Receive` need no IAM permissions other than `Pub/Sub | ||||
|     Subscriber`. | ||||
| - storage: | ||||
|   - Support predefined ACLs. | ||||
|   - Support additional ACL fields other than Entity and Role. | ||||
|   - Support bucket websites. | ||||
|   - Support bucket logging. | ||||
|  | ||||
|  | ||||
| ## v0.25.0 | ||||
|  | ||||
| - Added [Code of Conduct](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CODE_OF_CONDUCT.md) | ||||
| - bigtable: | ||||
|   - cbt: Support a GC policy of "never". | ||||
| - errorreporting: | ||||
|   - Support User. | ||||
|   - Close now calls Flush. | ||||
|   - Use OnError (previously ignored). | ||||
|   - Pass through the RPC error as-is to OnError. | ||||
| - httpreplay: A tool for recording and replaying HTTP requests | ||||
|   (for the bigquery and storage clients in this repo). | ||||
| - kms: v1 client added | ||||
| - logging: add SourceLocation to Entry. | ||||
| - storage: improve CRC checking on read. | ||||
|  | ||||
| ## v0.24.0 | ||||
|  | ||||
| - bigquery: Support for the NUMERIC type. | ||||
| - bigtable: | ||||
|   - cbt: Optionally specify columns for read/lookup | ||||
|   - Support instance-level administration. | ||||
| - oslogin: New client for the OS Login API. | ||||
| - pubsub: | ||||
|   - The package is now stable. There will be no further breaking changes. | ||||
|   - Internal changes to improve Subscription.Receive behavior. | ||||
| - storage: Support updating bucket lifecycle config. | ||||
| - spanner: Support struct-typed parameter bindings. | ||||
| - texttospeech: New client for the Text-to-Speech API. | ||||
|  | ||||
| ## v0.23.0 | ||||
|  | ||||
| - bigquery: Add DDL stats to query statistics. | ||||
| - bigtable: | ||||
|   - cbt: Add cells-per-column limit for row lookup. | ||||
|   - cbt: Make it possible to combine read filters. | ||||
| - dlp: v2beta2 client removed. Use the v2 client instead. | ||||
| - firestore, spanner: Fix compilation errors due to protobuf changes. | ||||
|  | ||||
| ## v0.22.0 | ||||
|  | ||||
| - bigtable: | ||||
|   - cbt: Support cells per column limit for row read. | ||||
|   - bttest: Correctly handle empty RowSet. | ||||
|   - Fix ReadModifyWrite operation in emulator. | ||||
|   - Fix API path in GetCluster. | ||||
|  | ||||
| - bigquery: | ||||
|   - BEHAVIOR CHANGE: Retry on 503 status code. | ||||
|   - Add dataset.DeleteWithContents. | ||||
|   - Add SchemaUpdateOptions for query jobs. | ||||
|   - Add Timeline to QueryStatistics. | ||||
|   - Add more stats to ExplainQueryStage. | ||||
|   - Support Parquet data format. | ||||
|  | ||||
| - datastore: | ||||
|   - Support omitempty for times. | ||||
|  | ||||
| - dlp: | ||||
|   - **BREAKING CHANGE:** Remove v1beta1 client. Please migrate to the v2 client, | ||||
|   which is now out of beta. | ||||
|   - Add v2 client. | ||||
|  | ||||
| - firestore: | ||||
|   - BEHAVIOR CHANGE: Treat set({}, MergeAll) as valid. | ||||
|  | ||||
| - iam: | ||||
|   - Support JWT signing via SignJwt callopt. | ||||
|  | ||||
| - profiler: | ||||
|   - BEHAVIOR CHANGE: PollForSerialOutput returns an error when context.Done. | ||||
|   - BEHAVIOR CHANGE: Increase the initial backoff to 1 minute. | ||||
|   - Avoid returning empty serial port output. | ||||
|  | ||||
| - pubsub: | ||||
|   - BEHAVIOR CHANGE: Don't backoff during next retryable error once stream is healthy. | ||||
|   - BEHAVIOR CHANGE: Don't backoff on EOF. | ||||
|   - pstest: Support Acknowledge and ModifyAckDeadline RPCs. | ||||
|  | ||||
| - redis: | ||||
|   - Add v1 beta Redis client. | ||||
|  | ||||
| - spanner: | ||||
|   - Support SessionLabels. | ||||
|  | ||||
| - speech: | ||||
|   - Add api v1 beta1 client. | ||||
|  | ||||
| - storage: | ||||
|   - BEHAVIOR CHANGE: Retry reads when retryable error occurs. | ||||
|   - Fix delete of object in requester-pays bucket. | ||||
|   - Support KMS integration. | ||||
|  | ||||
| ## v0.21.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - Add OpenCensus tracing. | ||||
|  | ||||
| - firestore: | ||||
|   - **BREAKING CHANGE:** If a document does not exist, return a DocumentSnapshot | ||||
|     whose Exists method returns false. DocumentRef.Get and Transaction.Get | ||||
|     return the non-nil DocumentSnapshot in addition to a NotFound error. | ||||
|     **DocumentRef.GetAll and Transaction.GetAll return a non-nil | ||||
|     DocumentSnapshot instead of nil.** | ||||
|   - Add DocumentIterator.Stop. **Call Stop whenever you are done with a | ||||
|     DocumentIterator.** | ||||
|   - Added Query.Snapshots and DocumentRef.Snapshots, which provide realtime | ||||
|     notification of updates. See https://cloud.google.com/firestore/docs/query-data/listen. | ||||
|   - Canceling an RPC now always returns a grpc.Status with codes.Canceled. | ||||
|  | ||||
| - spanner: | ||||
|   - Add `CommitTimestamp`, which supports inserting the commit timestamp of a | ||||
|     transaction into a column. | ||||
|  | ||||
| ## v0.20.0 | ||||
|  | ||||
| - bigquery: Support SchemaUpdateOptions for load jobs. | ||||
|  | ||||
| - bigtable: | ||||
|   - Add SampleRowKeys. | ||||
|   - cbt: Support union, intersection GCPolicy. | ||||
|   - Retry admin RPCS. | ||||
|   - Add trace spans to retries. | ||||
|  | ||||
| - datastore: Add OpenCensus tracing. | ||||
|  | ||||
| - firestore: | ||||
|   - Fix queries involving Null and NaN. | ||||
|   - Allow Timestamp protobuffers for time values. | ||||
|  | ||||
| - logging: Add a WriteTimeout option. | ||||
|  | ||||
| - spanner: Support Batch API. | ||||
|  | ||||
| - storage: Add OpenCensus tracing. | ||||
|  | ||||
| ## v0.19.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - Support customer-managed encryption keys. | ||||
|  | ||||
| - bigtable: | ||||
|   - Improved emulator support. | ||||
|   - Support GetCluster. | ||||
|  | ||||
| - datastore: | ||||
|   - Add general mutations. | ||||
|   - Support pointer struct fields. | ||||
|   - Support transaction options. | ||||
|  | ||||
| - firestore: | ||||
|   - Add Transaction.GetAll. | ||||
|   - Support document cursors. | ||||
|  | ||||
| - logging: | ||||
|   - Support concurrent RPCs to the service. | ||||
|   - Support per-entry resources. | ||||
|  | ||||
| - profiler: | ||||
|   - Add config options to disable heap and thread profiling. | ||||
|   - Read the project ID from $GOOGLE_CLOUD_PROJECT when it's set. | ||||
|  | ||||
| - pubsub: | ||||
|   - BEHAVIOR CHANGE: Release flow control after ack/nack (instead of after the | ||||
|     callback returns). | ||||
|   - Add SubscriptionInProject. | ||||
|   - Add OpenCensus instrumentation for streaming pull. | ||||
|  | ||||
| - storage: | ||||
|   - Support CORS. | ||||
|  | ||||
| ## v0.18.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - Marked stable. | ||||
|   - Schema inference of nullable fields supported. | ||||
|   - Added TimePartitioning to QueryConfig. | ||||
|  | ||||
| - firestore: Data provided to DocumentRef.Set with a Merge option can contain | ||||
|   Delete sentinels. | ||||
|  | ||||
| - logging: Clients can accept parent resources other than projects. | ||||
|  | ||||
| - pubsub: | ||||
|   - pubsub/pstest: A lighweight fake for pubsub. Experimental; feedback welcome. | ||||
|   - Support updating more subscription metadata: AckDeadline, | ||||
|     RetainAckedMessages and RetentionDuration. | ||||
|  | ||||
| - oslogin/apiv1beta: New client for the Cloud OS Login API. | ||||
|  | ||||
| - rpcreplay: A package for recording and replaying gRPC traffic. | ||||
|  | ||||
| - spanner: | ||||
|   - Add a ReadWithOptions that supports a row limit, as well as an index. | ||||
|   - Support query plan and execution statistics. | ||||
|   - Added [OpenCensus](http://opencensus.io) support. | ||||
|  | ||||
| - storage: Clarify checksum validation for gzipped files (it is not validated | ||||
|   when the file is served uncompressed). | ||||
|  | ||||
|  | ||||
| ## v0.17.0 | ||||
|  | ||||
| - firestore BREAKING CHANGES: | ||||
|   - Remove UpdateMap and UpdateStruct; rename UpdatePaths to Update. | ||||
|     Change | ||||
|         `docref.UpdateMap(ctx, map[string]interface{}{"a.b", 1})` | ||||
|     to | ||||
|         `docref.Update(ctx, []firestore.Update{{Path: "a.b", Value: 1}})` | ||||
|  | ||||
|     Change | ||||
|         `docref.UpdateStruct(ctx, []string{"Field"}, aStruct)` | ||||
|     to | ||||
|         `docref.Update(ctx, []firestore.Update{{Path: "Field", Value: aStruct.Field}})` | ||||
|   - Rename MergePaths to Merge; require args to be FieldPaths | ||||
|   - A value stored as an integer can be read into a floating-point field, and vice versa. | ||||
| - bigtable/cmd/cbt: | ||||
|   - Support deleting a column. | ||||
|   - Add regex option for row read. | ||||
| - spanner: Mark stable. | ||||
| - storage: | ||||
|   - Add Reader.ContentEncoding method. | ||||
|   - Fix handling of SignedURL headers. | ||||
| - bigquery: | ||||
|   - If Uploader.Put is called with no rows, it returns nil without making a | ||||
|     call. | ||||
|   - Schema inference supports the "nullable" option in struct tags for | ||||
|     non-required fields. | ||||
|   - TimePartitioning supports "Field". | ||||
|  | ||||
|  | ||||
| ## v0.16.0 | ||||
|  | ||||
| - Other bigquery changes: | ||||
|   - `JobIterator.Next` returns `*Job`; removed `JobInfo` (BREAKING CHANGE). | ||||
|   - UseStandardSQL is deprecated; set UseLegacySQL to true if you need | ||||
|     Legacy SQL. | ||||
|   - Uploader.Put will generate a random insert ID if you do not provide one. | ||||
|   - Support time partitioning for load jobs. | ||||
|   - Support dry-run queries. | ||||
|   - A `Job` remembers its last retrieved status. | ||||
|   - Support retrieving job configuration. | ||||
|   - Support labels for jobs and tables. | ||||
|   - Support dataset access lists. | ||||
|   - Improve support for external data sources, including data from Bigtable and | ||||
|     Google Sheets, and tables with external data. | ||||
|   - Support updating a table's view configuration. | ||||
|   - Fix uploading civil times with nanoseconds. | ||||
|  | ||||
| - storage: | ||||
|   - Support PubSub notifications. | ||||
|   - Support Requester Pays buckets. | ||||
|  | ||||
| - profiler: Support goroutine and mutex profile types. | ||||
|  | ||||
| ## v0.15.0 | ||||
|  | ||||
| - firestore: beta release. See the | ||||
|   [announcement](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html). | ||||
|  | ||||
| - errorreporting: The existing package has been redesigned. | ||||
|  | ||||
| - errors: This package has been removed. Use errorreporting. | ||||
|  | ||||
|  | ||||
| ## v0.14.0 | ||||
|  | ||||
| - bigquery BREAKING CHANGES: | ||||
|   - Standard SQL is the default for queries and views. | ||||
|   - `Table.Create` takes `TableMetadata` as a second argument, instead of | ||||
|     options. | ||||
|   - `Dataset.Create` takes `DatasetMetadata` as a second argument. | ||||
|   - `DatasetMetadata` field `ID` renamed to `FullID` | ||||
|   - `TableMetadata` field `ID` renamed to `FullID` | ||||
|  | ||||
| - Other bigquery changes: | ||||
|   - The client will append a random suffix to a provided job ID if you set | ||||
|     `AddJobIDSuffix` to true in a job config. | ||||
|   - Listing jobs is supported. | ||||
|   - Better retry logic. | ||||
|  | ||||
| - vision, language, speech: clients are now stable | ||||
|  | ||||
| - monitoring: client is now beta | ||||
|  | ||||
| - profiler: | ||||
|   - Rename InstanceName to Instance, ZoneName to Zone | ||||
|   - Auto-detect service name and version on AppEngine. | ||||
|  | ||||
| ## v0.13.0 | ||||
|  | ||||
| - bigquery: UseLegacySQL options for CreateTable and QueryConfig. Use these | ||||
|   options to continue using Legacy SQL after the client switches its default | ||||
|   to Standard SQL. | ||||
|  | ||||
| - bigquery: Support for updating dataset labels. | ||||
|  | ||||
| - bigquery: Set DatasetIterator.ProjectID to list datasets in a project other | ||||
|   than the client's. DatasetsInProject is no longer needed and is deprecated. | ||||
|  | ||||
| - bigtable: Fail ListInstances when any zones fail. | ||||
|  | ||||
| - spanner: support decoding of slices of basic types (e.g. []string, []int64, | ||||
|   etc.) | ||||
|  | ||||
| - logging/logadmin: UpdateSink no longer creates a sink if it is missing | ||||
|   (actually a change to the underlying service, not the client) | ||||
|  | ||||
| - profiler: Service and ServiceVersion replace Target in Config. | ||||
|  | ||||
| ## v0.12.0 | ||||
|  | ||||
| - pubsub: Subscription.Receive now uses streaming pull. | ||||
|  | ||||
| - pubsub: add Client.TopicInProject to access topics in a different project | ||||
|   than the client. | ||||
|  | ||||
| - errors: renamed errorreporting. The errors package will be removed shortly. | ||||
|  | ||||
| - datastore: improved retry behavior. | ||||
|  | ||||
| - bigquery: support updates to dataset metadata, with etags. | ||||
|  | ||||
| - bigquery: add etag support to Table.Update (BREAKING: etag argument added). | ||||
|  | ||||
| - bigquery: generate all job IDs on the client. | ||||
|  | ||||
| - storage: support bucket lifecycle configurations. | ||||
|  | ||||
|  | ||||
| ## v0.11.0 | ||||
|  | ||||
| - Clients for spanner, pubsub and video are now in beta. | ||||
|  | ||||
| - New client for DLP. | ||||
|  | ||||
| - spanner: performance and testing improvements. | ||||
|  | ||||
| - storage: requester-pays buckets are supported. | ||||
|  | ||||
| - storage, profiler, bigtable, bigquery: bug fixes and other minor improvements. | ||||
|  | ||||
| - pubsub: bug fixes and other minor improvements | ||||
|  | ||||
| ## v0.10.0 | ||||
|  | ||||
| - pubsub: Subscription.ModifyPushConfig replaced with Subscription.Update. | ||||
|  | ||||
| - pubsub: Subscription.Receive now runs concurrently for higher throughput. | ||||
|  | ||||
| - vision: cloud.google.com/go/vision is deprecated. Use | ||||
| cloud.google.com/go/vision/apiv1 instead. | ||||
|  | ||||
| - translation: now stable. | ||||
|  | ||||
| - trace: several changes to the surface. See the link below. | ||||
|  | ||||
| ### Code changes required from v0.9.0 | ||||
|  | ||||
| - pubsub: Replace | ||||
|  | ||||
|     ``` | ||||
|     sub.ModifyPushConfig(ctx, pubsub.PushConfig{Endpoint: "https://example.com/push"}) | ||||
|     ``` | ||||
|  | ||||
|   with | ||||
|  | ||||
|     ``` | ||||
|     sub.Update(ctx, pubsub.SubscriptionConfigToUpdate{ | ||||
|         PushConfig: &pubsub.PushConfig{Endpoint: "https://example.com/push"}, | ||||
|     }) | ||||
|     ``` | ||||
|  | ||||
| - trace: traceGRPCServerInterceptor will be provided from *trace.Client. | ||||
| Given an initialized `*trace.Client` named `tc`, instead of | ||||
|  | ||||
|     ``` | ||||
|     s := grpc.NewServer(grpc.UnaryInterceptor(trace.GRPCServerInterceptor(tc))) | ||||
|     ``` | ||||
|  | ||||
|   write | ||||
|  | ||||
|     ``` | ||||
|     s := grpc.NewServer(grpc.UnaryInterceptor(tc.GRPCServerInterceptor())) | ||||
|     ``` | ||||
|  | ||||
| - trace trace.GRPCClientInterceptor will also provided from *trace.Client. | ||||
| Instead of | ||||
|  | ||||
|     ``` | ||||
|     conn, err := grpc.Dial(srv.Addr, grpc.WithUnaryInterceptor(trace.GRPCClientInterceptor())) | ||||
|     ``` | ||||
|  | ||||
|   write | ||||
|  | ||||
|     ``` | ||||
|     conn, err := grpc.Dial(srv.Addr, grpc.WithUnaryInterceptor(tc.GRPCClientInterceptor())) | ||||
|     ``` | ||||
|  | ||||
| - trace: We removed the deprecated `trace.EnableGRPCTracing`. Use the gRPC | ||||
| interceptor as a dial option as shown below when initializing Cloud package | ||||
| clients: | ||||
|  | ||||
|     ``` | ||||
|     c, err := pubsub.NewClient(ctx, "project-id", option.WithGRPCDialOption(grpc.WithUnaryInterceptor(tc.GRPCClientInterceptor()))) | ||||
|     if err != nil { | ||||
|         ... | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
|  | ||||
| ## v0.9.0 | ||||
|  | ||||
| - Breaking changes to some autogenerated clients. | ||||
| - rpcreplay package added. | ||||
|  | ||||
| ## v0.8.0 | ||||
|  | ||||
| - profiler package added. | ||||
| - storage: | ||||
|   - Retry Objects.Insert call. | ||||
|   - Add ProgressFunc to WRiter. | ||||
| - pubsub: breaking changes: | ||||
|   - Publish is now asynchronous ([announcement](https://groups.google.com/d/topic/google-api-go-announce/aaqRDIQ3rvU/discussion)). | ||||
|   - Subscription.Pull replaced by Subscription.Receive, which takes a callback ([announcement](https://groups.google.com/d/topic/google-api-go-announce/8pt6oetAdKc/discussion)). | ||||
|   - Message.Done replaced with Message.Ack and Message.Nack. | ||||
|  | ||||
| ## v0.7.0 | ||||
|  | ||||
| - Release of a client library for Spanner. See | ||||
| the | ||||
| [blog | ||||
| post](https://cloudplatform.googleblog.com/2017/02/introducing-Cloud-Spanner-a-global-database-service-for-mission-critical-applications.html). | ||||
| Note that although the Spanner service is beta, the Go client library is alpha. | ||||
|  | ||||
| ## v0.6.0 | ||||
|  | ||||
| - Beta release of BigQuery, DataStore, Logging and Storage. See the | ||||
| [blog post](https://cloudplatform.googleblog.com/2016/12/announcing-new-google-cloud-client.html). | ||||
|  | ||||
| - bigquery: | ||||
|   - struct support. Read a row directly into a struct with | ||||
| `RowIterator.Next`, and upload a row directly from a struct with `Uploader.Put`. | ||||
| You can also use field tags. See the [package documentation][cloud-bigquery-ref] | ||||
| for details. | ||||
|  | ||||
|   - The `ValueList` type was removed. It is no longer necessary. Instead of | ||||
|    ```go | ||||
|    var v ValueList | ||||
|    ... it.Next(&v) .. | ||||
|    ``` | ||||
|    use | ||||
|  | ||||
|    ```go | ||||
|    var v []Value | ||||
|    ... it.Next(&v) ... | ||||
|    ``` | ||||
|  | ||||
|   - Previously, repeatedly calling `RowIterator.Next` on the same `[]Value` or | ||||
|   `ValueList` would append to the slice. Now each call resets the size to zero first. | ||||
|  | ||||
|   - Schema inference will infer the SQL type BYTES for a struct field of | ||||
|   type []byte. Previously it inferred STRING. | ||||
|  | ||||
|   - The types `uint`, `uint64` and `uintptr` are no longer supported in schema | ||||
|   inference. BigQuery's integer type is INT64, and those types may hold values | ||||
|   that are not correctly represented in a 64-bit signed integer. | ||||
|  | ||||
| ## v0.5.0 | ||||
|  | ||||
| - bigquery: | ||||
|   - The SQL types DATE, TIME and DATETIME are now supported. They correspond to | ||||
|     the `Date`, `Time` and `DateTime` types in the new `cloud.google.com/go/civil` | ||||
|     package. | ||||
|   - Support for query parameters. | ||||
|   - Support deleting a dataset. | ||||
|   - Values from INTEGER columns will now be returned as int64, not int. This | ||||
|     will avoid errors arising from large values on 32-bit systems. | ||||
| - datastore: | ||||
|   - Nested Go structs encoded as Entity values, instead of a | ||||
| flattened list of the embedded struct's fields. This means that you may now have twice-nested slices, eg. | ||||
|     ```go | ||||
|     type State struct { | ||||
|       Cities  []struct{ | ||||
|         Populations []int | ||||
|       } | ||||
|     } | ||||
|     ``` | ||||
|     See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/79jtrdeuJAg) for | ||||
| more details. | ||||
|   - Contexts no longer hold namespaces; instead you must set a key's namespace | ||||
|     explicitly. Also, key functions have been changed and renamed. | ||||
|   - The WithNamespace function has been removed. To specify a namespace in a Query, use the Query.Namespace method: | ||||
|      ```go | ||||
|      q := datastore.NewQuery("Kind").Namespace("ns") | ||||
|      ``` | ||||
|   - All the fields of Key are exported. That means you can construct any Key with a struct literal: | ||||
|      ```go | ||||
|      k := &Key{Kind: "Kind",  ID: 37, Namespace: "ns"} | ||||
|      ``` | ||||
|   - As a result of the above, the Key methods Kind, ID, d.Name, Parent, SetParent and Namespace have been removed. | ||||
|   - `NewIncompleteKey` has been removed, replaced by `IncompleteKey`. Replace | ||||
|       ```go | ||||
|       NewIncompleteKey(ctx, kind, parent) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       IncompleteKey(kind, parent) | ||||
|       ``` | ||||
|       and if you do use namespaces, make sure you set the namespace on the returned key. | ||||
|   - `NewKey` has been removed, replaced by `NameKey` and `IDKey`. Replace | ||||
|       ```go | ||||
|       NewKey(ctx, kind, name, 0, parent) | ||||
|       NewKey(ctx, kind, "", id, parent) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       NameKey(kind, name, parent) | ||||
|       IDKey(kind, id, parent) | ||||
|       ``` | ||||
|       and if you do use namespaces, make sure you set the namespace on the returned key. | ||||
|   - The `Done` variable has been removed. Replace `datastore.Done` with `iterator.Done`, from the package `google.golang.org/api/iterator`. | ||||
|   - The `Client.Close` method will have a return type of error. It will return the result of closing the underlying gRPC connection. | ||||
|   - See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/hqXtM_4Ix-0) for | ||||
| more details. | ||||
|  | ||||
| ## v0.4.0 | ||||
|  | ||||
| - bigquery: | ||||
|   -`NewGCSReference` is now a function, not a method on `Client`. | ||||
|   - `Table.LoaderFrom` now accepts a `ReaderSource`, enabling | ||||
|      loading data into a table from a file or any `io.Reader`. | ||||
|   * Client.Table and Client.OpenTable have been removed. | ||||
|       Replace | ||||
|       ```go | ||||
|       client.OpenTable("project", "dataset", "table") | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       client.DatasetInProject("project", "dataset").Table("table") | ||||
|       ``` | ||||
|  | ||||
|   * Client.CreateTable has been removed. | ||||
|       Replace | ||||
|       ```go | ||||
|       client.CreateTable(ctx, "project", "dataset", "table") | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       client.DatasetInProject("project", "dataset").Table("table").Create(ctx) | ||||
|       ``` | ||||
|  | ||||
|   * Dataset.ListTables have been replaced with Dataset.Tables. | ||||
|       Replace | ||||
|       ```go | ||||
|       tables, err := ds.ListTables(ctx) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       it := ds.Tables(ctx) | ||||
|       for { | ||||
|           table, err := it.Next() | ||||
|           if err == iterator.Done { | ||||
|               break | ||||
|           } | ||||
|           if err != nil { | ||||
|               // TODO: Handle error. | ||||
|           } | ||||
|           // TODO: use table. | ||||
|       } | ||||
|       ``` | ||||
|  | ||||
|   * Client.Read has been replaced with Job.Read, Table.Read and Query.Read. | ||||
|       Replace | ||||
|       ```go | ||||
|       it, err := client.Read(ctx, job) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       it, err := job.Read(ctx) | ||||
|       ``` | ||||
|     and similarly for reading from tables or queries. | ||||
|  | ||||
|   * The iterator returned from the Read methods is now named RowIterator. Its | ||||
|     behavior is closer to the other iterators in these libraries. It no longer | ||||
|     supports the Schema method; see the next item. | ||||
|       Replace | ||||
|       ```go | ||||
|       for it.Next(ctx) { | ||||
|           var vals ValueList | ||||
|           if err := it.Get(&vals); err != nil { | ||||
|               // TODO: Handle error. | ||||
|           } | ||||
|           // TODO: use vals. | ||||
|       } | ||||
|       if err := it.Err(); err != nil { | ||||
|           // TODO: Handle error. | ||||
|       } | ||||
|       ``` | ||||
|       with | ||||
|       ``` | ||||
|       for { | ||||
|           var vals ValueList | ||||
|           err := it.Next(&vals) | ||||
|           if err == iterator.Done { | ||||
|               break | ||||
|           } | ||||
|           if err != nil { | ||||
|               // TODO: Handle error. | ||||
|           } | ||||
|           // TODO: use vals. | ||||
|       } | ||||
|       ``` | ||||
|       Instead of the `RecordsPerRequest(n)` option, write | ||||
|       ```go | ||||
|       it.PageInfo().MaxSize = n | ||||
|       ``` | ||||
|       Instead of the `StartIndex(i)` option, write | ||||
|       ```go | ||||
|       it.StartIndex = i | ||||
|       ``` | ||||
|  | ||||
|   * ValueLoader.Load now takes a Schema in addition to a slice of Values. | ||||
|       Replace | ||||
|       ```go | ||||
|       func (vl *myValueLoader) Load(v []bigquery.Value) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       func (vl *myValueLoader) Load(v []bigquery.Value, s bigquery.Schema) | ||||
|       ``` | ||||
|  | ||||
|  | ||||
|   * Table.Patch is replace by Table.Update. | ||||
|       Replace | ||||
|       ```go | ||||
|       p := table.Patch() | ||||
|       p.Description("new description") | ||||
|       metadata, err := p.Apply(ctx) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       metadata, err := table.Update(ctx, bigquery.TableMetadataToUpdate{ | ||||
|           Description: "new description", | ||||
|       }) | ||||
|       ``` | ||||
|  | ||||
|   * Client.Copy is replaced by separate methods for each of its four functions. | ||||
|     All options have been replaced by struct fields. | ||||
|  | ||||
|     * To load data from Google Cloud Storage into a table, use Table.LoaderFrom. | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       client.Copy(ctx, table, gcsRef) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       table.LoaderFrom(gcsRef).Run(ctx) | ||||
|       ``` | ||||
|       Instead of passing options to Copy, set fields on the Loader: | ||||
|       ```go | ||||
|       loader := table.LoaderFrom(gcsRef) | ||||
|       loader.WriteDisposition = bigquery.WriteTruncate | ||||
|       ``` | ||||
|  | ||||
|     * To extract data from a table into Google Cloud Storage, use | ||||
|       Table.ExtractorTo. Set fields on the returned Extractor instead of | ||||
|       passing options. | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       client.Copy(ctx, gcsRef, table) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       table.ExtractorTo(gcsRef).Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|     * To copy data into a table from one or more other tables, use | ||||
|       Table.CopierFrom. Set fields on the returned Copier instead of passing options. | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       client.Copy(ctx, dstTable, srcTable) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       dst.Table.CopierFrom(srcTable).Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|     * To start a query job, create a Query and call its Run method. Set fields | ||||
|     on the query instead of passing options. | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       client.Copy(ctx, table, query) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       query.Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|   * Table.NewUploader has been renamed to Table.Uploader. Instead of options, | ||||
|     configure an Uploader by setting its fields. | ||||
|       Replace | ||||
|       ```go | ||||
|       u := table.NewUploader(bigquery.UploadIgnoreUnknownValues()) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       u := table.NewUploader(bigquery.UploadIgnoreUnknownValues()) | ||||
|       u.IgnoreUnknownValues = true | ||||
|       ``` | ||||
|  | ||||
| - pubsub: remove `pubsub.Done`. Use `iterator.Done` instead, where `iterator` is the package | ||||
| `google.golang.org/api/iterator`. | ||||
|  | ||||
| ## v0.3.0 | ||||
|  | ||||
| - storage: | ||||
|   * AdminClient replaced by methods on Client. | ||||
|       Replace | ||||
|       ```go | ||||
|       adminClient.CreateBucket(ctx, bucketName, attrs) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       client.Bucket(bucketName).Create(ctx, projectID, attrs) | ||||
|       ``` | ||||
|  | ||||
|   * BucketHandle.List replaced by BucketHandle.Objects. | ||||
|       Replace | ||||
|       ```go | ||||
|       for query != nil { | ||||
|           objs, err := bucket.List(d.ctx, query) | ||||
|           if err != nil { ... } | ||||
|           query = objs.Next | ||||
|           for _, obj := range objs.Results { | ||||
|               fmt.Println(obj) | ||||
|           } | ||||
|       } | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       iter := bucket.Objects(d.ctx, query) | ||||
|       for { | ||||
|           obj, err := iter.Next() | ||||
|           if err == iterator.Done { | ||||
|               break | ||||
|           } | ||||
|           if err != nil { ... } | ||||
|           fmt.Println(obj) | ||||
|       } | ||||
|       ``` | ||||
|       (The `iterator` package is at `google.golang.org/api/iterator`.) | ||||
|  | ||||
|       Replace `Query.Cursor` with `ObjectIterator.PageInfo().Token`. | ||||
|  | ||||
|       Replace `Query.MaxResults` with `ObjectIterator.PageInfo().MaxSize`. | ||||
|  | ||||
|  | ||||
|   * ObjectHandle.CopyTo replaced by ObjectHandle.CopierFrom. | ||||
|       Replace | ||||
|       ```go | ||||
|       attrs, err := src.CopyTo(ctx, dst, nil) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       attrs, err := dst.CopierFrom(src).Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       attrs, err := src.CopyTo(ctx, dst, &storage.ObjectAttrs{ContextType: "text/html"}) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       c := dst.CopierFrom(src) | ||||
|       c.ContextType = "text/html" | ||||
|       attrs, err := c.Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|   * ObjectHandle.ComposeFrom replaced by ObjectHandle.ComposerFrom. | ||||
|       Replace | ||||
|       ```go | ||||
|       attrs, err := dst.ComposeFrom(ctx, []*storage.ObjectHandle{src1, src2}, nil) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       attrs, err := dst.ComposerFrom(src1, src2).Run(ctx) | ||||
|       ``` | ||||
|  | ||||
|   * ObjectHandle.Update's ObjectAttrs argument replaced by ObjectAttrsToUpdate. | ||||
|       Replace | ||||
|       ```go | ||||
|       attrs, err := obj.Update(ctx, &storage.ObjectAttrs{ContextType: "text/html"}) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       attrs, err := obj.Update(ctx, storage.ObjectAttrsToUpdate{ContextType: "text/html"}) | ||||
|       ``` | ||||
|  | ||||
|   * ObjectHandle.WithConditions replaced by ObjectHandle.If. | ||||
|       Replace | ||||
|       ```go | ||||
|       obj.WithConditions(storage.Generation(gen), storage.IfMetaGenerationMatch(mgen)) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       obj.Generation(gen).If(storage.Conditions{MetagenerationMatch: mgen}) | ||||
|       ``` | ||||
|  | ||||
|       Replace | ||||
|       ```go | ||||
|       obj.WithConditions(storage.IfGenerationMatch(0)) | ||||
|       ``` | ||||
|       with | ||||
|       ```go | ||||
|       obj.If(storage.Conditions{DoesNotExist: true}) | ||||
|       ``` | ||||
|  | ||||
|   * `storage.Done` replaced by `iterator.Done` (from package `google.golang.org/api/iterator`). | ||||
|  | ||||
| - Package preview/logging deleted. Use logging instead. | ||||
|  | ||||
| ## v0.2.0 | ||||
|  | ||||
| - Logging client replaced with preview version (see below). | ||||
|  | ||||
| - New clients for some of Google's Machine Learning APIs: Vision, Speech, and | ||||
| Natural Language. | ||||
|  | ||||
| - Preview version of a new [Stackdriver Logging][cloud-logging] client in | ||||
| [`cloud.google.com/go/preview/logging`](https://godoc.org/cloud.google.com/go/preview/logging). | ||||
| This client uses gRPC as its transport layer, and supports log reading, sinks | ||||
| and metrics. It will replace the current client at `cloud.google.com/go/logging` shortly. | ||||
|  | ||||
|  | ||||
							
								
								
									
										44
									
								
								vendor/cloud.google.com/go/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/cloud.google.com/go/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| # Contributor Code of Conduct | ||||
|  | ||||
| As contributors and maintainers of this project, | ||||
| and in the interest of fostering an open and welcoming community, | ||||
| we pledge to respect all people who contribute through reporting issues, | ||||
| posting feature requests, updating documentation, | ||||
| submitting pull requests or patches, and other activities. | ||||
|  | ||||
| We are committed to making participation in this project | ||||
| a harassment-free experience for everyone, | ||||
| regardless of level of experience, gender, gender identity and expression, | ||||
| sexual orientation, disability, personal appearance, | ||||
| body size, race, ethnicity, age, religion, or nationality. | ||||
|  | ||||
| Examples of unacceptable behavior by participants include: | ||||
|  | ||||
| * The use of sexualized language or imagery | ||||
| * Personal attacks | ||||
| * Trolling or insulting/derogatory comments | ||||
| * Public or private harassment | ||||
| * Publishing other's private information, | ||||
| such as physical or electronic | ||||
| addresses, without explicit permission | ||||
| * Other unethical or unprofessional conduct. | ||||
|  | ||||
| Project maintainers have the right and responsibility to remove, edit, or reject | ||||
| comments, commits, code, wiki edits, issues, and other contributions | ||||
| that are not aligned to this Code of Conduct. | ||||
| By adopting this Code of Conduct, | ||||
| project maintainers commit themselves to fairly and consistently | ||||
| applying these principles to every aspect of managing this project. | ||||
| Project maintainers who do not follow or enforce the Code of Conduct | ||||
| may be permanently removed from the project team. | ||||
|  | ||||
| This code of conduct applies both within project spaces and in public spaces | ||||
| when an individual is representing the project or its community. | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior | ||||
| may be reported by opening an issue | ||||
| or contacting one or more of the project maintainers. | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, | ||||
| available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) | ||||
|  | ||||
							
								
								
									
										174
									
								
								vendor/cloud.google.com/go/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								vendor/cloud.google.com/go/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,174 @@ | ||||
| # Contributing | ||||
|  | ||||
| 1. Sign one of the contributor license agreements below. | ||||
| 1. `go get golang.org/x/review/git-codereview` to install the code reviewing tool. | ||||
|     1. You will need to ensure that your `GOBIN` directory (by default | ||||
|        `$GOPATH/bin`) is in your `PATH` so that git can find the command. | ||||
|     1. If you would like, you may want to set up aliases for git-codereview, | ||||
|        such that `git codereview change` becomes `git change`. See the | ||||
|        [godoc](https://godoc.org/golang.org/x/review/git-codereview) for details. | ||||
|     1. Should you run into issues with the git-codereview tool, please note | ||||
|        that all error messages will assume that you have set up these | ||||
|        aliases. | ||||
| 1. Get the cloud package by running `go get -d cloud.google.com/go`. | ||||
|     1. If you have already checked out the source, 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 sure your auth is configured correctly by visiting | ||||
|    https://code.googlesource.com, clicking "Generate Password", and following | ||||
|    the directions. | ||||
| 1. Make changes and create a change by running `git codereview change <name>`, | ||||
| provide a commit message, and use `git codereview mail` to create a Gerrit CL. | ||||
| 1. Keep amending to the change with `git codereview change` and mail as your receive | ||||
| feedback. Each new mailed amendment will create a new patch set for your change in Gerrit. | ||||
|  | ||||
| ## Integration Tests | ||||
|  | ||||
| In addition 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. | ||||
|  | ||||
| After creating a project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount). | ||||
| Ensure the project-level **Owner** | ||||
| [IAM role](console.cloud.google.com/iam-admin/iam/project) role is added to the | ||||
| service account. Alternatively, the account can be granted all of the following roles: | ||||
| - **Editor** | ||||
| - **Logs Configuration Writer** | ||||
| - **PubSub Admin** | ||||
|  | ||||
| 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. | ||||
|  | ||||
| Some packages require additional environment variables to be set: | ||||
|  | ||||
| - firestore | ||||
|   - **GCLOUD_TESTS_GOLANG_FIRESTORE_PROJECT_ID**: project ID for Firestore. | ||||
|   - **GCLOUD_TESTS_GOLANG_FIRESTORE_KEY**: The path to the JSON key file. | ||||
| - storage | ||||
|   - **GCLOUD_TESTS_GOLANG_KEYRING**: The full name of the keyring for the tests, in the | ||||
|     form "projects/P/locations/L/keyRings/R". | ||||
| - translate | ||||
|   - **GCLOUD_TESTS_API_KEY**: API key for using the Translate API. | ||||
| - profiler | ||||
|   - **GCLOUD_TESTS_GOLANG_ZONE**: Compute Engine zone. | ||||
|  | ||||
| Some packages can record the RPCs during integration tests to a file for | ||||
| subsequent replay. To record, pass the `-record` flag to `go test`. The | ||||
| recording will be saved to the _package_`.replay` file. To replay integration | ||||
| tests from a saved recording, the replay file must be present, the `-short` flag | ||||
| must be passed to `go test`, and the **GCLOUD_TESTS_GOLANG_ENABLE_REPLAY** | ||||
| environment variable must have a non-empty value. | ||||
|  | ||||
| Install the [gcloud command-line tool][gcloudcli] to your machine and use it | ||||
| to create some resources used in integration tests. | ||||
|  | ||||
| From the project's root directory: | ||||
|  | ||||
| ``` sh | ||||
| # 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 used in the datastore integration tests. | ||||
| $ gcloud preview datastore create-indexes datastore/testdata/index.yaml | ||||
|  | ||||
| # Create a Google Cloud storage bucket with the same name as your test project, | ||||
| # and with the Stackdriver Logging service account as owner, for the sink | ||||
| # integration tests in logging. | ||||
| $ gsutil mb gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID | ||||
| $ gsutil acl ch -g cloud-logs@google.com:O gs://$GCLOUD_TESTS_GOLANG_PROJECT_ID | ||||
|  | ||||
| # Create a PubSub topic for integration tests of storage notifications. | ||||
| $ gcloud beta pubsub topics create go-storage-notification-test | ||||
|  | ||||
| # Create a Spanner instance for the spanner integration tests. | ||||
| $ gcloud beta spanner instances create go-integration-test --config regional-us-central1 --nodes 1 --description 'Instance for go client test' | ||||
| # NOTE: Spanner instances are priced by the node-hour, so you may want to delete | ||||
| # the instance after testing with 'gcloud beta spanner instances delete'. | ||||
|  | ||||
| # For Storage integration tests: | ||||
| # Enable KMS for your project in the Cloud Console. | ||||
| # Create a KMS keyring, in the same location as the default location for your project's buckets. | ||||
| $ gcloud kms keyrings create MY_KEYRING --location MY_LOCATION | ||||
| # Create two keys in the keyring, named key1 and key2. | ||||
| $ gcloud kms keys create key1 --keyring MY_KEYRING --location MY_LOCATION --purpose encryption | ||||
| $ gcloud kms keys create key2 --keyring MY_KEYRING --location MY_LOCATION --purpose encryption | ||||
| # As mentioned above, set the GCLOUD_TESTS_GOLANG_KEYRING environment variable. | ||||
| $ export GCLOUD_TESTS_GOLANG_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/MY_LOCATION/keyRings/MY_KEYRING | ||||
| # Authorize Google Cloud Storage to encrypt and decrypt using key1. | ||||
| gsutil kms authorize -p $GCLOUD_TESTS_GOLANG_PROJECT_ID -k $GCLOUD_TESTS_GOLANG_KEYRING/cryptoKeys/key1 | ||||
| ``` | ||||
|  | ||||
| Once you've done the necessary setup, you can run the integration tests by running: | ||||
|  | ||||
| ``` sh | ||||
| $ go test -v cloud.google.com/go/... | ||||
| ``` | ||||
|  | ||||
| ## 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. | ||||
|  | ||||
| ## Contributor Code of Conduct | ||||
|  | ||||
| As contributors and maintainers of this project, | ||||
| and in the interest of fostering an open and welcoming community, | ||||
| we pledge to respect all people who contribute through reporting issues, | ||||
| posting feature requests, updating documentation, | ||||
| submitting pull requests or patches, and other activities. | ||||
|  | ||||
| We are committed to making participation in this project | ||||
| a harassment-free experience for everyone, | ||||
| regardless of level of experience, gender, gender identity and expression, | ||||
| sexual orientation, disability, personal appearance, | ||||
| body size, race, ethnicity, age, religion, or nationality. | ||||
|  | ||||
| Examples of unacceptable behavior by participants include: | ||||
|  | ||||
| * The use of sexualized language or imagery | ||||
| * Personal attacks | ||||
| * Trolling or insulting/derogatory comments | ||||
| * Public or private harassment | ||||
| * Publishing other's private information, | ||||
| such as physical or electronic | ||||
| addresses, without explicit permission | ||||
| * Other unethical or unprofessional conduct. | ||||
|  | ||||
| Project maintainers have the right and responsibility to remove, edit, or reject | ||||
| comments, commits, code, wiki edits, issues, and other contributions | ||||
| that are not aligned to this Code of Conduct. | ||||
| By adopting this Code of Conduct, | ||||
| project maintainers commit themselves to fairly and consistently | ||||
| applying these principles to every aspect of managing this project. | ||||
| Project maintainers who do not follow or enforce the Code of Conduct | ||||
| may be permanently removed from the project team. | ||||
|  | ||||
| This code of conduct applies both within project spaces and in public spaces | ||||
| when an individual is representing the project or its community. | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior | ||||
| may be reported by opening an issue | ||||
| or contacting one or more of the project maintainers. | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, | ||||
| available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) | ||||
|  | ||||
| [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 | ||||
							
								
								
									
										40
									
								
								vendor/cloud.google.com/go/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/cloud.google.com/go/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| # 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. | ||||
|  | ||||
| Alexis Hunt <lexer@google.com> | ||||
| Andreas Litt <andreas.litt@gmail.com> | ||||
| Andrew Gerrand <adg@golang.org> | ||||
| Brad Fitzpatrick <bradfitz@golang.org> | ||||
| Burcu Dogan <jbd@google.com> | ||||
| Dave Day <djd@golang.org> | ||||
| David Sansome <me@davidsansome.com> | ||||
| David Symonds <dsymonds@golang.org> | ||||
| Filippo Valsorda <hi@filippo.io> | ||||
| Glenn Lewis <gmlewis@google.com> | ||||
| Ingo Oeser <nightlyone@googlemail.com> | ||||
| James Hall <james.hall@shopify.com> | ||||
| Johan Euphrosine <proppy@google.com> | ||||
| Jonathan Amsterdam <jba@google.com> | ||||
| Kunpei Sakai <namusyaka@gmail.com> | ||||
| Luna Duclos <luna.duclos@palmstonegames.com> | ||||
| Magnus Hiie <magnus.hiie@gmail.com> | ||||
| Mario Castro <mariocaster@gmail.com> | ||||
| Michael McGreevy <mcgreevy@golang.org> | ||||
| Omar Jarjur <ojarjur@google.com> | ||||
| Paweł Knap <pawelknap88@gmail.com> | ||||
| Péter Szilágyi <peterke@gmail.com> | ||||
| Sarah Adams <shadams@google.com> | ||||
| Thanatat Tamtan <acoshift@gmail.com> | ||||
| Toby Burress <kurin@google.com> | ||||
| Tuo Shan <shantuo@google.com> | ||||
| Tyler Treat <ttreat31@gmail.com> | ||||
							
								
								
									
										202
									
								
								vendor/cloud.google.com/go/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								vendor/cloud.google.com/go/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 [yyyy] [name of copyright owner] | ||||
|  | ||||
|    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. | ||||
							
								
								
									
										503
									
								
								vendor/cloud.google.com/go/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								vendor/cloud.google.com/go/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,503 @@ | ||||
| # Google Cloud Client Libraries for Go | ||||
|  | ||||
| [](https://godoc.org/cloud.google.com/go) | ||||
|  | ||||
| Go packages for [Google Cloud Platform](https://cloud.google.com) services. | ||||
|  | ||||
| ``` go | ||||
| import "cloud.google.com/go" | ||||
| ``` | ||||
|  | ||||
| To install the packages on your system, *do not clone the repo*. Instead use | ||||
|  | ||||
| ``` | ||||
| $ go get -u cloud.google.com/go/... | ||||
| ``` | ||||
|  | ||||
| **NOTE:** Some of these packages are under development, and may occasionally | ||||
| make backwards-incompatible changes. | ||||
|  | ||||
| **NOTE:** Github repo is a mirror of [https://code.googlesource.com/gocloud](https://code.googlesource.com/gocloud). | ||||
|  | ||||
|   * [News](#news) | ||||
|   * [Supported APIs](#supported-apis) | ||||
|   * [Go Versions Supported](#go-versions-supported) | ||||
|   * [Authorization](#authorization) | ||||
|   * [Cloud Datastore](#cloud-datastore-) | ||||
|   * [Cloud Storage](#cloud-storage-) | ||||
|   * [Cloud Pub/Sub](#cloud-pub-sub-) | ||||
|   * [BigQuery](#cloud-bigquery-) | ||||
|   * [Stackdriver Logging](#stackdriver-logging-) | ||||
|   * [Cloud Spanner](#cloud-spanner-) | ||||
|  | ||||
|  | ||||
| ## News | ||||
|  | ||||
| _7 August 2018_ | ||||
|  | ||||
| As of November 1, the code in the repo will no longer support Go versions 1.8 | ||||
| and earlier. No one other than AppEngine users should be on those old versions, | ||||
| and AppEngine | ||||
| [Standard](https://groups.google.com/forum/#!topic/google-appengine-go/e7oPNomd7ak) | ||||
| and | ||||
| [Flex](https://groups.google.com/forum/#!topic/google-appengine-go/wHsYtxvEbXI) | ||||
| will stop supporting new deployments with those versions on that date. | ||||
|  | ||||
|  | ||||
| Changes have been moved to [CHANGES](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CHANGES.md). | ||||
|  | ||||
|  | ||||
| ## Supported APIs | ||||
|  | ||||
| Google API                                   | Status       | Package | ||||
| ---------------------------------------------|--------------|----------------------------------------------------------- | ||||
| [Asset][cloud-asset]                         | alpha        | [`godoc.org/cloud.google.com/go/asset/v1beta`][cloud-asset-ref] | ||||
| [BigQuery][cloud-bigquery]                   | stable       | [`godoc.org/cloud.google.com/go/bigquery`][cloud-bigquery-ref] | ||||
| [Bigtable][cloud-bigtable]                   | stable       | [`godoc.org/cloud.google.com/go/bigtable`][cloud-bigtable-ref] | ||||
| [Container][cloud-container]                 | stable       | [`godoc.org/cloud.google.com/go/container/apiv1`][cloud-container-ref] | ||||
| [ContainerAnalysis][cloud-containeranalysis] | beta         | [`godoc.org/cloud.google.com/go/containeranalysis/apiv1beta1`][cloud-containeranalysis-ref] | ||||
| [Dataproc][cloud-dataproc]                   | stable       | [`godoc.org/cloud.google.com/go/dataproc/apiv1`][cloud-dataproc-ref] | ||||
| [Datastore][cloud-datastore]                 | stable       | [`godoc.org/cloud.google.com/go/datastore`][cloud-datastore-ref] | ||||
| [Debugger][cloud-debugger]                   | alpha        | [`godoc.org/cloud.google.com/go/debugger/apiv2`][cloud-debugger-ref] | ||||
| [Dialogflow][cloud-dialogflow]               | alpha        | [`godoc.org/cloud.google.com/go/dialogflow/apiv2`][cloud-dialogflow-ref] | ||||
| [Data Loss Prevention][cloud-dlp]            | alpha        | [`godoc.org/cloud.google.com/go/dlp/apiv2`][cloud-dlp-ref] | ||||
| [ErrorReporting][cloud-errors]               | alpha        | [`godoc.org/cloud.google.com/go/errorreporting`][cloud-errors-ref] | ||||
| [Firestore][cloud-firestore]                 | beta         | [`godoc.org/cloud.google.com/go/firestore`][cloud-firestore-ref] | ||||
| [IAM][cloud-iam]                             | stable       | [`godoc.org/cloud.google.com/go/iam`][cloud-iam-ref] | ||||
| [KMS][cloud-kms]                             | stable       | [`godoc.org/cloud.google.com/go/kms`][cloud-kms-ref] | ||||
| [Natural Language][cloud-natural-language]   | stable       | [`godoc.org/cloud.google.com/go/language/apiv1`][cloud-natural-language-ref] | ||||
| [Logging][cloud-logging]                     | stable       | [`godoc.org/cloud.google.com/go/logging`][cloud-logging-ref] | ||||
| [Monitoring][cloud-monitoring]               | alpha        | [`godoc.org/cloud.google.com/go/monitoring/apiv3`][cloud-monitoring-ref] | ||||
| [OS Login][cloud-oslogin]                    | alpha        | [`cloud.google.com/compute/docs/oslogin/rest`][cloud-oslogin-ref] | ||||
| [Pub/Sub][cloud-pubsub]                      | stable       | [`godoc.org/cloud.google.com/go/pubsub`][cloud-pubsub-ref] | ||||
| [Memorystore][cloud-memorystore]             | stable       | [`godoc.org/cloud.google.com/go/redis/apiv1beta1`][cloud-memorystore-ref] | ||||
| [Spanner][cloud-spanner]                     | stable       | [`godoc.org/cloud.google.com/go/spanner`][cloud-spanner-ref] | ||||
| [Speech][cloud-speech]                       | stable       | [`godoc.org/cloud.google.com/go/speech/apiv1`][cloud-speech-ref] | ||||
| [Storage][cloud-storage]                     | stable       | [`godoc.org/cloud.google.com/go/storage`][cloud-storage-ref] | ||||
| [Text To Speech][cloud-texttospeech]         | alpha        | [`godoc.org/cloud.google.com/go/texttospeech/apiv1`][cloud-storage-ref] | ||||
| [Trace][cloud-trace]                         | alpha        | [`godoc.org/cloud.google.com/go/trace/apiv2`][cloud-translation-ref] | ||||
| [Translation][cloud-translation]             | stable       | [`godoc.org/cloud.google.com/go/translate`][cloud-translation-ref] | ||||
| [Video Intelligence][cloud-video]            | alpha        | [`godoc.org/cloud.google.com/go/videointelligence/apiv1beta1`][cloud-video-ref] | ||||
| [Vision][cloud-vision]                       | stable       | [`godoc.org/cloud.google.com/go/vision/apiv1`][cloud-vision-ref] | ||||
|  | ||||
| > **Alpha status**: the API is still being actively developed. As a | ||||
| > result, it might change in backward-incompatible ways and is not recommended | ||||
| > for production use. | ||||
| > | ||||
| > **Beta status**: the API is largely complete, but still has outstanding | ||||
| > features and bugs to be addressed. There may be minor backwards-incompatible | ||||
| > changes where necessary. | ||||
| > | ||||
| > **Stable status**: the API is mature and ready for production use. We will | ||||
| > continue addressing bugs and feature requests. | ||||
|  | ||||
| Documentation and examples are available at | ||||
| https://godoc.org/cloud.google.com/go | ||||
|  | ||||
| Visit or join the | ||||
| [google-api-go-announce group](https://groups.google.com/forum/#!forum/google-api-go-announce) | ||||
| for updates on these packages. | ||||
|  | ||||
| ## Go Versions Supported | ||||
|  | ||||
| We support the two most recent major versions of Go. If Google App Engine uses | ||||
| an older version, we support that as well. You can see which versions are | ||||
| currently supported by looking at the lines following `go:` in | ||||
| [`.travis.yml`](.travis.yml). | ||||
|  | ||||
| ## Authorization | ||||
|  | ||||
| By default, each API will use [Google Application Default Credentials][default-creds] | ||||
| for authorization credentials used in calling the API endpoints. This will allow your | ||||
| application to run in many environments without requiring explicit configuration. | ||||
|  | ||||
| [snip]:# (auth) | ||||
| ```go | ||||
| client, err := storage.NewClient(ctx) | ||||
| ``` | ||||
|  | ||||
| To authorize using a | ||||
| [JSON key file](https://cloud.google.com/iam/docs/managing-service-account-keys), | ||||
| pass | ||||
| [`option.WithCredentialsFile`](https://godoc.org/google.golang.org/api/option#WithCredentialsFile) | ||||
| to the `NewClient` function of the desired package. For example: | ||||
|  | ||||
| [snip]:# (auth-JSON) | ||||
| ```go | ||||
| client, err := storage.NewClient(ctx, option.WithCredentialsFile("path/to/keyfile.json")) | ||||
| ``` | ||||
|  | ||||
| You can exert more control over authorization by using the | ||||
| [`golang.org/x/oauth2`](https://godoc.org/golang.org/x/oauth2) package to | ||||
| create an `oauth2.TokenSource`. Then pass | ||||
| [`option.WithTokenSource`](https://godoc.org/google.golang.org/api/option#WithTokenSource) | ||||
| to the `NewClient` function: | ||||
| [snip]:# (auth-ts) | ||||
| ```go | ||||
| tokenSource := ... | ||||
| client, err := storage.NewClient(ctx, option.WithTokenSource(tokenSource)) | ||||
| ``` | ||||
|  | ||||
| ## Cloud Datastore [](https://godoc.org/cloud.google.com/go/datastore) | ||||
|  | ||||
| - [About Cloud Datastore][cloud-datastore] | ||||
| - [Activating the API for your project][cloud-datastore-activation] | ||||
| - [API documentation][cloud-datastore-docs] | ||||
| - [Go client documentation](https://godoc.org/cloud.google.com/go/datastore) | ||||
| - [Complete sample program](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/datastore/tasks) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `datastore.Client` to use throughout your application: | ||||
|  | ||||
| [snip]:# (datastore-1) | ||||
| ```go | ||||
| client, err := datastore.NewClient(ctx, "my-project-id") | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Then use that client to interact with the API: | ||||
|  | ||||
| [snip]:# (datastore-2) | ||||
| ```go | ||||
| type Post struct { | ||||
| 	Title       string | ||||
| 	Body        string `datastore:",noindex"` | ||||
| 	PublishedAt time.Time | ||||
| } | ||||
| keys := []*datastore.Key{ | ||||
| 	datastore.NameKey("Post", "post1", nil), | ||||
| 	datastore.NameKey("Post", "post2", nil), | ||||
| } | ||||
| posts := []*Post{ | ||||
| 	{Title: "Post 1", Body: "...", PublishedAt: time.Now()}, | ||||
| 	{Title: "Post 2", Body: "...", PublishedAt: time.Now()}, | ||||
| } | ||||
| if _, err := client.PutMulti(ctx, keys, posts); err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## Cloud Storage [](https://godoc.org/cloud.google.com/go/storage) | ||||
|  | ||||
| - [About Cloud Storage][cloud-storage] | ||||
| - [API documentation][cloud-storage-docs] | ||||
| - [Go client documentation](https://godoc.org/cloud.google.com/go/storage) | ||||
| - [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/storage) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `storage.Client` to use throughout your application: | ||||
|  | ||||
| [snip]:# (storage-1) | ||||
| ```go | ||||
| client, err := storage.NewClient(ctx) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| [snip]:# (storage-2) | ||||
| ```go | ||||
| // Read the object1 from bucket. | ||||
| rc, err := client.Bucket("bucket").Object("object1").NewReader(ctx) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| defer rc.Close() | ||||
| body, err := ioutil.ReadAll(rc) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## Cloud Pub/Sub [](https://godoc.org/cloud.google.com/go/pubsub) | ||||
|  | ||||
| - [About Cloud Pubsub][cloud-pubsub] | ||||
| - [API documentation][cloud-pubsub-docs] | ||||
| - [Go client documentation](https://godoc.org/cloud.google.com/go/pubsub) | ||||
| - [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/pubsub) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `pubsub.Client` to use throughout your application: | ||||
|  | ||||
| [snip]:# (pubsub-1) | ||||
| ```go | ||||
| client, err := pubsub.NewClient(ctx, "project-id") | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Then use the client to publish and subscribe: | ||||
|  | ||||
| [snip]:# (pubsub-2) | ||||
| ```go | ||||
| // Publish "hello world" on topic1. | ||||
| topic := client.Topic("topic1") | ||||
| res := topic.Publish(ctx, &pubsub.Message{ | ||||
| 	Data: []byte("hello world"), | ||||
| }) | ||||
| // The publish happens asynchronously. | ||||
| // Later, you can get the result from res: | ||||
| ... | ||||
| msgID, err := res.Get(ctx) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
|  | ||||
| // Use a callback to receive messages via subscription1. | ||||
| sub := client.Subscription("subscription1") | ||||
| err = sub.Receive(ctx, func(ctx context.Context, m *pubsub.Message) { | ||||
| 	fmt.Println(m.Data) | ||||
| 	m.Ack() // Acknowledge that we've consumed the message. | ||||
| }) | ||||
| if err != nil { | ||||
| 	log.Println(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## BigQuery [](https://godoc.org/cloud.google.com/go/bigquery) | ||||
|  | ||||
| - [About BigQuery][cloud-bigquery] | ||||
| - [API documentation][cloud-bigquery-docs] | ||||
| - [Go client documentation][cloud-bigquery-ref] | ||||
| - [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/bigquery) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `bigquery.Client` to use throughout your application: | ||||
| [snip]:# (bq-1) | ||||
| ```go | ||||
| c, err := bigquery.NewClient(ctx, "my-project-ID") | ||||
| if err != nil { | ||||
| 	// TODO: Handle error. | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Then use that client to interact with the API: | ||||
| [snip]:# (bq-2) | ||||
| ```go | ||||
| // Construct a query. | ||||
| q := c.Query(` | ||||
|     SELECT year, SUM(number) | ||||
|     FROM [bigquery-public-data:usa_names.usa_1910_2013] | ||||
|     WHERE name = "William" | ||||
|     GROUP BY year | ||||
|     ORDER BY year | ||||
| `) | ||||
| // Execute the query. | ||||
| it, err := q.Read(ctx) | ||||
| if err != nil { | ||||
| 	// TODO: Handle error. | ||||
| } | ||||
| // Iterate through the results. | ||||
| for { | ||||
| 	var values []bigquery.Value | ||||
| 	err := it.Next(&values) | ||||
| 	if err == iterator.Done { | ||||
| 		break | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		// TODO: Handle error. | ||||
| 	} | ||||
| 	fmt.Println(values) | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ## Stackdriver Logging [](https://godoc.org/cloud.google.com/go/logging) | ||||
|  | ||||
| - [About Stackdriver Logging][cloud-logging] | ||||
| - [API documentation][cloud-logging-docs] | ||||
| - [Go client documentation][cloud-logging-ref] | ||||
| - [Complete sample programs](https://github.com/GoogleCloudPlatform/golang-samples/tree/master/logging) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `logging.Client` to use throughout your application: | ||||
| [snip]:# (logging-1) | ||||
| ```go | ||||
| ctx := context.Background() | ||||
| client, err := logging.NewClient(ctx, "my-project") | ||||
| if err != nil { | ||||
| 	// TODO: Handle error. | ||||
| } | ||||
| ``` | ||||
|  | ||||
| Usually, you'll want to add log entries to a buffer to be periodically flushed | ||||
| (automatically and asynchronously) to the Stackdriver Logging service. | ||||
| [snip]:# (logging-2) | ||||
| ```go | ||||
| logger := client.Logger("my-log") | ||||
| logger.Log(logging.Entry{Payload: "something happened!"}) | ||||
| ``` | ||||
|  | ||||
| Close your client before your program exits, to flush any buffered log entries. | ||||
| [snip]:# (logging-3) | ||||
| ```go | ||||
| err = client.Close() | ||||
| if err != nil { | ||||
| 	// TODO: Handle error. | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## Cloud Spanner [](https://godoc.org/cloud.google.com/go/spanner) | ||||
|  | ||||
| - [About Cloud Spanner][cloud-spanner] | ||||
| - [API documentation][cloud-spanner-docs] | ||||
| - [Go client documentation](https://godoc.org/cloud.google.com/go/spanner) | ||||
|  | ||||
| ### Example Usage | ||||
|  | ||||
| First create a `spanner.Client` to use throughout your application: | ||||
|  | ||||
| [snip]:# (spanner-1) | ||||
| ```go | ||||
| client, err := spanner.NewClient(ctx, "projects/P/instances/I/databases/D") | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| [snip]:# (spanner-2) | ||||
| ```go | ||||
| // Simple Reads And Writes | ||||
| _, err = client.Apply(ctx, []*spanner.Mutation{ | ||||
| 	spanner.Insert("Users", | ||||
| 		[]string{"name", "email"}, | ||||
| 		[]interface{}{"alice", "a@example.com"})}) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| row, err := client.Single().ReadRow(ctx, "Users", | ||||
| 	spanner.Key{"alice"}, []string{"email"}) | ||||
| if err != nil { | ||||
| 	log.Fatal(err) | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| Contributions are welcome. Please, see the | ||||
| [CONTRIBUTING](https://github.com/GoogleCloudPlatform/google-cloud-go/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. | ||||
|  | ||||
| Please note that this project is released with a Contributor Code of Conduct. | ||||
| By participating in this project you agree to abide by its terms. | ||||
| See [Contributor Code of Conduct](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/CONTRIBUTING.md#contributor-code-of-conduct) | ||||
| for more information. | ||||
|  | ||||
| [cloud-datastore]: https://cloud.google.com/datastore/ | ||||
| [cloud-datastore-ref]: https://godoc.org/cloud.google.com/go/datastore | ||||
| [cloud-datastore-docs]: https://cloud.google.com/datastore/docs | ||||
| [cloud-datastore-activation]: https://cloud.google.com/datastore/docs/activate | ||||
|  | ||||
| [cloud-firestore]: https://cloud.google.com/firestore/ | ||||
| [cloud-firestore-ref]: https://godoc.org/cloud.google.com/go/firestore | ||||
| [cloud-firestore-docs]: https://cloud.google.com/firestore/docs | ||||
| [cloud-firestore-activation]: https://cloud.google.com/firestore/docs/activate | ||||
|  | ||||
| [cloud-pubsub]: https://cloud.google.com/pubsub/ | ||||
| [cloud-pubsub-ref]: https://godoc.org/cloud.google.com/go/pubsub | ||||
| [cloud-pubsub-docs]: https://cloud.google.com/pubsub/docs | ||||
|  | ||||
| [cloud-storage]: https://cloud.google.com/storage/ | ||||
| [cloud-storage-ref]: https://godoc.org/cloud.google.com/go/storage | ||||
| [cloud-storage-docs]: https://cloud.google.com/storage/docs | ||||
| [cloud-storage-create-bucket]: https://cloud.google.com/storage/docs/cloud-console#_creatingbuckets | ||||
|  | ||||
| [cloud-bigtable]: https://cloud.google.com/bigtable/ | ||||
| [cloud-bigtable-ref]: https://godoc.org/cloud.google.com/go/bigtable | ||||
|  | ||||
| [cloud-bigquery]: https://cloud.google.com/bigquery/ | ||||
| [cloud-bigquery-docs]: https://cloud.google.com/bigquery/docs | ||||
| [cloud-bigquery-ref]: https://godoc.org/cloud.google.com/go/bigquery | ||||
|  | ||||
| [cloud-logging]: https://cloud.google.com/logging/ | ||||
| [cloud-logging-docs]: https://cloud.google.com/logging/docs | ||||
| [cloud-logging-ref]: https://godoc.org/cloud.google.com/go/logging | ||||
|  | ||||
| [cloud-monitoring]: https://cloud.google.com/monitoring/ | ||||
| [cloud-monitoring-ref]: https://godoc.org/cloud.google.com/go/monitoring/apiv3 | ||||
|  | ||||
| [cloud-vision]: https://cloud.google.com/vision | ||||
| [cloud-vision-ref]: https://godoc.org/cloud.google.com/go/vision/apiv1 | ||||
|  | ||||
| [cloud-language]: https://cloud.google.com/natural-language | ||||
| [cloud-language-ref]: https://godoc.org/cloud.google.com/go/language/apiv1 | ||||
|  | ||||
| [cloud-oslogin]: https://cloud.google.com/compute/docs/oslogin/rest | ||||
| [cloud-oslogin-ref]: https://cloud.google.com/compute/docs/oslogin/rest | ||||
|  | ||||
| [cloud-speech]: https://cloud.google.com/speech | ||||
| [cloud-speech-ref]: https://godoc.org/cloud.google.com/go/speech/apiv1 | ||||
|  | ||||
| [cloud-spanner]: https://cloud.google.com/spanner/ | ||||
| [cloud-spanner-ref]: https://godoc.org/cloud.google.com/go/spanner | ||||
| [cloud-spanner-docs]: https://cloud.google.com/spanner/docs | ||||
|  | ||||
| [cloud-translation]: https://cloud.google.com/translation | ||||
| [cloud-translation-ref]: https://godoc.org/cloud.google.com/go/translation | ||||
|  | ||||
| [cloud-video]: https://cloud.google.com/video-intelligence/ | ||||
| [cloud-video-ref]: https://godoc.org/cloud.google.com/go/videointelligence/apiv1beta1 | ||||
|  | ||||
| [cloud-errors]: https://cloud.google.com/error-reporting/ | ||||
| [cloud-errors-ref]: https://godoc.org/cloud.google.com/go/errorreporting | ||||
|  | ||||
| [cloud-container]: https://cloud.google.com/containers/ | ||||
| [cloud-container-ref]: https://godoc.org/cloud.google.com/go/container/apiv1 | ||||
|  | ||||
| [cloud-debugger]: https://cloud.google.com/debugger/ | ||||
| [cloud-debugger-ref]: https://godoc.org/cloud.google.com/go/debugger/apiv2 | ||||
|  | ||||
| [cloud-dlp]: https://cloud.google.com/dlp/ | ||||
| [cloud-dlp-ref]: https://godoc.org/cloud.google.com/go/dlp/apiv2beta1 | ||||
|  | ||||
| [default-creds]: https://developers.google.com/identity/protocols/application-default-credentials | ||||
|  | ||||
| [cloud-dataproc]: https://cloud.google.com/dataproc/ | ||||
| [cloud-dataproc-docs]: https://cloud.google.com/dataproc/docs | ||||
| [cloud-dataproc-ref]: https://godoc.org/cloud.google.com/go/dataproc/apiv1 | ||||
|  | ||||
| [cloud-iam]: https://cloud.google.com/iam/ | ||||
| [cloud-iam-docs]: https://cloud.google.com/iam/docs | ||||
| [cloud-iam-ref]: https://godoc.org/cloud.google.com/go/iam | ||||
|  | ||||
| [cloud-kms]: https://cloud.google.com/kms/ | ||||
| [cloud-kms-docs]: https://cloud.google.com/kms/docs | ||||
| [cloud-kms-ref]: https://godoc.org/cloud.google.com/go/kms/apiv1 | ||||
|  | ||||
| [cloud-natural-language]: https://cloud.google.com/natural-language/ | ||||
| [cloud-natural-language-docs]: https://cloud.google.com/natural-language/docs | ||||
| [cloud-natural-language-ref]: https://godoc.org/cloud.google.com/go/language/apiv1 | ||||
|  | ||||
| [cloud-memorystore]: https://cloud.google.com/memorystore/ | ||||
| [cloud-memorystore-docs]: https://cloud.google.com/memorystore/docs | ||||
| [cloud-memorystore-ref]: https://godoc.org/cloud.google.com/go/redis/apiv1beta1 | ||||
|  | ||||
| [cloud-texttospeech]: https://cloud.google.com/texttospeech/ | ||||
| [cloud-texttospeech-docs]: https://cloud.google.com/texttospeech/docs | ||||
| [cloud-texttospeech-ref]: https://godoc.org/cloud.google.com/go/texttospeech/apiv1 | ||||
|  | ||||
| [cloud-trace]: https://cloud.google.com/trace/ | ||||
| [cloud-trace-docs]: https://cloud.google.com/trace/docs | ||||
| [cloud-trace-ref]: https://godoc.org/cloud.google.com/go/trace/apiv1 | ||||
|  | ||||
| [cloud-dialogflow]: https://cloud.google.com/dialogflow-enterprise/ | ||||
| [cloud-dialogflow-docs]: https://cloud.google.com/dialogflow-enterprise/docs/ | ||||
| [cloud-dialogflow-ref]: https://godoc.org/cloud.google.com/go/dialogflow/apiv2 | ||||
|  | ||||
| [cloud-containeranalysis]: https://cloud.google.com/container-registry/docs/container-analysis | ||||
| [cloud-containeranalysis-docs]: https://cloud.google.com/container-analysis/api/reference/rest/ | ||||
| [cloud-containeranalysis-ref]: https://godoc.org/cloud.google.com/go/devtools/containeranalysis/apiv1beta1 | ||||
|  | ||||
| [cloud-asset]: https://cloud.google.com/security-command-center/docs/how-to-asset-inventory | ||||
| [cloud-asset-docs]: https://cloud.google.com/security-command-center/docs/how-to-asset-inventory | ||||
| [cloud-asset-ref]: https://godoc.org/cloud.google.com/go/asset/apiv1 | ||||
							
								
								
									
										13
									
								
								vendor/cloud.google.com/go/RELEASING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/cloud.google.com/go/RELEASING.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| # How to Release this Repo | ||||
|  | ||||
| 1. Determine the current release version with `git tag -l`. It should look | ||||
|    something like `vX.Y.Z`. We'll call the current | ||||
|    version `$CV` and the new version `$NV`. | ||||
| 1. On master, run `git log $CV..` to list all the changes since the last | ||||
|    release. | ||||
| 1. Edit  `CHANGES.md` to include a summary of the changes. | ||||
| 1. Mail the CL containing the `CHANGES.md` changes. When the CL is approved, submit it. | ||||
| 1. Without submitting any other CLs: | ||||
|    a. Switch to master. | ||||
|    b. Tag the repo with the next version: `git tag $NV`. | ||||
|    c. Push the tag: `git push origin $NV`. | ||||
							
								
								
									
										79
									
								
								vendor/cloud.google.com/go/cloud.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/cloud.google.com/go/cloud.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| // Copyright 2014 Google LLC | ||||
| // | ||||
| // 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 is the root of the packages used to access Google Cloud | ||||
| Services. See https://godoc.org/cloud.google.com/go for a full list | ||||
| of sub-packages. | ||||
|  | ||||
|  | ||||
| Client Options | ||||
|  | ||||
| All clients in sub-packages are configurable via client options. These options are | ||||
| described here: https://godoc.org/google.golang.org/api/option. | ||||
|  | ||||
|  | ||||
| Authentication and Authorization | ||||
|  | ||||
| All the clients in sub-packages support authentication via Google Application Default | ||||
| Credentials (see https://cloud.google.com/docs/authentication/production), or | ||||
| by providing a JSON key file for a Service Account. See the authentication examples | ||||
| in this package for details. | ||||
|  | ||||
|  | ||||
| Timeouts and Cancellation | ||||
|  | ||||
| By default, all requests in sub-packages will run indefinitely, retrying on transient | ||||
| errors when correctness allows. To set timeouts or arrange for cancellation, use | ||||
| contexts. See the examples for details. | ||||
|  | ||||
| Do not attempt to control the initial connection (dialing) of a service by setting a | ||||
| timeout on the context passed to NewClient. Dialing is non-blocking, so timeouts | ||||
| would be ineffective and would only interfere with credential refreshing, which uses | ||||
| the same context. | ||||
|  | ||||
|  | ||||
| Connection Pooling | ||||
|  | ||||
| Connection pooling differs in clients based on their transport. Cloud | ||||
| clients either rely on HTTP or gRPC transports to communicate | ||||
| with Google Cloud. | ||||
|  | ||||
| Cloud clients that use HTTP (bigquery, compute, storage, and translate) rely on the | ||||
| underlying HTTP transport to cache connections for later re-use. These are cached to | ||||
| the default http.MaxIdleConns and http.MaxIdleConnsPerHost settings in | ||||
| http.DefaultTransport. | ||||
|  | ||||
| For gRPC clients (all others in this repo), connection pooling is configurable. Users | ||||
| of cloud client libraries may specify option.WithGRPCConnectionPool(n) as a client | ||||
| option to NewClient calls. This configures the underlying gRPC connections to be | ||||
| pooled and addressed in a round robin fashion. | ||||
|  | ||||
|  | ||||
| Using the Libraries with Docker | ||||
|  | ||||
| Minimal docker images like Alpine lack CA certificates. This causes RPCs to appear to | ||||
| hang, because gRPC retries indefinitely. See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/928 | ||||
| for more information. | ||||
|  | ||||
|  | ||||
| Debugging | ||||
|  | ||||
| To see gRPC logs, set the environment variable GRPC_GO_LOG_SEVERITY_LEVEL. See | ||||
| https://godoc.org/google.golang.org/grpc/grpclog for more information. | ||||
|  | ||||
| For HTTP logging, set the GODEBUG environment variable to "http2debug=1" or "http2debug=2". | ||||
|  | ||||
| */ | ||||
| package cloud // import "cloud.google.com/go" | ||||
							
								
								
									
										503
									
								
								vendor/cloud.google.com/go/compute/metadata/metadata.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								vendor/cloud.google.com/go/compute/metadata/metadata.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,503 @@ | ||||
| // Copyright 2014 Google LLC | ||||
| // | ||||
| // 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 "cloud.google.com/go/compute/metadata" | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"golang.org/x/net/context" | ||||
| 	"golang.org/x/net/context/ctxhttp" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// metadataIP is the documented metadata server IP address. | ||||
| 	metadataIP = "169.254.169.254" | ||||
|  | ||||
| 	// metadataHostEnv is the environment variable specifying the | ||||
| 	// GCE metadata hostname.  If empty, the default value of | ||||
| 	// metadataIP ("169.254.169.254") is used instead. | ||||
| 	// This is variable name is not defined by any spec, as far as | ||||
| 	// I know; it was made up for the Go package. | ||||
| 	metadataHostEnv = "GCE_METADATA_HOST" | ||||
|  | ||||
| 	userAgent = "gcloud-golang/0.1" | ||||
| ) | ||||
|  | ||||
| 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 ( | ||||
| 	defaultClient = &Client{hc: &http.Client{ | ||||
| 		Transport: &http.Transport{ | ||||
| 			Dial: (&net.Dialer{ | ||||
| 				Timeout:   2 * time.Second, | ||||
| 				KeepAlive: 30 * time.Second, | ||||
| 			}).Dial, | ||||
| 			ResponseHeaderTimeout: 2 * time.Second, | ||||
| 		}, | ||||
| 	}} | ||||
| 	subscribeClient = &Client{hc: &http.Client{ | ||||
| 		Transport: &http.Transport{ | ||||
| 			Dial: (&net.Dialer{ | ||||
| 				Timeout:   2 * time.Second, | ||||
| 				KeepAlive: 30 * time.Second, | ||||
| 			}).Dial, | ||||
| 		}, | ||||
| 	}} | ||||
| ) | ||||
|  | ||||
| // 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)) | ||||
| } | ||||
|  | ||||
| func (c *cachedValue) get(cl *Client) (v string, err error) { | ||||
| 	defer c.mu.Unlock() | ||||
| 	c.mu.Lock() | ||||
| 	if c.v != "" { | ||||
| 		return c.v, nil | ||||
| 	} | ||||
| 	if c.trim { | ||||
| 		v, err = cl.getTrimmed(c.k) | ||||
| 	} else { | ||||
| 		v, err = cl.Get(c.k) | ||||
| 	} | ||||
| 	if err == nil { | ||||
| 		c.v = v | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	onGCEOnce sync.Once | ||||
| 	onGCE     bool | ||||
| ) | ||||
|  | ||||
| // OnGCE reports whether this process is running on Google Compute Engine. | ||||
| func OnGCE() bool { | ||||
| 	onGCEOnce.Do(initOnGCE) | ||||
| 	return onGCE | ||||
| } | ||||
|  | ||||
| func initOnGCE() { | ||||
| 	onGCE = testOnGCE() | ||||
| } | ||||
|  | ||||
| func testOnGCE() bool { | ||||
| 	// The user explicitly said they're on GCE, so trust them. | ||||
| 	if os.Getenv(metadataHostEnv) != "" { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	ctx, cancel := context.WithCancel(context.Background()) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	resc := make(chan bool, 2) | ||||
|  | ||||
| 	// Try two strategies in parallel. | ||||
| 	// See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/194 | ||||
| 	go func() { | ||||
| 		req, _ := http.NewRequest("GET", "http://"+metadataIP, nil) | ||||
| 		req.Header.Set("User-Agent", userAgent) | ||||
| 		res, err := ctxhttp.Do(ctx, defaultClient.hc, req) | ||||
| 		if err != nil { | ||||
| 			resc <- false | ||||
| 			return | ||||
| 		} | ||||
| 		defer res.Body.Close() | ||||
| 		resc <- res.Header.Get("Metadata-Flavor") == "Google" | ||||
| 	}() | ||||
|  | ||||
| 	go func() { | ||||
| 		addrs, err := net.LookupHost("metadata.google.internal") | ||||
| 		if err != nil || len(addrs) == 0 { | ||||
| 			resc <- false | ||||
| 			return | ||||
| 		} | ||||
| 		resc <- strsContains(addrs, metadataIP) | ||||
| 	}() | ||||
|  | ||||
| 	tryHarder := systemInfoSuggestsGCE() | ||||
| 	if tryHarder { | ||||
| 		res := <-resc | ||||
| 		if res { | ||||
| 			// The first strategy succeeded, so let's use it. | ||||
| 			return true | ||||
| 		} | ||||
| 		// Wait for either the DNS or metadata server probe to | ||||
| 		// contradict the other one and say we are running on | ||||
| 		// GCE. Give it a lot of time to do so, since the system | ||||
| 		// info already suggests we're running on a GCE BIOS. | ||||
| 		timer := time.NewTimer(5 * time.Second) | ||||
| 		defer timer.Stop() | ||||
| 		select { | ||||
| 		case res = <-resc: | ||||
| 			return res | ||||
| 		case <-timer.C: | ||||
| 			// Too slow. Who knows what this system is. | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// There's no hint from the system info that we're running on | ||||
| 	// GCE, so use the first probe's result as truth, whether it's | ||||
| 	// true or false. The goal here is to optimize for speed for | ||||
| 	// users who are NOT running on GCE. We can't assume that | ||||
| 	// either a DNS lookup or an HTTP request to a blackholed IP | ||||
| 	// address is fast. Worst case this should return when the | ||||
| 	// metaClient's Transport.ResponseHeaderTimeout or | ||||
| 	// Transport.Dial.Timeout fires (in two seconds). | ||||
| 	return <-resc | ||||
| } | ||||
|  | ||||
| // systemInfoSuggestsGCE reports whether the local system (without | ||||
| // doing network requests) suggests that we're running on GCE. If this | ||||
| // returns true, testOnGCE tries a bit harder to reach its metadata | ||||
| // server. | ||||
| func systemInfoSuggestsGCE() bool { | ||||
| 	if runtime.GOOS != "linux" { | ||||
| 		// We don't have any non-Linux clues available, at least yet. | ||||
| 		return false | ||||
| 	} | ||||
| 	slurp, _ := ioutil.ReadFile("/sys/class/dmi/id/product_name") | ||||
| 	name := strings.TrimSpace(string(slurp)) | ||||
| 	return name == "Google" || name == "Google Compute Engine" | ||||
| } | ||||
|  | ||||
| // Subscribe calls Client.Subscribe on a client designed for subscribing (one with no | ||||
| // ResponseHeaderTimeout). | ||||
| func Subscribe(suffix string, fn func(v string, ok bool) error) error { | ||||
| 	return subscribeClient.Subscribe(suffix, fn) | ||||
| } | ||||
|  | ||||
| // Get calls Client.Get on the default client. | ||||
| func Get(suffix string) (string, error) { return defaultClient.Get(suffix) } | ||||
|  | ||||
| // ProjectID returns the current instance's project ID string. | ||||
| func ProjectID() (string, error) { return defaultClient.ProjectID() } | ||||
|  | ||||
| // NumericProjectID returns the current instance's numeric project ID. | ||||
| func NumericProjectID() (string, error) { return defaultClient.NumericProjectID() } | ||||
|  | ||||
| // InternalIP returns the instance's primary internal IP address. | ||||
| func InternalIP() (string, error) { return defaultClient.InternalIP() } | ||||
|  | ||||
| // ExternalIP returns the instance's primary external (public) IP address. | ||||
| func ExternalIP() (string, error) { return defaultClient.ExternalIP() } | ||||
|  | ||||
| // Hostname returns the instance's hostname. This will be of the form | ||||
| // "<instanceID>.c.<projID>.internal". | ||||
| func Hostname() (string, error) { return defaultClient.Hostname() } | ||||
|  | ||||
| // InstanceTags returns the list of user-defined instance tags, | ||||
| // assigned when initially creating a GCE instance. | ||||
| func InstanceTags() ([]string, error) { return defaultClient.InstanceTags() } | ||||
|  | ||||
| // InstanceID returns the current VM's numeric instance ID. | ||||
| func InstanceID() (string, error) { return defaultClient.InstanceID() } | ||||
|  | ||||
| // InstanceName returns the current VM's instance ID string. | ||||
| func InstanceName() (string, error) { return defaultClient.InstanceName() } | ||||
|  | ||||
| // Zone returns the current VM's zone, such as "us-central1-b". | ||||
| func Zone() (string, error) { return defaultClient.Zone() } | ||||
|  | ||||
| // InstanceAttributes calls Client.InstanceAttributes on the default client. | ||||
| func InstanceAttributes() ([]string, error) { return defaultClient.InstanceAttributes() } | ||||
|  | ||||
| // ProjectAttributes calls Client.ProjectAttributes on the default client. | ||||
| func ProjectAttributes() ([]string, error) { return defaultClient.ProjectAttributes() } | ||||
|  | ||||
| // InstanceAttributeValue calls Client.InstanceAttributeValue on the default client. | ||||
| func InstanceAttributeValue(attr string) (string, error) { | ||||
| 	return defaultClient.InstanceAttributeValue(attr) | ||||
| } | ||||
|  | ||||
| // ProjectAttributeValue calls Client.ProjectAttributeValue on the default client. | ||||
| func ProjectAttributeValue(attr string) (string, error) { | ||||
| 	return defaultClient.ProjectAttributeValue(attr) | ||||
| } | ||||
|  | ||||
| // Scopes calls Client.Scopes on the default client. | ||||
| func Scopes(serviceAccount string) ([]string, error) { return defaultClient.Scopes(serviceAccount) } | ||||
|  | ||||
| func strsContains(ss []string, s string) bool { | ||||
| 	for _, v := range ss { | ||||
| 		if v == s { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // A Client provides metadata. | ||||
| type Client struct { | ||||
| 	hc *http.Client | ||||
| } | ||||
|  | ||||
| // NewClient returns a Client that can be used to fetch metadata. All HTTP requests | ||||
| // will use the given http.Client instead of the default client. | ||||
| func NewClient(c *http.Client) *Client { | ||||
| 	return &Client{hc: c} | ||||
| } | ||||
|  | ||||
| // getETag returns a value from the metadata service as well as the associated ETag. | ||||
| // This func is otherwise equivalent to Get. | ||||
| func (c *Client) getETag(suffix string) (value, etag string, err error) { | ||||
| 	// Using a fixed IP makes it very difficult to spoof the metadata service in | ||||
| 	// a container, which is an important use-case for local testing of cloud | ||||
| 	// deployments. To enable spoofing of the metadata service, the environment | ||||
| 	// variable GCE_METADATA_HOST is first inspected to decide where metadata | ||||
| 	// requests shall go. | ||||
| 	host := os.Getenv(metadataHostEnv) | ||||
| 	if host == "" { | ||||
| 		// 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. | ||||
| 		host = metadataIP | ||||
| 	} | ||||
| 	url := "http://" + host + "/computeMetadata/v1/" + suffix | ||||
| 	req, _ := http.NewRequest("GET", url, nil) | ||||
| 	req.Header.Set("Metadata-Flavor", "Google") | ||||
| 	req.Header.Set("User-Agent", userAgent) | ||||
| 	res, err := c.hc.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), res.Header.Get("Etag"), nil | ||||
| } | ||||
|  | ||||
| // Get returns a value from the metadata service. | ||||
| // The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/". | ||||
| // | ||||
| // If the GCE_METADATA_HOST environment variable is not defined, a default of | ||||
| // 169.254.169.254 will be used instead. | ||||
| // | ||||
| // If the requested metadata is not defined, the returned error will | ||||
| // be of type NotDefinedError. | ||||
| func (c *Client) Get(suffix string) (string, error) { | ||||
| 	val, _, err := c.getETag(suffix) | ||||
| 	return val, err | ||||
| } | ||||
|  | ||||
| func (c *Client) getTrimmed(suffix string) (s string, err error) { | ||||
| 	s, err = c.Get(suffix) | ||||
| 	s = strings.TrimSpace(s) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (c *Client) lines(suffix string) ([]string, error) { | ||||
| 	j, err := c.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 | ||||
| } | ||||
|  | ||||
| // ProjectID returns the current instance's project ID string. | ||||
| func (c *Client) ProjectID() (string, error) { return projID.get(c) } | ||||
|  | ||||
| // NumericProjectID returns the current instance's numeric project ID. | ||||
| func (c *Client) NumericProjectID() (string, error) { return projNum.get(c) } | ||||
|  | ||||
| // InstanceID returns the current VM's numeric instance ID. | ||||
| func (c *Client) InstanceID() (string, error) { return instID.get(c) } | ||||
|  | ||||
| // InternalIP returns the instance's primary internal IP address. | ||||
| func (c *Client) InternalIP() (string, error) { | ||||
| 	return c.getTrimmed("instance/network-interfaces/0/ip") | ||||
| } | ||||
|  | ||||
| // ExternalIP returns the instance's primary external (public) IP address. | ||||
| func (c *Client) ExternalIP() (string, error) { | ||||
| 	return c.getTrimmed("instance/network-interfaces/0/access-configs/0/external-ip") | ||||
| } | ||||
|  | ||||
| // Hostname returns the instance's hostname. This will be of the form | ||||
| // "<instanceID>.c.<projID>.internal". | ||||
| func (c *Client) Hostname() (string, error) { | ||||
| 	return c.getTrimmed("instance/hostname") | ||||
| } | ||||
|  | ||||
| // InstanceTags returns the list of user-defined instance tags, | ||||
| // assigned when initially creating a GCE instance. | ||||
| func (c *Client) InstanceTags() ([]string, error) { | ||||
| 	var s []string | ||||
| 	j, err := c.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 | ||||
| } | ||||
|  | ||||
| // InstanceName returns the current VM's instance ID string. | ||||
| func (c *Client) InstanceName() (string, error) { | ||||
| 	host, err := c.Hostname() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return strings.Split(host, ".")[0], nil | ||||
| } | ||||
|  | ||||
| // Zone returns the current VM's zone, such as "us-central1-b". | ||||
| func (c *Client) Zone() (string, error) { | ||||
| 	zone, err := c.getTrimmed("instance/zone") | ||||
| 	// zone is of the form "projects/<projNum>/zones/<zoneName>". | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return zone[strings.LastIndex(zone, "/")+1:], nil | ||||
| } | ||||
|  | ||||
| // 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 (c *Client) InstanceAttributes() ([]string, error) { return c.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 (c *Client) ProjectAttributes() ([]string, error) { return c.lines("project/attributes/") } | ||||
|  | ||||
| // 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 (c *Client) InstanceAttributeValue(attr string) (string, error) { | ||||
| 	return c.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 (c *Client) ProjectAttributeValue(attr string) (string, error) { | ||||
| 	return c.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 (c *Client) Scopes(serviceAccount string) ([]string, error) { | ||||
| 	if serviceAccount == "" { | ||||
| 		serviceAccount = "default" | ||||
| 	} | ||||
| 	return c.lines("instance/service-accounts/" + serviceAccount + "/scopes") | ||||
| } | ||||
|  | ||||
| // Subscribe subscribes to a value from the metadata service. | ||||
| // The suffix is appended to "http://${GCE_METADATA_HOST}/computeMetadata/v1/". | ||||
| // The suffix may contain query parameters. | ||||
| // | ||||
| // Subscribe calls fn with the latest metadata value indicated by the provided | ||||
| // suffix. If the metadata value is deleted, fn is called with the empty string | ||||
| // and ok false. Subscribe blocks until fn returns a non-nil error or the value | ||||
| // is deleted. Subscribe returns the error value returned from the last call to | ||||
| // fn, which may be nil when ok == false. | ||||
| func (c *Client) Subscribe(suffix string, fn func(v string, ok bool) error) error { | ||||
| 	const failedSubscribeSleep = time.Second * 5 | ||||
|  | ||||
| 	// First check to see if the metadata value exists at all. | ||||
| 	val, lastETag, err := c.getETag(suffix) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if err := fn(val, true); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	ok := true | ||||
| 	if strings.ContainsRune(suffix, '?') { | ||||
| 		suffix += "&wait_for_change=true&last_etag=" | ||||
| 	} else { | ||||
| 		suffix += "?wait_for_change=true&last_etag=" | ||||
| 	} | ||||
| 	for { | ||||
| 		val, etag, err := c.getETag(suffix + url.QueryEscape(lastETag)) | ||||
| 		if err != nil { | ||||
| 			if _, deleted := err.(NotDefinedError); !deleted { | ||||
| 				time.Sleep(failedSubscribeSleep) | ||||
| 				continue // Retry on other errors. | ||||
| 			} | ||||
| 			ok = false | ||||
| 		} | ||||
| 		lastETag = etag | ||||
|  | ||||
| 		if err := fn(val, ok); err != nil || !ok { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										17
									
								
								vendor/cloud.google.com/go/issue_template.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/cloud.google.com/go/issue_template.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| (delete this for feature requests) | ||||
|  | ||||
| ## Client | ||||
|  | ||||
| e.g. PubSub | ||||
|  | ||||
| ## Describe Your Environment | ||||
|  | ||||
| e.g. Alpine Docker on GKE | ||||
|  | ||||
| ## Expected Behavior | ||||
|  | ||||
| e.g. Messages arrive really fast. | ||||
|  | ||||
| ## Actual Behavior | ||||
|  | ||||
| e.g. Messages arrive really slowly. | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/cloud.google.com/go/keys.tar.enc
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cloud.google.com/go/keys.tar.enc
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										698
									
								
								vendor/cloud.google.com/go/old-news.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										698
									
								
								vendor/cloud.google.com/go/old-news.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,698 @@ | ||||
| _February 26, 2018_ | ||||
|  | ||||
| *v0.19.0* | ||||
|  | ||||
| - bigquery: | ||||
|   - Support customer-managed encryption keys. | ||||
|  | ||||
| - bigtable: | ||||
|   - Improved emulator support. | ||||
|   - Support GetCluster. | ||||
|  | ||||
| - datastore: | ||||
|   - Add general mutations. | ||||
|   - Support pointer struct fields. | ||||
|   - Support transaction options. | ||||
|  | ||||
| - firestore: | ||||
|   - Add Transaction.GetAll. | ||||
|   - Support document cursors. | ||||
|  | ||||
| - logging: | ||||
|   - Support concurrent RPCs to the service. | ||||
|   - Support per-entry resources. | ||||
|  | ||||
| - profiler: | ||||
|   - Add config options to disable heap and thread profiling. | ||||
|   - Read the project ID from $GOOGLE_CLOUD_PROJECT when it's set. | ||||
|  | ||||
| - pubsub: | ||||
|   - BEHAVIOR CHANGE: Release flow control after ack/nack (instead of after the | ||||
|     callback returns). | ||||
|   - Add SubscriptionInProject. | ||||
|   - Add OpenCensus instrumentation for streaming pull. | ||||
|  | ||||
| - storage: | ||||
|   - Support CORS. | ||||
|  | ||||
|  | ||||
| _January 18, 2018_ | ||||
|  | ||||
| *v0.18.0* | ||||
|  | ||||
| - bigquery: | ||||
|   - Marked stable. | ||||
|   - Schema inference of nullable fields supported. | ||||
|   - Added TimePartitioning to QueryConfig. | ||||
|  | ||||
| - firestore: Data provided to DocumentRef.Set with a Merge option can contain | ||||
|   Delete sentinels. | ||||
|  | ||||
| - logging: Clients can accept parent resources other than projects. | ||||
|  | ||||
| - pubsub: | ||||
|   - pubsub/pstest: A lighweight fake for pubsub. Experimental; feedback welcome. | ||||
|   - Support updating more subscription metadata: AckDeadline, | ||||
|     RetainAckedMessages and RetentionDuration. | ||||
|  | ||||
| - oslogin/apiv1beta: New client for the Cloud OS Login API. | ||||
|  | ||||
| - rpcreplay: A package for recording and replaying gRPC traffic. | ||||
|  | ||||
| - spanner: | ||||
|   - Add a ReadWithOptions that supports a row limit, as well as an index. | ||||
|   - Support query plan and execution statistics. | ||||
|   - Added [OpenCensus](http://opencensus.io) support. | ||||
|  | ||||
| - storage: Clarify checksum validation for gzipped files (it is not validated | ||||
|   when the file is served uncompressed). | ||||
|  | ||||
|  | ||||
| _December 11, 2017_ | ||||
|  | ||||
| *v0.17.0* | ||||
|  | ||||
| - firestore BREAKING CHANGES: | ||||
|   - Remove UpdateMap and UpdateStruct; rename UpdatePaths to Update. | ||||
|     Change | ||||
|         `docref.UpdateMap(ctx, map[string]interface{}{"a.b", 1})` | ||||
|     to | ||||
|         `docref.Update(ctx, []firestore.Update{{Path: "a.b", Value: 1}})` | ||||
|  | ||||
|     Change | ||||
|         `docref.UpdateStruct(ctx, []string{"Field"}, aStruct)` | ||||
|     to | ||||
|         `docref.Update(ctx, []firestore.Update{{Path: "Field", Value: aStruct.Field}})` | ||||
|   - Rename MergePaths to Merge; require args to be FieldPaths | ||||
|   - A value stored as an integer can be read into a floating-point field, and vice versa. | ||||
| - bigtable/cmd/cbt: | ||||
|   - Support deleting a column. | ||||
|   - Add regex option for row read. | ||||
| - spanner: Mark stable. | ||||
| - storage: | ||||
|   - Add Reader.ContentEncoding method. | ||||
|   - Fix handling of SignedURL headers. | ||||
| - bigquery: | ||||
|   - If Uploader.Put is called with no rows, it returns nil without making a | ||||
|     call. | ||||
|   - Schema inference supports the "nullable" option in struct tags for | ||||
|     non-required fields. | ||||
|   - TimePartitioning supports "Field". | ||||
|  | ||||
|  | ||||
| _October 30, 2017_ | ||||
|  | ||||
| *v0.16.0* | ||||
|  | ||||
| - Other bigquery changes: | ||||
|   - `JobIterator.Next` returns `*Job`; removed `JobInfo` (BREAKING CHANGE). | ||||
|   - UseStandardSQL is deprecated; set UseLegacySQL to true if you need | ||||
|     Legacy SQL. | ||||
|   - Uploader.Put will generate a random insert ID if you do not provide one. | ||||
|   - Support time partitioning for load jobs. | ||||
|   - Support dry-run queries. | ||||
|   - A `Job` remembers its last retrieved status. | ||||
|   - Support retrieving job configuration. | ||||
|   - Support labels for jobs and tables. | ||||
|   - Support dataset access lists. | ||||
|   - Improve support for external data sources, including data from Bigtable and | ||||
|     Google Sheets, and tables with external data. | ||||
|   - Support updating a table's view configuration. | ||||
|   - Fix uploading civil times with nanoseconds. | ||||
|  | ||||
| - storage: | ||||
|   - Support PubSub notifications. | ||||
|   - Support Requester Pays buckets. | ||||
|  | ||||
| - profiler: Support goroutine and mutex profile types. | ||||
|  | ||||
|  | ||||
| _October 3, 2017_ | ||||
|  | ||||
| *v0.15.0* | ||||
|  | ||||
| - firestore: beta release. See the | ||||
|   [announcement](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html). | ||||
|  | ||||
| - errorreporting: The existing package has been redesigned. | ||||
|  | ||||
| - errors: This package has been removed. Use errorreporting. | ||||
|  | ||||
|  | ||||
| _September 28, 2017_ | ||||
|  | ||||
| *v0.14.0* | ||||
|  | ||||
| - bigquery BREAKING CHANGES: | ||||
|   - Standard SQL is the default for queries and views. | ||||
|   - `Table.Create` takes `TableMetadata` as a second argument, instead of | ||||
|     options. | ||||
|   - `Dataset.Create` takes `DatasetMetadata` as a second argument. | ||||
|   - `DatasetMetadata` field `ID` renamed to `FullID` | ||||
|   - `TableMetadata` field `ID` renamed to `FullID` | ||||
|  | ||||
| - Other bigquery changes: | ||||
|   - The client will append a random suffix to a provided job ID if you set | ||||
|     `AddJobIDSuffix` to true in a job config. | ||||
|   - Listing jobs is supported. | ||||
|   - Better retry logic. | ||||
|  | ||||
| - vision, language, speech: clients are now stable | ||||
|  | ||||
| - monitoring: client is now beta | ||||
|  | ||||
| - profiler: | ||||
|   - Rename InstanceName to Instance, ZoneName to Zone | ||||
|   - Auto-detect service name and version on AppEngine. | ||||
|  | ||||
| _September 8, 2017_ | ||||
|  | ||||
| *v0.13.0* | ||||
|  | ||||
| - bigquery: UseLegacySQL options for CreateTable and QueryConfig. Use these | ||||
|   options to continue using Legacy SQL after the client switches its default | ||||
|   to Standard SQL. | ||||
|  | ||||
| - bigquery: Support for updating dataset labels. | ||||
|  | ||||
| - bigquery: Set DatasetIterator.ProjectID to list datasets in a project other | ||||
|   than the client's. DatasetsInProject is no longer needed and is deprecated. | ||||
|  | ||||
| - bigtable: Fail ListInstances when any zones fail. | ||||
|  | ||||
| - spanner: support decoding of slices of basic types (e.g. []string, []int64, | ||||
|   etc.) | ||||
|  | ||||
| - logging/logadmin: UpdateSink no longer creates a sink if it is missing | ||||
|   (actually a change to the underlying service, not the client) | ||||
|  | ||||
| - profiler: Service and ServiceVersion replace Target in Config. | ||||
|  | ||||
| _August 22, 2017_ | ||||
|  | ||||
| *v0.12.0* | ||||
|  | ||||
| - pubsub: Subscription.Receive now uses streaming pull. | ||||
|  | ||||
| - pubsub: add Client.TopicInProject to access topics in a different project | ||||
|   than the client. | ||||
|  | ||||
| - errors: renamed errorreporting. The errors package will be removed shortly. | ||||
|  | ||||
| - datastore: improved retry behavior. | ||||
|  | ||||
| - bigquery: support updates to dataset metadata, with etags. | ||||
|  | ||||
| - bigquery: add etag support to Table.Update (BREAKING: etag argument added). | ||||
|  | ||||
| - bigquery: generate all job IDs on the client. | ||||
|  | ||||
| - storage: support bucket lifecycle configurations. | ||||
|  | ||||
|  | ||||
| _July 31, 2017_ | ||||
|  | ||||
| *v0.11.0* | ||||
|  | ||||
| - Clients for spanner, pubsub and video are now in beta. | ||||
|  | ||||
| - New client for DLP. | ||||
|  | ||||
| - spanner: performance and testing improvements. | ||||
|  | ||||
| - storage: requester-pays buckets are supported. | ||||
|  | ||||
| - storage, profiler, bigtable, bigquery: bug fixes and other minor improvements. | ||||
|  | ||||
| - pubsub: bug fixes and other minor improvements | ||||
|  | ||||
| _June 17, 2017_ | ||||
|  | ||||
|  | ||||
| *v0.10.0* | ||||
|  | ||||
| - pubsub: Subscription.ModifyPushConfig replaced with Subscription.Update. | ||||
|  | ||||
| - pubsub: Subscription.Receive now runs concurrently for higher throughput. | ||||
|  | ||||
| - vision: cloud.google.com/go/vision is deprecated. Use | ||||
| cloud.google.com/go/vision/apiv1 instead. | ||||
|  | ||||
| - translation: now stable. | ||||
|  | ||||
| - trace: several changes to the surface. See the link below. | ||||
|  | ||||
| [Code changes required from v0.9.0.](https://github.com/GoogleCloudPlatform/google-cloud-go/blob/master/MIGRATION.md) | ||||
|  | ||||
|  | ||||
| _March 17, 2017_ | ||||
|  | ||||
| Breaking Pubsub changes. | ||||
| * Publish is now asynchronous | ||||
| ([announcement](https://groups.google.com/d/topic/google-api-go-announce/aaqRDIQ3rvU/discussion)). | ||||
| * Subscription.Pull replaced by Subscription.Receive, which takes a callback ([announcement](https://groups.google.com/d/topic/google-api-go-announce/8pt6oetAdKc/discussion)). | ||||
| * Message.Done replaced with Message.Ack and Message.Nack. | ||||
|  | ||||
| _February 14, 2017_ | ||||
|  | ||||
| Release of a client library for Spanner. See | ||||
| the | ||||
| [blog post](https://cloudplatform.googleblog.com/2017/02/introducing-Cloud-Spanner-a-global-database-service-for-mission-critical-applications.html). | ||||
|  | ||||
| Note that although the Spanner service is beta, the Go client library is alpha. | ||||
|  | ||||
| _December 12, 2016_ | ||||
|  | ||||
| Beta release of BigQuery, DataStore, Logging and Storage. See the | ||||
| [blog post](https://cloudplatform.googleblog.com/2016/12/announcing-new-google-cloud-client.html). | ||||
|  | ||||
| Also, BigQuery now supports structs. Read a row directly into a struct with | ||||
| `RowIterator.Next`, and upload a row directly from a struct with `Uploader.Put`. | ||||
| You can also use field tags. See the [package documentation][cloud-bigquery-ref] | ||||
| for details. | ||||
|  | ||||
| _December 5, 2016_ | ||||
|  | ||||
| More changes to BigQuery: | ||||
|  | ||||
| * The `ValueList` type was removed. It is no longer necessary. Instead of | ||||
|    ```go | ||||
|    var v ValueList | ||||
|    ... it.Next(&v) .. | ||||
|    ``` | ||||
|    use | ||||
|  | ||||
|    ```go | ||||
|    var v []Value | ||||
|    ... it.Next(&v) ... | ||||
|    ``` | ||||
|  | ||||
| * Previously, repeatedly calling `RowIterator.Next` on the same `[]Value` or | ||||
|   `ValueList` would append to the slice. Now each call resets the size to zero first. | ||||
|  | ||||
| * Schema inference will infer the SQL type BYTES for a struct field of | ||||
|   type []byte. Previously it inferred STRING. | ||||
|  | ||||
| * The types `uint`, `uint64` and `uintptr` are no longer supported in schema | ||||
|   inference. BigQuery's integer type is INT64, and those types may hold values | ||||
|   that are not correctly represented in a 64-bit signed integer. | ||||
|  | ||||
| * The SQL types DATE, TIME and DATETIME are now supported. They correspond to | ||||
|   the `Date`, `Time` and `DateTime` types in the new `cloud.google.com/go/civil` | ||||
|   package. | ||||
|  | ||||
| _November 17, 2016_ | ||||
|  | ||||
| Change to BigQuery: values from INTEGER columns will now be returned as int64, | ||||
| not int. This will avoid errors arising from large values on 32-bit systems. | ||||
|  | ||||
| _November 8, 2016_ | ||||
|  | ||||
| New datastore feature: datastore now encodes your nested Go structs as Entity values, | ||||
| instead of a flattened list of the embedded struct's fields. | ||||
| This means that you may now have twice-nested slices, eg. | ||||
| ```go | ||||
| type State struct { | ||||
|   Cities  []struct{ | ||||
|     Populations []int | ||||
|   } | ||||
| } | ||||
| ``` | ||||
|  | ||||
| See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/79jtrdeuJAg) for | ||||
| more details. | ||||
|  | ||||
| _November 8, 2016_ | ||||
|  | ||||
| Breaking changes to datastore: contexts no longer hold namespaces; instead you | ||||
| must set a key's namespace explicitly. Also, key functions have been changed | ||||
| and renamed. | ||||
|  | ||||
| * The WithNamespace function has been removed. To specify a namespace in a Query, use the Query.Namespace method: | ||||
|   ```go | ||||
|   q := datastore.NewQuery("Kind").Namespace("ns") | ||||
|   ``` | ||||
|  | ||||
| * All the fields of Key are exported. That means you can construct any Key with a struct literal: | ||||
|   ```go | ||||
|   k := &Key{Kind: "Kind",  ID: 37, Namespace: "ns"} | ||||
|   ``` | ||||
|  | ||||
| * As a result of the above, the Key methods Kind, ID, d.Name, Parent, SetParent and Namespace have been removed. | ||||
|  | ||||
| * `NewIncompleteKey` has been removed, replaced by `IncompleteKey`. Replace | ||||
|   ```go | ||||
|   NewIncompleteKey(ctx, kind, parent) | ||||
|   ``` | ||||
|   with | ||||
|   ```go | ||||
|   IncompleteKey(kind, parent) | ||||
|   ``` | ||||
|   and if you do use namespaces, make sure you set the namespace on the returned key. | ||||
|  | ||||
| * `NewKey` has been removed, replaced by `NameKey` and `IDKey`. Replace | ||||
|   ```go | ||||
|   NewKey(ctx, kind, name, 0, parent) | ||||
|   NewKey(ctx, kind, "", id, parent) | ||||
|   ``` | ||||
|   with | ||||
|   ```go | ||||
|   NameKey(kind, name, parent) | ||||
|   IDKey(kind, id, parent) | ||||
|   ``` | ||||
|   and if you do use namespaces, make sure you set the namespace on the returned key. | ||||
|  | ||||
| * The `Done` variable has been removed. Replace `datastore.Done` with `iterator.Done`, from the package `google.golang.org/api/iterator`. | ||||
|  | ||||
| * The `Client.Close` method will have a return type of error. It will return the result of closing the underlying gRPC connection. | ||||
|  | ||||
| See [the announcement](https://groups.google.com/forum/#!topic/google-api-go-announce/hqXtM_4Ix-0) for | ||||
| more details. | ||||
|  | ||||
| _October 27, 2016_ | ||||
|  | ||||
| Breaking change to bigquery: `NewGCSReference` is now a function, | ||||
| not a method on `Client`. | ||||
|  | ||||
| New bigquery feature: `Table.LoaderFrom` now accepts a `ReaderSource`, enabling | ||||
| loading data into a table from a file or any `io.Reader`. | ||||
|  | ||||
| _October 21, 2016_ | ||||
|  | ||||
| Breaking change to pubsub: removed `pubsub.Done`. | ||||
|  | ||||
| Use `iterator.Done` instead, where `iterator` is the package | ||||
| `google.golang.org/api/iterator`. | ||||
|  | ||||
| _October 19, 2016_ | ||||
|  | ||||
| Breaking changes to cloud.google.com/go/bigquery: | ||||
|  | ||||
| * Client.Table and Client.OpenTable have been removed. | ||||
|     Replace | ||||
|     ```go | ||||
|     client.OpenTable("project", "dataset", "table") | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     client.DatasetInProject("project", "dataset").Table("table") | ||||
|     ``` | ||||
|  | ||||
| * Client.CreateTable has been removed. | ||||
|     Replace | ||||
|     ```go | ||||
|     client.CreateTable(ctx, "project", "dataset", "table") | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     client.DatasetInProject("project", "dataset").Table("table").Create(ctx) | ||||
|     ``` | ||||
|  | ||||
| * Dataset.ListTables have been replaced with Dataset.Tables. | ||||
|     Replace | ||||
|     ```go | ||||
|     tables, err := ds.ListTables(ctx) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     it := ds.Tables(ctx) | ||||
|     for { | ||||
|         table, err := it.Next() | ||||
|         if err == iterator.Done { | ||||
|             break | ||||
|         } | ||||
|         if err != nil { | ||||
|             // TODO: Handle error. | ||||
|         } | ||||
|         // TODO: use table. | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
| * Client.Read has been replaced with Job.Read, Table.Read and Query.Read. | ||||
|     Replace | ||||
|     ```go | ||||
|     it, err := client.Read(ctx, job) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     it, err := job.Read(ctx) | ||||
|     ``` | ||||
|   and similarly for reading from tables or queries. | ||||
|  | ||||
| * The iterator returned from the Read methods is now named RowIterator. Its | ||||
|   behavior is closer to the other iterators in these libraries. It no longer | ||||
|   supports the Schema method; see the next item. | ||||
|     Replace | ||||
|     ```go | ||||
|     for it.Next(ctx) { | ||||
|         var vals ValueList | ||||
|         if err := it.Get(&vals); err != nil { | ||||
|             // TODO: Handle error. | ||||
|         } | ||||
|         // TODO: use vals. | ||||
|     } | ||||
|     if err := it.Err(); err != nil { | ||||
|         // TODO: Handle error. | ||||
|     } | ||||
|     ``` | ||||
|     with | ||||
|     ``` | ||||
|     for { | ||||
|         var vals ValueList | ||||
|         err := it.Next(&vals) | ||||
|         if err == iterator.Done { | ||||
|             break | ||||
|         } | ||||
|         if err != nil { | ||||
|             // TODO: Handle error. | ||||
|         } | ||||
|         // TODO: use vals. | ||||
|     } | ||||
|     ``` | ||||
|     Instead of the `RecordsPerRequest(n)` option, write | ||||
|     ```go | ||||
|     it.PageInfo().MaxSize = n | ||||
|     ``` | ||||
|     Instead of the `StartIndex(i)` option, write | ||||
|     ```go | ||||
|     it.StartIndex = i | ||||
|     ``` | ||||
|  | ||||
| * ValueLoader.Load now takes a Schema in addition to a slice of Values. | ||||
|     Replace | ||||
|     ```go | ||||
|     func (vl *myValueLoader) Load(v []bigquery.Value) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     func (vl *myValueLoader) Load(v []bigquery.Value, s bigquery.Schema) | ||||
|     ``` | ||||
|  | ||||
|  | ||||
| * Table.Patch is replace by Table.Update. | ||||
|     Replace | ||||
|     ```go | ||||
|     p := table.Patch() | ||||
|     p.Description("new description") | ||||
|     metadata, err := p.Apply(ctx) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     metadata, err := table.Update(ctx, bigquery.TableMetadataToUpdate{ | ||||
|         Description: "new description", | ||||
|     }) | ||||
|     ``` | ||||
|  | ||||
| * Client.Copy is replaced by separate methods for each of its four functions. | ||||
|   All options have been replaced by struct fields. | ||||
|  | ||||
|   * To load data from Google Cloud Storage into a table, use Table.LoaderFrom. | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     client.Copy(ctx, table, gcsRef) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     table.LoaderFrom(gcsRef).Run(ctx) | ||||
|     ``` | ||||
|     Instead of passing options to Copy, set fields on the Loader: | ||||
|     ```go | ||||
|     loader := table.LoaderFrom(gcsRef) | ||||
|     loader.WriteDisposition = bigquery.WriteTruncate | ||||
|     ``` | ||||
|  | ||||
|   * To extract data from a table into Google Cloud Storage, use | ||||
|     Table.ExtractorTo. Set fields on the returned Extractor instead of | ||||
|     passing options. | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     client.Copy(ctx, gcsRef, table) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     table.ExtractorTo(gcsRef).Run(ctx) | ||||
|     ``` | ||||
|  | ||||
|   * To copy data into a table from one or more other tables, use | ||||
|     Table.CopierFrom. Set fields on the returned Copier instead of passing options. | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     client.Copy(ctx, dstTable, srcTable) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     dst.Table.CopierFrom(srcTable).Run(ctx) | ||||
|     ``` | ||||
|  | ||||
|   * To start a query job, create a Query and call its Run method. Set fields | ||||
|   on the query instead of passing options. | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     client.Copy(ctx, table, query) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     query.Run(ctx) | ||||
|     ``` | ||||
|  | ||||
| * Table.NewUploader has been renamed to Table.Uploader. Instead of options, | ||||
|   configure an Uploader by setting its fields. | ||||
|     Replace | ||||
|     ```go | ||||
|     u := table.NewUploader(bigquery.UploadIgnoreUnknownValues()) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     u := table.NewUploader(bigquery.UploadIgnoreUnknownValues()) | ||||
|     u.IgnoreUnknownValues = true | ||||
|     ``` | ||||
|  | ||||
| _October 10, 2016_ | ||||
|  | ||||
| Breaking changes to cloud.google.com/go/storage: | ||||
|  | ||||
| * AdminClient replaced by methods on Client. | ||||
|     Replace | ||||
|     ```go | ||||
|     adminClient.CreateBucket(ctx, bucketName, attrs) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     client.Bucket(bucketName).Create(ctx, projectID, attrs) | ||||
|     ``` | ||||
|  | ||||
| * BucketHandle.List replaced by BucketHandle.Objects. | ||||
|     Replace | ||||
|     ```go | ||||
|     for query != nil { | ||||
|         objs, err := bucket.List(d.ctx, query) | ||||
|         if err != nil { ... } | ||||
|         query = objs.Next | ||||
|         for _, obj := range objs.Results { | ||||
|             fmt.Println(obj) | ||||
|         } | ||||
|     } | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     iter := bucket.Objects(d.ctx, query) | ||||
|     for { | ||||
|         obj, err := iter.Next() | ||||
|         if err == iterator.Done { | ||||
|             break | ||||
|         } | ||||
|         if err != nil { ... } | ||||
|         fmt.Println(obj) | ||||
|     } | ||||
|     ``` | ||||
|     (The `iterator` package is at `google.golang.org/api/iterator`.) | ||||
|  | ||||
|     Replace `Query.Cursor` with `ObjectIterator.PageInfo().Token`. | ||||
|      | ||||
|     Replace `Query.MaxResults` with `ObjectIterator.PageInfo().MaxSize`. | ||||
|  | ||||
|  | ||||
| * ObjectHandle.CopyTo replaced by ObjectHandle.CopierFrom. | ||||
|     Replace | ||||
|     ```go | ||||
|     attrs, err := src.CopyTo(ctx, dst, nil) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     attrs, err := dst.CopierFrom(src).Run(ctx) | ||||
|     ``` | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     attrs, err := src.CopyTo(ctx, dst, &storage.ObjectAttrs{ContextType: "text/html"}) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     c := dst.CopierFrom(src) | ||||
|     c.ContextType = "text/html" | ||||
|     attrs, err := c.Run(ctx) | ||||
|     ``` | ||||
|  | ||||
| * ObjectHandle.ComposeFrom replaced by ObjectHandle.ComposerFrom. | ||||
|     Replace | ||||
|     ```go | ||||
|     attrs, err := dst.ComposeFrom(ctx, []*storage.ObjectHandle{src1, src2}, nil) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     attrs, err := dst.ComposerFrom(src1, src2).Run(ctx) | ||||
|     ``` | ||||
|  | ||||
| * ObjectHandle.Update's ObjectAttrs argument replaced by ObjectAttrsToUpdate. | ||||
|     Replace | ||||
|     ```go | ||||
|     attrs, err := obj.Update(ctx, &storage.ObjectAttrs{ContextType: "text/html"}) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     attrs, err := obj.Update(ctx, storage.ObjectAttrsToUpdate{ContextType: "text/html"}) | ||||
|     ``` | ||||
|  | ||||
| * ObjectHandle.WithConditions replaced by ObjectHandle.If. | ||||
|     Replace | ||||
|     ```go | ||||
|     obj.WithConditions(storage.Generation(gen), storage.IfMetaGenerationMatch(mgen)) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     obj.Generation(gen).If(storage.Conditions{MetagenerationMatch: mgen}) | ||||
|     ``` | ||||
|  | ||||
|     Replace | ||||
|     ```go | ||||
|     obj.WithConditions(storage.IfGenerationMatch(0)) | ||||
|     ``` | ||||
|     with | ||||
|     ```go | ||||
|     obj.If(storage.Conditions{DoesNotExist: true}) | ||||
|     ``` | ||||
|  | ||||
| * `storage.Done` replaced by `iterator.Done` (from package `google.golang.org/api/iterator`). | ||||
|  | ||||
| _October 6, 2016_ | ||||
|  | ||||
| Package preview/logging deleted. Use logging instead. | ||||
|  | ||||
| _September 27, 2016_ | ||||
|  | ||||
| Logging client replaced with preview version (see below). | ||||
|  | ||||
| _September 8, 2016_ | ||||
|  | ||||
| * New clients for some of Google's Machine Learning APIs: Vision, Speech, and | ||||
| Natural Language. | ||||
|  | ||||
| * Preview version of a new [Stackdriver Logging][cloud-logging] client in | ||||
| [`cloud.google.com/go/preview/logging`](https://godoc.org/cloud.google.com/go/preview/logging). | ||||
| This client uses gRPC as its transport layer, and supports log reading, sinks | ||||
| and metrics. It will replace the current client at `cloud.google.com/go/logging` shortly. | ||||
|  | ||||
							
								
								
									
										77
									
								
								vendor/cloud.google.com/go/regen-gapic.sh
									
									
									
										generated
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										77
									
								
								vendor/cloud.google.com/go/regen-gapic.sh
									
									
									
										generated
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # This script generates all GAPIC clients in this repo. | ||||
| # One-time setup: | ||||
| #   cd path/to/googleapis # https://github.com/googleapis/googleapis | ||||
| #   virtualenv env | ||||
| #   . env/bin/activate | ||||
| #   pip install googleapis-artman | ||||
| #   deactivate | ||||
| # | ||||
| # Regenerate: | ||||
| #   cd path/to/googleapis | ||||
| #   . env/bin/activate | ||||
| #   $GOPATH/src/cloud.google.com/go/regen-gapic.sh | ||||
| #   deactivate | ||||
| # | ||||
| # Being in googleapis directory is important; | ||||
| # that's where we find YAML files and where artman puts the "artman-genfiles" directory. | ||||
| # | ||||
| # NOTE: This script does not generate the "raw" gRPC client found in google.golang.org/genproto. | ||||
| # To do that, use the regen.sh script in the genproto repo instead. | ||||
|  | ||||
| set -ex | ||||
|  | ||||
| APIS=( | ||||
| google/iam/artman_iam_admin.yaml | ||||
| google/cloud/asset/artman_cloudasset_v1beta1.yaml | ||||
| google/iam/credentials/artman_iamcredentials_v1.yaml | ||||
| google/cloud/bigquery/datatransfer/artman_bigquerydatatransfer.yaml | ||||
| google/cloud/dataproc/artman_dataproc_v1.yaml | ||||
| google/cloud/dataproc/artman_dataproc_v1beta2.yaml | ||||
| google/cloud/dialogflow/artman_dialogflow_v2.yaml | ||||
| google/cloud/kms/artman_cloudkms.yaml | ||||
| google/cloud/language/artman_language_v1.yaml | ||||
| google/cloud/language/artman_language_v1beta2.yaml | ||||
| google/cloud/oslogin/artman_oslogin_v1.yaml | ||||
| google/cloud/oslogin/artman_oslogin_v1beta.yaml | ||||
| google/cloud/redis/artman_redis_v1beta1.yaml | ||||
| google/cloud/redis/artman_redis_v1.yaml | ||||
| google/cloud/speech/artman_speech_v1.yaml | ||||
| google/cloud/speech/artman_speech_v1p1beta1.yaml | ||||
| google/cloud/tasks/artman_cloudtasks_v2beta2.yaml | ||||
| google/cloud/tasks/artman_cloudtasks_v2beta3.yaml | ||||
| google/cloud/texttospeech/artman_texttospeech_v1.yaml | ||||
| google/cloud/videointelligence/artman_videointelligence_v1.yaml | ||||
| google/cloud/videointelligence/artman_videointelligence_v1beta1.yaml | ||||
| google/cloud/videointelligence/artman_videointelligence_v1beta2.yaml | ||||
| google/cloud/vision/artman_vision_v1.yaml | ||||
| google/cloud/vision/artman_vision_v1p1beta1.yaml | ||||
| google/container/artman_container.yaml | ||||
| google/devtools/artman_clouddebugger.yaml | ||||
| google/devtools/clouderrorreporting/artman_errorreporting.yaml | ||||
| google/devtools/cloudtrace/artman_cloudtrace_v1.yaml | ||||
| google/devtools/cloudtrace/artman_cloudtrace_v2.yaml | ||||
| google/devtools/containeranalysis/artman_containeranalysis_v1beta1.yaml | ||||
| google/firestore/artman_firestore.yaml | ||||
| google/logging/artman_logging.yaml | ||||
| google/longrunning/artman_longrunning.yaml | ||||
| google/monitoring/artman_monitoring.yaml | ||||
| google/privacy/dlp/artman_dlp_v2.yaml | ||||
| google/pubsub/artman_pubsub.yaml | ||||
| google/spanner/admin/database/artman_spanner_admin_database.yaml | ||||
| google/spanner/admin/instance/artman_spanner_admin_instance.yaml | ||||
| google/spanner/artman_spanner.yaml | ||||
| ) | ||||
|  | ||||
| for api in "${APIS[@]}"; do | ||||
|   rm -rf artman-genfiles/* | ||||
|   artman --config "$api" generate go_gapic | ||||
|   cp -r artman-genfiles/gapi-*/cloud.google.com/go/* $GOPATH/src/cloud.google.com/go/ | ||||
| done | ||||
|  | ||||
| #go list cloud.google.com/go/... | grep apiv | xargs go test | ||||
|  | ||||
| #go test -short cloud.google.com/go/... | ||||
|  | ||||
| #echo "googleapis version: $(git rev-parse HEAD)" | ||||
							
								
								
									
										88
									
								
								vendor/cloud.google.com/go/run-tests.sh
									
									
									
										generated
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										88
									
								
								vendor/cloud.google.com/go/run-tests.sh
									
									
									
										generated
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # Selectively run tests for this repo, based on what has changed | ||||
| # in a commit. Runs short tests for the whole repo, and full tests | ||||
| # for changed directories. | ||||
|  | ||||
| set -e | ||||
|  | ||||
| prefix=cloud.google.com/go | ||||
|  | ||||
| dryrun=false | ||||
| if [[ $1 == "-n" ]]; then | ||||
|   dryrun=true | ||||
|   shift | ||||
| fi | ||||
|  | ||||
| if [[ $1 == "" ]]; then | ||||
|   echo >&2 "usage: $0 [-n] COMMIT" | ||||
|   exit 1 | ||||
| fi | ||||
|  | ||||
| # Files or directories that cause all tests to run if modified. | ||||
| declare -A run_all | ||||
| run_all=([.travis.yml]=1 [run-tests.sh]=1) | ||||
|  | ||||
| function run { | ||||
|   if $dryrun; then | ||||
|     echo $* | ||||
|   else | ||||
|     (set -x; $*) | ||||
|   fi | ||||
| } | ||||
|  | ||||
|  | ||||
| # Find all the packages that have changed in this commit. | ||||
| declare -A changed_packages | ||||
|  | ||||
| for f in $(git diff-tree --no-commit-id --name-only -r $1); do | ||||
|   if [[ ${run_all[$f]} == 1 ]]; then | ||||
|     # This change requires a full test. Do it and exit. | ||||
|     run go test -race -v $prefix/... | ||||
|     exit | ||||
|   fi | ||||
|   # Map, e.g., "spanner/client.go" to "$prefix/spanner". | ||||
|   d=$(dirname $f) | ||||
|   if [[ $d == "." ]]; then | ||||
|     pkg=$prefix | ||||
|   else | ||||
|     pkg=$prefix/$d | ||||
|   fi | ||||
|   changed_packages[$pkg]=1 | ||||
| done | ||||
|  | ||||
| echo "changed packages: ${!changed_packages[*]}" | ||||
|  | ||||
|  | ||||
| # Reports whether its argument, a package name, depends (recursively) | ||||
| # on a changed package. | ||||
| function depends_on_changed_package { | ||||
|   # According to go list, a package does not depend on itself, so | ||||
|   # we test that separately. | ||||
|   if [[ ${changed_packages[$1]} == 1 ]]; then | ||||
|     return 0 | ||||
|   fi | ||||
|   for dep in $(go list -f '{{range .Deps}}{{.}} {{end}}' $1); do | ||||
|     if [[ ${changed_packages[$dep]} == 1 ]]; then | ||||
|       return 0 | ||||
|     fi | ||||
|   done | ||||
|   return 1 | ||||
| } | ||||
|  | ||||
| # Collect the packages into two separate lists. (It is faster to call "go test" on a | ||||
| # list of packages than to individually "go test" each one.) | ||||
|  | ||||
| shorts= | ||||
| fulls= | ||||
| for pkg in $(go list $prefix/...); do      # for each package in the repo | ||||
|   if depends_on_changed_package $pkg; then # if it depends on a changed package | ||||
|     fulls="$fulls $pkg"                    # run the full test | ||||
|   else                                     # otherwise | ||||
|     shorts="$shorts $pkg"                  # run the short test | ||||
|   fi | ||||
| done | ||||
| run go test -race -v -short $shorts | ||||
| if [[ $fulls != "" ]]; then | ||||
|   run go test -race -v $fulls | ||||
| fi | ||||
		Reference in New Issue
	
	Block a user