mirror of
https://github.com/fluxcd/flux2.git
synced 2025-10-28 05:04:48 +08:00
Ensure also pods contain the relevant labels inherited from pared Deployment object, this makes it easier to select and filter the pods using the labels eg. when scraping for metrics. Signed-off-by: Jiří Pinkava <j-pi@seznam.cz>
223 lines
4.8 KiB
Go
223 lines
4.8 KiB
Go
/*
|
|
Copyright 2020 The Flux authors
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package install
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"text/template"
|
|
)
|
|
|
|
var kustomizationTmpl = `---
|
|
{{- $eventsAddr := .EventsAddr }}
|
|
{{- $watchAllNamespaces := .WatchAllNamespaces }}
|
|
{{- $registry := .Registry }}
|
|
{{- $logLevel := .LogLevel }}
|
|
{{- $clusterDomain := .ClusterDomain }}
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
namespace: {{.Namespace}}
|
|
|
|
transformers:
|
|
- labels.yaml
|
|
|
|
resources:
|
|
- namespace.yaml
|
|
{{- if .NetworkPolicy }}
|
|
- policies.yaml
|
|
{{- end }}
|
|
- roles
|
|
{{- range .Components }}
|
|
- {{.}}.yaml
|
|
{{- end }}
|
|
|
|
patches:
|
|
- path: node-selector.yaml
|
|
target:
|
|
kind: Deployment
|
|
{{- range $i, $component := .Components }}
|
|
{{- if eq $component "notification-controller" }}
|
|
- target:
|
|
group: apps
|
|
version: v1
|
|
kind: Deployment
|
|
name: {{$component}}
|
|
patch: |-
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/0
|
|
value: --watch-all-namespaces={{$watchAllNamespaces}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/1
|
|
value: --log-level={{$logLevel}}
|
|
{{- else if eq $component "source-controller" }}
|
|
- target:
|
|
group: apps
|
|
version: v1
|
|
kind: Deployment
|
|
name: {{$component}}
|
|
patch: |-
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/0
|
|
value: --events-addr={{$eventsAddr}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/1
|
|
value: --watch-all-namespaces={{$watchAllNamespaces}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/2
|
|
value: --log-level={{$logLevel}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/6
|
|
value: --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.{{$clusterDomain}}.
|
|
{{- else }}
|
|
- target:
|
|
group: apps
|
|
version: v1
|
|
kind: Deployment
|
|
name: {{$component}}
|
|
patch: |-
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/0
|
|
value: --events-addr={{$eventsAddr}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/1
|
|
value: --watch-all-namespaces={{$watchAllNamespaces}}
|
|
- op: replace
|
|
path: /spec/template/spec/containers/0/args/2
|
|
value: --log-level={{$logLevel}}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- if $registry }}
|
|
images:
|
|
{{- range $i, $component := .Components }}
|
|
- name: fluxcd/{{$component}}
|
|
newName: {{$registry}}/{{$component}}
|
|
{{- end }}
|
|
{{- end }}
|
|
`
|
|
|
|
var kustomizationRolesTmpl = `---
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
namespace: {{.Namespace}}
|
|
resources:
|
|
- rbac.yaml
|
|
nameSuffix: -{{.Namespace}}
|
|
`
|
|
|
|
var nodeSelectorTmpl = `---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: all
|
|
spec:
|
|
template:
|
|
spec:
|
|
nodeSelector:
|
|
kubernetes.io/os: linux
|
|
{{- if .ImagePullSecret }}
|
|
imagePullSecrets:
|
|
- name: {{.ImagePullSecret}}
|
|
{{- end }}
|
|
{{ if gt (len .TolerationKeys) 0 }}
|
|
tolerations:
|
|
{{- range $i, $key := .TolerationKeys }}
|
|
- key: "{{$key}}"
|
|
operator: "Exists"
|
|
{{- end }}
|
|
{{- end }}
|
|
`
|
|
|
|
var labelsTmpl = `---
|
|
apiVersion: builtin
|
|
kind: LabelTransformer
|
|
metadata:
|
|
name: labels
|
|
labels:
|
|
app.kubernetes.io/instance: {{.Namespace}}
|
|
app.kubernetes.io/version: "{{.Version}}"
|
|
app.kubernetes.io/part-of: flux
|
|
fieldSpecs:
|
|
- path: metadata/labels
|
|
create: true
|
|
- kind: Deployment
|
|
path: spec/template/metadata/labels
|
|
create: true
|
|
`
|
|
|
|
var namespaceTmpl = `---
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: {{.Namespace}}
|
|
labels:
|
|
pod-security.kubernetes.io/warn: restricted
|
|
pod-security.kubernetes.io/warn-version: latest
|
|
`
|
|
|
|
func execTemplate(obj interface{}, tmpl, filename string) error {
|
|
t, err := template.New("tmpl").Parse(tmpl)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var data bytes.Buffer
|
|
writer := bufio.NewWriter(&data)
|
|
if err := t.Execute(writer, obj); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := writer.Flush(); err != nil {
|
|
return err
|
|
}
|
|
|
|
file, err := os.Create(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
_, err = io.WriteString(file, data.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return file.Sync()
|
|
}
|
|
|
|
func copyFile(src, dst string) error {
|
|
in, err := os.Open(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer in.Close()
|
|
|
|
out, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer out.Close()
|
|
|
|
_, err = io.Copy(out, in)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return out.Close()
|
|
}
|