_permissions.tpl 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. {{/* Returns an init container that fixes permissions */}}
  2. {{/* Call this template:
  3. {{ include "ix.v1.common.app.permissions" (dict "UID" 568 "GID" 568 "type" "init") }}
  4. type (optional): init or install (default: install)
  5. UID: UID to change permissions to
  6. GID: GID to change permissions to
  7. */}}
  8. {{- define "ix.v1.common.app.permissions" -}}
  9. {{- $type := .type | default "install" -}}
  10. {{- $containerName := .containerName | default "permissions" -}}
  11. {{- $mode := .mode | default "always" -}}
  12. {{- $chmod := .chmod | default "" -}}
  13. {{- $UID := .UID -}}
  14. {{- $GID := .GID -}}
  15. {{- $modes := (list "always" "check") -}}
  16. {{- if not (mustHas $mode $modes) -}}
  17. {{- fail (printf "Permissions Container - [mode] must be one of [%s]" (join ", " $modes)) -}}
  18. {{- end -}}
  19. {{- if (kindIs "invalid" $type) -}}
  20. {{- fail "Permissions Container - [type] cannot be empty" -}}
  21. {{- end -}}
  22. {{- if (kindIs "invalid" $containerName) -}}
  23. {{- fail "Permissions Container - [containerName] cannot be empty" -}}
  24. {{- end -}}
  25. {{- if (kindIs "invalid" $GID) -}}
  26. {{- fail "Permissions Container - [GID] cannot be empty" -}}
  27. {{- end -}}
  28. {{- if (kindIs "invalid" $UID) -}}
  29. {{- fail "Permissions Container - [UID] cannot be empty" -}}
  30. {{- end }}
  31. {{ $containerName }}:
  32. enabled: true
  33. type: {{ $type }}
  34. imageSelector: bashImage
  35. resources:
  36. limits:
  37. cpu: 1000m
  38. memory: 512Mi
  39. securityContext:
  40. runAsUser: 0
  41. runAsGroup: 0
  42. runAsNonRoot: false
  43. readOnlyRootFilesystem: false
  44. capabilities:
  45. add:
  46. - CHOWN
  47. {{- if $chmod }}
  48. - FOWNER
  49. {{- end }}
  50. command: bash
  51. args:
  52. - -c
  53. - |
  54. for dir in /mnt/directories/*; do
  55. if [ ! -d "$dir" ]; then
  56. echo "[$dir] is not a directory, skipping"
  57. continue
  58. fi
  59. echo "Current Ownership and Permissions on ["$dir"]:"
  60. echo "chown: $(stat -c "%u %g" "$dir")"
  61. echo "chmod: $(stat -c "%a" "$dir")"
  62. {{- if eq $mode "check" }} {{/* If mode is check, check parent dir */}}
  63. if [ $(stat -c %u "$dir") -eq {{ $UID }} ] && [ $(stat -c %g "$dir") -eq {{ $GID }} ]; then
  64. echo "Ownership is correct. Skipping..."
  65. fix_owner="false"
  66. else
  67. echo "Ownership is incorrect. Fixing..."
  68. fix_owner="true"
  69. fi
  70. {{- if $chmod }} {{/* Only if chmod value is given */}}
  71. if [ $(stat -c %a "$dir") -eq {{ $chmod }} ]; then
  72. echo "Permissions are correct. Skipping..."
  73. fix_perms="false"
  74. else
  75. echo "Permissions are incorrect. Fixing..."
  76. fix_perms="true"
  77. fi
  78. {{- end }}
  79. {{- else if eq $mode "always" }} {{/* If mode is always, always fix perms */}}
  80. fix_owner="true"
  81. fix_perms="true"
  82. {{- end }}
  83. {{/* Apply changes */}}
  84. if [ "$fix_owner" = "true" ]; then
  85. echo "Changing ownership to {{ $UID }}:{{ $GID }} on: ["$dir"]"
  86. chown -R {{ $UID }}:{{ $GID }} "$dir"
  87. echo "Finished changing ownership"
  88. echo "Ownership after changes:"
  89. stat -c "%u %g" "$dir"
  90. fi
  91. {{- if $chmod }} {{/* Only if chmod value is given */}}
  92. if [ "$fix_perms" = "true" ]; then
  93. echo "Changing permissions to {{ $chmod }} on: ["$dir"]"
  94. chmod -R {{ $chmod }} "$dir"
  95. echo "Finished changing permissions"
  96. echo "Permissions after changes:"
  97. stat -c "%a" "$dir"
  98. fi
  99. {{- end }}
  100. done
  101. {{- end -}}