Git
October 11, 2022 ยท View on GitHub
The RemoteResource operator git backendService supports delivering contents from both the GitHub and GitLab services by branch, tag, or commit, or release artifact.
1. Branch, Tag, or Commit
Provide:
- repo url (use one of following formats)
https://github.com/razee-io/RemoteResource.gitgit@github.com:razee-io/RemoteResource.git
- ref - branch, commitId (short or full SHA), or tag name
- filePath
- path/to/directory/*
- path/to/directory/*.extension
- path/to/directory/filename.extension
- personal access token (if not public)
Github:
Sample RR with branch:
Use git as backend service.
Provide inputs as git request options, specifying a branch name as ref.
Personal access token should be provided as a secret or in config map.
apiVersion: "deploy.razee.io/v1alpha2"
kind: RemoteResource
metadata:
name: <remote_resource_name>
namespace: <namespace>
spec:
clusterAuth:
impersonateUser: razeedeploy
backendService: git
requests:
- options:
git:
provider: 'github'
repo: "https://github.com/razee-io/RemoteResource.git"
ref: "main"
filePath: "*.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Sample Request Option with short SHA:
Specify commitID as ref.
requests:
- options:
git:
provider: 'github'
repo: "https://github.com/razee-io/RemoteResource.git"
ref: "e51187e"
filePath: "*.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Sample Request Option with Tag:
Specify tag as ref.
requests:
- options:
git:
provider: 'github'
repo: "https://github.com/razee-io/RemoteResource.git"
ref: "2.0.4"
filePath: "*.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Implementation detail: (i.e. How provided inputs get mapped to api behind the scenes):
GET https://api.github.com/repos/{repo}/contents/{path}?ref={ref}provides list of raw download_url(s) for file(s)- request to download_url to get file
Gitlab:
Sample Request Option with branch:
requests:
- options:
git:
provider: 'gitlab'
repo: "https://gitlab.com/group2842/testproject.git"
ref: "testingbranch"
filePath: "folder/*.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Alternatively you can specify a commit ID or tag name as ref.
Implementation detail: (i.e. How provided inputs get mapped to api behind the scenes):
GET https://{host}/api/v4/projects/{repo}/repository/tree/?path={path}&ref=${ref}provides list of filename(s) for file(s)GET https://{host}/api/v4/projects/{repo}/repository/files/{path}{filename}/raw?ref={ref}provides raw file for filename
2. Release
To get files from release assets.
Provide:
- repo url
- release tag name
- asset
- *.extension
- filename.extension
- personal access token (if not public)
Github:
Sample Request Option:
Specify asset as filePath.
requests:
- options:
git:
provider: 'github'
repo: "https://github.com/razee-io/RemoteResource.git"
release: "2.0.4"
filePath: "resource.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Implementation detail: (i.e. How provided inputs get mapped to api behind the scenes):
GET https://api.github.com/repos/{repo}/releases/tags/{release}provides release assets in response.assetsGET https://api.github.com/repos/{repo}/releases/assets/${asset.id}provides raw file for asset.id, Note headerAccept: application/octet-streamset by default, will override Accept header specified by user.
Gitlab:
Release asset links in Gitlab must be a URL that
returns a valid kubernetes configuration file.
Ex. https://raw.githubusercontent.com/razee-io/ RemoteResource/master/kubernetes/RemoteResource/resource.yaml
External URLS must not require headers.
Gitlab URLS must be from the same host because the GET
request for a Gitlab file will include the headers
specified for the remote resource.
Sample Request Option:
Specify asset as filePath.
requests:
- options:
git:
provider: 'gitlab'
repo: "https://gitlab.com/group2842/testproject.git"
release: "1.0.1"
filePath: "*.yaml"
headers:
Authorization:
valueFrom:
secretKeyRef:
name: token
namespace: <namespace>
key: token
Implementation detail: (i.e. How provided inputs get mapped to api behind the scenes):
GET https://{host}/api/v4/projects/{repo}/releases/{release}/assets/linksprovides release assets urls- If asset url is internal/from the same gitlab host, parse url and
GET https://{host}/api/v4/projects/{repo}/repository/files/{path}{filename}/raw?ref={ref}provides raw file, otherwise request to asset.url to get file Note: all headers will be removed for external urls