// UpdateCredential implements CredentialUpdater. func (s *store) UpdateCredential(cloudName string, details cloud.CloudCredential) error { releaser, err := s.acquireLock() if err != nil { return errors.Annotatef(err, "cannot update credentials for %v", cloudName) } defer releaser.Release() all, err := ReadCredentialsFile(JujuCredentialsPath()) if err != nil { return errors.Annotate(err, "cannot get credentials") } if len(all) == 0 { all = make(map[string]cloud.CloudCredential) } // Clear the default credential if we are removing that one. if existing, ok := all[cloudName]; ok && existing.DefaultCredential != "" { stillHaveDefault := false for name := range details.AuthCredentials { if name == existing.DefaultCredential { stillHaveDefault = true break } } if !stillHaveDefault { details.DefaultCredential = "" } } all[cloudName] = details return WriteCredentialsFile(all) }