Πρόσβαση σε Αρχεία μέσα σε Templates
Στην προηγούμενη ενότητα εξετάσαμε διάφορους τρόπους δημιουργίας και πρόσβασης σε ονομασμένα templates. Αυτό διευκολύνει την εισαγωγή ενός template μέσα από ένα άλλο template. Ωστόσο, μερικές φορές είναι επιθυμητό να εισάγετε ένα αρχείο που δεν είναι template και να ενσωματώσετε τα περιεχόμενά του χωρίς να τα περάσετε μέσα από τον template renderer.
Το Helm παρέχει πρόσβαση σε αρχεία μέσω του αντικειμένου .Files. Πριν
προχωρήσουμε με τα παραδείγματα template, υπάρχουν μερικά πράγματα που πρέπει
να σημειώσουμε σχετικά με το πώς λειτουργεί αυτό:
- Είναι δυνατό να προσθέσετε επιπλέον αρχεία στο Helm chart σας. Αυτά τα αρχεία θα συμπεριληφθούν στο πακέτο. Να είστε όμως προσεκτικοί. Τα charts πρέπει να είναι μικρότερα από 1M λόγω των περιορισμών αποθήκευσης των αντικειμένων Kubernetes.
- Ορισμένα αρχεία δεν είναι προσπελάσιμα μέσω του αντικειμένου
.Files, συνήθως για λόγους ασφαλείας.- Τα αρχεία στο
templates/δεν είναι προσπελάσιμα. - Τα αρχεία που εξαιρούνται μέσω του
.helmignoreδεν είναι προσπελάσιμα. - Τα αρχεία εκτός του subchart μιας εφαρμογής Helm, συμπεριλαμβανομένων αυτών του γονικού chart, δεν είναι προσπελάσιμα
- Τα αρχεία στο
- Τα charts δεν διατηρούν πληροφορίες λειτουργίας UNIX mode, επομένως τα
δικαιώματα σε επίπεδο αρχείου δεν επηρεάζουν τη διαθεσιμότητα ενός αρχείου
όσον αφορά το αντικείμενο
.Files.
- Βασικό παράδειγμα
- Βοηθητικές συναρτήσεις διαδρομής
- Μοτίβα glob
- Βοηθητικές συναρτήσεις ConfigMap και Secrets
- Κωδικοποίηση
- Γραμμές
Βασικό παράδειγμα
Με αυτά υπόψη, ας γράψουμε ένα template που διαβάζει τρία
αρχεία στο ConfigMap μας. Για να ξεκινήσουμε, θα προσθέσουμε τρία αρχεία στο
chart, τοποθετώντας και τα τρία απευθείας μέσα στον κατάλογο mychart/.
config1.toml:
message = "Hello from config 1"
config2.toml:
message = "This is config 2"
config3.toml:
message = "Goodbye from config 3"
Καθένα από αυτά είναι ένα απλό αρχείο TOML (σκεφτείτε τα παλιά αρχεία Windows
INI). Γνωρίζουμε τα ονόματα αυτών των αρχείων, οπότε μπορούμε να χρησιμοποιήσουμε
μια συνάρτηση range για να επαναλάβουμε σε αυτά και να εισάγουμε τα
περιεχόμενά τους στο ConfigMap μας.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{ . }}: |-
{{ $files.Get . }}
{{- end }}
Αυτό το ConfigMap χρησιμοποιεί αρκετές από τις τεχνικές που συζητήθηκαν σε
προηγούμενες ενότητες. Για παράδειγμα, δημιουργούμε μια μεταβλητή $files για
να κρατήσουμε μια αναφορά στο αντικείμενο .Files. Χρησιμοποιούμε επίσης τη
συνάρτηση tuple για να δημιουργήσουμε μια λίστα αρχείων που επαναλαμβάνουμε.
Στη συνέχεια εκτυπώνουμε κάθε όνομα αρχείου ({{ . }}: |-) ακολουθούμενο από
τα περιεχόμενα του αρχείου {{ $files.Get . }}.
Η εκτέλεση αυτού του template θα παράγει ένα μόνο ConfigMap με τα περιεχόμενα και των τριών αρχείων:
# Source: mychart/templates/configmap.yaml \{#source-mycharttemplatesconfigmapyaml}
apiVersion: v1
kind: ConfigMap
metadata:
name: quieting-giraf-configmap
data:
config1.toml: |-
message = "Hello from config 1"
config2.toml: |-
message = "This is config 2"
config3.toml: |-
message = "Goodbye from config 3"
Βοηθητικές συναρτήσεις διαδρομής
Όταν εργάζεστε με αρχεία, μπορεί να είναι πολύ χρήσιμο να εκτελείτε ορισμένες
τυπικές λειτουργίες στις ίδιες τις διαδρομές των αρχείων. Για να βοηθήσει σε
αυτό, το Helm εισάγει πολλές από τις συναρτήσεις του πακέτου
path της Go για χρήση. Είναι όλες προσβάσιμες
με τα ίδια ονόματα όπως στο πακέτο της Go, αλλά με πεζό πρώτο γράμμα.
Για παράδειγμα, η Base γίνεται base, κ.λπ.
Οι εισαγόμενες συναρτήσεις είναι:
- Base
- Dir
- Ext
- IsAbs
- Clean
Μοτίβα glob
Καθώς το chart σας μεγαλώνει, μπορεί να διαπιστώσετε ότι χρειάζεστε καλύτερη
οργάνωση των αρχείων σας, και γι' αυτό παρέχουμε μια μέθοδο
Files.Glob(pattern string) για να βοηθήσουμε στην εξαγωγή συγκεκριμένων
αρχείων με όλη την ευελιξία των μοτίβων glob.
Η .Glob επιστρέφει έναν τύπο Files, οπότε μπορείτε να καλέσετε οποιαδήποτε
από τις μεθόδους Files στο επιστρεφόμενο αντικείμενο.
Για παράδειγμα, φανταστείτε τη δομή καταλόγου:
foo/:
foo.txt foo.yaml
bar/:
bar.go bar.conf baz.yaml
Έχετε πολλές επιλογές με τα Globs:
{{ $currentScope := .}}
{{ range $path, $_ := .Files.Glob "**.yaml" }}
{{- with $currentScope}}
{{ .Files.Get $path }}
{{- end }}
{{ end }}
Ή
{{ range $path, $_ := .Files.Glob "**.yaml" }}
{{ $.Files.Get $path }}
{{ end }}
Βοηθητικές συναρτήσεις ConfigMap και Secrets
(Διαθέσιμο από Helm 2.0.2 και μετά)
Είναι πολύ συνηθισμένο να θέλετε να τοποθετήσετε περιεχόμενα αρχείων τόσο σε
ConfigMaps όσο και σε Secrets, για προσάρτηση στα pods σας κατά το χρόνο
εκτέλεσης. Για να βοηθήσουμε σε αυτό, παρέχουμε μερικές βοηθητικές μεθόδους
στον τύπο Files.
Για καλύτερη οργάνωση, είναι ιδιαίτερα χρήσιμο να χρησιμοποιείτε αυτές τις
μεθόδους σε συνδυασμό με τη μέθοδο Glob.
Δεδομένης της δομής καταλόγου από το παράδειγμα Glob παραπάνω:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: conf
data:
{{ (.Files.Glob "foo/*").AsConfig | indent 2 }}
---
apiVersion: v1
kind: Secret
metadata:
name: very-secret
type: Opaque
data:
{{ (.Files.Glob "bar/*").AsSecrets | indent 2 }}
Κωδικοποίηση
Μπορείτε να εισάγετε ένα αρχείο και να το κωδικοποιήσετε σε base-64 από το template για να εξασφαλίσετε τη σωστή μεταφορά:
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-secret
type: Opaque
data:
token: |-
{{ .Files.Get "config1.toml" | b64enc }}
Το παραπάνω θα πάρει το ίδιο αρχείο config1.toml που χρησιμοποιήσαμε πριν
και θα το κωδικοποιήσει:
# Source: mychart/templates/secret.yaml \{#source-mycharttemplatessecretyaml}
apiVersion: v1
kind: Secret
metadata:
name: lucky-turkey-secret
type: Opaque
data:
token: |-
bWVzc2FnZSA9ICJIZWxsbyBmcm9tIGNvbmZpZyAxIgo=
Γραμμές
Μερικές φορές είναι επιθυμητό να προσπελάσετε κάθε γραμμή ενός αρχείου στο
template σας. Παρέχουμε μια βολική μέθοδο Lines για αυτό.
Μπορείτε να επαναλάβετε μέσω του Lines χρησιμοποιώντας μια συνάρτηση range:
data:
some-file.txt: {{ range .Files.Lines "foo/bar.txt" }}
{{ . }}{{ end }}
Δεν υπάρχει τρόπος να περάσετε αρχεία εξωτερικά του chart κατά τη διάρκεια του
helm install. Επομένως, αν ζητάτε από τους χρήστες να παρέχουν δεδομένα,
πρέπει να φορτωθούν χρησιμοποιώντας helm install -f ή helm install --set.
Αυτή η συζήτηση ολοκληρώνει την εμβάθυνσή μας στα εργαλεία και τις τεχνικές για
τη συγγραφή Helm templates. Στην επόμενη ενότητα θα δούμε πώς μπορείτε να
χρησιμοποιήσετε ένα ειδικό αρχείο, το templates/NOTES.txt, για να στείλετε
οδηγίες μετά την εγκατάσταση στους χρήστες του chart σας.