Stack is a Tool About Creating Kindda
Overview:
stack.yaml
api: v1 # обязательный ключ.
libs: [] # необязательный ключ. список путей, в которых необходимо выполнять поиск стеков
name: stackDir # обязательный ключ при inline пределении стека. Если стек определен через файл, то равно имени каталога с файлом stack.yaml
vars: {} # необязательный ключ. словарь переменных
varsFrom: [] # необязательный ключ. список импорта в ключ vars
flags: {} # необязательный ключ. словарь флагов доступных для использования в независимых стеках
locals: {} # необязательный ключ. словарь локальных значений
run: [] # список команд для выполнения _последовательно_
stacks: [] # список стеков, для выполнения _параллельно_, которые будут выполняться после завершения выполнения данного стека
when: "" # условие для выполнения стека (run && stacks) _| See google/cel-go
wait: "" # условие, которое стек будет ждать для своего запуска | https://github.com/google/cel-go
Keys:
api
api: v1
libs
Типы библиотек:
- Локальный каталог
- git репозиторий
Порядок поиска локальных билиотек:
- Каталог текущего стека
- Библиотеки
- Каталог корневого стека
libs:
- libs
- git: https://gitlab.example.org/utility/tests.git
ref: 5be7ad7861c8d39f60b7101fd8d8e816ff50353a
path: libraries/tests
name
Необходим только при inline определении стека
name: stack_name
vars
# parent stack
vars:
test1: value # _затирает_ все последующие ключи в child stacks рекурсивно
test2+: value # _дополняет_ все последующие ключи в child stacks рекурсивно
test3~: value # ТОЛЬКО КОРНЕВЫЕ КЛЮЧИ. слабый ключ (weak key) может быть затерт или дополнен соответствующими ключами в child stacks
# child stack
vars:
test3-: value # не может быть дополнен слабым ключем (weak var) от родительского стека, может комбинироваться с другими модификаторами
test5-^+: value # символ ^ отделяет суффикс переменной от ее названия (test5-)
varsFrom
varsFrom:
- file: testVars.yaml
- sops: testSopsFile.yaml
flags
flags: # значение может быть прочитано из любых стеков
test1: value1
test2: value2
test3: value3
locals
locals: # локальные ключи, актуальны только в текущем стеке
test1: localvalue1
test2: localvalue2
test3: localvalue3
run
- gomplate: "{{ .name | filepath.Base }}"
output:
- strvar: namespace
- gomplate: |-
{{ .vars.monitoring_grafana | toJSON }}
output:
- yml2var: monitoringGrafana
- gomplate:
- templates/getEnvVars.gtpl
output:
- stderr
- jsonnet:
- jsonnet/func.jsonnet
output:
- stderr
- jsonnet: |-
function(stack)
{test: stack.name}
output:
- stderr
- pongo2:
- tpl/jinjaTemplate.jinja2
output:
- stdout
- script: scripts/example.sh
output:
- stdout
- group:
- script: |-
ping google.com -c 5
output:
- stderr
- script: |-
ping example.com -c 5
output:
- stderr
parallel: true
runTimeout: 10s
stacks
stacks:
- libs:
- _base:
- namespace
- infra:
- aws-node-termination-handler
- aws-auth
- cluster-autoscaler
- eks-arm64
- external-dns
when
when: vars.test1 == "value"
wait
Стек будет ждать выполнения условия время заданное в wait_timeout (default: 5 min)
wait: flags.test1 == "value1"
Exaples
Used libraries
google/cel-go
docs,
git
hairyhenderson/gomplate
docs,
git
google/go-jsonnet
docs,
git
flosch/pongo2
docs,
git
Go project layout
https://github.com/golang-standards/project-layout
Inspired by
kapitan
kasane
argo-cd
fluxcd
Thanx