39
39
if err := export.readAllSettings(); err != nil {
40
40
return nil, errors.Trace(err)
42
if err := export.readAllStorageConstraints(); err != nil {
43
return nil, errors.Trace(err)
42
45
if err := export.readAllAnnotations(); err != nil {
43
46
return nil, errors.Trace(err)
114
117
return nil, errors.Trace(err)
120
if err := export.cloudimagemetadata(); err != nil {
121
return nil, errors.Trace(err)
117
124
if err := export.model.Validate(); err != nil {
118
125
return nil, errors.Trace(err)
129
136
model description.Model
130
137
logger loggo.Logger
132
annotations map[string]annotatorDoc
133
constraints map[string]bson.M
134
modelSettings map[string]settingsDoc
135
status map[string]bson.M
136
statusHistory map[string][]historicalStatusDoc
139
annotations map[string]annotatorDoc
140
constraints map[string]bson.M
141
modelSettings map[string]settingsDoc
142
modelStorageConstraints map[string]storageConstraintsDoc
143
status map[string]bson.M
144
statusHistory map[string][]historicalStatusDoc
137
145
// Map of application name to units. Populated as part
138
146
// of the applications export.
139
147
units map[string][]*Unit
190
198
CreatedBy: user.CreatedBy,
191
199
DateCreated: user.DateCreated,
192
200
LastConnection: lastConn,
201
Access: string(user.Access),
195
203
e.model.AddUser(arg)
483
486
applicationUnits := e.units[application.Name()]
484
487
leader := leaders[application.Name()]
485
488
if err := e.addApplication(addApplicationContext{
486
application: application,
487
units: applicationUnits,
488
storageConstraints: storageConstraints,
489
meterStatus: meterStatus,
489
application: application,
490
units: applicationUnits,
491
meterStatus: meterStatus,
493
495
return errors.Trace(err)
499
func (e *exporter) readAllStorageConstraints() (map[string]map[string]StorageConstraints, error) {
501
func (e *exporter) readAllStorageConstraints() error {
500
502
coll, closer := e.st.getCollection(storageConstraintsC)
503
result := make(map[string]map[string]StorageConstraints)
505
storageConstraints := make(map[string]storageConstraintsDoc)
504
506
var doc storageConstraintsDoc
506
507
iter := coll.Find(nil).Iter()
507
508
defer iter.Close()
508
509
for iter.Next(&doc) {
509
result[e.st.localID(doc.DocID)] = doc.Constraints
510
storageConstraints[e.st.localID(doc.DocID)] = doc
512
512
if err := iter.Err(); err != nil {
513
return nil, errors.Annotate(err, "failed to read storage constraints")
513
return errors.Annotate(err, "failed to read storage constraints")
515
e.logger.Debugf("read %d storage constraint documents", count)
515
e.logger.Debugf("read %d storage constraint documents", len(storageConstraints))
516
e.modelStorageConstraints = storageConstraints
519
func (e *exporter) storageConstraints(constraints map[string]StorageConstraints) map[string]description.StorageConstraintArgs {
520
func (e *exporter) storageConstraints(doc storageConstraintsDoc) map[string]description.StorageConstraintArgs {
520
521
result := make(map[string]description.StorageConstraintArgs)
521
for key, value := range constraints {
522
for key, value := range doc.Constraints {
522
523
result[key] = description.StorageConstraintArgs{
523
524
Pool: value.Pool,
524
525
Size: value.Size,
556
557
type addApplicationContext struct {
557
application *Application
559
storageConstraints map[string]map[string]StorageConstraints
560
meterStatus map[string]*meterStatusDoc
562
payloads map[string][]payload.FullPayloadInfo
558
application *Application
560
meterStatus map[string]*meterStatusDoc
562
payloads map[string][]payload.FullPayloadInfo
565
565
func (e *exporter) addApplication(ctx addApplicationContext) error {
567
567
appName := application.Name()
568
568
settingsKey := application.settingsKey()
569
569
leadershipKey := leadershipSettingsKey(appName)
570
storageConstraintsKey := application.storageConstraintsKey()
571
572
applicationSettingsDoc, found := e.modelSettings[settingsKey]
592
593
LeadershipSettings: leadershipSettingsDoc.Settings,
593
594
MetricsCredentials: application.doc.MetricCredentials,
595
globalKey := application.globalKey()
596
if constraints, found := ctx.storageConstraints[globalKey]; found {
596
if constraints, found := e.modelStorageConstraints[storageConstraintsKey]; found {
597
597
args.StorageConstraints = e.storageConstraints(constraints)
599
599
exApplication := e.model.AddApplication(args)
600
600
// Find the current application status.
601
globalKey := application.globalKey()
601
602
statusArgs, err := e.statusArgs(globalKey)
603
604
return errors.Annotatef(err, "status for application %s", appName)
864
func (e *exporter) cloudimagemetadata() error {
865
cloudimagemetadata, err := e.st.CloudImageMetadataStorage.AllCloudImageMetadata()
867
return errors.Trace(err)
869
e.logger.Debugf("read %d cloudimagemetadata", len(cloudimagemetadata))
870
for _, metadata := range cloudimagemetadata {
871
e.model.AddCloudImageMetadata(description.CloudImageMetadataArgs{
872
Stream: metadata.Stream,
873
Region: metadata.Region,
874
Version: metadata.Version,
875
Series: metadata.Series,
877
VirtType: metadata.VirtType,
878
RootStorageType: metadata.RootStorageType,
879
RootStorageSize: metadata.RootStorageSize,
880
DateCreated: metadata.DateCreated,
881
Source: metadata.Source,
882
Priority: metadata.Priority,
883
ImageId: metadata.ImageId,
863
889
func (e *exporter) actions() error {
864
890
actions, err := e.st.AllActions()