github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/facadeversions.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package api
     5  
     6  // facadeVersions lists the best version of facades that we know about. This
     7  // will be used to pick out a default version for communication, given the list
     8  // of known versions that the API server tells us it is capable of supporting.
     9  // This map should be updated whenever the API server exposes a new version (so
    10  // that the client will use it whenever it is available).
    11  // New facades should start at 1.
    12  // Facades that existed before versioning start at 0.
    13  var facadeVersions = map[string]int{
    14  	"Action":                       0,
    15  	"Addresser":                    1,
    16  	"Agent":                        1,
    17  	"AllWatcher":                   0,
    18  	"AllEnvWatcher":                1,
    19  	"Annotations":                  1,
    20  	"Backups":                      0,
    21  	"Block":                        1,
    22  	"Charms":                       1,
    23  	"CharmRevisionUpdater":         0,
    24  	"Client":                       0,
    25  	"Cleaner":                      1,
    26  	"Deployer":                     0,
    27  	"DiskManager":                  1,
    28  	"EntityWatcher":                1,
    29  	"Environment":                  0,
    30  	"EnvironmentManager":           1,
    31  	"FilesystemAttachmentsWatcher": 1,
    32  	"Firewaller":                   1,
    33  	"HighAvailability":             1,
    34  	"ImageManager":                 1,
    35  	"ImageMetadata":                1,
    36  	"InstancePoller":               1,
    37  	"KeyManager":                   0,
    38  	"KeyUpdater":                   0,
    39  	"LeadershipService":            1,
    40  	"Logger":                       0,
    41  	"MachineManager":               1,
    42  	"Machiner":                     0,
    43  	"MetricsManager":               0,
    44  	"MeterStatus":                  1,
    45  	"MetricsAdder":                 1,
    46  	"Networker":                    0,
    47  	"NotifyWatcher":                0,
    48  	"Pinger":                       0,
    49  	"Provisioner":                  1,
    50  	"Reboot":                       1,
    51  	"RelationUnitsWatcher":         0,
    52  	"Resumer":                      1,
    53  	"Rsyslog":                      0,
    54  	"Service":                      1,
    55  	"Storage":                      1,
    56  	"Spaces":                       1,
    57  	"Subnets":                      1,
    58  	"StorageProvisioner":           1,
    59  	"StringsWatcher":               0,
    60  	"SystemManager":                1,
    61  	"Upgrader":                     0,
    62  	"Uniter":                       2,
    63  	"UserManager":                  0,
    64  	"VolumeAttachmentsWatcher":     1,
    65  }
    66  
    67  // bestVersion tries to find the newest version in the version list that we can
    68  // use.
    69  func bestVersion(desiredVersion int, versions []int) int {
    70  	best := 0
    71  	for _, version := range versions {
    72  		if version <= desiredVersion && version > best {
    73  			best = version
    74  		}
    75  	}
    76  	return best
    77  }