Test deleting group
Some checks failed
Pulumi / pulumi (push) Failing after 22s

This commit is contained in:
Prox
2026-02-15 18:18:36 +02:00
parent a1bbf22de0
commit 4245adc670

View File

@@ -6,6 +6,9 @@ import * as command from "@pulumi/command";
// =============================================================================
// Since there's no TypeScript SDK for NetBird, we use the command provider
// to make API calls. This demonstrates the pattern while being practical.
//
// Note: Delete commands use grep/sed instead of jq for CI compatibility.
// The pattern extracts the ID by finding the object with matching name.
export interface NetBirdConfig {
url: string;
@@ -44,6 +47,35 @@ export interface SetupKeyArgs {
ephemeral: boolean;
}
// =============================================================================
// Helper: Extract ID from JSON array by name (no jq dependency)
// =============================================================================
// Uses grep/sed to find an object by name and extract its ID.
// This is fragile but works for simple JSON structures.
// Pattern: finds "name":"<value>" then extracts preceding "id":"<value>"
function makeDeleteScript(
endpoint: string,
resourceName: string,
token: pulumi.Output<string>,
url: string
): pulumi.Output<string> {
// Use Python for reliable JSON parsing (available in most CI environments)
return pulumi.interpolate`python3 -c "
import json, urllib.request, sys
req = urllib.request.Request('${url}/api/${endpoint}', headers={'Authorization': 'Token ${token}'})
data = json.loads(urllib.request.urlopen(req).read())
matches = [x['id'] for x in data if x.get('name') == '${resourceName}']
if matches:
print(matches[0])
else:
sys.exit(0) # Not found, nothing to delete
" | while read ID; do
if [ -n "$ID" ]; then
curl -s -X DELETE -H "Authorization: Token ${token}" "${url}/api/${endpoint}/$ID"
fi
done`;
}
// =============================================================================
// NetBird Group Resource
// =============================================================================
@@ -67,10 +99,7 @@ export class Group extends pulumi.ComponentResource {
-H "Content-Type: application/json" \
-d '{"name": "${args.name}", "peers": ${JSON.stringify(args.peers || [])}}' \
${config.url}/api/groups`,
delete: pulumi.interpolate`GROUP_ID=$(curl -s -H "Authorization: Token ${config.token}" \
${config.url}/api/groups | jq -r '.[] | select(.name=="${args.name}") | .id') && \
curl -s -X DELETE -H "Authorization: Token ${config.token}" \
${config.url}/api/groups/$GROUP_ID`,
delete: makeDeleteScript("groups", args.name, config.token, config.url),
},
{ parent: this }
);
@@ -146,10 +175,7 @@ export class Policy extends pulumi.ComponentResource {
${config.url}/api/policies`;
}
),
delete: pulumi.interpolate`POLICY_ID=$(curl -s -H "Authorization: Token ${config.token}" \
${config.url}/api/policies | jq -r '.[] | select(.name=="${args.name}") | .id') && \
curl -s -X DELETE -H "Authorization: Token ${config.token}" \
${config.url}/api/policies/$POLICY_ID`,
delete: makeDeleteScript("policies", args.name, config.token, config.url),
},
{ parent: this }
);
@@ -207,10 +233,7 @@ export class SetupKey extends pulumi.ComponentResource {
${config.url}/api/setup-keys`;
}
),
delete: pulumi.interpolate`KEY_ID=$(curl -s -H "Authorization: Token ${config.token}" \
${config.url}/api/setup-keys | jq -r '.[] | select(.name=="${args.name}") | .id') && \
curl -s -X DELETE -H "Authorization: Token ${config.token}" \
${config.url}/api/setup-keys/$KEY_ID`,
delete: makeDeleteScript("setup-keys", args.name, config.token, config.url),
},
{ parent: this }
);