Добавить имя хоста во время обновления руля - PullRequest
0 голосов
/ 09 июля 2019

В нашем конвейере CI мы переключились на использование имен хостов, основанных на соглашениях (в основном для динамических сред разработки на основе PR). Эта новая функциональность требует, чтобы мы уважали устаревшие имена хостов, которые установлены в Схемах управления, так как другие службы указывают на эти старые имена хостов.

Мы хотим добавить или добавить наше имя хоста на основе соглашения к существующему списку имен хостов, не перезаписывая ни одно из значений.

Мы нашли обходной путь, на данный момент; но надеемся найти более чистое решение. Обходной путь позволяет нам --set service.hostnames[10]="k8s-myapp-prod.website.com", где индекс 10 достаточно высок, чтобы не сталкиваться с именами хостов на диаграмме.

Мы ожидаем, что здесь будет только 2 или 3 имени хоста, поэтому решение работает, оно игнорирует, что не существует более одного другого имени хоста. Меня больше волнует будущее обновление, которое проверяет, что в списке есть только одно имя хоста, и выдает ошибку индекса вне границ.

Наша команда выглядит так:

helm upgrade --install \
  --namespace "myapp" \
  --values "./values-prod.yaml" \
  --set service.hostnames[10]="k8s-myapp-prod.website.com" \
  "myapp-prod" ./

Есть мысли о том, как сделать это чище, или какую-то другую магию, которую мы можем использовать?

Вот копия нашего файла values.yaml:

image:
  repository: dockerhub.com/myorg

stack:
  environment: prod

service:
  ingress:
    class: nginx
  hostnames:
    - legacy-url-myapp-prod.website.com
  port: 80
  healthcheck: /heartbeat

resources:
  memory:
    request: "512Mi"
    limit: "512Mi"
  cpu:
    request: "500m"
    limit: "500m"

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 6
  cpu: 50

environment:
  DEPLOY_ENV: prod

spec:
  strategy:
    type: RollingUpdate

1 Ответ

1 голос
/ 10 июля 2019

Если вы добавляете входные имена хостов, используя массив в файле значений, и просматриваете их с помощью range в шаблоне helm, то вы можете динамически находить следующий индекс массива, который будет использоваться в командной строке. Вы можете использовать jq и yq для подсчета существующих имен хостов в файле значений. Примечание: в приведенном ниже сценарии нет проверки ошибок.

hostcount=$(yq r -j values-prod.yaml service | jq -r '.hostnames | length')

# ((hostcount++)) # edit: length is 1-based, array index is 0-based; hostcount should be the next index as is

helm upgrade --install \
  --namespace "myapp" \
  --values "./values-prod.yaml" \
  --set service.hostnames[$hostcount]="k8s-myapp-prod.website.com" \
  "myapp-prod" ./
...