~juju-qa/juju-core/1.16-packaging

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/environs/imagemetadata/simplestreams.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-10-10 18:07:45 UTC
  • mfrom: (1.1.10)
  • Revision ID: package-import@ubuntu.com-20131010180745-wuo0vv7hq7faavdk
Tags: 1.16.0-0ubuntu1
New upstream stable release (LP: #1219879).

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
import (
10
10
        "fmt"
 
11
 
11
12
        "launchpad.net/juju-core/environs/simplestreams"
12
13
)
13
14
 
19
20
        ImageIds = "image-ids"
20
21
)
21
22
 
 
23
// simplestreamsImagesPublicKey is the public key required to
 
24
// authenticate the simple streams data on http://cloud-images.ubuntu.com.
 
25
// Declared as a var so it can be overidden for testing.
 
26
// See http://bazaar.launchpad.net/~smoser/simplestreams/trunk/view/head:/examples/keys/cloud-images.pub
 
27
var simplestreamsImagesPublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
 
28
Version: GnuPG v1.4.12 (GNU/Linux)
 
29
 
 
30
mQINBFCMc9EBEADDKn9mOi9VZhW+0cxmu3aFZWMg0p7NEKuIokkEdd6P+BRITccO
 
31
ddDLaBuuamMbt/V1vrxWC5J+UXe33TwgO6KGfH+ECnXD5gYdEOyjVKkUyIzYV5RV
 
32
U5BMrxTukHuh+PkcMVUy5vossCk9MivtCRIqM6eRqfeXv6IBV9MFkAbG3x96ZNI/
 
33
TqaWTlaHGszz2Axf9JccHCNfb3muLI2uVnUaojtDiZPm9SHTn6O0p7Tz7M7+P8qy
 
34
vc6bdn5FYAk+Wbo+zejYVBG/HLLE4+fNZPESGVCWZtbZODBPxppTnNVm3E84CTFt
 
35
pmWFBvBE/q2G9e8s5/mP2ATrzLdUKMxr3vcbNX+NY1Uyvn0Z02PjbxThiz1G+4qh
 
36
6Ct7gprtwXPOB/bCITZL9YLrchwXiNgLLKcGF0XjlpD1hfELGi0aPZaHFLAa6qq8
 
37
Ro9WSJljY/Z0g3woj6sXpM9TdWe/zaWhxBGmteJl33WBV7a1GucN0zF1dHIvev4F
 
38
krp13Uej3bMWLKUWCmZ01OHStLASshTqVxIBj2rgsxIcqH66DKTSdZWyBQtgm/kC
 
39
qBvuoQLFfUgIlGZihTQ96YZXqn+VfBiFbpnh1vLt24CfnVdKmzibp48KkhfqduDE
 
40
Xxx/f/uZENH7t8xCuNd3p+u1zemGNnxuO8jxS6Ico3bvnJaG4DAl48vaBQARAQAB
 
41
tG9VYnVudHUgQ2xvdWQgSW1hZ2UgQnVpbGRlciAoQ2Fub25pY2FsIEludGVybmFs
 
42
IENsb3VkIEltYWdlIEJ1aWxkZXIpIDx1YnVudHUtY2xvdWRidWlsZGVyLW5vcmVw
 
43
bHlAY2Fub25pY2FsLmNvbT6JAjgEEwECACIFAlCMc9ECGwMGCwkIBwMCBhUIAgkK
 
44
CwQWAgMBAh4BAheAAAoJEH/z9AhHbPEAvRIQAMLE4ZMYiLvwSoWPAicM+3FInaqP
 
45
2rf1ZEf1k6175/G2n8cG3vK0nIFQE9Cus+ty2LrTggm79onV2KBGGScKe3ga+meO
 
46
txj601Wd7zde10IWUa1wlTxPXBxLo6tpF4s4aw6xWOf4OFqYfPU4esKblFYn1eMK
 
47
Dd53s3/123u8BZqzFC8WSMokY6WgBa+hvr5J3qaNT95UXo1tkMf65ZXievcQJ+Hr
 
48
bp1m5pslHgd5PqzlultNWePwzqmHXXf14zI1QKtbc4UjXPQ+a59ulZLVdcpvmbjx
 
49
HdZfK0NJpQX+j5PU6bMuQ3QTMscuvrH4W41/zcZPFaPkdJE5+VcYDL17DBFVzknJ
 
50
eC1uzNHxRqSMRQy9fzOuZ72ARojvL3+cyPR1qrqSCceX1/Kp838P2/CbeNvJxadt
 
51
liwI6rzUgK7mq1Bw5LTyBo3mLwzRJ0+eJHevNpxl6VoFyuoA3rCeoyE4on3oah1G
 
52
iAJt576xXMDoa1Gdj3YtnZItEaX3jb9ZB3iz9WkzZWlZsssdyZMNmpYV30Ayj3CE
 
53
KyurYF9lzIQWyYsNPBoXORNh73jkHJmL6g1sdMaxAZeQqKqznXbuhBbt8lkbEHMJ
 
54
Stxc2IGZaNpQ+/3LCwbwCphVnSMq+xl3iLg6c0s4uRn6FGX+8aknmc/fepvRe+ba
 
55
ntqvgz+SMPKrjeevuQINBFCMc9EBEADKGFPKBL7/pMSTKf5YH1zhFH2lr7tf5hbz
 
56
ztsx6j3y+nODiaQumdG+TPMbrFlgRlJ6Ah1FTuJZqdPYObGSQ7qd/VvvYZGnDYJv
 
57
Z1kPkNDmCJrWJs+6PwNARvyLw2bMtjCIOAq/k8wByKkMzegobJgWsbr2Jb5fT4cv
 
58
FxYpm3l0QxQSw49rriO5HmwyiyG1ncvaFUcpxXJY8A2s7qX1jmjsqDY1fWsv5PaN
 
59
ue0Fr3VXfOi9p+0CfaPY0Pl4GHzat/D+wLwnOhnjl3hFtfbhY5bPl5+cD51SbOnh
 
60
2nFv+bUK5HxiZlz0bw8hTUBN3oSbAC+2zViRD/9GaBYY1QjimOuAfpO1GZmqohVI
 
61
msZKxHNIIsk5H98mN2+LB3vH+B6zrSMDm3d2Hi7ZA8wH26mLIKLbVkh7hr8RGQjf
 
62
UZRxeQEf+f8F3KVoSqmfXGJfBMUtGQMTkaIeEFpMobVeHZZ3wk+Wj3dCMZ6bbt2i
 
63
QBaoa7SU5ZmRShJkPJzCG3SkqN+g9ZcbFMQsybl+wLN7UnZ2MbSk7JEy6SLsyuVi
 
64
7EjLmqHmG2gkybisnTu3wjJezpG12oz//cuylOzjuPWUWowVQQiLs3oANzYdZ0Hp
 
65
SuNjjtEILSRnN5FAeogs0AKH6sy3kKjxtlj764CIgn1hNidSr2Hyb4xbJ/1GE3Rk
 
66
sjJi6uYIJwARAQABiQIfBBgBAgAJBQJQjHPRAhsMAAoJEH/z9AhHbPEA6IsP/3jJ
 
67
DaowJcKOBhU2TXZglHM+ZRMauHRZavo+xAKmqgQc/izgtyMxsLwJQ+wcTEQT5uqE
 
68
4DoWH2T7DGiHZd/89Qe6HuRExR4p7lQwUop7kdoabqm1wQfcqr+77Znp1+KkRDyS
 
69
lWfbsh9ARU6krQGryODEOpXJdqdzTgYhdbVRxq6dUopz1Gf+XDreFgnqJ+okGve2
 
70
fJGERKYynUmHxkFZJPWZg5ifeGVt+YY6vuOCg489dzx/CmULpjZeiOQmWyqUzqy2
 
71
QJ70/sC8BJYCjsESId9yPmgdDoMFd+gf3jhjpuZ0JHTeUUw+ncf+1kRf7LAALPJp
 
72
2PTSo7VXUwoEXDyUTM+dI02dIMcjTcY4yxvnpxRFFOtklvXt8Pwa9x/aCmJb9f0E
 
73
5FO0nj7l9pRd2g7UCJWETFRfSW52iktvdtDrBCft9OytmTl492wAmgbbGeoRq3ze
 
74
QtzkRx9cPiyNQokjXXF+SQcq586oEd8K/JUSFPdvth3IoKlfnXSQnt/hRKv71kbZ
 
75
IXmR3B/q5x2Msr+NfUxyXfUnYOZ5KertdprUfbZjudjmQ78LOvqPF8TdtHg3gD2H
 
76
+G2z+IoH7qsOsc7FaJsIIa4+dljwV3QZTE7JFmsas90bRcMuM4D37p3snOpHAHY3
 
77
p7vH1ewg+vd9ySST0+OkWXYpbMOIARfBKyrGM3nu
 
78
=+MFT
 
79
-----END PGP PUBLIC KEY BLOCK-----
 
80
`
 
81
 
22
82
// This needs to be a var so we can override it for testing.
23
83
var DefaultBaseURL = "http://cloud-images.ubuntu.com/releases"
24
84
 
28
88
}
29
89
 
30
90
func NewImageConstraint(params simplestreams.LookupParams) *ImageConstraint {
 
91
        if len(params.Series) != 1 {
 
92
                // This can only happen as a result of a coding error.
 
93
                panic(fmt.Sprintf("image constraint requires a single series, got %v", params.Series))
 
94
        }
31
95
        return &ImageConstraint{LookupParams: params}
32
96
}
33
97
 
37
101
        if stream != "" {
38
102
                stream = "." + stream
39
103
        }
40
 
        version, err := simplestreams.SeriesVersion(ic.Series)
 
104
        version, err := simplestreams.SeriesVersion(ic.Series[0])
41
105
        if err != nil {
42
106
                return nil, err
43
107
        }
63
127
// The base URL locations are as specified - the first location which has a file is the one used.
64
128
// Signed data is preferred, but if there is no signed data available and onlySigned is false,
65
129
// then unsigned data is used.
66
 
func Fetch(baseURLs []string, indexPath string, cons *ImageConstraint, onlySigned bool) ([]*ImageMetadata, error) {
 
130
func Fetch(sources []simplestreams.DataSource, indexPath string, cons *ImageConstraint, onlySigned bool) ([]*ImageMetadata, error) {
67
131
        params := simplestreams.ValueParams{
68
132
                DataType:      ImageIds,
69
133
                FilterFunc:    appendMatchingImages,
70
134
                ValueTemplate: ImageMetadata{},
71
 
        }
72
 
        items, err := simplestreams.GetMaybeSignedMetadata(baseURLs, indexPath+simplestreams.SignedSuffix, cons, true, params)
73
 
        if (err != nil || len(items) == 0) && !onlySigned {
74
 
                items, err = simplestreams.GetMaybeSignedMetadata(baseURLs, indexPath+simplestreams.UnsignedSuffix, cons, false, params)
75
 
        }
 
135
                PublicKey:     simplestreamsImagesPublicKey,
 
136
        }
 
137
        items, err := simplestreams.GetMetadata(sources, indexPath, cons, onlySigned, params)
76
138
        if err != nil {
77
139
                return nil, err
78
140
        }
91
153
 
92
154
// appendMatchingImages updates matchingImages with image metadata records from images which belong to the
93
155
// specified region. If an image already exists in matchingImages, it is not overwritten.
94
 
func appendMatchingImages(matchingImages []interface{}, images map[string]interface{}, cons simplestreams.LookupConstraint) []interface{} {
 
156
func appendMatchingImages(source simplestreams.DataSource, matchingImages []interface{},
 
157
        images map[string]interface{}, cons simplestreams.LookupConstraint) []interface{} {
 
158
 
95
159
        imagesMap := make(map[imageKey]*ImageMetadata, len(matchingImages))
96
160
        for _, val := range matchingImages {
97
161
                im := val.(*ImageMetadata)
110
174
}
111
175
 
112
176
// GetLatestImageIdMetadata is provided so it can be call by tests outside the imagemetadata package.
113
 
func GetLatestImageIdMetadata(data []byte, cons *ImageConstraint) ([]*ImageMetadata, error) {
 
177
func GetLatestImageIdMetadata(data []byte, source simplestreams.DataSource, cons *ImageConstraint) ([]*ImageMetadata, error) {
114
178
        metadata, err := simplestreams.ParseCloudMetadata(data, "products:1.0", "<unknown>", ImageMetadata{})
115
179
        if err != nil {
116
180
                return nil, err
117
181
        }
118
 
        items, err := simplestreams.GetLatestMetadata(metadata, cons, appendMatchingImages)
 
182
        items, err := simplestreams.GetLatestMetadata(metadata, cons, source, appendMatchingImages)
119
183
        if err != nil {
120
184
                return nil, err
121
185
        }