<a id="custom-templates"></a>

# Пользовательские шаблоны

Для изменения конфигурации Angie для ресурсов Ingress,
ресурсов VirtualServer и основного файла конфигурации Angie можно использовать пользовательские шаблоны.

Пользовательские шаблоны ANIC настраиваются через [ConfigMap](https://angie.software//anic/docs/configuration/configmap-resource.md#configmap-resource) с помощью следующих ключей:

- `main-template` — задает основной шаблон конфигурации Angie.
- `ingress-template` — задает шаблон конфигурации ANIC для ресурса Ingress.
- `virtualserver-template` — задает шаблон конфигурации ANIC для ресурса VirtualServer.

## Пример

```yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: angie-config
  namespace: angie-ingress
data:
  main-template: |
    worker_processes  {{.WorkerProcesses}};
    ...
        include /etc/angie/conf.d/*.conf;
    }
  ingress-template: |
    {{range $upstream := .Upstreams}}
    upstream {{$upstream.Name}} {
      {{if $upstream.LBMethod }}{{$upstream.LBMethod}};{{end}}
    ...
    }{{end}}
  virtualserver-template: |
    {{ range $u := .Upstreams }}
    upstream {{ $u.Name }} {
      {{ if ne $u.UpstreamZoneSize "0" }}zone {{ $u.Name }} {{ $u.UpstreamZoneSize }};{{ end }}
    ...
    }
    {{ end }}
```

#### NOTE
- Шаблоны в примере обрезаны для краткости.
- Основные шаблоны `angie.tmpl` и `angie.ingress.tmpl`
  находятся по пути `internal/configs/version1`.
  Шаблон VirtualServer (`angie.virtualserver.tmpl`) расположен по пути `internal/configs/version2`.

## Диагностика ошибок

- Если пользовательский шаблон содержит ошибку, ANIC не запустится.
  Ошибка отобразится в журнале.

  Пример ошибки:
  ```none
  Error updating Angie main template: template: angieTemplate:98: unexpected EOF
  ```
- Если некорректный пользовательский шаблон был добавлен после запуска ANIC,
  конфигурация не обновится. Ошибка отобразится в журнале, в событии, связанном с ConfigMap.

  Пример ошибки:
  ```none
  Error when updating config from ConfigMap: Invalid angie configuration detected, not reloading
  ```

События ConfigMap можно просмотреть с помощью команды `kubectl describe -n anic configmap angie-config`.

Пример события с ошибкой:

```none
Events:
  Type     Reason            Age                From      Message
  ----     ------            ----               ----      -------
  Normal   Updated           12s (x2 over 25s)  anic      Configuration from anic/angie-config was updated
  Warning  UpdatedWithError  10s                anic      Configuration from anic/angie-config was updated, but not applied: Error when parsing the main template: template: angieTemplate:98: unexpected EOF
  Warning  UpdatedWithError  8s                 anic      Configuration from anic/angie-config was updated, but not applied: Error when writing main Config
```
