Skip to content

Commit

Permalink
Merge pull request Mirantis#8 from Kshatrix/helmify
Browse files Browse the repository at this point in the history
Generate hmc chart with helmify
  • Loading branch information
Kshatrix authored May 30, 2024
2 parents 30fa6fe + 18dc9f0 commit 09657f6
Show file tree
Hide file tree
Showing 24 changed files with 882 additions and 4 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ jobs:
uses: golangci/golangci-lint-action@v6
with:
args: --timeout 10m0s
- name: Check hmc chart
run: make hmc-chart-generate && git diff --exit-code
- name: Unit tests
run: |
make test
Expand Down
12 changes: 12 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,11 @@ build-installer: manifests generate kustomize ## Generate a consolidated YAML wi
cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
$(KUSTOMIZE) build config/default > dist/install.yaml

.PHONY: hmc-chart-generate
hmc-chart-generate: kustomize helmify ## Generate hmc helm chart
rm -rf charts/hmc/values.yaml charts/hmc/templates/*.yaml
$(KUSTOMIZE) build config/default | $(HELMIFY) charts/hmc

##@ Deployment

ifndef ignore-not-found
Expand Down Expand Up @@ -161,6 +166,7 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen-$(CONTROLLER_TOOLS_VERSION)
ENVTEST ?= $(LOCALBIN)/setup-envtest-$(ENVTEST_VERSION)
GOLANGCI_LINT = $(LOCALBIN)/golangci-lint-$(GOLANGCI_LINT_VERSION)
HELM ?= $(LOCALBIN)/helm-$(HELM_VERSION)
HELMIFY ?= $(LOCALBIN)/helmify-$(HELMIFY_VERSION)

FLUX_CHART_REPOSITORY ?= oci://ghcr.io/fluxcd-community/charts/flux2
FLUX_CHART_VERSION ?= 2.13.0
Expand All @@ -172,6 +178,7 @@ CONTROLLER_TOOLS_VERSION ?= v0.14.0
ENVTEST_VERSION ?= release-0.17
GOLANGCI_LINT_VERSION ?= v1.57.2
HELM_VERSION ?= v3.15.1
HELMIFY_VERSION ?= v0.4.13

.PHONY: kustomize
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.
Expand Down Expand Up @@ -199,6 +206,11 @@ $(HELM): $(LOCALBIN)
rm -f $(LOCALBIN)/helm-*
curl -s $(HELM_INSTALL_SCRIPT) | USE_SUDO=false HELM_INSTALL_DIR=$(LOCALBIN) DESIRED_VERSION=$(HELM_VERSION) BINARY_NAME=helm-$(HELM_VERSION) PATH="$(LOCALBIN):$(PATH)" bash

.PHONY: helmify
helmify: $(HELMIFY) ## Download helmify locally if necessary.
$(HELMIFY): $(LOCALBIN)
$(call go-install-tool,$(HELMIFY),github.com/arttor/helmify/cmd/helmify,${HELMIFY_VERSION})

# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
# $1 - target path with name of binary (ideally with version)
# $2 - package url which can be installed
Expand Down
23 changes: 23 additions & 0 deletions charts/hmc/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
21 changes: 21 additions & 0 deletions charts/hmc/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: v2
name: hmc
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "0.1.0"
62 changes: 62 additions & 0 deletions charts/hmc/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "hmc.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 "hmc.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 }}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "hmc.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "hmc.labels" -}}
helm.sh/chart: {{ include "hmc.chart" . }}
{{ include "hmc.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "hmc.selectorLabels" -}}
app.kubernetes.io/name: {{ include "hmc.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Create the name of the service account to use
*/}}
{{- define "hmc.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "hmc.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
61 changes: 61 additions & 0 deletions charts/hmc/templates/awsprovider-crd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: awsproviders.hmc.mirantis.com
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
labels:
{{- include "hmc.labels" . | nindent 4 }}
spec:
group: hmc.mirantis.com
names:
kind: AWSProvider
listKind: AWSProviderList
plural: awsproviders
singular: awsprovider
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: AWSProvider is the Schema for the awsprovider API
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: AWSProviderSpec defines the desired state of AWSProvider
properties:
foo:
description: Foo is an example field of AWSProvider. Edit awsprovider_types.go
to remove/update
type: string
type: object
status:
description: AWSProviderStatus defines the observed state of AWSProvider
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
25 changes: 25 additions & 0 deletions charts/hmc/templates/awsprovider-editor-rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "hmc.fullname" . }}-awsprovider-editor-role
labels:
{{- include "hmc.labels" . | nindent 4 }}
rules:
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- awsprovider
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- awsprovider/status
verbs:
- get
21 changes: 21 additions & 0 deletions charts/hmc/templates/awsprovider-viewer-rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "hmc.fullname" . }}-awsprovider-viewer-role
labels:
{{- include "hmc.labels" . | nindent 4 }}
rules:
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- awsprovider
verbs:
- get
- list
- watch
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- awsprovider/status
verbs:
- get
84 changes: 84 additions & 0 deletions charts/hmc/templates/deployment-crd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: deployments.hmc.mirantis.com
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
labels:
{{- include "hmc.labels" . | nindent 4 }}
spec:
group: hmc.mirantis.com
names:
kind: Deployment
listKind: DeploymentList
plural: deployments
singular: deployment
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: Deployment is the Schema for the deployments API
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: DeploymentSpec defines the desired state of Deployment
properties:
configuration:
description: |-
Configuration allows to provide parameters for template customization.
If no Configuration provided, the field will be populated with the default values for
the template and DryRun will be enabled.
x-kubernetes-preserve-unknown-fields: true
dryRun:
description: DryRun specifies whether the template should be applied
after validation or only validated.
type: boolean
template:
description: Template is a reference to a Template object located in
the same namespace.
type: string
required:
- template
type: object
status:
description: DeploymentStatus defines the observed state of Deployment
properties:
valid:
description: Valid indicates whether the template passed validation
or not.
type: boolean
validationError:
description: ValidationError provides information regarding issues encountered
during template validation.
type: string
required:
- valid
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
25 changes: 25 additions & 0 deletions charts/hmc/templates/deployment-editor-rbac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "hmc.fullname" . }}-deployment-editor-role
labels:
{{- include "hmc.labels" . | nindent 4 }}
rules:
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- deployments
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- hmc.mirantis.com.hmc.mirantis.com
resources:
- deployments/status
verbs:
- get
Loading

0 comments on commit 09657f6

Please sign in to comment.