diff --git a/util/kubernetes/client/templates.go b/util/kubernetes/client/templates.go index 8d79e8b4..d023252a 100644 --- a/util/kubernetes/client/templates.go +++ b/util/kubernetes/client/templates.go @@ -8,6 +8,7 @@ var templates = map[string]string{ "serviceaccount": serviceAccountTmpl, "networkpolicies": networkPolicyTmpl, "networkpolicy": networkPolicyTmpl, + "resourcequota": resourceQuotaTmpl, } var deploymentTmpl = ` @@ -269,3 +270,45 @@ spec: {{- end }} {{- end }} ` + +var resourceQuotaTmpl = ` +apiVersion: v1 +kind: ResourceQuota +metadata: + name: "{{ .Metadata.Name }}" + namespace: "{{ .Metadata.Namespace }}" + labels: + {{- with .Metadata.Labels }} + {{- range $key, $value := . }} + {{ $key }}: "{{ $value }}" + {{- end }} + {{- end }} +spec: + hard: + {{- if .Limits }} + {{- with .Limits }} + {{- if .Memory }} + limits.memory: {{ .Memory }} + {{- end }} + {{- if .CPU }} + limits.cpu: {{ .CPU }} + {{- end }} + {{- if .EphemeralStorage }} + limits.ephemeral-storage: {{ .EphemeralStorage }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Requests }} + {{- with .Requests }} + {{- if .Memory }} + requests.memory: {{ .Memory }} + {{- end }} + {{- if .CPU }} + requests.cpu: {{ .CPU }} + {{- end }} + {{- if .EphemeralStorage }} + requests.ephemeral-storage: {{ .EphemeralStorage }} + {{- end }} + {{- end }} + {{- end }} +` diff --git a/util/kubernetes/client/types.go b/util/kubernetes/client/types.go index a5fd77ad..aba9e2d2 100644 --- a/util/kubernetes/client/types.go +++ b/util/kubernetes/client/types.go @@ -268,8 +268,15 @@ type VolumeMount struct { MountPath string `json:"mountPath"` } -// NetworkPolicy is a Kubernetes Namespace +// NetworkPolicy defines label-based filtering for network ingress type NetworkPolicy struct { AllowedLabels map[string]string `json:"allowedLabels,omitempty"` Metadata *Metadata `json:"metadata,omitempty"` } + +// ResourceQuota defines resource limits for a namespace +type ResourceQuota struct { + Requests *ResourceLimits `json:"requests,omitempty"` + Limits *ResourceLimits `json:"limits,omitempty"` + Metadata *Metadata `json:"metadata,omitempty"` +}