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) } personalClouds, err := cloud.PersonalCloudMetadata() if err != nil { return err } if _, ok = personalClouds[c.Cloud]; ok && !c.Replace { return errors.Errorf("cloud called %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) }
func getCloudDetails() (map[string]*cloudDetails, error) { clouds, _, err := jujucloud.PublicCloudMetadata(jujucloud.JujuPublicCloudsPath()) if err != nil { return nil, err } details := make(map[string]*cloudDetails) for name, cloud := range clouds { cloudDetails := makeCloudDetails(cloud) details[name] = cloudDetails } // Add in built in providers like "lxd" and "manual". for name, cloud := range common.BuiltInProviders() { cloudDetails := makeCloudDetails(cloud) cloudDetails.Source = "built-in" details[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[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 { // 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 }
func assertPersonalClouds(c *gc.C, names ...string) { personalClouds, err := jujucloud.PersonalCloudMetadata() c.Assert(err, jc.ErrorIsNil) actual := make([]string, 0, len(personalClouds)) for name := range personalClouds { actual = append(actual, name) } c.Assert(actual, jc.SameContents, names) }
// 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 *detectCredentialsCommand) allClouds() (map[string]jujucloud.Cloud, error) { clouds, _, err := jujucloud.PublicCloudMetadata(jujucloud.JujuPublicCloudsPath()) if err != nil { return nil, err } personalClouds, err := jujucloud.PersonalCloudMetadata() if err != nil { return nil, err } for k, v := range personalClouds { clouds[k] = v } return clouds, nil }
func (c *removeCloudCommand) Run(ctxt *cmd.Context) error { personalClouds, err := cloud.PersonalCloudMetadata() if err != nil { return err } if _, ok := personalClouds[c.Cloud]; !ok { ctxt.Infof("No personal cloud called %q exists", c.Cloud) return nil } delete(personalClouds, c.Cloud) if err := cloud.WritePersonalCloudMetadata(personalClouds); err != nil { return errors.Trace(err) } ctxt.Infof("Removed details of personal cloud %q", c.Cloud) return 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) }
func (s *personalCloudSuite) TestReadPersonalClouds(c *gc.C) { s.setupReadClouds(c, osenv.JujuXDGDataHomePath("clouds.yaml")) clouds, err := cloud.PersonalCloudMetadata() c.Assert(err, jc.ErrorIsNil) s.assertPersonalClouds(c, clouds) }
func (s *personalCloudSuite) TestReadPersonalCloudsNone(c *gc.C) { clouds, err := cloud.PersonalCloudMetadata() c.Assert(err, jc.ErrorIsNil) c.Assert(clouds, gc.IsNil) }
func (c *listCredentialsCommand) personalClouds() (map[string]jujucloud.Cloud, error) { if c.personalCloudsFunc == nil { return jujucloud.PersonalCloudMetadata() } return c.personalCloudsFunc() }