Реализованные тэги с метаданными
| Переменная | Тэг | Значение | Пример |
|---|---|---|---|
| HashCommit | hash_commit | git rev-parse HEAD |
0c172e4396a8875f684f016ca89147e0f866d7e1 |
| AuthorCommit | author_commit | git log -1 --pretty=format:'%ae' |
iam4exovskiy@gmail.ru |
| Version | SemVer 2.0.0 | git tag --points-at HEAD |
v1.0.0 |
FYI не забудь добавить сюда свои если ты их включил в библиотеку
Пример передачи Build-in аргументов в сборку
# example
cue cmd \
-t hash_commit=$(git rev-parse HEAD) \
-t author_commit=$(git log -1 --pretty=format:'%ae') \
-t version=$(git tag --points-at HEAD) \
${ENV_TAG} \
dump ./${CUE_MOD}/... ./lib ./toolСтендозависимые параметры так же реализованы с помощью тэгов.
Пример определения контейнера таких параметров и ссылка на него через которую мы будем обращаться из наших обьектов чтобы получить значения Values.MyVariable
package k8s
import "strings"
//*** schema definition for env parameters */
#Values: {
//*** fields name, type and constraints */
MyVariable: string & strings.MinRunes(5)
...
}
//*** reference definition */
Values: #ValuesПример инициализации Values для простоты использования имя тэга включено в имя файла values.${tag_name}.cue
@if(stage) //if tag value=true file include to build
package k8s
//*** init Values */
Values: {
MyVariable: "staging!"
//*** other needed fields */
...
}
...Пример передачи имени окружения в сборку через tag
ENV?=stage # default value
cue cmd \
-t hash_commit=$(git rev-parse HEAD) \
-t author_commit=$(git log -1 --pretty=format:'%ae') \
-t version=$(git tag --points-at HEAD) \
-t ${ENV} \ # this tag value is true
dump ./${CUE_MOD}/... ./lib ./tooldef.cue - определения словарей по типам API которые потом используются в *_tool.cue
# example
CUE_MOD=guestbook ENV=stage make | yqПараметры
| Name | Description | Example |
|---|---|---|
ENV |
Имя окружения, и фрагмент имени файла values.stage.cue |
ENV=stage |
CUE_MOD |
путь до каталога cue с логическим модулем | CUE_MOD=guestbook |
# example
CUE_MOD=guestbook ENV=stage make buildСохраняет все обьекты в *.yaml формате, раскладывая по каталогам c именем kind - например build/gateway/.. или /build/virtualservice/..
ожидаемые параметы как в
dumptool
deps.go - для добавления go-зависимостей клиентов содержащие *.proto которые потом используются для генерации *.cue определений
# example
make generateГенерация *.cue определений из *.proto схем используется только после их ручной обработки! и уже потом добавления в cue.mod/pkg с обязательной отметкой в CHANGELOG.md
# example
CUE_MOD=guestbook make lsвыводит имена и типы обьектов
┌─ Kind ─┬─ Name ─┐
│ Service │ guestbook-svc │
│ Deployment │ guestbook │
└─ ─┴─ ─┘# example
make cleanУдаляет все **/build build cue.mod/gen каталоги и все подкаталоги
чтобы не возникало коллизий рекомендуется выполнять
cleanпередbuildилиdump
Пример организации монорепозитория с модулями
| Dir | Description |
|---|---|
lib |
содержит переопределения типов k8s API из cue.mod/pkg/.. |
tool |
содержит файлы *_tool.cue утилитные скрипты см.tools |
proto |
извлеченные из vendor protobuf описание k8s API |
vendor |
выкаченные go-зависимости в которых описано API= *.proto |
. # root directory
├── cue.mod # cue gen by default directory
│ ├── gen/.. # generated types k8s resource api
│ ├── module.cue # root module info name, lang version, kind ...
│ ├── pkg # DEPRECATED DIR DO NOT USE
│ │ ├── google.golang.org/..
│ │ ├── googleapis.com/..
│ │ ├── istio.io/..
│ │ └── k8s.io/..
│ └── usr/.. # DEPRECATED DIR DO NOT USE
├── guestbook # logic unit - component/module k8s
│ ├── build # result marshaling structs
│ ├── const.cue # reusable constants
│ ├── src # struct initialize gw,vs,dr,se ...
│ │ ├── deploy.cue
│ │ └── svc.cue
│ ├── values.cue # schema definition and reference for use in resource
│ ├── values.prod.cue # environment variables
│ └── values.stage.cue
├── lib/.. # lib definition types, constraints, default values
├── tool/.. # tool scripts ls, dump, build...
├── proto/.. # protobuf definition k8s API
├── vendor/.. # downloaded dependencies
├── deps.go # go module use dependencies go-client k8s API
├── go.mod # module definition
├── go.sum # checksum dependencies downloaded
└── def.cue # definition resources map
cue.mod/pkgявляется устаревшей структурой, как написано в документаци CUE но альтернатив пока НЕТ поэтому используем ее для хранения модифицированных пакетов
src - каталог для обьявления обьектов
Создаем файл например src/se.cue для определения ServiceEntry
//*** обязательное имя пакета* */
package k8s
//*** добавляем в словарь нужный заполненый обьект, где ключом будет его имя** */
ServiceEntry: <ResourceName>: {
//*** заполненый обьект */
spec: {}
}* пакет имеет обязательное имя k8s для минимизации количества импортов
** имя указанное в ключе будет проброшенно в metadata.name
Для переиспользования каких-либо значений предлагается использовать const.cueа для стендозависимых параметров values.*.cue см.values
Так выглядит самый простой логический модуль содержащий vs, gw, se
.
├── const.cue
├── src
│ ├── vs.cue
│ ├── gw.cue
│ └── se.cue
└── values.cue