Skip to content

Commit

Permalink
Merge pull request #121 from phisco/sync-upstream-release-1.15
Browse files Browse the repository at this point in the history
Sync upstream release 1.15
  • Loading branch information
phisco authored Feb 13, 2024
2 parents 9bfa1a6 + 541ca7f commit 527a2b9
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -187,74 +187,5 @@ rules:
- apiextensions.crossplane.io
resources: ["*"]
verbs: [get, list, watch]
{{- if .Values.rbacManager.managementPolicy }}
---
# The below ClusterRoles are aggregated to the namespaced RBAC roles created by
# the Crossplane RBAC manager when it is running in --manage=All mode.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "crossplane.name" . }}:aggregate-to-ns-admin
labels:
rbac.crossplane.io/aggregate-to-ns-admin: "true"
rbac.crossplane.io/base-of-ns-admin: "true"
app: {{ template "crossplane.name" . }}
{{- include "crossplane.labels" . | indent 4 }}
rules:
# Crossplane namespace admins have access to view events.
- apiGroups: [""]
resources: [events]
verbs: [get, list, watch]
# Crossplane namespace admins may need to read or otherwise interact with
# resource claim connection secrets.
- apiGroups: [""]
resources: [secrets]
verbs: ["*"]
# Crossplane namespace admins have access to view the roles that they may be
# able to grant to other subjects.
- apiGroups: [rbac.authorization.k8s.io]
resources: [roles]
verbs: [get, list, watch]
# Crossplane namespace admins have access to grant the access they have to other
# subjects.
- apiGroups: [rbac.authorization.k8s.io]
resources: [rolebindings]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "crossplane.name" . }}:aggregate-to-ns-edit
labels:
rbac.crossplane.io/aggregate-to-ns-edit: "true"
rbac.crossplane.io/base-of-ns-edit: "true"
app: {{ template "crossplane.name" . }}
{{- include "crossplane.labels" . | indent 4 }}
rules:
# Crossplane namespace editors have access to view events.
- apiGroups: [""]
resources: [events]
verbs: [get, list, watch]
# Crossplane namespace editors may need to read or otherwise interact with
# resource claim connection secrets.
- apiGroups: [""]
resources: [secrets]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "crossplane.name" . }}:aggregate-to-ns-view
labels:
rbac.crossplane.io/aggregate-to-ns-view: "true"
rbac.crossplane.io/base-of-ns-view: "true"
app: {{ template "crossplane.name" . }}
{{- include "crossplane.labels" . | indent 4 }}
rules:
# Crossplane namespace viewers have access to view events.
- apiGroups: [""]
resources: [events]
verbs: [get, list, watch]
{{- end }}
{{- end }}
{{- end }}
15 changes: 14 additions & 1 deletion cmd/crank/xpkg/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/crossplane/crossplane-runtime/pkg/logging"

"github.com/crossplane/crossplane/internal/xpkg"
"github.com/crossplane/crossplane/internal/xpkg/upbound"
"github.com/crossplane/crossplane/internal/xpkg/upbound/credhelper"
)

Expand All @@ -62,6 +63,9 @@ type pushCmd struct {
// Flags. Keep sorted alphabetically.
PackageFiles []string `short:"f" type:"existingfile" placeholder:"PATH" help:"A comma-separated list of xpkg files to push."`

// Common Upbound API configuration.
upbound.Flags `embed:""`

// Internal state. These aren't part of the user-exposed CLI structure.
fs afero.Fs
}
Expand Down Expand Up @@ -91,6 +95,11 @@ func (c *pushCmd) AfterApply() error {

// Run runs the push cmd.
func (c *pushCmd) Run(logger logging.Logger) error { //nolint:gocyclo // This feels easier to read as-is.
upCtx, err := upbound.NewFromFlags(c.Flags, upbound.AllowMissingProfile())
if err != nil {
return err
}

tag, err := name.NewTag(c.Package, name.WithDefaultRegistry(xpkg.DefaultRegistry))
if err != nil {
return errors.Wrapf(err, errFmtNewTag, c.Package)
Expand All @@ -112,7 +121,11 @@ func (c *pushCmd) Run(logger logging.Logger) error { //nolint:gocyclo // This fe
}

kc := authn.NewMultiKeychain(
authn.NewKeychainFromHelper(credhelper.New()),
authn.NewKeychainFromHelper(credhelper.New(
credhelper.WithLogger(logger),
credhelper.WithProfile(upCtx.ProfileName),
credhelper.WithDomain(upCtx.Domain.Hostname()),
)),
authn.DefaultKeychain,
)

Expand Down
17 changes: 10 additions & 7 deletions internal/controller/apiextensions/composite/composition_render.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ const (
errMarshalProtoStruct = "cannot marshal protobuf Struct to JSON"
errSetControllerRef = "cannot set controller reference"

errFmtKindChanged = "cannot change the kind of a composed resource from %s to %s (possible composed resource template mismatch)"
errFmtNamePrefixLabel = "cannot find top-level composite resource name label %q in composite resource metadata"
errFmtKindOrGroupChanged = "cannot change the kind or group of a composed resource from %s to %s (possible composed resource template mismatch)"
errFmtNamePrefixLabel = "cannot find top-level composite resource name label %q in composite resource metadata"

// TODO(negz): Include more detail such as field paths if they exist.
// Perhaps require each patch type to have a String() method to help
Expand Down Expand Up @@ -61,13 +61,16 @@ func RenderFromJSON(o resource.Object, data []byte) error {
o.SetName(name)
o.SetNamespace(namespace)

// This resource already had a GVK (probably because it already exists), but
// This resource already had a GK (probably because it already exists), but
// when we rendered its template it changed. This shouldn't happen. Either
// someone changed the kind in the template or we're trying to use the wrong
// template (e.g. because the order of an array of anonymous templates
// someone changed the kind or group in the template, or we're trying to use the
// wrong template (e.g. because the order of an array of anonymous templates
// changed).
if !gvk.Empty() && o.GetObjectKind().GroupVersionKind() != gvk {
return errors.Errorf(errFmtKindChanged, gvk, o.GetObjectKind().GroupVersionKind())
// Please note, we don't check for version changes, as versions can change. For example,
// if a composed resource was created with a template that has a version of "v1alpha1",
// and then the template is updated to "v1beta1", the composed resource will still be valid.
if !gvk.Empty() && o.GetObjectKind().GroupVersionKind().GroupKind() != gvk.GroupKind() {
return errors.Errorf(errFmtKindOrGroupChanged, gvk, o.GetObjectKind().GroupVersionKind())
}

return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,25 @@ func TestRenderFromJSON(t *testing.T) {
err: errors.Wrap(errInvalidChar, errUnmarshalJSON),
},
},
"ExistingGVKChanged": {
reason: "We should return an error if unmarshalling the base template changed the composed resource's group, version, or kind",
"ExistingGroupChanged": {
reason: "We should return an error if unmarshalling the base template changed the composed resource's group.",
args: args{
o: composed.New(composed.FromReference(corev1.ObjectReference{
APIVersion: "example.org/v1",
Kind: "Potato",
})),
data: []byte(`{"apiVersion": "foo.io/v1", "kind": "Potato"}`),
},
want: want{
o: composed.New(composed.FromReference(corev1.ObjectReference{
APIVersion: "foo.io/v1",
Kind: "Potato",
})),
err: errors.Errorf(errFmtKindOrGroupChanged, "example.org/v1, Kind=Potato", "foo.io/v1, Kind=Potato"),
},
},
"ExistingKindChanged": {
reason: "We should return an error if unmarshalling the base template changed the composed resource's kind.",
args: args{
o: composed.New(composed.FromReference(corev1.ObjectReference{
APIVersion: "example.org/v1",
Expand All @@ -76,7 +93,23 @@ func TestRenderFromJSON(t *testing.T) {
APIVersion: "example.org/v1",
Kind: "Different",
})),
err: errors.Errorf(errFmtKindChanged, "example.org/v1, Kind=Potato", "example.org/v1, Kind=Different"),
err: errors.Errorf(errFmtKindOrGroupChanged, "example.org/v1, Kind=Potato", "example.org/v1, Kind=Different"),
},
},
"VersionCanChange": {
reason: "We should accept version changes in the base template.",
args: args{
o: composed.New(composed.FromReference(corev1.ObjectReference{
APIVersion: "example.org/v1alpha1",
Kind: "Potato",
})),
data: []byte(`{"apiVersion": "example.org/v1beta1", "kind": "Potato"}`),
},
want: want{
o: composed.New(composed.FromReference(corev1.ObjectReference{
APIVersion: "example.org/v1beta1",
Kind: "Potato",
})),
},
},
"NewComposedResource": {
Expand Down
4 changes: 4 additions & 0 deletions internal/xpkg/upbound/credhelper/credhelper.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,10 @@ func (h *Helper) List() (map[string]string, error) {
// Get gets credentials for the supplied server.
func (h *Helper) Get(serverURL string) (string, string, error) {
if !strings.Contains(serverURL, h.domain) {
h.log.Debug("Supplied server URL is not supported by this credentials helper", "serverURL", serverURL, "domain", h.domain)
return "", "", errors.New(errUnsupportedDomain)
}
h.log.Debug("Getting credentials for server", "serverURL", serverURL)
if err := h.src.Initialize(); err != nil {
return "", "", errors.Wrap(err, errInitializeSource)
}
Expand All @@ -124,11 +126,13 @@ func (h *Helper) Get(serverURL string) (string, string, error) {
}
var p config.Profile
if h.profile == "" {
h.log.Debug("No profile specified, using default profile")
_, p, err = conf.GetDefaultUpboundProfile()
if err != nil {
return "", "", errors.Wrap(err, errGetDefaultProfile)
}
} else {
h.log.Debug("Using specified profile", "profile", h.profile)
p, err = conf.GetUpboundProfile(h.profile)
if err != nil {
return "", "", errors.Wrap(err, errGetProfile)
Expand Down

0 comments on commit 527a2b9

Please sign in to comment.