mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 03:22:11 +00:00 
			
		
		
		
	Add upload to Google Cloud Storage and Google Compute Image creation
- the image upload uses the cloud API - currently auth and image creation need the `gcloud` CLI tool. Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
		
							
								
								
									
										90
									
								
								vendor/github.com/googleapis/gax-go/invoke.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/googleapis/gax-go/invoke.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| // Copyright 2016, Google Inc. | ||||
| // All rights reserved. | ||||
| // | ||||
| // Redistribution and use in source and binary forms, with or without | ||||
| // modification, are permitted provided that the following conditions are | ||||
| // met: | ||||
| // | ||||
| //     * Redistributions of source code must retain the above copyright | ||||
| // notice, this list of conditions and the following disclaimer. | ||||
| //     * Redistributions in binary form must reproduce the above | ||||
| // copyright notice, this list of conditions and the following disclaimer | ||||
| // in the documentation and/or other materials provided with the | ||||
| // distribution. | ||||
| //     * Neither the name of Google Inc. nor the names of its | ||||
| // contributors may be used to endorse or promote products derived from | ||||
| // this software without specific prior written permission. | ||||
| // | ||||
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | ||||
| package gax | ||||
|  | ||||
| import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"golang.org/x/net/context" | ||||
| ) | ||||
|  | ||||
| // A user defined call stub. | ||||
| type APICall func(context.Context) error | ||||
|  | ||||
| // Invoke calls the given APICall, | ||||
| // performing retries as specified by opts, if any. | ||||
| func Invoke(ctx context.Context, call APICall, opts ...CallOption) error { | ||||
| 	var settings CallSettings | ||||
| 	for _, opt := range opts { | ||||
| 		opt.Resolve(&settings) | ||||
| 	} | ||||
| 	return invoke(ctx, call, settings, Sleep) | ||||
| } | ||||
|  | ||||
| // Sleep is similar to time.Sleep, but it can be interrupted by ctx.Done() closing. | ||||
| // If interrupted, Sleep returns ctx.Err(). | ||||
| func Sleep(ctx context.Context, d time.Duration) error { | ||||
| 	t := time.NewTimer(d) | ||||
| 	select { | ||||
| 	case <-ctx.Done(): | ||||
| 		t.Stop() | ||||
| 		return ctx.Err() | ||||
| 	case <-t.C: | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type sleeper func(ctx context.Context, d time.Duration) error | ||||
|  | ||||
| // invoke implements Invoke, taking an additional sleeper argument for testing. | ||||
| func invoke(ctx context.Context, call APICall, settings CallSettings, sp sleeper) error { | ||||
| 	var retryer Retryer | ||||
| 	for { | ||||
| 		err := call(ctx) | ||||
| 		if err == nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		if settings.Retry == nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if retryer == nil { | ||||
| 			if r := settings.Retry(); r != nil { | ||||
| 				retryer = r | ||||
| 			} else { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 		if d, ok := retryer.Retry(err); !ok { | ||||
| 			return err | ||||
| 		} else if err = sp(ctx, d); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user