Skip to content

Commit

Permalink
Resolve project name to project ID if no ID is configured.
Browse files Browse the repository at this point in the history
  • Loading branch information
kgube committed Nov 1, 2023
1 parent 3c7a4ef commit 502cc84
Showing 1 changed file with 38 additions and 1 deletion.
39 changes: 38 additions & 1 deletion internal/openstack/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
"github.com/gophercloud/utils/openstack/clientconfig"

netutil "k8s.io/apimachinery/pkg/util/net"
Expand Down Expand Up @@ -144,10 +145,18 @@ func NewClient(cfg *AuthOpts) (*OpenStackClient, error) {
return nil, err
}

projectID := cfg.ProjectID
if projectID == "" {
projectID, err = getProjectID(provider, cfg)
if err != nil {
return nil, err
}
}

return &OpenStackClient{
provider: provider,
region: cfg.Region,
projectID: cfg.ProjectID,
projectID: projectID,
}, nil
}

Expand All @@ -156,3 +165,31 @@ func (client *OpenStackClient) NewNetworkV2() (*gophercloud.ServiceClient, error
Region: client.region,
})
}

// Use the project name and project domain ID from the auth options to get the project ID.
func getProjectID(provider *gophercloud.ProviderClient, cfg *AuthOpts) (string, error) {
identityClient, err := openstack.NewIdentityV3(provider, gophercloud.EndpointOpts{Region: cfg.Region})
if err != nil {
return "", err
}

projectPage, err := projects.List(
identityClient,
projects.ListOpts{DomainID: cfg.ProjectDomainID, Name: cfg.ProjectName},
).AllPages()
if err != nil {
return "", err
}

projectList, err := projects.ExtractProjects(projectPage)
if err != nil {
return "", err
}

// Project names are unique within their domain, so there should never be more than one result.
if len(projectList) < 1 {
return "", fmt.Errorf("no project named %s in domain %s", cfg.ProjectName, cfg.DomainID)
}

return projectList[0].ID, nil
}

0 comments on commit 502cc84

Please sign in to comment.