Skip to content

Commit

Permalink
Merge pull request #3000 from Fedosin/otherclouds
Browse files Browse the repository at this point in the history
OpenStack: Use correct type to unmarshal clouds
  • Loading branch information
openshift-merge-robot committed Jan 29, 2020
2 parents 993c8ce + 1b72478 commit 1cc6935
Showing 1 changed file with 29 additions and 15 deletions.
44 changes: 29 additions & 15 deletions pkg/asset/installconfig/openstack/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,49 +40,63 @@ func defaultClientOpts(cloudName string) *clientconfig.ClientOpts {
type yamlLoadOpts struct{}

func (opts yamlLoadOpts) LoadCloudsYAML() (map[string]clientconfig.Cloud, error) {
return loadAndLog(clientconfig.FindAndReadCloudsYAML)
var clouds clientconfig.Clouds
content, err := loadAndLog(clientconfig.FindAndReadCloudsYAML)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(content, &clouds)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal yaml")
}

return clouds.Clouds, nil
}

func (opts yamlLoadOpts) LoadSecureCloudsYAML() (map[string]clientconfig.Cloud, error) {
clouds, err := loadAndLog(clientconfig.FindAndReadSecureCloudsYAML)
var clouds clientconfig.Clouds
content, err := loadAndLog(clientconfig.FindAndReadSecureCloudsYAML)
if err != nil {
if err.Error() == "no secure.yaml file found" {
// secure.yaml is optional so just ignore read error
return clouds, nil
return clouds.Clouds, nil
}
}
return clouds, err
err = yaml.Unmarshal(content, &clouds)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal yaml")
}
return clouds.Clouds, err
}

func (opts yamlLoadOpts) LoadPublicCloudsYAML() (map[string]clientconfig.Cloud, error) {
clouds, err := loadAndLog(clientconfig.FindAndReadPublicCloudsYAML)
var publicClouds clientconfig.PublicClouds
content, err := loadAndLog(clientconfig.FindAndReadPublicCloudsYAML)
if err != nil {
if err.Error() == "no clouds-public.yaml file found" {
// clouds-public.yaml is optional so just ignore read error
return clouds, nil
return publicClouds.Clouds, nil
}
}
return clouds, err
err = yaml.Unmarshal(content, &publicClouds)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal yaml")
}
return publicClouds.Clouds, err
}

func loadAndLog(fn func() (string, []byte, error)) (map[string]clientconfig.Cloud, error) {
func loadAndLog(fn func() (string, []byte, error)) ([]byte, error) {
filename, content, err := fn()
if err != nil {
return nil, err
}

var clouds clientconfig.Clouds
err = yaml.Unmarshal(content, &clouds)
if err != nil {
return nil, errors.Wrap(err, "failed to unmarshal yaml")
}

if _, has := onceLoggers[filename]; !has {
onceLoggers[filename] = new(sync.Once)
}
onceLoggers[filename].Do(func() {
logrus.Infof("Credentials loaded from file %q", filename)
})

return clouds.Clouds, nil
return content, nil
}

0 comments on commit 1cc6935

Please sign in to comment.