Ваша задача — извлекать версию чарта из файла `values.yaml` непосредственно в `ApplicationSet` Argo CD. К сожалению, в `ApplicationSet` нет прямых механизмов для динамического считывания содержимого файлов и использования их значений. Однако есть несколько обходных путей, которые вы можете рассмотреть.
### Подходы:
1. **Использование GitOps и CI/CD для подготовки конфигурации:**
Если у вас есть CI/CD процесс, который обновляет ваш Git-репозиторий, вы можете написать скрипт, который будет извлекать значение `chartVersion` из `values.yaml` и обновлять все ваши необходимые конфигурации перед тем, как они будут применены в Argo CD. Это может быть сделано с помощью `kubectl` или других инструментов, таких как `yq` или `jq`.
Пример на `yq`:
```bash
version=$(yq eval '.chartVersion' path/to/values.yaml)
echo "Version: $version"
```
2. **Использование внешнего скрипта:**
Вы можете сделать внешний скрипт, который будет сканировать ваши значения и генерировать необходимые YAML-файлы для `ApplicationSet`. После этого вы можете просто указывать сгенерированные манифесты в вашем Argo CD.
3. **Кастомные Helm Charts:**
Вы можете использовать Helm-карт для генерации значений. Например, можно создать отдельный Helm-чарт, который будет зависеть от ваших текущих чартов и будет загружать их зависимости с нужными версиями.
4. **Использование Kustomize или Helmfile:**
Если у вас есть гибкость в том, как организована ваша структура репозитория, вы можете рассмотреть подходы с использованием Kustomize или Helmfile, которые поддерживают переменные и могут упростить управление версиями внутри файлов конфигурации.
### Пример генерации версии с помощью CI/CD:
Примерный процесс может выглядеть так:
1. Вы при каждом изменении `values.yaml` выполняете скрипт, который обновляет `ApplicationSet` с текущей версией:
```bash
version=$(yq eval '.chartVersion' path/to/values.yaml)
sed -i "s/targetRevision: .*/targetRevision: $version/" path/to/applicationset.yaml
git commit -am "Update ApplicationSet with new chart version $version"
git push
```
2. Настройте вебхуки или другие триггеры в вашем CI/CD, чтобы автоматически применять обновления, когда они появляются в вашем репозитории.
### Заключение
К сожалению, фактическая реализация динамического считывания значений из `values.yaml` через `ApplicationSet` в Argo CD не является тривиальной задачей, и для управления версиями вам, скорее всего, понадобится использовать координацию с другими инструментами на уровне CI/CD или некоторыми вспомогательными скриптами.