diff --git a/discovery/openstack/openstack.go b/discovery/openstack/openstack.go index 9b5f90519b..171ead8b23 100644 --- a/discovery/openstack/openstack.go +++ b/discovery/openstack/openstack.go @@ -19,6 +19,7 @@ import ( "github.com/go-kit/kit/log" "github.com/gophercloud/gophercloud" + "github.com/gophercloud/gophercloud/openstack" "github.com/prometheus/client_golang/prometheus" "golang.org/x/net/context" @@ -52,15 +53,24 @@ type Discovery interface { // NewDiscovery returns a new OpenStackDiscovery which periodically refreshes its targets. func NewDiscovery(conf *config.OpenstackSDConfig, l log.Logger) (Discovery, error) { - opts := gophercloud.AuthOptions{ - IdentityEndpoint: conf.IdentityEndpoint, - Username: conf.Username, - UserID: conf.UserID, - Password: string(conf.Password), - TenantName: conf.ProjectName, - TenantID: conf.ProjectID, - DomainName: conf.DomainName, - DomainID: conf.DomainID, + var opts gophercloud.AuthOptions + if conf.IdentityEndpoint == "" { + var err error + opts, err = openstack.AuthOptionsFromEnv() + if err != nil { + return nil, err + } + } else { + opts = gophercloud.AuthOptions{ + IdentityEndpoint: conf.IdentityEndpoint, + Username: conf.Username, + UserID: conf.UserID, + Password: string(conf.Password), + TenantName: conf.ProjectName, + TenantID: conf.ProjectID, + DomainName: conf.DomainName, + DomainID: conf.DomainID, + } } switch conf.Role { case config.OpenStackRoleHypervisor: