From b1b01bc579a6df11bc635d87869faec867cf9f3d Mon Sep 17 00:00:00 2001 From: Max Gautier Date: Mon, 14 Sep 2026 15:45:22 +0000 Subject: [PATCH] local_volume_provisioner: match upstream storage class syntax (#13504) Use the upstream keys without converting them to snake case. This avoids converting back to camel case when rendering, and aligns ourselves more with our upstream. --- .../local_volume_provisioner.md | 26 +++++++------------ .../sample/group_vars/k8s_cluster/addons.yml | 18 ++++++------- .../local-volume-provisioner-cm.yml.j2 | 12 --------- .../local-volume-provisioner-ds.yml.j2 | 4 +-- .../local-volume-provisioner-sc.yml.j2 | 4 +-- .../tasks/0050-create_directories.yml | 2 +- roles/kubespray_defaults/vars/main/main.yml | 8 +++--- 7 files changed, 28 insertions(+), 46 deletions(-) diff --git a/docs/external_storage_provisioners/local_volume_provisioner.md b/docs/external_storage_provisioners/local_volume_provisioner.md index e9c622513..bc46062b8 100644 --- a/docs/external_storage_provisioners/local_volume_provisioner.md +++ b/docs/external_storage_provisioners/local_volume_provisioner.md @@ -3,7 +3,7 @@ The [local static storage provisioner](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner) is NOT a dynamic storage provisioner as you would expect from a cloud provider. Instead, it simply creates PersistentVolumes for -all mounts under the `host_dir` of the specified storage class. +all mounts under the `hostDir` of the specified storage class. These storage classes are specified in the `local_volume_provisioner_storage_classes` nested dictionary. Example: @@ -11,24 +11,18 @@ Example: ```yaml local_volume_provisioner_storage_classes: local-storage: - host_dir: /mnt/disks - mount_dir: /mnt/disks + hostDir: /mnt/disks + mountDir: /mnt/disks fast-disks: - host_dir: /mnt/fast-disks - mount_dir: /mnt/fast-disks - block_cleaner_command: + hostDir: /mnt/fast-disks + mountDir: /mnt/fast-disks + blockCleanerCommand: - "/scripts/shred.sh" - "2" - volume_mode: Filesystem - fs_type: ext4 + volumeMode: Filesystem + fsType: ext4 ``` -For each key in `local_volume_provisioner_storage_classes` a "storage class" with -the same name is created in the entry `storageClassMap` of the ConfigMap `local-volume-provisioner`. -The subkeys of each storage class in `local_volume_provisioner_storage_classes` -are converted to camelCase and added as attributes to the storage class in the -ConfigMap. - The result of the above example is: ```yaml @@ -93,14 +87,14 @@ the rest of this documentation will use that path as an example. ``` This saves time of precreating filesystems. Note that your storageclass must have - `volume_mode` set to `"Filesystem"` and `fs_type` defined. If either is not set, the + `volumeMode` set to `"Filesystem"` and `fsType` defined. If either is not set, the disk will be added as a raw block device. 1. PersistentVolumes with `volumeMode="Block"` Just like above, you can create PersistentVolumes with volumeMode `Block` by creating a symbolic link under discovery directory to the block device on - the node, if you set `volume_mode` to `"Block"`. This will create a volume + the node, if you set `volumeMode` to `"Block"`. This will create a volume presented into a Pod as a block device, without any filesystem on it. 1. File-backed sparsefile method diff --git a/inventory/sample/group_vars/k8s_cluster/addons.yml b/inventory/sample/group_vars/k8s_cluster/addons.yml index d7657bdb9..d558b16a4 100644 --- a/inventory/sample/group_vars/k8s_cluster/addons.yml +++ b/inventory/sample/group_vars/k8s_cluster/addons.yml @@ -37,18 +37,18 @@ local_volume_provisioner_enabled: false # - topology.kubernetes.io/zone # local_volume_provisioner_storage_classes: # local-storage: -# host_dir: /mnt/disks -# mount_dir: /mnt/disks -# volume_mode: Filesystem -# fs_type: ext4 +# hostDir: /mnt/disks +# mountDir: /mnt/disks +# volumeMode: Filesystem +# fsType: ext4 # fast-disks: -# host_dir: /mnt/fast-disks -# mount_dir: /mnt/fast-disks -# block_cleaner_command: +# hostDir: /mnt/fast-disks +# mountDir: /mnt/fast-disks +# blockCleanerCommand: # - "/scripts/shred.sh" # - "2" -# volume_mode: Filesystem -# fs_type: ext4 +# volumeMode: Filesystem +# fsType: ext4 # local_volume_provisioner_tolerations: # - effect: NoSchedule # operator: Exists diff --git a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-cm.yml.j2 b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-cm.yml.j2 index 7e37283b1..08efe3fce 100644 --- a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-cm.yml.j2 +++ b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-cm.yml.j2 @@ -1,14 +1,3 @@ -# Macro to convert camelCase dictionary keys to snake_case keys -{% macro convert_keys(mydict) -%} - {% for key in mydict.keys() | list -%} - {% 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 @@ -28,6 +17,5 @@ data: storageClassMap: | {% for class_name, storage_class in local_volume_provisioner_storage_classes.items() %} {{ class_name }}: - {{- convert_keys(storage_class) }} {{ storage_class | to_nice_yaml(indent=2) | indent(6) }} {%- endfor %} diff --git a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-ds.yml.j2 b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-ds.yml.j2 index 87385fcfe..3a609e451 100644 --- a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-ds.yml.j2 +++ b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-ds.yml.j2 @@ -51,7 +51,7 @@ spec: name: provisioner-dev {% for class_name, class_config in local_volume_provisioner_storage_classes.items() %} - name: local-volume-provisioner-hostpath-{{ class_name }} - mountPath: {{ class_config.mount_dir }} + mountPath: {{ class_config.mountDir }} mountPropagation: "HostToContainer" {% endfor %} volumes: @@ -64,5 +64,5 @@ spec: {% for class_name, class_config in local_volume_provisioner_storage_classes.items() %} - name: local-volume-provisioner-hostpath-{{ class_name }} hostPath: - path: {{ class_config.host_dir }} + path: {{ class_config.hostDir }} {% endfor %} diff --git a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-sc.yml.j2 b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-sc.yml.j2 index 81e0260c7..1b0e4d216 100644 --- a/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-sc.yml.j2 +++ b/roles/kubernetes-apps/external_provisioner/local_volume_provisioner/templates/local-volume-provisioner-sc.yml.j2 @@ -6,7 +6,7 @@ metadata: name: {{ class_name }} provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer -{% if class_config.reclaim_policy is defined %} -reclaimPolicy: {{ class_config.reclaim_policy }} +{% if class_config.reclaimPolicy is defined %} +reclaimPolicy: {{ class_config.reclaimPolicy }} {% endif %} {% endfor %} diff --git a/roles/kubernetes/preinstall/tasks/0050-create_directories.yml b/roles/kubernetes/preinstall/tasks/0050-create_directories.yml index 7f36dec2e..f60e80d53 100644 --- a/roles/kubernetes/preinstall/tasks/0050-create_directories.yml +++ b/roles/kubernetes/preinstall/tasks/0050-create_directories.yml @@ -103,7 +103,7 @@ - name: Create local volume provisioner directories file: - path: "{{ local_volume_provisioner_storage_classes[item].host_dir }}" + path: "{{ local_volume_provisioner_storage_classes[item].hostDir }}" state: directory owner: root group: root diff --git a/roles/kubespray_defaults/vars/main/main.yml b/roles/kubespray_defaults/vars/main/main.yml index 14231b368..91ffb955d 100644 --- a/roles/kubespray_defaults/vars/main/main.yml +++ b/roles/kubespray_defaults/vars/main/main.yml @@ -69,10 +69,10 @@ kube_pods_subnets: >- local_volume_provisioner_storage_classes_default: - key: "{{ local_volume_provisioner_storage_class }}" value: - host_dir: "{{ local_volume_provisioner_base_dir }}" - mount_dir: "{{ local_volume_provisioner_mount_dir }}" - volume_mode: Filesystem - fs_type: ext4 + hostDir: "{{ local_volume_provisioner_base_dir }}" + mountDir: "{{ local_volume_provisioner_mount_dir }}" + volumeMode: Filesystem + fsType: ext4 ssl_ca_dirs_per_os_family: Debian: &usr_share