Ответ
Шаблонизация — основа поддержания инфраструктуры как кода (IaC) в согласованном и DRY-состоянии. Я использую разные инструменты в зависимости от контекста.
Основные инструменты:
-
Terraform
templatefile()и модули — для генерации конфигурационных файлов (например, для Prometheus, Nginx) на основе переменных Terraform. Модули Terraform — это высшая форма шаблонизации для повторного использования инфраструктуры.# main.tf resource "local_file" "app_config" { content = templatefile("${path.module}/templates/app.conf.tftpl", { app_port = var.app_port db_host = module.database.address }) filename = "${path.module}/config/app.conf" }# templates/app.conf.tftpl APP_PORT=${app_port} DB_HOST="${db_host}" -
Helm — стандартный инструмент для шаблонизации Kubernetes-манифестов. Использую его для упаковки приложений, где значения (CPU, реплики, environment variables) инжектятся через
values.yaml.# templates/deployment.yaml apiVersion: apps/v1 kind: Deployment spec: replicas: {{ .Values.replicaCount }} containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" -
Ansible с Jinja2 — для конфигурационного менеджмента. Jinja2-шаблоны позволяют гибко генерировать конфиги (nginx, systemd) для серверов с разными ролями.
- name: Deploy Nginx config ansible.builtin.template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf owner: root group: root mode: '0644' notify: restart nginx -
Jsonnet или CUE Lang — для сложной шаблонизации YAML/JSON, особенно в Kubernetes-экосистеме (например, для генерации большого количества похожих манифестов).
-
Собственные скрипты на Python/Bash с использованием
envsubstилиsed— для простых замен в файлах на ранних этапах сборки Docker-образов или в скриптах развертывания.
Практика: Все шаблоны хранятся в Git вместе с основным кодом инфраструктуры. Это обеспечивает версионность, ревью изменений и возможность отката.