Главная  /  Статьи  /  DevOps

Vibe Codex в DevOps: Terraform, Kubernetes, CI/CD

Инфраструктура — это код, в котором копипаста стоит дороже, чем в любом другом репозитории. Поэтому она же — лучший заказчик AI-ассистента.

DevOps-инженер тратит десятки часов на ритуальные перестановки: одинаковые модули Terraform, одинаковые манифесты Kubernetes, одинаковые секции CI. Vibe Codex здесь работает не как «генератор кода», а как живой шаблонизатор, который помнит контекст вашего кластера.

Terraform: модуль за один проход

Допустим, нужен модуль для S3-совместимого бакета с lifecycle-правилами и доступом для приложения через IAM. Один промпт — пять файлов.

$ vibe-codex "terraform-модуль storage-bucket для Yandex Cloud, \
              входы: name, lifecycle_days, app_iam_role, \
              выходы: bucket_name, endpoint"
[plan] 5 files:
  + modules/storage-bucket/main.tf
  + modules/storage-bucket/variables.tf
  + modules/storage-bucket/outputs.tf
  + modules/storage-bucket/versions.tf
  + modules/storage-bucket/README.md
# modules/storage-bucket/main.tf
resource "yandex_storage_bucket" "this" {
  bucket     = var.name
  acl        = "private"
  force_destroy = false

  lifecycle_rule {
    id      = "expire-old"
    enabled = true
    expiration {
      days = var.lifecycle_days
    }
  }

  versioning { enabled = true }
}

resource "yandex_iam_service_account_static_access_key" "this" {
  service_account_id = var.app_iam_role
  description        = "${var.name} app key"
}

Модель прочитала versions.tf в корне, увидела провайдера Yandex и не подсунула AWS-ресурсы. Если бы был AWS — был бы aws_s3_bucket.

Kubernetes: манифест, который пройдёт ревью

Большая часть «AI-сгенерированных» k8s-манифестов падает на ревью: нет probes, нет resources, нет SecurityContext. Vibe Codex не позволяет себе таких пропусков, потому что обучен на инвариантах продакшен-кластеров.

$ vibe-codex "deployment payments-api, \
              image cr.yandex/.../payments-api, \
              porte 8080, env из ConfigMap payments-config, \
              лимиты 500m/512Mi, probes /actuator/health"
apiVersion: apps/v1
kind: Deployment
metadata: { name: payments-api }
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate: { maxSurge: 1, maxUnavailable: 0 }
  selector: { matchLabels: { app: payments-api } }
  template:
    metadata: { labels: { app: payments-api } }
    spec:
      containers:
        - name: app
          image: cr.yandex/crp.../payments-api:0.1.0
          ports: [{ containerPort: 8080 }]
          envFrom: [{ configMapRef: { name: payments-config } }]
          resources:
            requests: { cpu: 100m, memory: 256Mi }
            limits:   { cpu: 500m, memory: 512Mi }
          livenessProbe:
            httpGet: { path: /actuator/health/liveness,  port: 8080 }
            initialDelaySeconds: 30
          readinessProbe:
            httpGet: { path: /actuator/health/readiness, port: 8080 }
          securityContext:
            runAsNonRoot: true
            readOnlyRootFilesystem: true
            allowPrivilegeEscalation: false

CI: GitHub Actions без полотен

Самое скучное место в CI — повторяющиеся секции «checkout — setup-X — cache». Vibe Codex генерирует composite actions для них и собирает основной workflow из вызовов.

$ vibe-codex "GitHub Actions workflow: \
              lint (golangci-lint), test (go test -race), \
              build (Docker), push в cr.yandex"
name: ci
on: { push: { branches: [main] }, pull_request: {} }

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/setup-go
      - run: golangci-lint run --timeout=5m

  test:
    runs-on: ubuntu-latest
    needs: lint
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/setup-go
      - run: go test -race -coverprofile=cover.out ./...

  build:
    runs-on: ubuntu-latest
    needs: test
    if: github.ref == 'refs/heads/main'
    permissions: { id-token: write, contents: read }
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: ./.github/actions/yc-login
      - uses: docker/build-push-action@v6
        with:
          push: true
          tags: cr.yandex/${{ vars.YC_REGISTRY }}/payments-api:${{ github.sha }}
«Хороший YAML — это YAML, который вы не написали руками, но всё равно можете прочитать через год».

Helm-чарты и Helmfile

Чарты Vibe Codex генерирует с _helpers.tpl, корректным values.schema.json и комментариями к каждой опции в values.yaml. Если у вас Helmfile — соберёт и его, с указанием окружений.

Что инструмент НЕ делает

Один паттерн, который окупает всё

Когда меняется один сервис, повторяющие правки в Helm-чартах, CI и Terraform делает vibe-codex sync. Он находит все места, где сервис упомянут (chart, ingress, secrets, monitoring rule), и предлагает diff одной кучей.

$ vibe-codex sync --service payments-api --version 0.2.0
[scan] found 7 references:
  - charts/payments-api/Chart.yaml         (appVersion)
  - charts/payments-api/values-prod.yaml   (image.tag)
  - charts/umbrella/Chart.lock             (dependency version)
  - terraform/prod/k8s.tf                  (helm_release.version)
  - .github/workflows/release.yml          (matrix entry)
  - monitoring/alerts/payments.yaml        (label selector)
  - README.md                              (version badge)

Инфраструктура любит постоянство. Vibe Codex — инструмент, который превращает «потому что так всегда делали» в исполняемый код, без потери смысла.

Готов попробовать?

brew tap xrouter-chat/tap && brew install vibe-codex — и за 30 секунд ты в деле.

Поставить Vibe Codex →