Skip to content

Commit f3246d4

Browse files
committed
testing
Signed-off-by: sk593 <shruthikumar@microsoft.com>
1 parent 1d2085d commit f3246d4

File tree

5 files changed

+211
-88
lines changed

5 files changed

+211
-88
lines changed

.github/scripts/configure-azure-provider.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ fi
6262

6363
printf "\033[34;1m=>\033[0m Configuring Azure provider for Radius tests\n"
6464

65-
if ! az group exists --name "$AZURE_RESOURCE_GROUP" --subscription "$AZURE_SUBSCRIPTION_ID" >/dev/null 2>&1; then
65+
# az group exists returns "true" or "false" as text, not an exit code
66+
if [[ "$(az group exists --name "$AZURE_RESOURCE_GROUP" --subscription "$AZURE_SUBSCRIPTION_ID" 2>/dev/null)" != "true" ]]; then
6667
echo "Error: Azure resource group '$AZURE_RESOURCE_GROUP' not found. Create it before running configure-azure-provider." >&2
6768
exit 1
6869
fi

.github/workflows/validate-azure-recipes.yaml

Lines changed: 84 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,64 @@ permissions:
1818
contents: read
1919

2020
jobs:
21+
setup-azure:
22+
runs-on: ubuntu-24.04
23+
timeout-minutes: 10
24+
name: Setup Azure Resource Group
25+
environment: azure
26+
permissions:
27+
id-token: write
28+
contents: read
29+
outputs:
30+
resource-group: ${{ steps.set-context.outputs.resource-group }}
31+
location: ${{ steps.set-context.outputs.location }}
32+
steps:
33+
- name: Azure Login
34+
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
35+
with:
36+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
37+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
38+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
39+
40+
- name: Set Azure Test Context
41+
id: set-context
42+
run: |
43+
LOCATION="${AZURE_LOCATION:-${{ vars.AZURE_LOCATION }}}"
44+
if [ -z "$LOCATION" ]; then
45+
LOCATION="westus3"
46+
fi
47+
RG="rrttest-${{ github.run_id }}-${{ github.run_attempt }}"
48+
echo "location=$LOCATION" >> "$GITHUB_OUTPUT"
49+
echo "resource-group=$RG" >> "$GITHUB_OUTPUT"
50+
51+
- name: Create Azure Resource Group
52+
env:
53+
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
54+
run: |
55+
set -euo pipefail
56+
RG="${{ steps.set-context.outputs.resource-group }}"
57+
LOCATION="${{ steps.set-context.outputs.location }}"
58+
current_time=$(date +%s)
59+
az group create \
60+
--only-show-errors \
61+
--output none \
62+
--location "$LOCATION" \
63+
--name "$RG" \
64+
--subscription "$AZURE_SUBSCRIPTION_ID" \
65+
--tags creationTime=$current_time > /dev/null
66+
# Wait for resource group to be fully available
67+
while [[ "$(az group exists --name "$RG" --subscription "$AZURE_SUBSCRIPTION_ID")" != "true" ]]; do
68+
echo "Waiting for resource group '$RG' to be available..."
69+
sleep 5
70+
done
71+
echo "Resource group '$RG' is ready"
72+
2173
validate-azure-recipes:
2274
runs-on: ubuntu-24.04
2375
timeout-minutes: 30
2476
name: Validate Azure ${{ matrix.recipe }} Recipes
2577
environment: azure
78+
needs: setup-azure
2679
strategy:
2780
fail-fast: false
2881
matrix:
@@ -34,6 +87,8 @@ jobs:
3487
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
3588
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
3689
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
90+
AZURE_RESOURCE_GROUP: ${{ needs.setup-azure.outputs.resource-group }}
91+
AZURE_LOCATION: ${{ needs.setup-azure.outputs.location }}
3792
steps:
3893
- name: Checkout
3994
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
@@ -49,31 +104,11 @@ jobs:
49104

50105
- name: Set Azure Test Context
51106
run: |
52-
LOCATION="${AZURE_LOCATION:-${{ vars.AZURE_LOCATION }}}"
53-
if [ -z "$LOCATION" ]; then
54-
LOCATION="westus3"
55-
fi
56-
RG="rrttest-${{ github.run_id }}-${{ github.run_attempt }}"
57-
echo "AZURE_LOCATION=$LOCATION" >> "$GITHUB_ENV"
58-
echo "AZURE_RESOURCE_GROUP=$RG" >> "$GITHUB_ENV"
107+
echo "AZURE_LOCATION=$AZURE_LOCATION" >> "$GITHUB_ENV"
108+
echo "AZURE_RESOURCE_GROUP=$AZURE_RESOURCE_GROUP" >> "$GITHUB_ENV"
59109
echo "AZURE_WORKSPACE_NAME=default" >> "$GITHUB_ENV"
60110
echo "AZURE_ENVIRONMENT_NAME=default" >> "$GITHUB_ENV"
61111
62-
- name: Create Azure Resource Group
63-
run: |
64-
set -euo pipefail
65-
current_time=$(date +%s)
66-
az group create \
67-
--only-show-errors \
68-
--output none \
69-
--location "$AZURE_LOCATION" \
70-
--name "$AZURE_RESOURCE_GROUP" \
71-
--subscription "$AZURE_SUBSCRIPTION_ID" \
72-
--tags creationTime=$current_time > /dev/null
73-
while ! az group exists --name "$AZURE_RESOURCE_GROUP" --subscription "$AZURE_SUBSCRIPTION_ID" &>/dev/null; do
74-
sleep 2
75-
done
76-
77112
- name: Setup Node
78113
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
79114
with:
@@ -132,10 +167,35 @@ jobs:
132167
if: always()
133168
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
134169
with:
135-
name: radius-pod-logs
170+
name: radius-pod-logs-${{ matrix.recipe }}
136171
path: radius-pod-logs
137172
if-no-files-found: warn
138173

174+
cleanup-azure:
175+
runs-on: ubuntu-24.04
176+
timeout-minutes: 10
177+
name: Cleanup Azure Resource Group
178+
environment: azure
179+
needs: [setup-azure, validate-azure-recipes]
180+
if: always()
181+
permissions:
182+
id-token: write
183+
contents: read
184+
env:
185+
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
186+
AZURE_RESOURCE_GROUP: ${{ needs.setup-azure.outputs.resource-group }}
187+
steps:
188+
- name: Checkout
189+
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
190+
with:
191+
persist-credentials: false
192+
193+
- name: Azure Login
194+
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
195+
with:
196+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
197+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
198+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
199+
139200
- name: Cleanup Azure Resources
140-
if: always()
141201
run: make cleanup-azure-resources

Compute/containers/test/app.bicep

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
extension radius
22
extension containers
33
extension persistentVolumes
4-
extension secrets
5-
6-
param environment string
4+
// extension secrets
75

86
// Secure parameters with test defaults
9-
#disable-next-line secure-parameter-default @secure()
10-
param username string = 'admin'
11-
#disable-next-line secure-parameter-default @secure()
12-
param password string = 'c2VjcmV0cGFzc3dvcmQ='
13-
#disable-next-line secure-parameter-default @secure()
14-
param apiKey string = 'abc123xyz'
7+
// #disable-next-line secure-parameter-default @secure()
8+
// param username string = 'admin'
9+
// #disable-next-line secure-parameter-default @secure()
10+
// param password string = 'c2VjcmV0cGFzc3dvcmQ='
11+
// #disable-next-line secure-parameter-default @secure()
12+
// param apiKey string = 'abc123xyz'
13+
14+
param environment string
1515

1616
resource app 'Applications.Core/applications@2023-10-01-preview' = {
1717
name: 'containers-testapp'
@@ -31,10 +31,10 @@ resource myContainer 'Radius.Compute/containers@2025-08-01-preview' = {
3131
source: myPersistentVolume.id
3232
disableDefaultEnvVars: false
3333
}
34-
secrets: {
35-
source: secret.id
36-
disableDefaultEnvVars: false
37-
}
34+
// secrets: {
35+
// source: secret.id
36+
// disableDefaultEnvVars: false
37+
// }
3838
}
3939
containers: {
4040
web: {
@@ -49,30 +49,30 @@ resource myContainer 'Radius.Compute/containers@2025-08-01-preview' = {
4949
}
5050
}
5151
env: {
52-
CONNECTIONS_SECRET_USERNAME: {
53-
valueFrom: {
54-
secretKeyRef: {
55-
secretName: secret.name
56-
key: 'username'
57-
}
58-
}
59-
}
60-
CONNECTIONS_SECRET_APIKEY: {
61-
valueFrom: {
62-
secretKeyRef: {
63-
secretName: secret.name
64-
key: 'apikey'
65-
}
66-
}
67-
}
68-
CONNECTIONS_SECRET_PASSWORD: {
69-
valueFrom: {
70-
secretKeyRef: {
71-
secretName: secret.name
72-
key: 'password'
73-
}
74-
}
75-
}
52+
// CONNECTIONS_SECRET_USERNAME: {
53+
// valueFrom: {
54+
// secretKeyRef: {
55+
// secretName: secret.name
56+
// key: 'username'
57+
// }
58+
// }
59+
// }
60+
// CONNECTIONS_SECRET_APIKEY: {
61+
// valueFrom: {
62+
// secretKeyRef: {
63+
// secretName: secret.name
64+
// key: 'apikey'
65+
// }
66+
// }
67+
// }
68+
// CONNECTIONS_SECRET_PASSWORD: {
69+
// valueFrom: {
70+
// secretKeyRef: {
71+
// secretName: secret.name
72+
// key: 'password'
73+
// }
74+
// }
75+
// }
7676
}
7777
volumeMounts: [
7878
{
@@ -83,10 +83,10 @@ resource myContainer 'Radius.Compute/containers@2025-08-01-preview' = {
8383
volumeName: 'cache'
8484
mountPath: '/tmp/cache'
8585
}
86-
{
87-
volumeName: 'secrets'
88-
mountPath: '/etc/secrets'
89-
}
86+
// {
87+
// volumeName: 'secrets'
88+
// mountPath: '/etc/secrets'
89+
// }
9090
]
9191
resources: {
9292
requests: {
@@ -151,9 +151,9 @@ resource myContainer 'Radius.Compute/containers@2025-08-01-preview' = {
151151
medium: 'memory'
152152
}
153153
}
154-
secrets: {
155-
secretName: secret.name
156-
}
154+
// secrets: {
155+
// secretName: secret.name
156+
// }
157157
}
158158
extensions: {
159159
daprSidecar: {
@@ -185,22 +185,22 @@ resource myPersistentVolume 'Radius.Compute/persistentVolumes@2025-08-01-preview
185185
}
186186
}
187187

188-
resource secret 'Radius.Security/secrets@2025-08-01-preview' = {
189-
name: 'app-secrets-${uniqueString(deployment().name)}'
190-
properties: {
191-
environment: environment
192-
application: app.id
193-
data: {
194-
username: {
195-
value: username
196-
}
197-
password: {
198-
value: password
199-
encoding: 'base64'
200-
}
201-
apikey: {
202-
value: apiKey
203-
}
204-
}
205-
}
206-
}
188+
// resource secret 'Radius.Security/secrets@2025-08-01-preview' = {
189+
// name: 'app-secrets-${uniqueString(deployment().name)}'
190+
// properties: {
191+
// environment: environment
192+
// application: app.id
193+
// data: {
194+
// username: {
195+
// value: username
196+
// }
197+
// password: {
198+
// value: password
199+
// encoding: 'base64'
200+
// }
201+
// apikey: {
202+
// value: apiKey
203+
// }
204+
// }
205+
// }
206+
// }
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
terraform {
2+
required_version = ">= 1.5"
3+
required_providers {
4+
kubernetes = {
5+
source = "hashicorp/kubernetes"
6+
version = ">= 2.0"
7+
}
8+
}
9+
}
10+
locals {
11+
namespace = var.context.runtime.kubernetes.namespace
12+
resource_name = var.context.resource.name
13+
application_name = var.context.application != null ? var.context.application.name : ""
14+
environment_id = try(var.context.resource.properties.environment, "")
15+
environment_parts = local.environment_id != "" ? split("/", local.environment_id) : []
16+
environment_label = length(local.environment_parts) > 0 ? local.environment_parts[length(local.environment_parts) - 1] : ""
17+
}
18+
19+
resource "kubernetes_persistent_volume_claim" "pvc" {
20+
wait_until_bound = false
21+
22+
metadata {
23+
name = local.resource_name
24+
namespace = local.namespace
25+
labels = {
26+
"radapp.io/resource" = local.resource_name
27+
"radapp.io/application" = local.application_name
28+
"radapp.io/environment" = local.environment_label
29+
}
30+
}
31+
32+
spec {
33+
storage_class_name = var.storage_class != "" ? var.storage_class : null
34+
35+
resources {
36+
requests = {
37+
storage = format("%dGi", var.context.resource.properties.sizeInGib)
38+
}
39+
}
40+
41+
access_modes = can(var.context.resource.properties.allowedAccessModes) ? [var.context.resource.properties.allowedAccessModes] : ["ReadWriteOnce"]
42+
}
43+
}
44+
45+
output "result" {
46+
value = {
47+
resources = [
48+
"/planes/kubernetes/local/namespaces/${local.namespace}/providers/core/PersistentVolumeClaim/${local.resource_name}"
49+
]
50+
}
51+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
variable "context" {
2+
description = "Information about what resource is calling this Recipe. Generated by Radius. For more information visit https://docs.radapp.dev/operations/custom-recipes/"
3+
type = any
4+
}
5+
6+
variable "storage_class" {
7+
description = "StorageClass name to set on the PersistentVolumeClaim"
8+
type = string
9+
default = ""
10+
}
11+

0 commit comments

Comments
 (0)