More dynamic local-storage-provisioner approach (#3472)

* Makes local volume provisioner more dynamic

* Correct variable name in local storage provisioner defaults

* Updates external-provisioner readme

* Updates variable naming to be more clear, more documentation, fixes sample inventory

* Variable refactor, untangled some jinja2 loops

* Corrects variable name

* No variable substitution in dict keys, replaced with anchor

* Fixes default storage_classes dict, inline docs

* Fixes spelling in inline docs

* Addresses comments in review

* Updates all the defaults

* Fix failing CI task

* Fixes external provisioner daemonset
This commit is contained in:
Wilmar den Ouden
2019-01-08 21:36:44 +01:00
committed by Kubernetes Prow Robot
parent 5c52a830d2
commit 4fb8adb9e4
10 changed files with 107 additions and 45 deletions

View File

@@ -1,3 +1,14 @@
# Macro to convert camelCase dictionary keys to snake_case keys
{%- macro convert_keys(mydict) %}
{% for key in mydict.keys() -%}
{% set key_split = key.split('_') -%}
{% set new_key = key_split[0] + key_split[1:]|map('capitalize')|join -%}
{% set value = mydict.pop(key) -%}
{{ mydict.__setitem__(new_key, value) -}}
{{ convert_keys(value) if value is mapping else None -}}
{% endfor -%}
{% endmacro -%}
---
apiVersion: v1
kind: ConfigMap
@@ -6,8 +17,9 @@ metadata:
namespace: {{ local_volume_provisioner_namespace }}
data:
storageClassMap: |
{% for class in local_volume_provisioner_storage_classes %}
{{ class.name }}:
hostDir: {{ class.host_dir }}
mountDir: {{ class.mount_dir }}
{% endfor %}
{% for class_name, storage_class in local_volume_provisioner_storage_classes.iteritems() %}
{{ class_name }}:
{{- convert_keys(storage_class) }}
{{ storage_class | to_nice_yaml(indent=2) | indent(6) }}
{%- endfor %}

View File

@@ -44,17 +44,17 @@ spec:
- name: local-volume-provisioner
mountPath: /etc/provisioner/config
readOnly: true
{% for class in local_volume_provisioner_storage_classes %}
- name: {{ class.name }}
mountPath: {{ class.mount_dir }}
{% for class_name, class_config in local_volume_provisioner_storage_classes.iteritems() %}
- name: local-volume-provisioner-hostpath-{{ class_name }}
mountPath: {{ class_config.mount_dir }}
mountPropagation: "HostToContainer"
{% endfor %}
volumes:
- name: local-volume-provisioner
configMap:
name: local-volume-provisioner
{% for class in local_volume_provisioner_storage_classes %}
- name: {{ class.name }}
{% for class_name, class_config in local_volume_provisioner_storage_classes.iteritems() %}
- name: local-volume-provisioner-hostpath-{{ class_name }}
hostPath:
path: {{ class.host_dir }}
path: {{ class_config.host_dir }}
{% endfor %}

View File

@@ -25,8 +25,8 @@ spec:
- 'downwardAPI'
- 'hostPath'
allowedHostPaths:
{% for class in local_volume_provisioner_storage_classes %}
- pathPrefix: "{{ class.host_dir }}"
{% for class_name, class_config in local_volume_provisioner_storage_classes.iteritems() %}
- pathPrefix: "{{ class_config.host_dir }}"
readOnly: false
{% endfor %}
hostNetwork: false

View File

@@ -1,9 +1,9 @@
{% for class in local_volume_provisioner_storage_classes %}
{% for class_name in local_volume_provisioner_storage_classes.keys() %}
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: {{ class.name }}
name: {{ class_name }}
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
{% endfor %}
{% endfor %}