1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
"github.com/juju/schema"
11
type cloudimagemetadataset struct {
12
Version int `yaml:"version"`
13
CloudImageMetadata_ []*cloudimagemetadata `yaml:"cloudimagemetadata"`
16
type cloudimagemetadata struct {
17
Stream_ string `yaml:"stream"`
18
Region_ string `yaml:"region"`
19
Version_ string `yaml:"version"`
20
Series_ string `yaml:"series"`
21
Arch_ string `yaml:"arch"`
22
VirtType_ string `yaml:"virt-type"`
23
RootStorageType_ string `yaml:"root-storage-type"`
24
RootStorageSize_ *uint64 `yaml:"root-storage-size,omitempty"`
25
DateCreated_ int64 `yaml:"date-created"`
26
Source_ string `yaml:"source"`
27
Priority_ int `yaml:"priority"`
28
ImageId_ string `yaml:"image-id"`
31
// Stream implements CloudImageMetadata.
32
func (i *cloudimagemetadata) Stream() string {
36
// Region implements CloudImageMetadata.
37
func (i *cloudimagemetadata) Region() string {
41
// Version implements CloudImageMetadata.
42
func (i *cloudimagemetadata) Version() string {
46
// Series implements CloudImageMetadata.
47
func (i *cloudimagemetadata) Series() string {
51
// Arch implements CloudImageMetadata.
52
func (i *cloudimagemetadata) Arch() string {
56
// VirtType implements CloudImageMetadata.
57
func (i *cloudimagemetadata) VirtType() string {
61
// RootStorageType implements CloudImageMetadata.
62
func (i *cloudimagemetadata) RootStorageType() string {
63
return i.RootStorageType_
66
// RootStorageSize implements CloudImageMetadata.
67
func (i *cloudimagemetadata) RootStorageSize() (uint64, bool) {
68
if i.RootStorageSize_ == nil {
71
return *i.RootStorageSize_, true
74
// DateCreated implements CloudImageMetadata.
75
func (i *cloudimagemetadata) DateCreated() int64 {
79
// Source implements CloudImageMetadata.
80
func (i *cloudimagemetadata) Source() string {
84
// Priority implements CloudImageMetadata.
85
func (i *cloudimagemetadata) Priority() int {
89
//ImageId implements CloudImageMetadata.
90
func (i *cloudimagemetadata) ImageId() string {
94
// CloudImageMetadataArgs is an argument struct used to create a
95
// new internal cloudimagemetadata type that supports the CloudImageMetadata interface.
96
type CloudImageMetadataArgs struct {
103
RootStorageType string
104
RootStorageSize *uint64
111
func newCloudImageMetadata(args CloudImageMetadataArgs) *cloudimagemetadata {
112
cloudimagemetadata := &cloudimagemetadata{
113
Stream_: args.Stream,
114
Region_: args.Region,
115
Version_: args.Version,
116
Series_: args.Series,
118
VirtType_: args.VirtType,
119
RootStorageType_: args.RootStorageType,
120
RootStorageSize_: args.RootStorageSize,
121
DateCreated_: args.DateCreated,
122
Source_: args.Source,
123
Priority_: args.Priority,
124
ImageId_: args.ImageId,
126
return cloudimagemetadata
129
func importCloudImageMetadata(source map[string]interface{}) ([]*cloudimagemetadata, error) {
130
checker := versionedChecker("cloudimagemetadata")
131
coerced, err := checker.Coerce(source, nil)
133
return nil, errors.Annotatef(err, "cloudimagemetadata version schema check failed")
135
valid := coerced.(map[string]interface{})
137
version := int(valid["version"].(int64))
138
importFunc, ok := cloudimagemetadataDeserializationFuncs[version]
140
return nil, errors.NotValidf("version %d", version)
142
sourceList := valid["cloudimagemetadata"].([]interface{})
143
return importCloudImageMetadataList(sourceList, importFunc)
146
func importCloudImageMetadataList(sourceList []interface{}, importFunc cloudimagemetadataDeserializationFunc) ([]*cloudimagemetadata, error) {
147
result := make([]*cloudimagemetadata, 0, len(sourceList))
148
for i, value := range sourceList {
149
source, ok := value.(map[string]interface{})
151
return nil, errors.Errorf("unexpected type for cloudimagemetadata %d, %#v", i, value)
153
cloudimagemetadata, err := importFunc(source)
155
return nil, errors.Annotatef(err, "cloudimagemetadata %d", i)
157
result = append(result, cloudimagemetadata)
162
type cloudimagemetadataDeserializationFunc func(map[string]interface{}) (*cloudimagemetadata, error)
164
var cloudimagemetadataDeserializationFuncs = map[int]cloudimagemetadataDeserializationFunc{
165
1: importCloudImageMetadataV1,
168
func importCloudImageMetadataV1(source map[string]interface{}) (*cloudimagemetadata, error) {
169
fields := schema.Fields{
170
"stream": schema.String(),
171
"region": schema.String(),
172
"version": schema.String(),
173
"series": schema.String(),
174
"arch": schema.String(),
175
"virt-type": schema.String(),
176
"root-storage-type": schema.String(),
177
"root-storage-size": schema.Uint(),
178
"date-created": schema.Int(),
179
"source": schema.String(),
180
"priority": schema.Int(),
181
"image-id": schema.String(),
183
// Some values don't have to be there.
184
defaults := schema.Defaults{
185
"root-storage-size": schema.Omit,
187
checker := schema.FieldMap(fields, defaults)
189
coerced, err := checker.Coerce(source, nil)
191
return nil, errors.Annotatef(err, "cloudimagemetadata v1 schema check failed")
193
valid := coerced.(map[string]interface{})
194
_, ok := valid["root-storage-size"]
195
var pointerSize *uint64
197
rootStorageSize := valid["root-storage-size"].(uint64)
198
pointerSize = &rootStorageSize
201
cloudimagemetadata := &cloudimagemetadata{
202
Stream_: valid["stream"].(string),
203
Region_: valid["region"].(string),
204
Version_: valid["version"].(string),
205
Series_: valid["series"].(string),
206
Arch_: valid["arch"].(string),
207
VirtType_: valid["virt-type"].(string),
208
RootStorageType_: valid["root-storage-type"].(string),
209
RootStorageSize_: pointerSize,
210
DateCreated_: valid["date-created"].(int64),
211
Source_: valid["source"].(string),
212
Priority_: int(valid["priority"].(int64)),
213
ImageId_: valid["image-id"].(string),
216
return cloudimagemetadata, nil