mirror of https://github.com/fluxcd/flux2.git
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			222 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			222 lines
		
	
	
		
			4.7 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
 | |
| 
 | |
| patchesJson6902:
 | |
| {{- 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
 | |
| `
 | |
| 
 | |
| 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()
 | |
| }
 |