Add tekton pipelines
This commit is contained in:
parent
217a105a5c
commit
e97a9f7f24
23
charts/tekton-pipelines/.helmignore
Normal file
23
charts/tekton-pipelines/.helmignore
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
24
charts/tekton-pipelines/Chart.yaml
Normal file
24
charts/tekton-pipelines/Chart.yaml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: tekton-pipelines
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
appVersion: "1.16.0"
|
1
charts/tekton-pipelines/templates/NOTES.txt
Normal file
1
charts/tekton-pipelines/templates/NOTES.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
TODO: Write some notes
|
51
charts/tekton-pipelines/templates/_helpers.tpl
Normal file
51
charts/tekton-pipelines/templates/_helpers.tpl
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "tekton-pipelines.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "tekton-pipelines.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "tekton-pipelines.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "tekton-pipelines.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "tekton-pipelines.chart" . }}
|
||||||
|
{{ include "tekton-pipelines.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "tekton-pipelines.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "tekton-pipelines.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
@ -0,0 +1,30 @@
|
|||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Pipeline
|
||||||
|
metadata:
|
||||||
|
name: hetzner-cleanup
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
tasks:
|
||||||
|
- name: cleanup-hetzner-infra
|
||||||
|
retries: 3
|
||||||
|
taskRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: task
|
||||||
|
- name: name
|
||||||
|
value: cleanup-hetzner-infra
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: namespace
|
||||||
|
value: $(params.namespace)
|
99
charts/tekton-pipelines/templates/pipelines/hetzner-k3s.yaml
Normal file
99
charts/tekton-pipelines/templates/pipelines/hetzner-k3s.yaml
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Pipeline
|
||||||
|
metadata:
|
||||||
|
name: hetzner-k3s
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
workspaces:
|
||||||
|
- name: ssh-keys
|
||||||
|
- name: inventory
|
||||||
|
- name: kubeconfig-output
|
||||||
|
tasks:
|
||||||
|
- name: generate-ssh-keys
|
||||||
|
taskRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: task
|
||||||
|
- name: name
|
||||||
|
value: generate-ssh-keys
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
workspaces:
|
||||||
|
- name: ssh-keys
|
||||||
|
workspace: ssh-keys
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: namespace
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: prepare-hetzner-infra
|
||||||
|
retries: 3
|
||||||
|
runAfter:
|
||||||
|
- generate-ssh-keys
|
||||||
|
taskRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: task
|
||||||
|
- name: name
|
||||||
|
value: prepare-hetzner-infra
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
workspace: inventory
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: namespace
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: bootstrap-k3s
|
||||||
|
retries: 3
|
||||||
|
runAfter:
|
||||||
|
- prepare-hetzner-infra
|
||||||
|
taskRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: task
|
||||||
|
- name: name
|
||||||
|
value: bootstrap-k3s
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: namespace
|
||||||
|
value: $(params.namespace)
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
workspace: kubeconfig-output
|
||||||
|
- name: deploy-helmfile-base
|
||||||
|
runAfter:
|
||||||
|
- bootstrap-k3s
|
||||||
|
retries: 3
|
||||||
|
taskRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: task
|
||||||
|
- name: name
|
||||||
|
value: deploy-helmfile-base
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
params:
|
||||||
|
- name: environment
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: namespace
|
||||||
|
value: $(params.namespace)
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
workspace: kubeconfig-output
|
36
charts/tekton-pipelines/templates/rbac.yaml
Normal file
36
charts/tekton-pipelines/templates/rbac.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
name: secret-manager
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["secrets"]
|
||||||
|
verbs: ["*"]
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: secret-manager
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: secret-manager
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: secret-manager
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: secret-manager
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
6
charts/tekton-pipelines/templates/runtime-ns.yaml
Normal file
6
charts/tekton-pipelines/templates/runtime-ns.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
26
charts/tekton-pipelines/templates/shell-operator/deploy.yaml
Normal file
26
charts/tekton-pipelines/templates/shell-operator/deploy.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: shell-operator
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "tekton-pipelines.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: shell-operator
|
||||||
|
containers:
|
||||||
|
- name: shell-operator
|
||||||
|
env:
|
||||||
|
- name: SP_TEKTON_RUNTIME_NS
|
||||||
|
value: {{ .Values.pipelineRunNamespace }}
|
||||||
|
imagePullPolicy: Always
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-controller:latest
|
39
charts/tekton-pipelines/templates/shell-operator/rbac.yaml
Normal file
39
charts/tekton-pipelines/templates/shell-operator/rbac.yaml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
name: shell-operator
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["configmaps"]
|
||||||
|
verbs: ["*"]
|
||||||
|
- apiGroups: ["tekton.dev"]
|
||||||
|
resources: ["pipelineruns"]
|
||||||
|
verbs: ["*"]
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: shell-operator
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: shell-operator
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: shell-operator
|
||||||
|
namespace: {{ .Values.pipelineRunNamespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: ClusterRole
|
||||||
|
name: shell-operator
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
97
charts/tekton-pipelines/templates/tasks/bootstrap-k3s.yml
Normal file
97
charts/tekton-pipelines/templates/tasks/bootstrap-k3s.yml
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
---
|
||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Task
|
||||||
|
metadata:
|
||||||
|
name: bootstrap-k3s
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- name: get-ssh-key-and-inventory
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl get secret "$(params.environment)"-ssh \
|
||||||
|
--namespace "$(params.namespace)" -o yaml \
|
||||||
|
| yq '.data.ssh_key' \
|
||||||
|
| base64 -d > /tmp/outputs/ssh_key
|
||||||
|
kubectl get secret "$(params.environment)"-ssh \
|
||||||
|
--namespace "$(params.namespace)" -o yaml \
|
||||||
|
| yq '.data."ssh_key.pub"' \
|
||||||
|
| base64 -d > /tmp/outputs/ssh_key.pub
|
||||||
|
kubectl get secret "$(params.environment)"-inventory \
|
||||||
|
--namespace "$(params.namespace)" -o yaml \
|
||||||
|
| yq '.data."inventory.yaml"' \
|
||||||
|
| base64 -d > /tmp/outputs/inventory.yaml
|
||||||
|
chmod 0600 /tmp/outputs/ssh_key
|
||||||
|
chmod 0600 /tmp/outputs/ssh_key.pub
|
||||||
|
- name: prepare-servers
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
env:
|
||||||
|
- name: SP_ENV
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: SP_CUSTOMER
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: ANSIBLE_INVENTORY
|
||||||
|
value: /tmp/outputs/inventory.yaml
|
||||||
|
- name: ANSIBE_PRIVATE_KEY_FILE
|
||||||
|
value: /tmp/outputs/ssh_key
|
||||||
|
- name: ANSIBLE_HOST_KEY_CHECKING
|
||||||
|
value: "false"
|
||||||
|
script: |
|
||||||
|
#!/bin/sh
|
||||||
|
ansible-playbook /src/playbooks/systems/system-bootstrap/playbook.yml
|
||||||
|
- name: prepare-k3s
|
||||||
|
env:
|
||||||
|
- name: SP_ENV
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: SP_CUSTOMER
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: ANSIBLE_INVENTORY
|
||||||
|
value: /tmp/outputs/inventory.yaml
|
||||||
|
- name: ANSIBE_PRIVATE_KEY_FILE
|
||||||
|
value: /tmp/outputs/ssh_key
|
||||||
|
- name: ANSIBLE_HOST_KEY_CHECKING
|
||||||
|
value: "false"
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
ansible-playbook /src/playbooks/systems/k3s-bootstrap/playbook.yml
|
||||||
|
- name: prepare-kubeconfig
|
||||||
|
env:
|
||||||
|
- name: SP_ENV
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: SP_CUSTOMER
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: ANSIBLE_INVENTORY
|
||||||
|
value: /tmp/outputs/inventory.yaml
|
||||||
|
- name: ANSIBE_PRIVATE_KEY_FILE
|
||||||
|
value: /tmp/outputs/ssh_key
|
||||||
|
- name: ANSIBLE_HOST_KEY_CHECKING
|
||||||
|
value: "false"
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
ansible-playbook /src/playbooks/other/k8s-create-user/playbook.yml
|
||||||
|
- name: save-kubeconfig
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl delete secret \
|
||||||
|
"$(params.environment)"-config \
|
||||||
|
--namespace "$(params.namespace)"
|
||||||
|
kubectl create secret generic \
|
||||||
|
"$(params.environment)"-config \
|
||||||
|
--namespace "$(params.namespace)" \
|
||||||
|
--from-file=kubeconfig=/tmp/outputs/admin-default-config
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
description: A folder to store outputs
|
||||||
|
optional: false
|
||||||
|
mountPath: /tmp/outputs
|
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Task
|
||||||
|
metadata:
|
||||||
|
name: cleanup-hetzner-infra
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- name: create-hetzner-infra
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
env:
|
||||||
|
- name: SP_STATE
|
||||||
|
value: absent
|
||||||
|
- name: SP_ENV
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: SP_CUSTOMER
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: SOPS_AGE_KEY
|
||||||
|
value: AGE-SECRET-KEY-1VXYUK7MAGR6KMZJ6ZMPD35EQ9LVXXKQ2HHE6Z8T828WWT03EH8LS6G9AS8
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
mkdir -p /tmp/outputs
|
||||||
|
ssh-keygen -t rsa -f /tmp/outputs/ssh_key -N ""
|
||||||
|
ansible-playbook /src/playbooks/providers/hetzner/playbook.yml || true
|
||||||
|
- name: remove-secrets
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl delete secret \
|
||||||
|
"$(params.environment)-inventory" \
|
||||||
|
--namespace "$(params.namespace)"
|
||||||
|
kubectl delete secret \
|
||||||
|
"$(params.environment)-ssh" \
|
||||||
|
--namespace "$(params.namespace)"
|
||||||
|
kubectl delete secret \
|
||||||
|
"$(params.environment)-config" \
|
||||||
|
--namespace "$(params.namespace)"
|
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Task
|
||||||
|
metadata:
|
||||||
|
name: deploy-helmfile-base
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- name: get-ssh-key
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl get secret "$(params.environment)"-config \
|
||||||
|
--namespace "$(params.namespace)" -o yaml \
|
||||||
|
| yq '.data.kubeconfig' \
|
||||||
|
| base64 -d > /tmp/outputs/config
|
||||||
|
chmod 0600 /tmp/outputs/config
|
||||||
|
- name: deploy-helmfile
|
||||||
|
image: ghcr.io/helmfile/helmfile:v0.163.1
|
||||||
|
env:
|
||||||
|
- name: KUBECONFIG
|
||||||
|
value: /tmp/outputs/config
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
mkdir -p /src
|
||||||
|
git clone https://git.badhouseplants.net/softplayer/softplayer-helmfile.git /src/helmfile
|
||||||
|
cd /src/helmfile/workload && helmfile sync
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
description: A folder to store outputs
|
||||||
|
optional: false
|
||||||
|
mountPath: /tmp/outputs
|
@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Task
|
||||||
|
metadata:
|
||||||
|
name: generate-ssh-keys
|
||||||
|
namespace: tekton-pipelines
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
description: |-
|
||||||
|
This task should prepare a ssh key that will be used for
|
||||||
|
bootstrapping wotkload nodes. If ssh-key secret already
|
||||||
|
exists, should not run
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- name: check-whether-a-key-exists
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/bash
|
||||||
|
if kubectl get secret "$(params.environment)-ssh"; then
|
||||||
|
echo 1 > /tmp/outputs/ready
|
||||||
|
fi
|
||||||
|
- name: prepare-ssh-key
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
script: |-
|
||||||
|
#!/bin/bash
|
||||||
|
if ! [ -f /tmp/outputs/ready ]; then
|
||||||
|
ansible-playbook /src/playbooks/other/ssh-key-gen/playbook.yml
|
||||||
|
fi
|
||||||
|
- name: save-ssh-keys
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
if ! [ -f /tmp/outputs/ready ]; then
|
||||||
|
kubectl create secret generic \
|
||||||
|
"$(params.environment)"-ssh \
|
||||||
|
--namespace "$(params.namespace)" \
|
||||||
|
--from-file /tmp/outputs
|
||||||
|
fi
|
||||||
|
workspaces:
|
||||||
|
- name: ssh-keys
|
||||||
|
description: A folder to store ssh keys
|
||||||
|
optional: false
|
||||||
|
mountPath: /tmp/outputs
|
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: Task
|
||||||
|
metadata:
|
||||||
|
name: prepare-hetzner-infra
|
||||||
|
namespace: {{ .Values.pipelineNamespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "tekton-pipelines.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
type: string
|
||||||
|
- name: environment
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- name: get-ssh-key
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl get secret "$(params.environment)"-ssh \
|
||||||
|
--namespace "$(params.namespace)" -o yaml \
|
||||||
|
| yq '.data."ssh_key.pub"' \
|
||||||
|
| base64 -d > /tmp/outputs/ssh_key.pub
|
||||||
|
chmod 0600 /tmp/outputs/ssh_key.pub
|
||||||
|
- name: create-hetzner-infra
|
||||||
|
image: git.badhouseplants.net/softplayer/softplayer-coskgne:latest
|
||||||
|
env:
|
||||||
|
- name: SP_STATE
|
||||||
|
value: present
|
||||||
|
- name: SP_ENV
|
||||||
|
value: $(params.environment)
|
||||||
|
- name: SP_CUSTOMER
|
||||||
|
value: $(params.namespace)
|
||||||
|
- name: SOPS_AGE_KEY
|
||||||
|
value: {{ .Values.providers.hetzner.ageKey }}
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
ansible-playbook /src/playbooks/providers/hetzner/playbook.yml
|
||||||
|
- name: save-inventory
|
||||||
|
image: alpine/k8s:1.29.2
|
||||||
|
script: |-
|
||||||
|
#!/bin/sh
|
||||||
|
kubectl delete secret \
|
||||||
|
"$(params.environment)"-inventory \
|
||||||
|
--namespace "$(params.namespace)"
|
||||||
|
kubectl create secret generic \
|
||||||
|
"$(params.environment)"-inventory \
|
||||||
|
--namespace "$(params.namespace)" \
|
||||||
|
--from-file /tmp/outputs/inventory.yaml
|
||||||
|
workspaces:
|
||||||
|
- name: outputs
|
||||||
|
description: A folder to store outputs
|
||||||
|
optional: false
|
||||||
|
mountPath: /tmp/outputs
|
8
charts/tekton-pipelines/values.yaml
Normal file
8
charts/tekton-pipelines/values.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#U+00eU+002 U+002Default values for tekton-pipelines.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
providers:
|
||||||
|
hetzner:
|
||||||
|
ageKey: test
|
||||||
|
pipelineNamespace: tekton-pipelines
|
||||||
|
pipelineRunNamespace: tekton-runtime
|
5
service/.sops.yaml
Normal file
5
service/.sops.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
creation_rules:
|
||||||
|
- path_regex: .*
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- age1mrdee45qq36trja45u0wcem7c2mgydw35zkuhh97khgc7veanaaq29wzh4
|
@ -54,6 +54,15 @@ releases:
|
|||||||
- kube-system/cilium
|
- kube-system/cilium
|
||||||
- kube-system/namespaces
|
- kube-system/namespaces
|
||||||
|
|
||||||
|
- name: tekton-pipelines
|
||||||
|
namespace: tekton-system
|
||||||
|
createNamespace: false
|
||||||
|
chart: ../charts/tekton-pipelines
|
||||||
|
secrets:
|
||||||
|
- ./secrets/pipelines.yaml
|
||||||
|
needs:
|
||||||
|
- tekton-system/tekton
|
||||||
|
|
||||||
- name: cert-manager
|
- name: cert-manager
|
||||||
chart: zot/cert-manager
|
chart: zot/cert-manager
|
||||||
version: v1.14.4
|
version: v1.14.4
|
||||||
|
23
service/manifests/pipeline-run-cleanup.yaml
Normal file
23
service/manifests/pipeline-run-cleanup.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: tekton.dev/v1beta1
|
||||||
|
kind: PipelineRun
|
||||||
|
metadata:
|
||||||
|
generateName: hetzner-cleanup
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
value: default
|
||||||
|
- name: environment
|
||||||
|
value: default
|
||||||
|
- name: customer
|
||||||
|
value: allanger
|
||||||
|
pipelineRef:
|
||||||
|
resolver: cluster
|
||||||
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: pipeline
|
||||||
|
- name: name
|
||||||
|
value: hetzner-cleanup
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
serviceAccountName: secret-manager
|
@ -1,8 +1,30 @@
|
|||||||
apiVersion: tekton.dev/v1beta1
|
apiVersion: tekton.dev/v1beta1
|
||||||
kind: PipelineRun
|
kind: PipelineRun
|
||||||
metadata:
|
metadata:
|
||||||
name: hetzner-k3s
|
generateName: hetzner-k3s
|
||||||
|
namespace: tekton-runtime
|
||||||
spec:
|
spec:
|
||||||
|
params:
|
||||||
|
- name: namespace
|
||||||
|
value: default
|
||||||
|
- name: environment
|
||||||
|
value: default
|
||||||
|
- name: customer
|
||||||
|
value: allanger
|
||||||
pipelineRef:
|
pipelineRef:
|
||||||
name: hetzner-k3s
|
resolver: cluster
|
||||||
serviceAccountName: default
|
params:
|
||||||
|
- name: kind
|
||||||
|
value: pipeline
|
||||||
|
- name: name
|
||||||
|
value: hetzner-k3s
|
||||||
|
- name: namespace
|
||||||
|
value: tekton-pipelines
|
||||||
|
workspaces:
|
||||||
|
- name: ssh-keys
|
||||||
|
emptyDir: {}
|
||||||
|
- name: inventory
|
||||||
|
emptyDir: {}
|
||||||
|
- name: kubeconfig-output
|
||||||
|
emptyDir: {}
|
||||||
|
serviceAccountName: secret-manager
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
apiVersion: tekton.dev/v1beta1
|
|
||||||
kind: Pipeline
|
|
||||||
metadata:
|
|
||||||
name: hetzner-k3s
|
|
||||||
spec:
|
|
||||||
tasks:
|
|
||||||
- name: generate-ssh-keys
|
|
||||||
taskRef:
|
|
||||||
name: generate-ssh-keys
|
|
||||||
- name: prepare-hetzner-infra
|
|
||||||
taskRef:
|
|
||||||
name: prepare-hetzner-infra
|
|
||||||
- name: bootstrap-k3s
|
|
||||||
taskRef:
|
|
||||||
name: bootstrap-k3s
|
|
@ -1,58 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: tekton.dev/v1beta1
|
|
||||||
kind: Task
|
|
||||||
metadata:
|
|
||||||
name: generate-ssh-keys
|
|
||||||
spec:
|
|
||||||
steps:
|
|
||||||
- name: prepare-ssh-key
|
|
||||||
image: alpine
|
|
||||||
imagePullPolicy: Never
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Generate SSH keys"
|
|
||||||
- name: save-ssh-keys
|
|
||||||
image: alpine
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Save public and private keys to k8s secret"
|
|
||||||
---
|
|
||||||
apiVersion: tekton.dev/v1beta1
|
|
||||||
kind: Task
|
|
||||||
metadata:
|
|
||||||
name: prepare-hetzner-infra
|
|
||||||
spec:
|
|
||||||
steps:
|
|
||||||
- name: create-hetzner-infra
|
|
||||||
image: alpine
|
|
||||||
imagePullPolicy: Never
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Create hetzner server and everything else"
|
|
||||||
- name: save-inventory
|
|
||||||
image: alpine
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Inventory file that is generated by ansible, must be saved to secrets"
|
|
||||||
---
|
|
||||||
apiVersion: tekton.dev/v1beta1
|
|
||||||
kind: Task
|
|
||||||
metadata:
|
|
||||||
name: bootstrap-k3s
|
|
||||||
spec:
|
|
||||||
steps:
|
|
||||||
- name: prepare-servers
|
|
||||||
image: alpine
|
|
||||||
script: |
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Prepere nodes"
|
|
||||||
- name: prepare-k3s
|
|
||||||
image: alpine
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "Bootsrap k3s"
|
|
||||||
- name: save-kubeconfig
|
|
||||||
image: alpine
|
|
||||||
script: |-
|
|
||||||
#!/bin/sh
|
|
||||||
echo "check if kubeconfig is valid and save it to k8s secrets"
|
|
23
service/secrets/pipelines.yaml
Normal file
23
service/secrets/pipelines.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
providers:
|
||||||
|
hetzner:
|
||||||
|
ageKey: ENC[AES256_GCM,data:xF5+jYQFI/F+o5t481gCKkh9e8I9oaZkBC28GjskAvpnda6EpknF9PgMHt3mmw7JPRU72ZRK+q7HVuILugZ+VEa0GGHNnGUO1t4=,iv:SUcXsEX4a766C/hkObRPHxRTKv0Ul+8uiu9Q/XrWKlA=,tag:pGTJbsicPXIb2ik8LTjnNg==,type:str]
|
||||||
|
sops:
|
||||||
|
kms: []
|
||||||
|
gcp_kms: []
|
||||||
|
azure_kv: []
|
||||||
|
hc_vault: []
|
||||||
|
age:
|
||||||
|
- recipient: age1mrdee45qq36trja45u0wcem7c2mgydw35zkuhh97khgc7veanaaq29wzh4
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzTXVzeE8rUEVEcWE0OWwr
|
||||||
|
cjA1aVgxSDAwVjBIUUVpOHBGcjRTOEVkSWp3CjhERWlLOUplNGxMRCtEMVMxTXls
|
||||||
|
MGZQS0x6YXdiOG1XNTBGcVFoMEdodU0KLS0tIFZPc0FMbVpTZnZsMnhvdVY3Q1Va
|
||||||
|
b3cyZWV1dW5RakFseUxNdXZqaEtsVFUK0PJqIDXM7eBFN+mZ2FG8mEwajBzuGU1Y
|
||||||
|
iqC+5EMj3R2v+Dt+5P+dS/loYFo92YELyZgveFVzrgOArOKoEslrTQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2024-04-02T14:59:34Z"
|
||||||
|
mac: ENC[AES256_GCM,data:UL2PH2AmN3r2Z3hTm7lLDgd/+xte/DMgAXiJwl4gcfCBzdA0ThMvVsCBMjfuxwTTEKuJEBR4V2l68//wC0zgcV6IrjvNXrlP8nB1TsKIkEh+o9nF27zp6mLIBf5QP5BDrh0uKbj9gEsodHrAfjeaoNh9DhjgXHuabCLe1EVyxCI=,iv:xhjsriHCvDBa1iJRknImGtqIeEy/nepQdshAB4OKaVg=,tag:KqXlg9x0ajihelpnfrHk8g==,type:str]
|
||||||
|
pgp: []
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.8.1
|
Loading…
x
Reference in New Issue
Block a user