Browse Source

Add node-labeler helm chart

Change-Id: I286c283272a86eff81b479a9dad29eb2d958fecc
changes/22/741722/24
okozachenko 1 year ago
parent
commit
d3f81d5c4a
  1. 11
      charts/node-labeler/Chart.yaml
  2. 41
      charts/node-labeler/templates/_helpers.tpl
  3. 15
      charts/node-labeler/templates/clusterrole.yaml
  4. 15
      charts/node-labeler/templates/clusterrolebinding.yaml
  5. 41
      charts/node-labeler/templates/daemonset.yaml
  6. 8
      charts/node-labeler/templates/serviceaccount.yaml
  7. 1
      charts/node-labeler/values.yaml
  8. 22
      playbooks/node-labeler/pre.yaml
  9. 40
      playbooks/node-labeler/run.yaml
  10. 18
      zuul.d/project.yaml

11
charts/node-labeler/Chart.yaml

@ -0,0 +1,11 @@
---
apiVersion: v1
name: node-labeler
version: 0.5.3
description: Node labeler for Kubernetes
home: https://github.com/vexxhost/node-labeler
maintainers:
- name: Mohammed Naser
email: mnaser@vexxhost.com
url: https://github.com/mnaser
appVersion: v0.1.1

41
charts/node-labeler/templates/_helpers.tpl

@ -0,0 +1,41 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "node-labeler.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 "node-labeler.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 -}}
{{/*
Generate basic labels
*/}}
{{- define "node-labeler.labels" }}
app.kubernetes.io/name: {{ include "node-labeler.fullname" . }}
app.kubernetes.io/instance: {{ include "node-labeler.chart" . }}
app.kubernetes.io/version: {{ .Chart.Version }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "node-labeler.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

15
charts/node-labeler/templates/clusterrole.yaml

@ -0,0 +1,15 @@
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ include "node-labeler.fullname" . }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- patch

15
charts/node-labeler/templates/clusterrolebinding.yaml

@ -0,0 +1,15 @@
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ include "node-labeler.fullname" . }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "node-labeler.fullname" . }}
subjects:
- kind: ServiceAccount
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}

41
charts/node-labeler/templates/daemonset.yaml

@ -0,0 +1,41 @@
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
spec:
selector:
matchLabels:
{{ include "node-labeler.labels" . | indent 6 }}
template:
metadata:
labels:
{{ include "node-labeler.labels" . | indent 8 }}
spec:
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: {{ include "node-labeler.fullname" . }}
containers:
- name: node-labeler
image: vexxhost/node-labeler:latest
resources:
requests:
cpu: "100m"
memory: "50Mi"
limits:
cpu: "100m"
memory: "50Mi"
env:
- name: NODE
valueFrom:
fieldRef:
fieldPath: spec.nodeName
nodeSelector:
kubernetes.io/arch: amd64
updateStrategy:
rollingUpdate:
maxUnavailable: 10%

8
charts/node-labeler/templates/serviceaccount.yaml

@ -0,0 +1,8 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}

1
charts/node-labeler/values.yaml

@ -0,0 +1 @@
---

22
playbooks/node-labeler/pre.yaml

@ -0,0 +1,22 @@
---
# Copyright (c) 2020 VEXXHOST, Inc.
#
# 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.
- hosts: all
roles:
- name: helm-template
helm_release_name: node-labeler
helm_chart: ./charts/node-labeler
helm_values_file: ./charts/node-labeler/values.yaml

40
playbooks/node-labeler/run.yaml

@ -0,0 +1,40 @@
---
# Copyright (c) 2020 VEXXHOST, Inc.
#
# 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.
- hosts: all
tasks:
- name: Get node name
shell: kubectl get nodes -o=name | head -1
register: _node_name
until: _node_name is success
retries: 60
delay: 5
failed_when: |
{{ _node_name.stdout_lines | length == 0 }}
- name: Get the node labels
shell: kubectl label {{ _node_name.stdout }} --list
register: _node_labels
- name: Check the label node.vexxhost.com/vendor is set
fail:
msg: node.vexxhost.com/vendor label is missing.
when: (_node_labels.stdout is search('node.vexxhost.com/vendor'))==False
- name: Check the label node.vexxhost.com/product is set
fail:
msg: node.vexxhost.com/product label is missing.
when: (_node_labels.stdout is search('node.vexxhost.com/product'))==False

18
zuul.d/project.yaml

@ -0,0 +1,18 @@
- job:
name: helm-charts:node-labeler
parent: apply-helm-charts
pre-run: playbooks/node-labeler/pre.yaml
run: playbooks/node-labeler/run.yaml
vars:
minikube_dns_resolvers: [1.1.1.1, 8.8.8.8]
collect_kubernetes_logs_namespace: kube-system
- project:
check:
jobs:
- chart-testing-lint
- helm-charts:node-labeler
gate:
jobs:
- chart-testing-lint
- helm-charts:node-labeler
Loading…
Cancel
Save