From a585ff8f59bcba1ffc50c576af92a20e8534f85c Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 9 Nov 2023 15:05:41 +0000 Subject: [PATCH] docs: create DevOps/Helm/Learn-by-Krukov/05-video-cm --- DevOps/Helm/Learn-by-Krukov/05-video-cm.md | 195 +++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 DevOps/Helm/Learn-by-Krukov/05-video-cm.md diff --git a/DevOps/Helm/Learn-by-Krukov/05-video-cm.md b/DevOps/Helm/Learn-by-Krukov/05-video-cm.md new file mode 100644 index 0000000..26b64c7 --- /dev/null +++ b/DevOps/Helm/Learn-by-Krukov/05-video-cm.md @@ -0,0 +1,195 @@ +--- +title: 05-video-cm +description: +published: true +date: 2023-11-09T15:05:32.795Z +tags: +editor: markdown +dateCreated: 2023-11-09T15:05:32.795Z +--- + +# Видео пять. ConfigMap +> Файлы для лабы: +[05-video-cm.zip](/attachments/05-video-cm.zip) + +В директории templates есть два файла с ConfigMap: +* configmap-conf.yaml - содержит конфигурационный файл default.conf. +* configmap-html.yaml - содержит html файлы. + +Посмотрим как эти файлы можно использовать в шаблонах. + +## Вариант раз + +Файлы, которые находятся непосредственно в ConfigMaps, неудобно редактировать. +Редакторы теряются в формате. Например, в configmap-html.yaml основной +формат - yaml, а формат вложенных файлов html. + +Было бы неплохо, вынести содержимое вложенных файлов в отдельный файл. +А в шаблоне, в нужном месте вставлять его содержимое. + +### configmap-conf.yaml + +Начнём с конфигурационного файла приложения. В директории openresty-art +создадим файл default.conf и поместим в него конфигурационные параметры +openresty. + +В файле configmap-conf.yaml удалим содержимое секции data и +вставим следующий шаблон. + +```yaml +data: + default.conf: |- +{{ .Files.Get "default.conf" | indent 4 }} +``` + +В шаблоне мы использовали встроенный объект Files. При помощи которого +мы можем работать с файлами, находящимися внутри чарта. + +При помощи функции Get получаем содержимое файла default.conf. Сдвигаем +каждую строку на 4 символа. Шаблон должен быть помещен строго в начало +строки. + +Проверим, работает шаблон или нет. + + helm template app ./openresty-art/ -f my-values.yaml > app.yaml + +### configmap-html.yaml + +В директории openresty-art создадим директорию html. В которой добавим +два файла: 50x.html и index.html + +В фале configmap-html.yaml удалим все в разделе data и добавим следующий +шаблон: + +```yaml +data: +{{- range $path, $_ := .Files.Glob "html/*" }} + {{ base $path }}: | +{{ $.Files.Get $path | indent 4 }} +{{- end }} +``` + +При помощи функции [Glob](https://pkg.go.dev/github.com/gobwas/glob) +мы получаем список файлов из указанной директории, подходящих под шаблон. +При помощи range перебираем его. В каждой итерации в переменной %path получаем +путь к файлу. + +Функция [base](https://pkg.go.dev/path#example-Base) возвращает имя файла. + +$.Files.Get читает его содержимое. + +В итоге, в configMap мы получим столько файлов, сколько их есть в директории +html. + +Проверяем: + + helm template app ./openresty-art/ -f my-values.yaml > app.yaml + +Вроде бы всё хорошо, но при использовании .Files мы не сможем изменить +содержимое файлов при помощи кастомных файлов values и параметров --set. +Во всяком случае мне такой способ не известен. + +### Вариант два. + +Добавить содержимое файлов в файл values.yaml. + +```yaml +conf: + defaultConf: |- + server { + listen 80; + server_name localhost; + + location / { + root /usr/local/openresty/nginx/html; + index index.html index.htm; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/local/openresty/nginx/html; + } + } +html: + index: |- + + + Тестовая страница + + + +

Тестовая страница

+ + + 50x: |- + + + + + + Error + + + +

An error occurred.

+

Sorry, the page you are looking for is currently unavailable.
+ Please try again later.

+ + +``` + +В файле configmap-conf.yaml нам необходимо подставить всего один файл с +известным именем. Поэтому шаблон будет простой. + +```yaml +data: + default.conf: |- +{{ .Values.conf.defaultConf | indent 4 }} +``` + +В файле configmap-html.yaml, количество html файлов заранее не известно. +Поэтому шаблон будет чуть сложнее. + +```yaml +data: +{{- range $file, $value := .Values.html }} + {{ $file }}.html: | +{{ $value | indent 4 }} +{{- end }} +``` + +Проверяем работу шаблона по умолчанию: + + helm template app ./openresty-art/ -f my-values.yaml > app.yaml + +Теперь посмотрим, как подставить свои файлы, при вызове helm. +Создадим в директории 05-video-cm директорию html и поместим в неё +файла index.html, попутно нмного его изменив. Что бы он отличался +от файла index.html файла values.yaml. + +Сначала подставим только my-default.conf: + + helm template app ./openresty-art/ -f my-values.yaml \ + --set-file conf.defaultConf=my-default.conf > app.yaml + +А теперь изменим html/index.html: + + helm template app ./openresty-art/ -f my-values.yaml \ + --set-file conf.defaultConf=my-default.conf \ + --set-file html.index=html/index.html > app.yaml + +Добавим 3-й html файл: + + helm template app ./openresty-art/ -f my-values.yaml \ + --set-file conf.defaultConf=my-default.conf \ + --set-file html.test=html/index.html > app.yaml + +## Видео + +[](https://youtu.be/rb_qifNyDdA)