12
12
gc "launchpad.net/gocheck"
14
"launchpad.net/juju-core/environs/filestorage"
14
15
"launchpad.net/juju-core/environs/imagemetadata"
15
16
"launchpad.net/juju-core/environs/simplestreams"
17
"launchpad.net/juju-core/environs/storage"
16
18
"launchpad.net/juju-core/utils/set"
19
// ParseMetadata loads ImageMetadata from the specified directory.
20
func ParseMetadata(c *gc.C, metadataDir string) []*imagemetadata.ImageMetadata {
21
// ParseMetadataFromDir loads ImageMetadata from the specified directory.
22
func ParseMetadataFromDir(c *gc.C, metadataDir string) []*imagemetadata.ImageMetadata {
23
stor, err := filestorage.NewFileStorageReader(metadataDir)
24
c.Assert(err, gc.IsNil)
25
return ParseMetadataFromStorage(c, stor)
28
// ParseMetadataFromStorage loads ImageMetadata from the specified storage reader.
29
func ParseMetadataFromStorage(c *gc.C, stor storage.StorageReader) []*imagemetadata.ImageMetadata {
30
source := storage.NewStorageSimpleStreamsDataSource(stor, "images")
32
// Find the simplestreams index file.
21
33
params := simplestreams.ValueParams{
22
34
DataType: "image-ids",
23
35
ValueTemplate: imagemetadata.ImageMetadata{},
26
metadataPath := filepath.Join(metadataDir, "images")
27
source := simplestreams.NewURLDataSource("file://"+metadataPath, simplestreams.VerifySSLHostnames)
29
37
const requireSigned = false
30
38
indexPath := simplestreams.UnsignedIndex
31
39
indexRef, err := simplestreams.GetIndexWithFormat(
36
44
imageIndexMetadata := indexRef.Indexes["com.ubuntu.cloud:custom"]
37
45
c.Assert(imageIndexMetadata, gc.NotNil)
39
data, err := ioutil.ReadFile(filepath.Join(metadataPath, imageIndexMetadata.ProductsFilePath))
47
// Read the products file contents.
48
r, err := stor.Get(path.Join("images", imageIndexMetadata.ProductsFilePath))
50
c.Assert(err, gc.IsNil)
51
data, err := ioutil.ReadAll(r)
40
52
c.Assert(err, gc.IsNil)
54
// Parse the products file metadata.
42
55
url, err := source.URL(imageIndexMetadata.ProductsFilePath)
43
56
c.Assert(err, gc.IsNil)
44
57
cloudMetadata, err := simplestreams.ParseCloudMetadata(data, "products:1.0", url, imagemetadata.ImageMetadata{})
45
58
c.Assert(err, gc.IsNil)
60
// Collate the metadata.
47
61
imageMetadataMap := make(map[string]*imagemetadata.ImageMetadata)
48
62
var expectedProductIds set.Strings
49
63
var imageVersions set.Strings