func listCloudDetails() (*cloudList, error) { clouds, _, err := jujucloud.PublicCloudMetadata(jujucloud.JujuPublicCloudsPath()) if err != nil { return nil, err } details := newCloudList() for name, cloud := range clouds { cloudDetails := makeCloudDetails(cloud) details.public[name] = cloudDetails } // Add in built in clouds like localhost (lxd). for name, cloud := range common.BuiltInClouds() { cloudDetails := makeCloudDetails(cloud) cloudDetails.Source = "built-in" details.builtin[name] = cloudDetails } personalClouds, err := jujucloud.PersonalCloudMetadata() if err != nil { return nil, err } for name, cloud := range personalClouds { // Add to result with "local:" prefix. cloudDetails := makeCloudDetails(cloud) cloudDetails.Source = "local" details.personal[localPrefix+name] = cloudDetails } return details, nil }
func listCloudDetails() (*cloudList, error) { clouds, _, err := jujucloud.PublicCloudMetadata(jujucloud.JujuPublicCloudsPath()) if err != nil { return nil, err } details := newCloudList() for name, cloud := range clouds { cloudDetails := makeCloudDetails(cloud) details.public[name] = cloudDetails } // Add in built in clouds like localhost (lxd). for name, cloud := range common.BuiltInClouds() { cloudDetails := makeCloudDetails(cloud) cloudDetails.Source = "built-in" details.builtin[name] = cloudDetails } personalClouds, err := jujucloud.PersonalCloudMetadata() if err != nil { return nil, err } for name, cloud := range personalClouds { cloudDetails := makeCloudDetails(cloud) cloudDetails.Source = "local" details.personal[name] = cloudDetails // Delete any built-in or public clouds with same name. delete(details.builtin, name) delete(details.public, name) } return details, nil }
// assembleClouds func assembleClouds() ([]string, error) { public, _, err := jujucloud.PublicCloudMetadata(jujucloud.JujuPublicCloudsPath()) if err != nil { return nil, errors.Trace(err) } personal, err := jujucloud.PersonalCloudMetadata() if err != nil { return nil, errors.Trace(err) } return sortClouds(public, common.BuiltInClouds(), personal), nil }
func (c *addCloudCommand) Run(ctxt *cmd.Context) error { specifiedClouds, err := cloud.ParseCloudMetadataFile(c.CloudFile) if err != nil { return err } if specifiedClouds == nil { return errors.New("no personal clouds are defined") } newCloud, ok := specifiedClouds[c.Cloud] if !ok { return errors.Errorf("cloud %q not found in file %q", c.Cloud, c.CloudFile) } publicClouds, _, err := cloud.PublicCloudMetadata() if err != nil { return err } if _, ok = publicClouds[c.Cloud]; ok && !c.Replace { return errors.Errorf("%q is the name of a public cloud; use --replace to use your cloud definition instead", c.Cloud) } builtinClouds := common.BuiltInClouds() if _, ok = builtinClouds[c.Cloud]; ok && !c.Replace { return errors.Errorf("%q is the name of a built-in cloud; use --replace to use your cloud definition instead", c.Cloud) } personalClouds, err := cloud.PersonalCloudMetadata() if err != nil { return err } if _, ok = personalClouds[c.Cloud]; ok && !c.Replace { return errors.Errorf("%q already exists; use --replace to replace this existing cloud", c.Cloud) } if personalClouds == nil { personalClouds = make(map[string]cloud.Cloud) } personalClouds[c.Cloud] = newCloud return cloud.WritePersonalCloudMetadata(personalClouds) }