~rogpeppe/juju-core/themue-058-debug-log-api

« back to all changes in this revision

Viewing changes to environs/imagemetadata/urls.go

  • Committer: Frank Mueller
  • Date: 2014-01-23 14:14:49 UTC
  • mfrom: (2152.1.95 juju-core)
  • Revision ID: frank.mueller@canonical.com-20140123141449-b30l57y7gs3wjkpw
debugger: merged trunk and fixed permission and interface problems

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
package imagemetadata
5
5
 
6
6
import (
 
7
        "fmt"
 
8
        "net/url"
 
9
        "strings"
 
10
 
7
11
        "launchpad.net/juju-core/environs"
8
12
        "launchpad.net/juju-core/environs/simplestreams"
 
13
        "launchpad.net/juju-core/environs/storage"
9
14
)
10
15
 
11
16
// SupportsCustomSources represents an environment that
36
41
                sources = append(sources, customSources...)
37
42
        }
38
43
 
39
 
        if DefaultBaseURL != "" {
40
 
                sources = append(sources, simplestreams.NewURLDataSource(DefaultBaseURL, simplestreams.VerifySSLHostnames))
 
44
        defaultURL, err := ImageMetadataURL(DefaultBaseURL)
 
45
        if err != nil {
 
46
                return nil, err
 
47
        }
 
48
        if defaultURL != "" {
 
49
                sources = append(sources, simplestreams.NewURLDataSource(defaultURL, simplestreams.VerifySSLHostnames))
41
50
        }
42
51
        return sources, nil
43
52
}
 
53
 
 
54
// ImageMetadataURL returns a valid image metadata URL constructed from source.
 
55
// source may be a directory, or a URL like file://foo or http://foo.
 
56
func ImageMetadataURL(source string) (string, error) {
 
57
        if source == "" {
 
58
                return "", nil
 
59
        }
 
60
        // If source is a raw directory, we need to append the file:// prefix
 
61
        // so it can be used as a URL.
 
62
        defaultURL := source
 
63
        u, err := url.Parse(source)
 
64
        if err != nil {
 
65
                return "", fmt.Errorf("invalid default image metadata URL %s: %v", defaultURL, err)
 
66
        }
 
67
        if u.Scheme == "" {
 
68
                defaultURL = "file://" + defaultURL
 
69
                if !strings.HasSuffix(defaultURL, "/"+storage.BaseImagesPath) {
 
70
                        defaultURL = fmt.Sprintf("%s/%s", defaultURL, storage.BaseImagesPath)
 
71
                }
 
72
        }
 
73
        return defaultURL, nil
 
74
}