* Add Get() and GetOptions. * Removed watcher. Outline of client. YAML templates * Added default service and deployment templates and types * Added API tests and cleaned up errors. * Small refactoring. Template package is no more. * Ripped out existing code in preparation to small rework * Reshuffled the source code to make it organized better * Create service and deployment in kubernetes runtime * Major cleanup and refactoring of Kubernetes runtime * Service now handles low level K8s API calls across both K8s deployment an service API objects * Runtime has a task queue that serves for queueing runtime action requests * General refactoring * No need for Lock in k8s service * Added kubernetes runtime env var to default deployment * Enable running different versions of the same service * Can't delete services through labels * Proto cruft. Added runtime.CreateOptions implementation in proto * Removed proxy service from default env variables * Make service name mandatory param to Get method * Get Delete changes from https://github.com/micro/go-micro/pull/945 * Replaced template files with global variables * Validate service names before sending K8s API request * Refactored Kubernetes API client. Fixed typos. * Added client.Resource to make API resources more explicit in code
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package client
 | |
| 
 | |
| var templates = map[string]string{
 | |
| 	"deployments": deploymentTmpl,
 | |
| 	"services":    serviceTmpl,
 | |
| }
 | |
| 
 | |
| var deploymentTmpl = `
 | |
| apiVersion: apps/v1
 | |
| kind: Deployment
 | |
| metadata:
 | |
|   name: "{{ .Metadata.Name }}"
 | |
|   namespace: "{{ .Metadata.Namespace }}"
 | |
|   labels:
 | |
|     {{- with .Metadata.Labels }}
 | |
|     {{- range $key, $value := . }}
 | |
|     {{ $key }}: "{{ $value }}"
 | |
|     {{- end }}
 | |
|     {{- end }}
 | |
| spec:
 | |
|   replicas: {{ .Spec.Replicas }}
 | |
|   selector:
 | |
|     matchLabels:
 | |
|       {{- with .Spec.Selector.MatchLabels }}
 | |
|       {{- range $key, $value := . }}
 | |
|       {{ $key }}: "{{ $value }}"
 | |
|       {{- end }}
 | |
|       {{- end }}
 | |
|   template:
 | |
|     metadata:
 | |
|       labels:
 | |
|         {{- with .Spec.Template.Metadata.Labels }}
 | |
|         {{- range $key, $value := . }}
 | |
|         {{ $key }}: "{{ $value }}"
 | |
|         {{- end }}
 | |
|         {{- end }}
 | |
|     spec:
 | |
|       containers:
 | |
|       {{- with .Spec.Template.PodSpec.Containers }}
 | |
|       {{- range . }}
 | |
|         - name: {{ .Name }}
 | |
|           env:
 | |
|           {{- with .Env }}
 | |
|           {{- range . }}
 | |
|           - name: "{{ .Name }}"
 | |
|             value: "{{ .Value }}"
 | |
|           {{- end }}
 | |
|           {{- end }}
 | |
|           command:
 | |
|           {{- range .Command }}
 | |
|           - {{.}}
 | |
|           {{- end }}
 | |
|           image: {{ .Image }}
 | |
|           imagePullPolicy: Always
 | |
|           ports:
 | |
|           {{- with .Ports }}
 | |
|           {{- range . }}
 | |
|           - containerPort: {{ .ContainerPort }}
 | |
|             name: {{ .Name }}
 | |
|           {{- end}}
 | |
|           {{- end}}
 | |
|       {{- end }}
 | |
|       {{- end}}
 | |
| `
 | |
| 
 | |
| var serviceTmpl = `
 | |
| apiVersion: v1
 | |
| kind: Service
 | |
| metadata:
 | |
|   name: "{{ .Metadata.Name }}"
 | |
|   namespace: "{{ .Metadata.Namespace }}"
 | |
|   labels:
 | |
|     {{- with .Metadata.Labels }}
 | |
|     {{- range $key, $value := . }}
 | |
|     {{ $key }}: "{{ $value }}"
 | |
|     {{- end }}
 | |
|     {{- end }}
 | |
| spec:
 | |
|   selector:
 | |
|     {{- with .Spec.Selector }}
 | |
|     {{- range $key, $value := . }}
 | |
|     {{ $key }}: "{{ $value }}"
 | |
|     {{- end }}
 | |
|     {{- end }}
 | |
|   ports:
 | |
|   {{- with .Spec.Ports }}
 | |
|   {{- range . }}
 | |
|   - name: "{{ .Name }}"
 | |
|     port: {{ .Port }}
 | |
|     protocol: {{ .Protocol }}
 | |
|   {{- end }}
 | |
|   {{- end }}
 | |
| `
 |