Какие инструменты для шаблонизации конфигураций и инфраструктуры вы используете?

«Какие инструменты для шаблонизации конфигураций и инфраструктуры вы используете?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Шаблонизация — основа поддержания инфраструктуры как кода (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 вместе с основным кодом инфраструктуры. Это обеспечивает версионность, ревью изменений и возможность отката.