Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release radix-api #660

Merged
merged 5 commits into from
Aug 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
prod ![prod](https://api.radix.equinor.com/api/v1/applications/radix-api//environments/prod/buildstatus)
qa ![qa](https://api.radix.equinor.com/api/v1/applications/radix-api//environments/qa/buildstatus)

**PROD** ![prod](https://api.radix.equinor.com/api/v1/applications/radix-api/environments/prod/buildstatus) **QA** ![qa](https://api.radix.equinor.com/api/v1/applications/radix-api/environments/qa/buildstatus) [![SCM Compliance](https://scm-compliance-api.radix.equinor.com/repos/equinor/radix-api/badge)](https://developer.equinor.com/governance/scm-policy/)
# Radix API

The Radix API is an HTTP server for accessing functionality on the [Radix](https://www.radix.equinor.com) platform. This document is for Radix developers, or anyone interested in poking around.
Expand Down
13 changes: 7 additions & 6 deletions api/alerting/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,11 @@ func (h *handler) updateRadixAlertFromAlertingConfig(ctx context.Context, radixA
}

if len(config.ReceiverSecrets) > 0 {
configSecret, err := h.getConfigSecret(ctx, radixAlert.Name)
current, err := h.getConfigSecret(ctx, radixAlert.Name)
if err != nil {
return nil, err
}
if err := h.updateConfigSecret(ctx, *configSecret, &config); err != nil {
if err := h.updateConfigSecret(ctx, *current, &config); err != nil {
return nil, err
}
}
Expand All @@ -153,18 +153,19 @@ func (h *handler) updateRadixAlertFromAlertingConfig(ctx context.Context, radixA
}

func (h *handler) updateConfigSecret(ctx context.Context, secret corev1.Secret, config *alertModels.UpdateAlertingConfig) error {
if secret.Data == nil {
secret.Data = make(map[string][]byte)
desired := secret.DeepCopy()
if desired.Data == nil {
desired.Data = make(map[string][]byte)
}

for receiverName, receiverSecret := range config.ReceiverSecrets {
if receiverSecret.SlackConfig != nil {
h.setSlackConfigSecret(*receiverSecret.SlackConfig, receiverName, &secret)
h.setSlackConfigSecret(*receiverSecret.SlackConfig, receiverName, desired)
}
}

kubeUtil, _ := kube.New(h.accounts.UserAccount.Client, h.accounts.UserAccount.RadixClient, h.accounts.UserAccount.KedaClient, h.accounts.UserAccount.SecretProviderClient)
_, err := kubeUtil.ApplySecret(ctx, h.namespace, &secret)
_, err := kubeUtil.UpdateSecret(ctx, &secret, desired)
return err
}

Expand Down
42 changes: 29 additions & 13 deletions api/environmentvariables/env_vars_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import (
"fmt"
"testing"

certclient "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned"
certclientfake "github.com/cert-manager/cert-manager/pkg/client/clientset/versioned/fake"
envvarsmodels "github.com/equinor/radix-api/api/environmentvariables/models"
controllertest "github.com/equinor/radix-api/api/test"
"github.com/equinor/radix-operator/pkg/apis/config"
"github.com/equinor/radix-operator/pkg/apis/deployment"
"github.com/equinor/radix-operator/pkg/apis/kube"
radixv1 "github.com/equinor/radix-operator/pkg/apis/radix/v1"
commontest "github.com/equinor/radix-operator/pkg/apis/test"
builders "github.com/equinor/radix-operator/pkg/apis/utils"
radixclient "github.com/equinor/radix-operator/pkg/client/clientset/versioned"
Expand All @@ -20,6 +22,7 @@ import (
prometheusfake "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/fake"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
kubefake "k8s.io/client-go/kubernetes/fake"
secretproviderfake "sigs.k8s.io/secrets-store-csi-driver/pkg/client/clientset/versioned/fake"
Expand All @@ -34,7 +37,7 @@ const (
subscriptionId = "12347718-c8f8-4995-bfbb-02655ff1f89c"
)

func setupTestWithMockHandler(t *testing.T, mockCtrl *gomock.Controller) (*commontest.Utils, *controllertest.Utils, kubernetes.Interface, radixclient.Interface, prometheusclient.Interface, *MockEnvVarsHandler) {
func setupTestWithMockHandler(t *testing.T, mockCtrl *gomock.Controller) (*commontest.Utils, *controllertest.Utils, kubernetes.Interface, radixclient.Interface, prometheusclient.Interface, certclient.Interface, *MockEnvVarsHandler) {
kubeclient, radixclient, kedaClient, prometheusclient, commonTestUtils, _, secretproviderclient, certClient := setupTest(t)

handler := NewMockEnvVarsHandler(mockCtrl)
Expand All @@ -44,7 +47,7 @@ func setupTestWithMockHandler(t *testing.T, mockCtrl *gomock.Controller) (*commo
// controllerTestUtils is used for issuing HTTP request and processing responses
controllerTestUtils := controllertest.NewTestUtils(kubeclient, radixclient, kedaClient, secretproviderclient, certClient, controller)

return &commonTestUtils, &controllerTestUtils, kubeclient, radixclient, prometheusclient, handler
return &commonTestUtils, &controllerTestUtils, kubeclient, radixclient, prometheusclient, certClient, handler
}

func setupTest(t *testing.T) (*kubefake.Clientset, *radixfake.Clientset, *kedafake.Clientset, *prometheusfake.Clientset, commontest.Utils, *kube.Kube, *secretproviderfake.Clientset, *certclientfake.Clientset) {
Expand All @@ -70,8 +73,9 @@ func Test_GetComponentEnvVars(t *testing.T) {
url := fmt.Sprintf("/api/v1/applications/%s/environments/%s/components/%s/envvars", appName, environmentName, componentName)

t.Run("Return env-vars", func(t *testing.T) {
commonTestUtils, controllerTestUtils, _, _, _, handler := setupTestWithMockHandler(t, mockCtrl)
_, err := setupDeployment(commonTestUtils, appName, environmentName, componentName, nil)
commonTestUtils, controllerTestUtils, kubeClient, radixClient, promClient, certClient, handler := setupTestWithMockHandler(t, mockCtrl)

err := setupDeployment(commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, nil)
require.NoError(t, err)
handler.EXPECT().GetComponentEnvVars(gomock.Any(), appName, environmentName, componentName).
Return([]envvarsmodels.EnvVar{
Expand Down Expand Up @@ -113,8 +117,8 @@ func Test_GetComponentEnvVars(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

commonTestUtils, controllerTestUtils, _, _, _, handler := setupTestWithMockHandler(t, mockCtrl)
_, err := setupDeployment(commonTestUtils, appName, environmentName, componentName, nil)
commonTestUtils, controllerTestUtils, kubeClient, radixClient, promClient, certClient, handler := setupTestWithMockHandler(t, mockCtrl)
err := setupDeployment(commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, nil)
require.NoError(t, err)
handler.EXPECT().GetComponentEnvVars(gomock.Any(), appName, environmentName, componentName).
Return(nil, fmt.Errorf("some-err"))
Expand Down Expand Up @@ -154,8 +158,8 @@ func Test_ChangeEnvVar(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

commonTestUtils, controllerTestUtils, _, _, _, handler := setupTestWithMockHandler(t, mockCtrl)
_, err := setupDeployment(commonTestUtils, appName, environmentName, componentName, nil)
commonTestUtils, controllerTestUtils, kubeClient, radixClient, promClient, certClient, handler := setupTestWithMockHandler(t, mockCtrl)
err := setupDeployment(commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, nil)
require.NoError(t, err)

handler.EXPECT().ChangeEnvVar(gomock.Any(), appName, environmentName, componentName, envVarsParams).
Expand All @@ -172,8 +176,8 @@ func Test_ChangeEnvVar(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

commonTestUtils, controllerTestUtils, _, _, _, handler := setupTestWithMockHandler(t, mockCtrl)
_, err := setupDeployment(commonTestUtils, appName, environmentName, componentName, nil)
commonTestUtils, controllerTestUtils, kubeClient, radixClient, promClient, certClient, handler := setupTestWithMockHandler(t, mockCtrl)
err := setupDeployment(commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, nil)
require.NoError(t, err)

handler.EXPECT().ChangeEnvVar(gomock.Any(), appName, environmentName, componentName, envVarsParams).
Expand All @@ -189,12 +193,12 @@ func Test_ChangeEnvVar(t *testing.T) {
})
}

func setupDeployment(commonTestUtils *commontest.Utils, appName, environmentName, componentName string, modifyComponentBuilder func(builders.DeployComponentBuilder)) (*radixv1.RadixDeployment, error) {
func setupDeployment(commonTestUtils *commontest.Utils, kubeClient kubernetes.Interface, radixClient radixclient.Interface, promClient prometheusclient.Interface, certClient certclient.Interface, appName, environmentName, componentName string, modifyComponentBuilder func(builders.DeployComponentBuilder)) error {
componentBuilder := builders.NewDeployComponentBuilder().WithName(componentName)
if modifyComponentBuilder != nil {
modifyComponentBuilder(componentBuilder)
}
return commonTestUtils.ApplyDeployment(
rd, err := commonTestUtils.ApplyDeployment(
context.Background(),
builders.
ARadixDeployment().
Expand All @@ -203,4 +207,16 @@ func setupDeployment(commonTestUtils *commontest.Utils, appName, environmentName
WithEnvironment(environmentName).
WithComponent(componentBuilder).
WithImageTag("1234"))
if err != nil {
return err
}

radixRegistration, err := radixClient.RadixV1().RadixRegistrations().Get(context.Background(), rd.Spec.AppName, metav1.GetOptions{})
if err != nil {
return err
}

deploymentSyncer := deployment.NewDeploymentSyncer(kubeClient, commonTestUtils.GetKubeUtil(), radixClient, promClient, certClient, radixRegistration, rd, nil, nil, &config.Config{})

return deploymentSyncer.OnSync(context.Background())
}
12 changes: 6 additions & 6 deletions api/environmentvariables/env_vars_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ func Test_GetEnvVars(t *testing.T) {
namespace := operatorutils.GetEnvironmentNamespace(appName, environmentName)
t.Run("Get existing env vars", func(t *testing.T) {
t.Parallel()
_, _, _, _, commonTestUtils, kubeUtil, _, _ := setupTest(t)
kubeClient, radixClient, _, promClient, commonTestUtils, kubeUtil, _, certClient := setupTest(t)

envVarsMap := map[string]string{
"VAR1": "val1",
"VAR2": "val2",
}
_, err := setupDeployment(&commonTestUtils, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
err := setupDeployment(&commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
builder.WithEnvironmentVariables(envVarsMap).
WithSecrets([]string{"SECRET1", "SECRET2"})
})
Expand Down Expand Up @@ -55,14 +55,14 @@ func Test_ChangeGetEnvVars(t *testing.T) {
namespace := operatorutils.GetEnvironmentNamespace(appName, environmentName)
t.Run("Change existing env var", func(t *testing.T) {
t.Parallel()
_, _, _, _, commonTestUtils, kubeUtil, _, _ := setupTest(t)
kubeClient, radixClient, _, promClient, commonTestUtils, kubeUtil, _, certClient := setupTest(t)

envVarsMap := map[string]string{
"VAR1": "val1",
"VAR2": "val2",
"VAR3": "val3",
}
_, err := setupDeployment(&commonTestUtils, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
err := setupDeployment(&commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
builder.WithEnvironmentVariables(envVarsMap)
})
require.NoError(t, err)
Expand Down Expand Up @@ -105,13 +105,13 @@ func Test_ChangeGetEnvVars(t *testing.T) {
})
t.Run("Skipped changing not-existing env vars", func(t *testing.T) {
t.Parallel()
_, _, _, _, commonTestUtils, kubeUtil, _, _ := setupTest(t)
kubeClient, radixClient, _, promClient, commonTestUtils, kubeUtil, _, certClient := setupTest(t)

envVarsMap := map[string]string{
"VAR1": "val1",
"VAR2": "val2",
}
_, err := setupDeployment(&commonTestUtils, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
err := setupDeployment(&commonTestUtils, kubeClient, radixClient, promClient, certClient, appName, environmentName, componentName, func(builder operatorutils.DeployComponentBuilder) {
builder.WithEnvironmentVariables(envVarsMap)
})
require.NoError(t, err)
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/cert-manager/cert-manager v1.15.0
github.com/equinor/radix-common v1.9.3
github.com/equinor/radix-job-scheduler v1.10.2
github.com/equinor/radix-operator v1.57.8
github.com/equinor/radix-operator v1.57.16
github.com/evanphx/json-patch/v5 v5.9.0
github.com/felixge/httpsnoop v1.0.4
github.com/golang-jwt/jwt/v5 v5.2.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ github.com/equinor/radix-job-scheduler v1.10.2 h1:Ea/gmSQjVdomC3XzkqJdR1TGQ9Bvq8
github.com/equinor/radix-job-scheduler v1.10.2/go.mod h1:cnVXZ09D0rAPTZrcgWynL/txMQnpYmPSPyzfKfTYlec=
github.com/equinor/radix-operator v1.57.8 h1:fvXky2aZmKcre2X54R9hL5sl9gK19RGfFY9Q2Gn3IQg=
github.com/equinor/radix-operator v1.57.8/go.mod h1:zCdAiP/wxyvlUO4qGoJuLW3O+ZSt9kTyHMnjmsR3fCU=
github.com/equinor/radix-operator v1.57.16 h1:kDuPbKrb/r3Iu6BtCoq50IETspvynl55X+RGug9CSqw=
github.com/equinor/radix-operator v1.57.16/go.mod h1:zCdAiP/wxyvlUO4qGoJuLW3O+ZSt9kTyHMnjmsR3fCU=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
Expand Down
Loading