From 284128c78f03b4146366127a7a0a81e5638a999f Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Fri, 30 Jul 2021 15:05:18 +0530 Subject: [PATCH] openebs-storage-class: Move to Helm Chart Signed-off-by: Suraj Deshmukh --- .../openebs-storage-class/.helmignore | 23 ++++ .../openebs-storage-class/Chart.yaml | 8 ++ .../templates/storage-class.yaml | 36 +++++++ .../openebs-storage-class/values.yaml | 15 +++ pkg/assets/generated_assets.go | 46 ++++++++ .../openebs-storage-class/component.go | 37 ++----- .../openebs-storage-class/component_test.go | 101 ++++++++++++++++++ .../openebs-storage-class/template.go | 49 +++------ 8 files changed, 253 insertions(+), 62 deletions(-) create mode 100644 assets/charts/components/openebs-storage-class/.helmignore create mode 100644 assets/charts/components/openebs-storage-class/Chart.yaml create mode 100644 assets/charts/components/openebs-storage-class/templates/storage-class.yaml create mode 100644 assets/charts/components/openebs-storage-class/values.yaml diff --git a/assets/charts/components/openebs-storage-class/.helmignore b/assets/charts/components/openebs-storage-class/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/assets/charts/components/openebs-storage-class/.helmignore @@ -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/ diff --git a/assets/charts/components/openebs-storage-class/Chart.yaml b/assets/charts/components/openebs-storage-class/Chart.yaml new file mode 100644 index 000000000..dff6f68c4 --- /dev/null +++ b/assets/charts/components/openebs-storage-class/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v2 +name: openebs-storage-class +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 + +# This should match the value of the openebs-operator helm chart. +appVersion: "2.10.0" diff --git a/assets/charts/components/openebs-storage-class/templates/storage-class.yaml b/assets/charts/components/openebs-storage-class/templates/storage-class.yaml new file mode 100644 index 000000000..c5764014a --- /dev/null +++ b/assets/charts/components/openebs-storage-class/templates/storage-class.yaml @@ -0,0 +1,36 @@ +{{- range .Values.storageClasses }} +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: {{ .name }} + annotations: + openebs.io/cas-type: cstor + storageclass.kubernetes.io/is-default-class: "{{ .default }}" + cas.openebs.io/config: | + - name: StoragePoolClaim + value: "cstor-pool-{{ .name }}" + - name: ReplicaCount + value: "{{ .replicaCount }}" +provisioner: openebs.io/provisioner-iscsi +reclaimPolicy: "{{ .reclaimPolicy }}" +--- +apiVersion: openebs.io/v1alpha1 +kind: StoragePoolClaim +metadata: + name: cstor-pool-{{ .name }} +spec: + name: cstor-pool-{{ .name }} + type: disk + maxPools: 3 + poolSpec: + poolType: striped + {{- if .disks }} + blockDevices: + blockDeviceList: + {{range .disks -}} + - {{.}} + {{end}} + {{- end }} +--- +{{end}} diff --git a/assets/charts/components/openebs-storage-class/values.yaml b/assets/charts/components/openebs-storage-class/values.yaml new file mode 100644 index 000000000..81e1531ec --- /dev/null +++ b/assets/charts/components/openebs-storage-class/values.yaml @@ -0,0 +1,15 @@ +storageClasses: +- name: test + default: false + reclaimPolicy: Retain + replicaCount: 1 + # disks: + # - foo + # - bar +# - name: notest +# default: false +# reclaimPolicy: Retain +# replicaCount: 1 +# disks: +# - baz +# - zab diff --git a/pkg/assets/generated_assets.go b/pkg/assets/generated_assets.go index d3c54dcb5..a64d63b98 100644 --- a/pkg/assets/generated_assets.go +++ b/pkg/assets/generated_assets.go @@ -3856,6 +3856,42 @@ var vfsgenAssets = func() http.FileSystem { compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5b\x59\x6f\x1b\x39\xf2\x7f\xef\x4f\x51\x50\x3f\xcc\xfc\x81\xe8\x70\x12\xcf\xcc\x5f\x6f\x49\x9c\x04\x5e\xe4\x30\xc6\xc9\x02\x83\xc5\x02\xa1\x9a\xd5\x6a\xae\xd9\x64\x0f\xc9\x96\xad\xec\xee\x77\x5f\xf0\xe8\x56\x5f\x3a\x2c\x6b\x32\xde\x2c\xf2\x90\x16\x59\x2c\x16\x8b\x55\xf5\x23\xab\xe8\x18\x2e\x30\x25\x25\x37\xb0\x22\xbc\x44\x0d\xa9\x54\x20\x0b\x14\xb8\xd0\x93\x28\x86\x4f\x19\xd3\xc0\x34\x10\xf8\xed\xc5\xfb\x77\xe3\x54\xaa\x9c\x18\x83\x14\x52\xc6\xd1\x12\x5c\x60\xc2\x89\x42\x58\x11\xc5\xc8\x82\xa3\x06\x23\x61\x81\x50\x10\xad\x91\x02\x13\x46\xc2\x5a\x96\x0a\x0c\xe6\x05\x27\x06\xf5\x24\x8a\xd4\x82\x24\xf3\x08\x20\x86\xeb\x02\x13\x96\x32\xd4\x70\x9b\xa1\xc9\x50\xc1\xaf\x2f\x5f\xbc\x02\x85\x5a\x96\x2a\x41\x0d\x3a\x93\x25\xa7\x96\x63\xa2\x90\x18\xa4\x11\x84\xaf\x39\x18\x55\x62\x04\x50\xe8\xe2\xb5\xb0\x73\xd3\x39\xa4\x84\x6b\x8c\x22\x8d\x6a\xc5\x12\x7c\x91\x24\xb2\x14\x66\xde\x1f\x23\x48\x8e\xf3\x28\x62\x39\x59\xe2\x55\xc9\xf9\x35\x26\x0a\x8d\x9e\xc3\xdf\xfe\xee\xe4\x82\xb1\x27\x01\x47\x31\x2e\x4a\xce\xc7\xda\xd1\x44\x91\x42\x8e\x44\xa3\x5f\xc0\xa8\x52\x16\x93\xd3\x15\x2a\xcd\xa4\x18\x01\x27\x0b\xe4\x4e\x95\x89\x14\x46\x49\x0e\x05\x27\x02\x21\x91\x79\x21\x05\x0a\xa3\x23\x80\x40\x3d\x87\xd1\xd3\xc9\xd9\x6c\x32\x1b\x05\x71\x2c\x5f\x3b\xdf\x95\xe4\x2c\x59\xcf\xe1\x32\xfd\x20\xcd\x95\x42\x8d\xc2\x44\x00\x0a\x0b\xa9\x99\x91\x6a\x3d\x87\xd1\x28\x8a\x48\xc1\xec\x6a\x51\xd9\x71\x58\xe9\x21\x2c\xd3\x33\xac\x85\x9c\xe6\xe3\x9a\x7c\x54\x75\x7f\x22\xcb\x86\x0c\x6e\x02\xce\x12\xa2\xe7\x70\x66\x25\x91\xca\x68\xcb\x1a\x00\xef\x0c\x2a\x41\xf8\x95\x54\x66\x0e\xe7\x3f\x9d\xff\xe4\x9a\x99\x18\x68\xd6\x05\x51\x5e\x45\x0d\xa1\x46\x6e\x77\xec\x1c\x42\x52\xbc\x46\x8e\x89\x91\x6a\x0e\xff\xfc\x77\x04\x60\x24\x47\x45\x0c\x93\xa2\xda\x05\x92\xa6\x4c\x30\xb3\x0e\x04\x19\x12\x6e\xb2\x57\x19\x26\x37\xf3\x30\x31\x33\x8c\xf0\x0b\xe4\x64\x7d\x8d\x89\x14\x54\xcf\xe1\xd9\xcc\xf5\x15\xa8\x98\xa4\x75\xeb\x4f\xb6\x35\x8e\xa1\x5e\x7d\x6d\x61\xa0\xf0\xf7\x12\xb5\xd1\x40\x04\x05\xce\x72\xe6\x36\x27\x8e\xe1\x57\x4c\x51\xa1\x48\x70\x0e\x99\x31\xc5\x7c\x3a\xbd\x29\x17\xa8\x04\x5a\x1b\x66\x72\x4a\x65\xa2\xa7\xa5\x46\x35\x5e\x96\x8c\xe2\xd4\x6e\x6e\x69\x70\x5c\xdb\xee\xd4\x29\x33\xfc\x08\x8b\xb0\x26\xe3\x27\x99\x87\x5f\x00\x49\x51\xce\xe1\x6c\x36\x9b\xe5\x75\x53\x8e\xb9\xdb\xe0\xa7\x6f\x59\x68\xab\xc4\xec\x0c\x3b\x1f\x1a\x75\xf6\x96\x45\x51\x44\xbd\x63\x5f\x1b\xa9\xc8\x12\x5f\x49\x91\xb2\x65\xcb\x46\x46\xd6\x48\x46\x91\x75\x62\xa6\xdc\x56\xac\xa1\xb4\x4e\xbb\x58\x83\xc9\x10\x3e\x16\x28\x5e\xbf\xbc\xb6\x0e\xad\x8d\x54\x08\x14\x17\xe5\x12\x98\xf0\x51\x80\x49\xe1\x74\xa6\xa5\xb5\x74\x93\x45\x31\x98\x8c\x18\xb0\xd1\x60\x89\xc2\x6e\xa6\x0b\x00\x8e\x57\x22\x4b\xa5\x11\x64\x0a\xaa\x14\x82\x89\x65\xcd\xdd\x7a\x08\x61\x02\x95\x9e\x44\x2b\xa2\x6a\x51\xae\x88\xc9\xac\xb8\x0b\xa2\xf1\x82\xa9\x39\x8c\xa6\x2b\xa2\xa6\xc1\x92\x47\x51\x54\x28\xb9\x62\xd6\x83\x0e\x33\xfd\xf0\xff\xf8\xe6\x17\x3d\x6e\x0c\x3d\xd0\x0d\x3c\xf7\x77\x48\x28\xaa\xd7\xd6\x6e\x9d\xe7\x56\x01\x88\x98\x24\xfb\x0b\x5b\x91\x0f\x92\xe2\x8b\xda\x6a\x83\x44\x7f\xa2\xb9\x37\xd6\xf9\xfd\x1b\x7c\x0c\x97\xa9\x85\x1a\xb8\x25\xc2\x58\xa3\xf5\xfa\x07\x2e\x13\xc2\xa1\x58\x01\xb1\x30\x46\xb1\x40\x41\x51\x24\x6b\x48\x32\xa2\x8c\xb5\x4e\x01\x1a\x4d\x14\xc3\x17\x47\xda\x50\xda\x04\x5b\xb8\xf2\xc5\xa9\x2c\xb0\x65\xc6\x32\xec\xb2\x9b\x6c\xc4\xb0\x7e\x50\x6a\x6b\xea\x49\xa9\x8d\xcc\xad\xa5\xa7\x6c\x59\xfa\x5d\xf7\xf3\x96\x05\x25\x06\xc1\x64\x52\x63\xbb\x3f\x8a\xa1\x14\x14\x55\x25\xd4\xaa\x69\xb4\x5f\xe0\x06\xd7\x93\xa8\x2b\xee\x21\x6e\xd0\x20\x1f\x07\xce\xa7\x70\x01\xeb\xa5\xce\x63\xdb\x6e\x3a\x75\x53\xfc\x99\x11\xbf\xab\xa3\xef\xdf\x0f\xb4\x20\x85\xce\xa4\xf9\x58\x58\xed\xca\x41\xab\x08\xc7\x12\xee\x6d\xa6\x6f\x25\x15\x8f\xf1\x86\x70\xb4\x21\xec\xda\x89\xd3\x5a\x35\xa4\xc1\x7b\x9f\xae\x4f\xa7\xed\x21\x7d\x77\x35\x3e\xa8\xf3\x61\xad\xf7\xf5\x3e\xa4\xf9\xbe\xee\x01\x3a\xde\xb8\x43\xb3\x1d\x0c\x3a\x48\xb5\xf7\xb0\xe3\xef\x50\xb7\xf7\x08\x47\x65\xb1\x54\x84\xe2\xb5\xb1\x87\x90\xa5\x3d\x29\xff\x8a\xfe\x06\xf0\x27\xc5\xa2\xad\xe8\x14\xec\x62\x0f\x38\xc1\x17\x41\xf3\x2e\x1a\x3d\xb1\x90\x25\x68\x5e\x39\xfa\x11\x68\xd5\xc3\xaa\x28\x3e\x0a\xad\x2a\xac\xaa\x0e\x59\x82\xe6\x01\xa3\x04\xcd\x0f\x81\x25\xbb\x25\x63\xca\xf4\xcd\x38\x27\x82\x2c\x7b\xe7\xb2\xb3\xc9\xb9\x77\x88\xe6\xc5\xa2\x18\x00\x1c\xdf\xef\x5d\x47\xb3\xaf\x76\x8e\xb3\xd9\xcf\xcf\x7e\x7e\x7e\xf6\xcb\xd3\xe7\xc1\xa5\xfc\xa5\x10\x46\xee\x67\xca\xb8\x41\xa5\x9b\x57\x95\x8f\xfa\x82\xe9\x9b\xd7\x77\x09\x2f\x29\xbe\x71\xfd\xb5\xe0\x00\xb2\xd9\x6b\x31\x4f\x5b\x19\x9e\x4c\xd1\x24\xd3\x4c\x6a\xa3\x9f\x4c\x17\x52\x9a\x51\x83\xe1\x5f\x51\x50\xa9\x7a\x9c\xd0\xf3\xf0\xbd\x96\xcb\xab\x77\x1f\x3f\x5f\xbc\xfc\xed\xd3\x93\x70\x38\x6e\xf2\xb0\x33\xf5\x38\x30\xd1\x92\x62\xd4\x64\x5b\x8b\x46\x71\x35\xe5\x52\x16\x4f\xdc\x57\x4a\x67\xfe\x43\xab\xf0\xa1\x48\xee\x3f\x68\x3e\xf6\x1f\x39\x0d\x3d\x8b\xf0\xf1\x95\x8e\x7c\x70\x5b\x60\x4b\x53\xd7\x48\x92\x0c\xb5\xa9\x2e\xde\x07\xfa\xd6\x29\x80\x5d\xd0\xfc\xfb\xc7\xf2\xff\xe1\xa8\xb1\xeb\xf8\xb2\x3d\x7a\xc8\x30\x6a\x5b\xf8\x68\x63\x48\x0f\x26\x2a\x94\xf8\x66\x86\xac\x90\x50\x26\x50\xeb\x7d\x3c\x9e\x0f\xb1\x38\xf3\x8c\x53\xc2\x78\xa9\xf0\x53\xa6\x50\x67\x92\x53\xbf\x38\xef\x23\x95\x1a\xbf\x7f\x5f\xb9\xc5\x45\x26\xe5\xcd\x21\xf6\x42\x68\xce\xb4\x3d\x47\x8d\xf7\xe4\xc2\x82\x66\xab\x54\xdc\xe8\x0d\x61\xbc\x6f\x46\x0f\xb6\x82\xa3\x0e\x24\x52\x9b\x0f\x68\x6e\xa5\xba\xd9\x44\xdf\x38\x86\xee\xda\x1e\xdd\xc6\x6f\xdd\xc1\x9d\xfb\xfe\xf4\x7c\x60\xd4\xf9\x6c\xf6\xbe\x19\x25\x6d\x40\xca\xd9\xd2\xea\x4d\x2c\x21\x55\x32\x87\xa7\x93\x3b\x1b\x37\x9f\x4d\xee\xdc\xb2\xd9\x96\xbb\xb9\xcf\x7e\xbb\x14\x16\x0a\x28\x4a\x1b\x44\x99\x1e\x0e\x57\x83\x17\x72\xcb\x7c\x20\x90\x65\xc8\x0b\x7f\x15\xe8\xda\x20\x67\xa2\xbc\x1b\x97\x86\x71\xbd\xc5\xfc\x5c\xfa\x1d\x35\x3a\x69\x3d\xdc\x71\x97\x53\x6b\x49\x35\xb9\x1f\x44\xd8\x50\x7d\x00\x48\xdc\x0f\x22\xa2\xf8\x00\x90\x78\x60\x1a\xa4\xaf\xdb\x14\x89\x29\x15\xbe\x25\xc6\x1f\x4a\xba\x5e\xff\xf6\xea\xd3\x4b\xa2\x91\x7e\xfe\x7c\x79\xd1\xc9\x44\xd7\x07\xa8\x06\x8f\x37\xdc\x69\xbf\x39\xca\x6e\xcc\x8b\xab\xcb\x6b\x5f\x4d\xe8\xf0\xa8\x7c\x6e\x88\xc9\x66\x90\x3f\x92\x11\x4a\x15\x6a\x7b\x1a\x9b\x4d\xdc\xbf\xf9\xff\x9f\x9d\x9d\xdb\xbe\xcf\x1a\x3f\x5e\xdb\x03\xe5\x3d\xb8\xd7\x63\x46\x51\x94\x28\xba\x59\xfb\xa5\xd0\x86\x70\x1e\xd6\xf7\x47\xf9\x05\x6e\xc3\xf1\x44\x1b\x59\xe5\xa6\x0a\x1b\x32\x99\xdf\x98\x5c\x0a\x66\xa4\x62\x62\xb9\x6d\x1b\xfa\x75\x0a\xbc\x2b\xa4\x32\x3b\xee\xc6\x11\x11\x84\xaf\x0d\x4b\x06\xf7\xbe\xaa\x2c\xad\x81\x09\xc8\x64\xa9\xb4\x4b\x43\xd3\x4a\x62\x92\x1a\x54\x70\x9b\xb1\x24\x03\x02\x85\x5d\x31\xae\x50\x18\x10\x88\xb4\xaa\x61\x69\x14\x66\x62\xcf\xbd\x4c\x2c\x2f\x85\x41\xb5\x22\xdc\x4a\xf0\x3c\x1b\x45\xd1\x3f\xd8\x8a\xcc\x23\x37\x95\x90\x02\x12\xcd\x3a\x96\xdb\x5f\x95\x1d\x72\x40\xb2\xed\x59\x04\xd0\x4e\xde\x0f\x64\xd6\x46\x7e\x6a\xcb\xd2\xcd\x4d\x15\xb3\xc1\xbe\x2b\x42\x0c\x54\x82\x90\xa6\x8e\x0a\x1b\x12\x04\x22\xd6\xa0\xcb\x45\xd3\x77\x33\x54\x5e\x7d\x52\xf0\xf5\x86\x7b\x15\x79\x34\x1a\x6b\x42\x1a\x12\x22\xac\x86\x08\xa5\x48\x37\x83\x14\xa6\x30\x76\x18\xa2\xe7\xd3\x4a\xd2\xc9\x92\x99\xac\x5c\x58\x20\xb1\xfc\xea\x23\x5a\x73\x01\x2e\x22\x35\xc4\x30\x0a\x11\x98\x76\x9c\x61\x5c\x13\xba\x8f\x7f\xc1\x18\x06\x42\x70\xe8\xb3\xbd\x8d\x50\xe1\x27\x79\xdd\xc8\x04\xb7\x47\x39\xe3\x6f\xd0\xdb\x70\xa9\xa4\x6c\x09\x63\xd5\x47\x1c\x54\x76\xb4\x35\xf1\x9a\xf2\xa3\x6b\xd9\xac\xa0\x3f\x7a\x75\xff\x5f\x43\xa8\x81\xc9\x7f\xa4\x4c\xb7\xc9\x3a\xd2\x77\x09\x86\xb9\xb4\xe7\x6a\x33\xa8\xfa\xa2\x81\xd0\x12\xe8\xde\x79\x96\x5b\xe2\xcf\xc0\x84\x9e\x32\x8c\xfe\x70\xf1\xbe\xca\xe2\x74\xc6\x7a\x2f\x24\x79\xc1\xbb\xe1\x82\xb5\x01\x6b\x63\x90\x5d\x6b\xbe\x65\x26\x6b\x47\x22\xaf\xf2\x4d\x55\x5a\xe7\x84\x73\x28\xac\xf9\xc8\xd4\xb9\x78\x5a\x72\xde\x45\xc8\x37\xbd\x36\x20\x2b\xc2\xb8\x95\xd7\x31\xf4\x76\x76\xb8\xe5\xc6\x00\xbe\x86\x1d\xbb\x7c\x42\xb3\xb6\xec\x5a\xfa\x25\xe9\xd8\x76\x58\x2e\x9b\x7b\x8d\x1f\xdb\xc8\xc4\xc6\x5e\x8f\xa1\x0a\x1c\x7e\xd9\xc8\xb0\x64\xda\xd8\xf3\xce\xef\x25\x59\x5b\x69\x9a\x7d\x9b\x6a\x70\x33\xcc\x6c\x28\x8c\x8d\x33\x3e\xcc\xf8\xc6\x10\x68\xbe\xd5\x74\x6d\xf6\xdb\x99\x6f\x63\xbd\xd1\x7a\x20\xdc\x5a\x1b\x8f\xbb\x12\x9c\x6d\xb4\xfe\xea\xfa\xf2\x8a\x97\x4b\x26\xe6\x95\x12\xf2\x90\x04\xf2\x45\xd0\xd3\x88\x9a\x68\x76\x8c\x94\x91\x03\xce\x3d\x60\x52\x48\xc9\x87\x53\xca\x6e\xf4\xd8\xf6\xef\x48\x24\xdb\xee\xf7\xcb\xdc\xec\x63\x31\xce\x97\xb9\xd9\xc1\xc7\x10\xb5\xc4\x9d\x5c\x98\x36\xcb\x5d\x1c\x56\x92\x97\x39\xee\x93\xc5\x53\xed\x96\xc6\xe9\xcb\x91\xff\x71\x10\xb8\x61\x7f\x22\x0c\xf4\xcb\xab\x8c\x5a\xb7\x16\x71\x00\x0c\x3a\xca\xa1\x50\xdf\x42\xba\x83\x10\xed\x20\x34\x73\xf3\x0d\xc0\xd9\x4e\x94\x1a\x42\xa0\xed\x00\x54\x43\xc8\xc3\x01\xa4\x67\x0c\x8f\x07\x41\x7a\xfb\x1e\x07\x9b\xee\x3e\x3f\x8a\x8f\x45\x97\x44\x17\x49\x07\x5d\x9c\xd7\xfb\x84\xfa\xc9\xe2\x7d\x33\x56\x78\xd6\x3b\xa2\xbf\x23\xbe\x72\xa1\xeb\xe4\xd3\x1f\x32\xed\xeb\x70\x8d\x38\xd9\xf4\x9b\x9b\xc9\x1f\x84\x79\x76\x17\x1f\x80\x79\xb3\x60\x0b\xab\xae\x29\x54\x81\xfb\xa4\xdb\xe0\x62\xfd\x0e\x45\x34\x63\xfd\x49\x27\xae\xe0\x61\xaf\x01\x7a\xc2\xff\x42\x33\x58\x9d\xc2\x0a\xac\xae\xba\x47\x9f\x87\x19\xa7\x55\x7e\xa2\xd9\xd8\xc7\xd7\xa3\x25\xab\xb3\x94\xd7\xe1\xed\x62\x38\x0c\x87\xf7\x91\x1f\xdc\xdb\x4b\x3f\xdb\x26\xa1\x19\x32\xbc\xa7\x5a\x46\x8b\xdd\xfd\xd6\x10\xf9\xfa\x53\x1b\x10\x96\x12\x3d\x54\x47\xf1\x0e\x1c\xe8\x55\x3a\xa3\x06\x5a\xce\xfb\x30\x79\x04\x0a\x56\xa9\x3f\x2b\xe2\xe3\x01\xc0\xfe\xc2\x77\x43\xa0\x53\xc7\x83\xb7\xba\x3f\xeb\x7d\xb6\xdb\xd5\x8d\x7c\x4b\x55\x78\xae\x86\xef\xa8\x3d\x07\x92\xa1\xf2\x73\xe8\x6a\x54\xa0\x5d\x4b\x5d\x84\x0e\xfd\xfb\xea\xd0\x81\xec\xe0\x52\x74\x8b\xed\x40\x35\xba\xea\xdf\x5f\x90\x6e\x71\xea\xd5\xa4\xab\xe8\xda\x2d\x4b\xb7\xf9\x57\xed\xae\x28\x9d\xd2\xd9\x93\xfb\x96\xa2\xfd\xd9\x26\x54\xa3\x5b\x12\x75\x0b\xd2\xad\xce\xcf\x14\x57\x57\x76\x54\x67\xd5\x7e\x64\x4e\x94\x69\xf5\x06\x23\xec\xe0\xe8\x69\x8c\xf1\xa8\xd0\x1e\xac\xd1\xb6\xf9\xba\xc2\x95\xa4\x27\x90\xaa\x51\x89\x38\x3a\x9e\xb7\x73\xf1\x31\xf4\xb2\xbc\xae\xa9\x9d\x91\x6f\xa9\x9f\xb6\xf7\x64\x5f\x5e\xde\x91\x35\x53\xf3\xf7\x63\xd6\xcc\xcf\x07\xa2\x6d\x29\x7a\xd7\xdd\xc8\xd2\x77\x27\x6a\xd9\xd9\xce\x5c\xbd\x53\x54\xff\x89\xb3\x1b\xba\xf5\x95\xb3\x2b\xa3\x55\x2f\x58\x9b\x89\xcb\x6d\xd8\xf3\x80\x0b\xef\xbe\xab\x2b\x5d\x0b\x92\xb3\x64\x3c\x94\x7d\x6d\x0b\x7a\xc8\x4d\x76\x7b\x0e\xf7\x5b\xdc\x6b\xf7\x27\x52\x8f\xba\xe5\x6e\x49\x97\x7e\x83\xab\x6f\x05\xfa\x56\x82\x62\xf5\x88\x70\x7f\xa7\xd5\x9c\xfc\x12\xcc\xab\x6c\xf6\x83\xc3\xe2\xc0\x4b\xe9\xc1\xf0\x77\x48\xc4\x6c\xbd\x10\xa8\x41\x72\xf8\x91\x40\xc5\xb0\xf7\x4e\xa0\x99\xbd\x75\x2f\x0f\x1a\x61\x76\xf0\x1d\x64\x1d\x59\x76\xbc\xcc\x7e\x6c\x68\x12\xc5\xf0\x35\xd5\x8d\x48\xb2\xf5\x88\xbd\x2f\x5a\x7d\x4d\x75\xbd\x6f\x8d\xef\xd3\x1c\xb1\x2b\x19\x1f\x95\xa7\x35\x57\x7c\xb0\x67\x6d\xf1\xa3\xaf\xa9\x3e\xd9\xad\xd1\xca\x75\xc4\x7d\xf1\x6c\xf2\xb3\x37\x08\xbe\xca\x4f\x61\x10\x7c\x95\xd7\xea\x69\x7c\x9f\xc6\x20\x2a\x19\x1f\x95\x41\x34\x57\xfc\x50\x83\xe0\xab\xfc\x64\x06\x61\xe5\x3a\xc2\x20\x66\xee\xfc\x1b\x25\x1c\x89\x28\x8b\xcd\xa3\x9a\xf0\x2e\xe8\x3d\xb9\x41\xd0\x76\x33\xdc\xdf\xa1\x55\x22\xb9\x3f\xe4\x04\x14\xd4\x6f\x0c\x81\x1f\xa6\x3f\x4c\xc2\x90\x37\x52\x01\xde\xf9\x8d\xde\x88\xee\x37\x29\x91\xca\x9e\xd3\xfc\x16\x7a\x5d\x13\x41\x2b\x22\x4b\xc3\x44\xa0\x89\x5a\x2a\x88\xba\xcb\x5e\x30\x63\x21\xd0\xbd\xaa\x4a\x0c\x8f\xaa\x05\x45\xff\x09\x00\x00\xff\xff\x9f\xb8\x50\x27\x7e\x3b\x00\x00"), }, + "/charts/components/openebs-storage-class": &vfsgen۰DirInfo{ + name: "openebs-storage-class", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + }, + "/charts/components/openebs-storage-class/.helmignore": &vfsgen۰CompressedFileInfo{ + name: ".helmignore", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 349, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x41\x6e\xe3\x30\x0c\x45\xf7\x3c\xc5\x1f\x78\x33\x63\x0c\xe4\x43\x24\xb3\x98\x55\x0b\xa4\xc8\xb6\x90\x6d\x46\x62\x22\x8b\x82\x44\x27\x6d\x17\x3d\x7b\x91\x04\x41\xbb\x79\x20\x3f\xc8\x8f\xd7\xe1\xd9\x9b\x71\xcd\x0d\xa6\x90\x90\xb5\x32\x2e\x91\x33\xc6\x55\xd2\x2c\x39\xa0\xf8\xe9\xe4\x03\x37\x47\x1d\x5e\xa2\x34\xb4\xb5\x14\xad\xd6\xd0\x22\xa7\x84\x90\x74\xc4\xe2\x6d\x8a\x92\xc3\x5f\x54\x4e\xde\xe4\xcc\x28\xde\xe2\x8f\xdc\xe7\x99\x3a\x64\x0e\xde\x44\x33\x7e\x97\xca\x07\x79\xe3\x19\x17\xb1\x88\x5f\x7f\x1c\x9e\x72\x7a\x87\xe6\xdb\xe7\x55\x09\x85\x2b\x92\x64\x76\xe4\xb6\xbb\xd7\x9d\x69\x65\xea\xb0\xd1\x65\xd1\x8c\xfd\x66\x87\x59\x6a\x23\x17\xc4\x86\x1b\xef\xfa\xe4\xc6\x8f\x3a\xdc\xf8\x08\x62\x18\xae\x78\xac\xed\x9c\x87\xef\xa2\xd1\x4f\xa7\xb5\xe0\x20\x89\x1b\xf5\xae\x5d\x0a\xf5\x6e\xf4\x27\xea\x9d\x2d\xd7\x59\xab\x04\xea\x3f\xa9\xc3\xde\x57\xd1\xb5\xe1\xff\xf6\x5f\x23\x57\xaa\x1e\x79\x32\x72\x32\xb3\x1f\xee\xe7\x55\x8f\xe4\xce\x6d\xd2\x99\x07\xfa\x0a\x00\x00\xff\xff\x16\xec\x32\x27\x5d\x01\x00\x00"), + }, + "/charts/components/openebs-storage-class/Chart.yaml": &vfsgen۰CompressedFileInfo{ + name: "Chart.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 205, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8e\xb1\x6a\xc4\x30\x0c\x40\x77\x7d\x85\xb8\xce\x67\x7c\x37\x66\xeb\x56\xe8\x5a\xba\xeb\x1c\xa5\x36\x38\x96\x90\x94\x40\xff\xbe\x34\x90\x8c\x0f\x1e\xbc\x47\xda\xbe\xd9\xbc\xc9\x98\x70\x7f\xc2\xa0\x95\x27\x14\xe5\xc1\x2f\xbf\x7b\x88\xd1\x0f\xdf\x4b\x27\x77\x98\xd9\x8b\x35\x8d\xc3\x7d\xc7\x0f\xee\x2b\x96\x4a\x16\xb8\x88\xe1\xe7\xf6\x62\x1b\x1c\xec\x10\xbf\xca\x13\x92\x6a\x6f\x85\xfe\x75\xd8\xcf\x44\x4e\x8f\x94\x01\xde\xf0\xab\x36\x47\xaf\xb2\xf5\x19\x57\x8a\x52\x31\x2a\xe3\x4e\x7d\x63\x94\xe5\x80\xf3\x42\x94\x8d\x42\x0c\xeb\x55\x4c\x40\xaa\xd7\xf7\xed\x99\x1e\x39\xe5\x1b\xfc\x05\x00\x00\xff\xff\x94\xce\x79\x1e\xcd\x00\x00\x00"), + }, + "/charts/components/openebs-storage-class/templates": &vfsgen۰DirInfo{ + name: "templates", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + }, + "/charts/components/openebs-storage-class/templates/storage-class.yaml": &vfsgen۰CompressedFileInfo{ + name: "storage-class.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 801, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x52\xcd\x8e\x1b\x21\x0c\xbe\xf3\x14\x56\xee\x4c\xb5\xea\xa5\xe2\x9a\x1e\x7b\x58\x75\xab\xbd\x3b\x8c\x93\x5a\xc3\x00\xc2\x64\xd4\x15\xcd\xbb\x57\x30\x6c\x8b\x92\x4a\x7b\x33\xf6\xf7\x83\x7f\x4a\xd1\x90\xd0\x5f\x08\xa6\x57\x74\x57\x92\x49\x72\x48\x78\xa1\xa3\x43\x11\x12\xb8\xdd\x94\xd6\x5a\x61\xe4\x57\x4a\xc2\xc1\x1b\xe8\x88\x69\xf9\x22\x13\x87\x4f\xdb\x93\x5a\xd8\xcf\x06\x5e\x06\xa6\x5a\x29\xe3\x8c\x19\x8d\x02\xf0\xb8\x92\x81\x52\x60\xaa\x51\x95\x04\x40\xef\x43\xc6\xcc\xc1\x4b\x85\x00\x84\x48\x9e\x4e\x4d\xd1\xa2\xe8\xfc\x16\xc9\x80\xad\x5e\xad\xdc\x4d\x6d\x15\x9f\x96\xeb\x89\x92\xa7\x4c\x0d\xce\xa2\x67\x3a\xe3\xd5\x65\xdd\xca\x06\x0e\xd5\xab\xe7\xe0\x76\x3b\x34\x05\x8b\x32\x8d\x26\xc1\x9f\xf9\x62\xe0\x77\x2b\x02\xe8\xfe\xcd\xde\xc5\x73\x08\xee\xe8\x90\xd7\x5e\x06\xd8\xea\x7c\x0c\x1c\xda\x9f\x74\x0c\xc1\xe9\xa1\xa5\xc3\x9d\xcc\x77\x8a\x8e\x2d\x1e\xc3\xd5\xe7\x07\x89\xca\x4b\x03\xa0\xf1\x63\x0a\x1b\xd7\x09\x53\x32\xe3\x34\x86\xbc\x66\xb1\xc2\x2a\xd5\x31\xf0\xfa\x1c\x1c\xdb\xb7\xbf\x72\x43\xae\xe9\xdd\xaf\x6d\x90\xdc\x9e\xd0\xc5\x9f\x78\xb7\xb8\x7f\x2d\x3f\x2e\xef\xff\x4d\x2b\x89\x64\x3f\x04\x01\xec\xcb\x9c\x59\x16\x05\xb0\xe2\xaf\xea\x24\x06\x3e\x2b\x80\x8a\x7e\xe9\x2a\xfb\xeb\x47\x03\x4b\x4e\x1c\x69\x56\x00\xf5\x44\xf9\x0c\x53\xa5\xcb\xae\x77\x72\xc1\x2e\x5f\x69\x63\x4b\xfd\x7a\x86\xcc\x37\x96\xbc\x27\x4b\xe9\xa7\xbd\x53\x75\xe3\xd6\x15\x95\x32\xf5\xb8\x14\xf2\x73\x8b\xab\x0d\xf9\xf9\xfd\xe0\xdf\x0b\x7f\x02\x00\x00\xff\xff\xe7\x4f\x02\xc6\x21\x03\x00\x00"), + }, + "/charts/components/openebs-storage-class/values.yaml": &vfsgen۰CompressedFileInfo{ + name: "values.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 232, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcd\x31\xae\x83\x30\x0c\xc6\xf1\x3d\xa7\xf8\x24\x66\x86\xb7\x7a\xe5\x02\x4f\xbd\x81\x01\x53\x45\x35\x71\x85\xcd\x50\x4e\x5f\x25\xb0\x54\xed\x94\xbf\xbe\x48\xfe\x79\xd8\xc6\x77\x19\x94\xdd\xc5\x29\xf5\x28\xbc\x0a\x21\xc4\x23\x01\xb3\x2c\xbc\x6b\x10\x16\x56\x97\x04\x6c\x32\x29\xe7\xf5\xdf\x34\x4f\x2f\xc2\x4d\x82\x73\x69\xfb\x53\xf3\xc4\x83\xed\x25\x08\x7f\x09\xe8\x30\x67\x7f\x38\xb5\xec\xb1\x98\x5d\x35\xf2\x96\xea\x7b\x42\xc5\x1a\xd5\xe1\x0b\xab\xd3\x6f\xee\xfc\xf9\x04\xdb\x81\x13\xac\x59\x99\xe3\xaa\x83\xc7\xf4\x0e\x00\x00\xff\xff\x96\x3c\x43\x01\xe8\x00\x00\x00"), + }, "/charts/components/prometheus-operator": &vfsgen۰DirInfo{ name: "prometheus-operator", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), @@ -8670,6 +8706,7 @@ var vfsgenAssets = func() http.FileSystem { fs["/charts/components/metrics-server"].(os.FileInfo), fs["/charts/components/node-problem-detector"].(os.FileInfo), fs["/charts/components/openebs-operator"].(os.FileInfo), + fs["/charts/components/openebs-storage-class"].(os.FileInfo), fs["/charts/components/prometheus-operator"].(os.FileInfo), fs["/charts/components/rook"].(os.FileInfo), fs["/charts/components/velero"].(os.FileInfo), @@ -9406,6 +9443,15 @@ var vfsgenAssets = func() http.FileSystem { fs["/charts/components/openebs-operator/templates/service-maya-apiserver.yaml"].(os.FileInfo), fs["/charts/components/openebs-operator/templates/serviceaccount.yaml"].(os.FileInfo), } + fs["/charts/components/openebs-storage-class"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/charts/components/openebs-storage-class/.helmignore"].(os.FileInfo), + fs["/charts/components/openebs-storage-class/Chart.yaml"].(os.FileInfo), + fs["/charts/components/openebs-storage-class/templates"].(os.FileInfo), + fs["/charts/components/openebs-storage-class/values.yaml"].(os.FileInfo), + } + fs["/charts/components/openebs-storage-class/templates"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/charts/components/openebs-storage-class/templates/storage-class.yaml"].(os.FileInfo), + } fs["/charts/components/prometheus-operator"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/charts/components/prometheus-operator/.helmignore"].(os.FileInfo), fs["/charts/components/prometheus-operator/CONTRIBUTING.md"].(os.FileInfo), diff --git a/pkg/components/openebs-storage-class/component.go b/pkg/components/openebs-storage-class/component.go index 99b432926..c07dec407 100644 --- a/pkg/components/openebs-storage-class/component.go +++ b/pkg/components/openebs-storage-class/component.go @@ -15,14 +15,14 @@ package openebsstorageclass import ( - "bytes" "fmt" - "text/template" "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/gohcl" + "github.com/kinvolk/lokomotive/internal/template" "github.com/kinvolk/lokomotive/pkg/components" + "github.com/kinvolk/lokomotive/pkg/components/util" "github.com/kinvolk/lokomotive/pkg/k8sutil" ) @@ -117,39 +117,22 @@ func (c *component) validateConfig() error { // TODO: Convert to Helm chart. func (c *component) RenderManifests() (map[string]string, error) { - - scTmpl, err := template.New(Name).Parse(storageClassTmpl) + helmChart, err := components.Chart(Name) if err != nil { - return nil, fmt.Errorf("parsing storage class template: %w", err) + return nil, fmt.Errorf("retrieving chart from assets: %w", err) } - spTmpl, err := template.New(poolName).Parse(storagePoolTmpl) + values, err := template.Render(chartValuesTmpl, c) if err != nil { - return nil, fmt.Errorf("parsing storage pool template: %w", err) + return nil, fmt.Errorf("render chart values template: %w", err) } - var manifestsMap = make(map[string]string) - - for _, sc := range c.StorageClasses { - var scBuffer bytes.Buffer - var spBuffer bytes.Buffer - - if err := scTmpl.Execute(&scBuffer, sc); err != nil { - return nil, fmt.Errorf("executing storage class %q template: %w", sc.Name, err) - } - - filename := fmt.Sprintf("%s-%s.yml", Name, sc.Name) - manifestsMap[filename] = scBuffer.String() - - if err := spTmpl.Execute(&spBuffer, sc); err != nil { - return nil, fmt.Errorf("executing storage pool %q template: %w", sc.Name, err) - } - - filename = fmt.Sprintf("%s-%s.yml", poolName, sc.Name) - manifestsMap[filename] = spBuffer.String() + renderedFiles, err := util.RenderChart(helmChart, Name, c.Metadata().Namespace.Name, values) + if err != nil { + return nil, fmt.Errorf("render chart: %w", err) } - return manifestsMap, nil + return renderedFiles, nil } func (c *component) Metadata() components.Metadata { diff --git a/pkg/components/openebs-storage-class/component_test.go b/pkg/components/openebs-storage-class/component_test.go index 58bdda6da..6c53efee1 100644 --- a/pkg/components/openebs-storage-class/component_test.go +++ b/pkg/components/openebs-storage-class/component_test.go @@ -15,6 +15,7 @@ package openebsstorageclass import ( + "fmt" "testing" "github.com/hashicorp/hcl/v2" @@ -148,3 +149,103 @@ func TestConversion(t *testing.T) { }) } } + +func TestFullConversion(t *testing.T) { //nolint:funlen + config := `component "openebs-storage-class" { + storage-class "replica1-no-disk-selected" { + replica_count = 1 + } + storage-class "replica1" { + disks = ["disk1"] + replica_count = 1 + } + storage-class "replica3" { + replica_count = 3 + default = true + disks = ["disk2","disk3","disk4"] + } +}` + component := NewConfig() + m := testutil.RenderManifests(t, component, Name, config) + + testCases := []struct { + name string + fn func(t *testing.T) + }{ + { + name: "replica1-no-disk-selected-sc", + fn: func(t *testing.T) { + got := testutil.ConfigFromMap(t, m, k8sutil.ObjectMetadata{ + Version: "storage.k8s.io/v1", Kind: "StorageClass", Name: "replica1-no-disk-selected", + }) + + expected := `- name: StoragePoolClaim + value: "cstor-pool-replica1-no-disk-selected" +- name: ReplicaCount + value: "1" +` + testutil.MatchJSONPathStringValue(t, got, "{.metadata.annotations.cas\\.openebs\\.io/config}", expected) + }, + }, + { + name: "replica1-no-disk-selected-spc", + fn: func(t *testing.T) { + got := testutil.ConfigFromMap(t, m, k8sutil.ObjectMetadata{ + Version: "openebs.io/v1alpha1", Kind: "StoragePoolClaim", Name: "cstor-pool-replica1-no-disk-selected", + }) + + testutil.JSONPathExists(t, got, "{.spec.blockDevices}", "blockDevices is not found") + }, + }, + { + name: "replica1-verify-disks", + fn: func(t *testing.T) { + got := testutil.ConfigFromMap(t, m, k8sutil.ObjectMetadata{ + Version: "openebs.io/v1alpha1", Kind: "StoragePoolClaim", Name: "cstor-pool-replica1", + }) + + expected := "disk1" + testutil.MatchJSONPathStringValue(t, got, "{.spec.blockDevices.blockDeviceList[0]}", expected) + }, + }, + { + name: "replica3-verify-disks", + fn: func(t *testing.T) { + got := testutil.ConfigFromMap(t, m, k8sutil.ObjectMetadata{ + Version: "openebs.io/v1alpha1", Kind: "StoragePoolClaim", Name: "cstor-pool-replica3", + }) + + expected := []string{"disk2", "disk3", "disk4"} + + for idx, exp := range expected { + jpath := fmt.Sprintf("{.spec.blockDevices.blockDeviceList[%d]}", idx) + testutil.MatchJSONPathStringValue(t, got, jpath, exp) + } + }, + }, + { + name: "replica3-sc", + fn: func(t *testing.T) { + got := testutil.ConfigFromMap(t, m, k8sutil.ObjectMetadata{ + Version: "storage.k8s.io/v1", Kind: "StorageClass", Name: "replica3", + }) + + expected := "true" + jpath := "{.metadata.annotations.storageclass\\.kubernetes\\.io/is-default-class}" + testutil.MatchJSONPathStringValue(t, got, jpath, expected) + + expected = `- name: StoragePoolClaim + value: "cstor-pool-replica3" +- name: ReplicaCount + value: "3" +` + testutil.MatchJSONPathStringValue(t, got, "{.metadata.annotations.cas\\.openebs\\.io/config}", expected) + }, + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, tc.fn) + } +} diff --git a/pkg/components/openebs-storage-class/template.go b/pkg/components/openebs-storage-class/template.go index 31db31c1b..b3ff54bad 100644 --- a/pkg/components/openebs-storage-class/template.go +++ b/pkg/components/openebs-storage-class/template.go @@ -14,39 +14,18 @@ package openebsstorageclass -const storageClassTmpl = ` -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: {{ .Name }} - annotations: - openebs.io/cas-type: cstor - storageclass.kubernetes.io/is-default-class: "{{ .Default }}" - cas.openebs.io/config: | - - name: StoragePoolClaim - value: "cstor-pool-{{ .Name }}" - - name: ReplicaCount - value: "{{ .ReplicaCount }}" -provisioner: openebs.io/provisioner-iscsi -reclaimPolicy: "{{ .ReclaimPolicy }}" -` - -const storagePoolTmpl = ` -apiVersion: openebs.io/v1alpha1 -kind: StoragePoolClaim -metadata: - name: cstor-pool-{{ .Name }} -spec: - name: cstor-pool-{{ .Name }} - type: disk - maxPools: 3 - poolSpec: - poolType: striped - {{- if .Disks }} - blockDevices: - blockDeviceList: - {{range .Disks -}} - - {{.}} - {{end}} - {{- end }} +var chartValuesTmpl = ` +storageClasses: +{{ range .StorageClasses -}} +- name: {{.Name}} + default: {{.Default}} + reclaimPolicy: {{.ReclaimPolicy}} + replicaCount: {{.ReplicaCount}} + {{if .Disks}} + disks: + {{ range .Disks -}} + - {{.}} + {{end}} + {{end}} +{{end}} `