Skip to content
This repository has been archived by the owner on Nov 8, 2022. It is now read-only.

Commit

Permalink
Merge pull request #18 from PatrykMatyjasek/pm-auth-api-v3-support
Browse files Browse the repository at this point in the history
Add support for authentication API v3
  • Loading branch information
PatrykMatyjasek authored Apr 4, 2017
2 parents 1bc908c + 6dfabe8 commit 3004746
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 13 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ Global configuration files are described in [Snap's documentation](https://githu
- `"openstack_user"` - user name used to authenticate (ex. `"admin"`)
- `"openstack_password"`- password used to authenticate (ex. `"admin"`)
- `"openstack_tenant"` - tenant name used to authenticate (ex. `"admin"`)
If you're using authentication API in v3 you need to set one of those two configuration options:
- `"domain_name"` - domain name
- `"domain_id"` - domain name

Example global configuration file for snap-plugin-collector-neutron plugin (exemplary file in [examples/cfg/] (https://github.com/intelsdi-x/snap-plugin-collector-neutron/blob/master/examples/cfg/):

Expand Down
29 changes: 25 additions & 4 deletions collector/collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import (

const (
// version of neutron plugin
version = 2
version = 3

//vendor namespace part
vendor = "intel"
Expand Down Expand Up @@ -207,13 +207,23 @@ func (c *Collector) GetMetricTypes(cfg plugin.ConfigType) ([]plugin.MetricType,
if err != nil {
return nil, err
}
domain_name := ""
domain_id := ""

endpoint := items[cfgURL].(string)
user := items[cfgUser].(string)
password := items[cfgPassword].(string)
tenant := items[cfgTenant].(string)

dom_name, _ := config.GetConfigItem(cfg, "domain_name")
dom_id, _ := config.GetConfigItem(cfg, "domain_id")
if dom_name != nil {
domain_name = dom_name.(string)
}
if dom_id != nil {
domain_id = dom_id.(string)
}
if c.provider == nil {
provider, serr := openstackintel.Authenticate(endpoint, user, password, tenant)
provider, serr := openstackintel.Authenticate(endpoint, user, password, tenant, domain_name, domain_id)
if serr != nil {
log.WithFields(serr.Fields()).Warn(serr.Error())
return nil, serr
Expand Down Expand Up @@ -276,13 +286,24 @@ func (c *Collector) CollectMetrics(metricTypes []plugin.MetricType) ([]plugin.Me
return nil, err
}

domain_name := ""
domain_id := ""

endpoint := items[cfgURL].(string)
user := items[cfgUser].(string)
password := items[cfgPassword].(string)
tenant := items[cfgTenant].(string)
dom_name, _ := config.GetConfigItem(metricTypes[0], "domain_name")
dom_id, _ := config.GetConfigItem(metricTypes[0], "domain_id")
if dom_name != nil {
domain_name = dom_name.(string)
}
if dom_id != nil {
domain_id = dom_id.(string)
}

if c.provider == nil {
provider, serr := openstackintel.Authenticate(endpoint, user, password, tenant)
provider, serr := openstackintel.Authenticate(endpoint, user, password, tenant, domain_name, domain_id)
if serr != nil {
log.WithFields(serr.Fields()).Warn(serr.Error())
return nil, serr
Expand Down
8 changes: 7 additions & 1 deletion openstack/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,20 @@ import (

// Authenticate is used to authenticate user for given tenant. Request is send to provided endpoint
// Returns authenticated provider client, which is used as a base for service clients.
func Authenticate(endpoint, user, password, tenant string) (*gophercloud.ProviderClient, serror.SnapError) {
func Authenticate(endpoint, user, password, tenant, domain_name, domain_id string) (*gophercloud.ProviderClient, serror.SnapError) {
authOpts := gophercloud.AuthOptions{
IdentityEndpoint: endpoint,
Username: user,
Password: password,
TenantName: tenant,
AllowReauth: true,
}
if domain_name != "" && domain_id == "" {
authOpts.DomainName = domain_name
}
if domain_id != "" && domain_name == "" {
authOpts.DomainID = domain_id
}

provider, err := openstack.AuthenticatedClient(authOpts)
if err != nil {
Expand Down
16 changes: 8 additions & 8 deletions openstack/neutron_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (s *TestSuite) TestGetAllTenants() {
Convey("Given list of OpenStack tenants is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, err := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, err := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), err)
th.CheckEquals(s.T(), s.Token, provider.TokenID)

Expand All @@ -93,7 +93,7 @@ func (s *TestSuite) TestGetNetworkCountPerTenant() {
Convey("Number of OpenStack networks per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -126,7 +126,7 @@ func (s *TestSuite) TestGetSubnetsCountPerTenant() {
Convey("Number of OpenStack subnets per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -158,7 +158,7 @@ func (s *TestSuite) TestGetRoutersCountPerTenant() {
Convey("Number of OpenStack routers per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -190,7 +190,7 @@ func (s *TestSuite) TestGetPortsCountPerTenant() {
Convey("Number of OpenStack ports per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -222,7 +222,7 @@ func (s *TestSuite) TestGetFloatingIPsCountPerTenant() {
Convey("Number of OpenStack floating IPs per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -253,7 +253,7 @@ func (s *TestSuite) TestGetQuotasPerTenant() {
Convey("Given list of OpenStack quotas per tenant is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)
identityClient := openstackgophercloud.NewIdentityV2(provider)
Expand Down Expand Up @@ -298,7 +298,7 @@ func (s *TestSuite) TestGetQuotasForTenant() {
Convey("Given list of OpenStack quotas for particular is requested", s.T(), func() {

Convey("When authentication is required", func() {
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin")
provider, serr := Authenticate(th.Endpoint(), "me", "secret", "admin", "", "")
th.AssertNoErr(s.T(), serr)
th.CheckEquals(s.T(), s.Token, provider.TokenID)

Expand Down

0 comments on commit 3004746

Please sign in to comment.