Skip to content

Commit 8995dd6

Browse files
Merge pull request openshift#8213 from bharath-b-rh/cors-3254
CORS-3254: Update google.golang.org/api/cloudresourcemanager library version
2 parents 7c0a306 + b9c61f2 commit 8995dd6

File tree

18 files changed

+149
-185
lines changed

18 files changed

+149
-185
lines changed

pkg/asset/cluster/tfvars/tfvars.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,7 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error {
554554
return fmt.Errorf("%s: No GCP build found", st.FormatPrefix(archName))
555555
}
556556

557-
tags, err := gcpconfig.GetUserTags(ctx,
558-
gcpconfig.NewTagManager(client),
557+
tags, err := gcpconfig.NewTagManager(client).GetUserTags(ctx,
559558
installConfig.Config.Platform.GCP.ProjectID,
560559
installConfig.Config.Platform.GCP.UserTags)
561560
if err != nil {

pkg/asset/ignition/bootstrap/gcp/storage.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/openshift/installer/pkg/asset/installconfig"
1212
gcpic "github.com/openshift/installer/pkg/asset/installconfig/gcp"
13+
gcpconsts "github.com/openshift/installer/pkg/constants/gcp"
1314
)
1415

1516
const (
@@ -53,7 +54,7 @@ func CreateBucketHandle(ctx context.Context, bucketName string) (*storage.Bucket
5354
// the data stored inside the object can be set at a later time.
5455
func CreateStorage(ctx context.Context, ic *installconfig.InstallConfig, bucketHandle *storage.BucketHandle, clusterID string) error {
5556
labels := map[string]string{}
56-
labels[fmt.Sprintf("kubernetes-io-cluster-%s", clusterID)] = "owned"
57+
labels[fmt.Sprintf(gcpconsts.ClusterIDLabelFmt, clusterID)] = "owned"
5758
for _, label := range ic.Config.GCP.UserLabels {
5859
labels[label.Key] = label.Value
5960
}

pkg/asset/installconfig/gcp/client.go

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@ import (
88

99
"github.com/pkg/errors"
1010
googleoauth "golang.org/x/oauth2/google"
11-
"google.golang.org/api/cloudresourcemanager/v1"
11+
"google.golang.org/api/cloudresourcemanager/v3"
1212
compute "google.golang.org/api/compute/v1"
1313
dns "google.golang.org/api/dns/v1"
1414
"google.golang.org/api/googleapi"
1515
iam "google.golang.org/api/iam/v1"
1616
"google.golang.org/api/option"
1717
"google.golang.org/api/serviceusage/v1"
1818
"k8s.io/apimachinery/pkg/util/sets"
19+
20+
gcpconsts "github.com/openshift/installer/pkg/constants/gcp"
1921
)
2022

2123
//go:generate mockgen -source=./client.go -destination=./mock/gcpclient_generated.go -package=mock
@@ -48,6 +50,8 @@ type API interface {
4850
GetProjectPermissions(ctx context.Context, project string, permissions []string) (sets.Set[string], error)
4951
GetProjectByID(ctx context.Context, project string) (*cloudresourcemanager.Project, error)
5052
ValidateServiceAccountHasPermissions(ctx context.Context, project string, permissions []string) (bool, error)
53+
GetProjectTags(ctx context.Context, projectID string) (sets.Set[string], error)
54+
GetNamespacedTagValue(ctx context.Context, tagNamespacedName string) (*cloudresourcemanager.TagValue, error)
5155
}
5256

5357
// Client makes calls to the GCP API.
@@ -317,9 +321,9 @@ func (c *Client) GetProjects(ctx context.Context) (map[string]string, error) {
317321
return nil, err
318322
}
319323

320-
req := svc.Projects.List()
324+
req := svc.Projects.Search()
321325
projects := make(map[string]string)
322-
if err := req.Pages(ctx, func(page *cloudresourcemanager.ListProjectsResponse) error {
326+
if err := req.Pages(ctx, func(page *cloudresourcemanager.SearchProjectsResponse) error {
323327
for _, project := range page.Projects {
324328
projects[project.ProjectId] = project.Name
325329
}
@@ -340,7 +344,7 @@ func (c *Client) GetProjectByID(ctx context.Context, project string) (*cloudreso
340344
return nil, err
341345
}
342346

343-
return svc.Projects.Get(project).Context(ctx).Do()
347+
return svc.Projects.Get(fmt.Sprintf(gcpconsts.ProjectNameFmt, project)).Context(ctx).Do()
344348
}
345349

346350
// GetRegions gets the regions that are valid for the project. An error is returned when unsuccessful
@@ -485,7 +489,7 @@ func (c *Client) getPermissions(ctx context.Context, project string, permissions
485489

486490
projectsService := cloudresourcemanager.NewProjectsService(service)
487491
rb := &cloudresourcemanager.TestIamPermissionsRequest{Permissions: permissions}
488-
response, err := projectsService.TestIamPermissions(project, rb).Context(ctx).Do()
492+
response, err := projectsService.TestIamPermissions(fmt.Sprintf(gcpconsts.ProjectNameFmt, project), rb).Context(ctx).Do()
489493
if err != nil {
490494
return nil, errors.Wrapf(err, "failed to get Iam permissions")
491495
}
@@ -513,3 +517,49 @@ func (c *Client) ValidateServiceAccountHasPermissions(ctx context.Context, proje
513517
}
514518
return validPermissions.Len() == len(permissions), nil
515519
}
520+
521+
// GetProjectTags returns the list of effective tags attached to the provided project resource.
522+
func (c *Client) GetProjectTags(ctx context.Context, projectID string) (sets.Set[string], error) {
523+
service, err := c.getCloudResourceService(ctx)
524+
if err != nil {
525+
return nil, fmt.Errorf("failed to create cloud resource service: %w", err)
526+
}
527+
528+
effectiveTags := sets.New[string]()
529+
effectiveTagsService := cloudresourcemanager.NewEffectiveTagsService(service)
530+
effectiveTagsRequest := effectiveTagsService.List().
531+
Context(ctx).
532+
Parent(fmt.Sprintf(gcpconsts.ProjectParentPathFmt, projectID))
533+
534+
if err := effectiveTagsRequest.Pages(ctx, func(page *cloudresourcemanager.ListEffectiveTagsResponse) error {
535+
for _, effectiveTag := range page.EffectiveTags {
536+
effectiveTags.Insert(effectiveTag.NamespacedTagValue)
537+
}
538+
return nil
539+
}); err != nil {
540+
return nil, fmt.Errorf("failed to fetch tags attached to %s project: %w", projectID, err)
541+
}
542+
543+
return effectiveTags, nil
544+
}
545+
546+
// GetNamespacedTagValue returns the Tag Value metadata fetched using the tag's NamespacedName.
547+
func (c *Client) GetNamespacedTagValue(ctx context.Context, tagNamespacedName string) (*cloudresourcemanager.TagValue, error) {
548+
service, err := c.getCloudResourceService(ctx)
549+
if err != nil {
550+
return nil, fmt.Errorf("failed to create cloud resource service: %w", err)
551+
}
552+
553+
tagValuesService := cloudresourcemanager.NewTagValuesService(service)
554+
555+
tagValue, err := tagValuesService.GetNamespaced().
556+
Context(ctx).
557+
Name(tagNamespacedName).
558+
Do()
559+
560+
if err != nil {
561+
return nil, fmt.Errorf("failed to fetch %s tag value: %w", tagNamespacedName, err)
562+
}
563+
564+
return tagValue, nil
565+
}

pkg/asset/installconfig/gcp/mock/gcpclient_generated.go

Lines changed: 31 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/asset/installconfig/gcp/mock/usertags_mock.go

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)