Alerting: Include access control metadata in k8s receiver LIST & GET (#93013)

* Include access control metadata in k8s receiver List & Get

* Add tests for receiver access

* Simplify receiver access provisioning extension

- prevents edge case infinite recursion
- removes read requirement from create
This commit is contained in:
Matthew Jacobson
2024-09-12 20:57:53 +03:00
committed by GitHub
parent 0aa87fd1d4
commit ff6a20f54a
11 changed files with 686 additions and 57 deletions
@@ -133,11 +133,12 @@ func TestIntegrationAccessControl(t *testing.T) {
org1 := helper.Org1
type testCase struct {
user apis.User
canRead bool
canUpdate bool
canCreate bool
canDelete bool
user apis.User
canRead bool
canUpdate bool
canCreate bool
canDelete bool
canReadSecrets bool
}
// region users
unauthorized := helper.CreateUser("unauthorized", "Org1", org.RoleNone, []resourcepermissions.SetResourcePermissionCommand{})
@@ -215,8 +216,9 @@ func TestIntegrationAccessControl(t *testing.T) {
canRead: true,
},
{
user: secretsReader,
canRead: true,
user: secretsReader,
canRead: true,
canReadSecrets: true,
},
{
user: creator,
@@ -298,6 +300,16 @@ func TestIntegrationAccessControl(t *testing.T) {
}
if tc.canRead {
expectedWithMetadata := expected.DeepCopy()
if tc.canUpdate {
expectedWithMetadata.SetAccessControl("canWrite")
}
if tc.canDelete {
expectedWithMetadata.SetAccessControl("canDelete")
}
if tc.canReadSecrets {
expectedWithMetadata.SetAccessControl("canReadSecrets")
}
t.Run("should be able to list receivers", func(t *testing.T) {
list, err := client.List(ctx, v1.ListOptions{})
require.NoError(t, err)
@@ -307,7 +319,7 @@ func TestIntegrationAccessControl(t *testing.T) {
t.Run("should be able to read receiver by resource identifier", func(t *testing.T) {
got, err := client.Get(ctx, expected.Name, v1.GetOptions{})
require.NoError(t, err)
require.Equal(t, expected, got)
require.Equal(t, expectedWithMetadata, got)
t.Run("should get NotFound if resource does not exist", func(t *testing.T) {
_, err := client.Get(ctx, "Notfound", v1.GetOptions{})
@@ -871,6 +883,10 @@ func TestIntegrationCRUD(t *testing.T) {
require.NoError(t, err)
require.Len(t, receiver.Spec.Integrations, len(integrations))
// Set access control metadata
receiver.SetAccessControl("canWrite")
receiver.SetAccessControl("canDelete")
// Use export endpoint because it's the only way to get decrypted secrets fast.
cliCfg := helper.Org1.Admin.NewRestConfig()
legacyCli := alerting.NewAlertingLegacyAPIClient(helper.GetEnv().Server.HTTPServer.Listener.Addr().String(), cliCfg.Username, cliCfg.Password)