wiki-js/DevOps/Helm/Learn-by-Krukov/05-video-cm.md

196 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: 05-video-cm
description:
published: true
date: 2023-11-09T15:05:38.914Z
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: |-
<html>
<head>
<title>Тестовая страница</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Тестовая страница</h1>
</body>
</html>
50x: |-
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>
```
В файле 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
## Видео
[<img src="https://img.youtube.com/vi/rb_qifNyDdA/maxresdefault.jpg" width="50%">](https://youtu.be/rb_qifNyDdA)