Skip to content

Instantly share code, notes, and snippets.

@scott4dev
Created April 28, 2025 20:07
Show Gist options
  • Save scott4dev/4dba6f81415c0c47f4b05968f03c4aca to your computer and use it in GitHub Desktop.
Save scott4dev/4dba6f81415c0c47f4b05968f03c4aca to your computer and use it in GitHub Desktop.
manage a github repository using crossplane provider-http request
apiVersion: http.crossplane.io/v1alpha2
kind: Request
metadata:
name: hello-world-repository
spec:
forProvider:
# Injecting data from secrets is possible, simply use the following syntax: {{ name:namespace:key }} (supported for body and headers only)
# insecureSkipTLSVerify: true
waitTimeout: 2m
headers:
Accept:
- application/vnd.github.v3+json
Content-Type:
- application/json
Authorization:
- ("Bearer {{ github-credentials:crossplane-system:token }}")
payload:
baseUrl: https://api.github.com
body: |
{
"name":"hello-crossplane",
"description":"Repository created via Crossplane",
"homepage":"https://crossplane.io",
"private":true,
"has_issues":false,
"has_projects":false,
"has_downloads":false,
"has_wiki":false
}
mappings:
- action: CREATE
method: "POST"
body: |
{
name: .payload.body.name,
description: .payload.body.description,
homepage: .payload.body.homepage,
private: .payload.body.private,
has_issues: .payload.body.has_issues,
has_projects: .payload.body.has_projects,
has_wiki: .payload.body.has_wiki,
has_downloads: .payload.body.has_downloads,
auto_init: true
}
url: (.payload.baseUrl + "/user/repos")
- action: OBSERVE
method: "GET"
url: (.payload.baseUrl + "/repos/scott4dev/" + (.payload.body.name))
- action: UPDATE
method: "PATCH"
body: |
{
name: .payload.body.name,
description: .payload.body.description,
homepage: .payload.body.homepage,
private: .payload.body.private,
has_issues: .payload.body.has_issues,
has_projects: .payload.body.has_projects,
has_wiki: .payload.body.has_wiki,
has_downloads: .payload.body.has_downloads
}
url: (.payload.baseUrl + "/repos/scott4dev/" + (.payload.body.name))
- action: REMOVE
method: "DELETE"
url: (.payload.baseUrl + "/repos/scott4dev/" + (.payload.body.name))
expectedResponseCheck:
type: CUSTOM
logic: |
if .response.body.name == .payload.body.name
and .response.body.description == .payload.body.description
and .response.body.homepage == .payload.body.homepage
and .response.body.private == .payload.body.private
and .response.body.has_issues == .payload.body.has_issues
and .response.body.has_projects == .payload.body.has_projects
and .response.body.has_wiki == .payload.body.has_wiki
and .response.body.has_downloads == .payload.body.has_downloads
then true
else false
end
providerConfigRef:
name: github-provider-config
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment