tag v0.155.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.155.0 ---------------- * Fedora 43: add shadow-utils when LockRoot is enabled, update cloud-init service name (osbuild/images#1618) * Author: Achilleas Koutsou, Reviewers: Gianluca Zuccarelli, Michael Vogt * Update osbuild dependency commit ID to latest (osbuild/images#1609) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza * Update snapshots to 20250626 (osbuild/images#1623) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro/rhel9: xz compress azure-cvm image type [HMS-8587] (osbuild/images#1620) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: introduce new image type: Azure SAP Apps [HMS-8738] (osbuild/images#1612) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: move ansible-core to sap_extras_pkgset (osbuild/images#1624) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Tomáš Hozza * github/create-tag: allow passing the version when run manually (osbuild/images#1621) * Author: Achilleas Koutsou, Reviewers: Lukáš Zapletal, Tomáš Hozza * rhel9: move image-config into pure YAML (HMS-8593) (osbuild/images#1616) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * test: split manifest checksums into separate files (osbuild/images#1625) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-06-30 --- tag v0.156.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.156.0 ---------------- * Many: delete repositories for EOL distributions (HMS-7044) (osbuild/images#1607) * Author: Tomáš Hozza, Reviewers: Michael Vogt, Simon de Vlieger * RHSM/facts: add 'image-builder CLI' API type (osbuild/images#1640) * Author: Tomáš Hozza, Reviewers: Brian C. Lane, Simon de Vlieger * Update dependencies 2025-06-29 (osbuild/images#1628) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * Update osbuild dependency commit ID to latest (osbuild/images#1627) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * [RFC] image: drop `InstallWeakDeps` from image.DiskImage (osbuild/images#1642) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger, Tomáš Hozza * build(deps): bump the go-deps group across 1 directory with 3 updates (osbuild/images#1632) * Author: dependabot[bot], Reviewers: SchutzBot, Tomáš Hozza * distro/rhel10: xz compress azure-cvm image type (osbuild/images#1638) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Simon de Vlieger * distro: cleanup/refactor distro/{defs,generic} (HMS-8744) (osbuild/images#1570) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: remove some hardcoded values from generic/images.go (osbuild/images#1636) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: small tweaks for the YAML based imagetypes (osbuild/images#1622) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger * fedora/wsl: packages and locale (osbuild/images#1635) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * image/many: make compression more generic (osbuild/images#1634) * Author: Simon de Vlieger, Reviewers: Brian C. Lane, Michael Vogt * manifest: handle content template name with spaces (osbuild/images#1641) * Author: Bryttanie, Reviewers: Brian C. Lane, Michael Vogt, Tomáš Hozza * many: implement gzip (osbuild/images#1633) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * rhel/azure: set GRUB_TERMINAL based on architecture [RHEL-91383] (osbuild/images#1626) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-07-07 ---
132 lines
3.7 KiB
Go
132 lines
3.7 KiB
Go
// Copyright 2017 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package storage
|
|
|
|
import (
|
|
"context"
|
|
|
|
"cloud.google.com/go/iam"
|
|
"cloud.google.com/go/iam/apiv1/iampb"
|
|
raw "google.golang.org/api/storage/v1"
|
|
"google.golang.org/genproto/googleapis/type/expr"
|
|
)
|
|
|
|
// IAM provides access to IAM access control for the bucket.
|
|
func (b *BucketHandle) IAM() *iam.Handle {
|
|
return iam.InternalNewHandleClient(&iamClient{
|
|
userProject: b.userProject,
|
|
retry: b.retry,
|
|
client: b.c,
|
|
}, b.name)
|
|
}
|
|
|
|
// iamClient implements the iam.client interface.
|
|
type iamClient struct {
|
|
userProject string
|
|
retry *retryConfig
|
|
client *Client
|
|
}
|
|
|
|
func (c *iamClient) Get(ctx context.Context, resource string) (p *iampb.Policy, err error) {
|
|
return c.GetWithVersion(ctx, resource, 1)
|
|
}
|
|
|
|
func (c *iamClient) GetWithVersion(ctx context.Context, resource string, requestedPolicyVersion int32) (p *iampb.Policy, err error) {
|
|
ctx, _ = startSpan(ctx, "storage.IAM.Get")
|
|
defer func() { endSpan(ctx, err) }()
|
|
|
|
o := makeStorageOpts(true, c.retry, c.userProject)
|
|
return c.client.tc.GetIamPolicy(ctx, resource, requestedPolicyVersion, o...)
|
|
}
|
|
|
|
func (c *iamClient) Set(ctx context.Context, resource string, p *iampb.Policy) (err error) {
|
|
ctx, _ = startSpan(ctx, "storage.IAM.Set")
|
|
defer func() { endSpan(ctx, err) }()
|
|
|
|
isIdempotent := len(p.Etag) > 0
|
|
o := makeStorageOpts(isIdempotent, c.retry, c.userProject)
|
|
return c.client.tc.SetIamPolicy(ctx, resource, p, o...)
|
|
}
|
|
|
|
func (c *iamClient) Test(ctx context.Context, resource string, perms []string) (permissions []string, err error) {
|
|
ctx, _ = startSpan(ctx, "storage.IAM.Test")
|
|
defer func() { endSpan(ctx, err) }()
|
|
|
|
o := makeStorageOpts(true, c.retry, c.userProject)
|
|
return c.client.tc.TestIamPermissions(ctx, resource, perms, o...)
|
|
}
|
|
|
|
func iamToStoragePolicy(ip *iampb.Policy) *raw.Policy {
|
|
return &raw.Policy{
|
|
Bindings: iamToStorageBindings(ip.Bindings),
|
|
Etag: string(ip.Etag),
|
|
Version: int64(ip.Version),
|
|
}
|
|
}
|
|
|
|
func iamToStorageBindings(ibs []*iampb.Binding) []*raw.PolicyBindings {
|
|
var rbs []*raw.PolicyBindings
|
|
for _, ib := range ibs {
|
|
rbs = append(rbs, &raw.PolicyBindings{
|
|
Role: ib.Role,
|
|
Members: ib.Members,
|
|
Condition: iamToStorageCondition(ib.Condition),
|
|
})
|
|
}
|
|
return rbs
|
|
}
|
|
|
|
func iamToStorageCondition(exprpb *expr.Expr) *raw.Expr {
|
|
if exprpb == nil {
|
|
return nil
|
|
}
|
|
return &raw.Expr{
|
|
Expression: exprpb.Expression,
|
|
Description: exprpb.Description,
|
|
Location: exprpb.Location,
|
|
Title: exprpb.Title,
|
|
}
|
|
}
|
|
|
|
func iamFromStoragePolicy(rp *raw.Policy) *iampb.Policy {
|
|
return &iampb.Policy{
|
|
Bindings: iamFromStorageBindings(rp.Bindings),
|
|
Etag: []byte(rp.Etag),
|
|
}
|
|
}
|
|
|
|
func iamFromStorageBindings(rbs []*raw.PolicyBindings) []*iampb.Binding {
|
|
var ibs []*iampb.Binding
|
|
for _, rb := range rbs {
|
|
ibs = append(ibs, &iampb.Binding{
|
|
Role: rb.Role,
|
|
Members: rb.Members,
|
|
Condition: iamFromStorageCondition(rb.Condition),
|
|
})
|
|
}
|
|
return ibs
|
|
}
|
|
|
|
func iamFromStorageCondition(rawexpr *raw.Expr) *expr.Expr {
|
|
if rawexpr == nil {
|
|
return nil
|
|
}
|
|
return &expr.Expr{
|
|
Expression: rawexpr.Expression,
|
|
Description: rawexpr.Description,
|
|
Location: rawexpr.Location,
|
|
Title: rawexpr.Title,
|
|
}
|
|
}
|