mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	godep restore pushd $GOPATH/src/github.com/appc/spec git co master popd go get go4.org/errorutil rm -rf Godeps godep save ./... git add vendor git add -f $(git ls-files --other vendor/) git co -- Godeps/LICENSES Godeps/.license_file_state Godeps/OWNERS
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package gophercloud
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"net/url"
 | 
						|
	"path/filepath"
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
// WaitFor polls a predicate function, once per second, up to a timeout limit.
 | 
						|
// It usually does this to wait for a resource to transition to a certain state.
 | 
						|
// Resource packages will wrap this in a more convenient function that's
 | 
						|
// specific to a certain resource, but it can also be useful on its own.
 | 
						|
func WaitFor(timeout int, predicate func() (bool, error)) error {
 | 
						|
	start := time.Now().Second()
 | 
						|
	for {
 | 
						|
		// Force a 1s sleep
 | 
						|
		time.Sleep(1 * time.Second)
 | 
						|
 | 
						|
		// If a timeout is set, and that's been exceeded, shut it down
 | 
						|
		if timeout >= 0 && time.Now().Second()-start >= timeout {
 | 
						|
			return errors.New("A timeout occurred")
 | 
						|
		}
 | 
						|
 | 
						|
		// Execute the function
 | 
						|
		satisfied, err := predicate()
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		if satisfied {
 | 
						|
			return nil
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// NormalizeURL is an internal function to be used by provider clients.
 | 
						|
//
 | 
						|
// It ensures that each endpoint URL has a closing `/`, as expected by
 | 
						|
// ServiceClient's methods.
 | 
						|
func NormalizeURL(url string) string {
 | 
						|
	if !strings.HasSuffix(url, "/") {
 | 
						|
		return url + "/"
 | 
						|
	}
 | 
						|
	return url
 | 
						|
}
 | 
						|
 | 
						|
// NormalizePathURL is used to convert rawPath to a fqdn, using basePath as
 | 
						|
// a reference in the filesystem, if necessary. basePath is assumed to contain
 | 
						|
// either '.' when first used, or the file:// type fqdn of the parent resource.
 | 
						|
// e.g. myFavScript.yaml => file://opt/lib/myFavScript.yaml
 | 
						|
func NormalizePathURL(basePath, rawPath string) (string, error) {
 | 
						|
	u, err := url.Parse(rawPath)
 | 
						|
	if err != nil {
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
	// if a scheme is defined, it must be a fqdn already
 | 
						|
	if u.Scheme != "" {
 | 
						|
		return u.String(), nil
 | 
						|
	}
 | 
						|
	// if basePath is a url, then child resources are assumed to be relative to it
 | 
						|
	bu, err := url.Parse(basePath)
 | 
						|
	if err != nil {
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
	var basePathSys, absPathSys string
 | 
						|
	if bu.Scheme != "" {
 | 
						|
		basePathSys = filepath.FromSlash(bu.Path)
 | 
						|
		absPathSys = filepath.Join(basePathSys, rawPath)
 | 
						|
		bu.Path = filepath.ToSlash(absPathSys)
 | 
						|
		return bu.String(), nil
 | 
						|
	}
 | 
						|
 | 
						|
	absPathSys = filepath.Join(basePath, rawPath)
 | 
						|
	u.Path = filepath.ToSlash(absPathSys)
 | 
						|
	if err != nil {
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
	u.Scheme = "file"
 | 
						|
	return u.String(), nil
 | 
						|
 | 
						|
}
 |