75 lines
3.5 KiB
Go
75 lines
3.5 KiB
Go
// Package parser описывает структуры плейбука, инвентаря и ролей
|
||
// и умеет загружать их из YAML. Никакой логики выполнения тут нет —
|
||
// только данные и их загрузка с диска.
|
||
package parser
|
||
|
||
// Task — один шаг плейбука или роли.
|
||
type Task struct {
|
||
Name string `yaml:"name"`
|
||
Module string `yaml:"-"` // заполняется при разборе (имя ключа модуля)
|
||
Args map[string]interface{} `yaml:"-"` // аргументы этого модуля
|
||
When string `yaml:"when,omitempty"`
|
||
Loop interface{} `yaml:"loop,omitempty"`
|
||
Tags []string `yaml:"tags,omitempty"`
|
||
Register string `yaml:"register,omitempty"`
|
||
Notify []string `yaml:"notify,omitempty"`
|
||
AllowShell bool `yaml:"allow_shell,omitempty"`
|
||
|
||
// After/Before — явные зависимости по имени таска в пределах того же
|
||
// списка (play.Tasks или role.Tasks), как require/before в Puppet.
|
||
// Без них порядок остаётся тем же, что в файле (см. internal/executor
|
||
// graph.go — стабильная топологическая сортировка не переставляет
|
||
// таски без объявленных зависимостей).
|
||
After []string `yaml:"after,omitempty"`
|
||
Before []string `yaml:"before,omitempty"`
|
||
|
||
// Raw хранит исходную YAML-map таска — из неё вычленяется Module/Args
|
||
// на этапе UnmarshalYAML, см. parser.go.
|
||
Raw map[string]interface{} `yaml:"-"`
|
||
}
|
||
|
||
// Play — один play плейбука: на каких хостах, какими переменными, какие роли/таски.
|
||
type Play struct {
|
||
Name string `yaml:"name"`
|
||
Hosts string `yaml:"hosts"`
|
||
Vars map[string]interface{} `yaml:"vars,omitempty"`
|
||
Roles []string `yaml:"roles,omitempty"`
|
||
Tasks []Task `yaml:"tasks,omitempty"`
|
||
}
|
||
|
||
// Role — загруженная с диска роль: taskи + defaults/vars/handlers/templates.
|
||
type Role struct {
|
||
Name string
|
||
Tasks []Task
|
||
Defaults map[string]interface{}
|
||
Vars map[string]interface{}
|
||
Handlers []Task
|
||
Dir string // корневая директория роли, нужна для поиска templates/files
|
||
}
|
||
|
||
// Playbook — верхнеуровневая единица: список play + резолвленные роли.
|
||
type Playbook struct {
|
||
Plays []Play
|
||
Roles map[string]*Role // имя роли → загруженная роль
|
||
Dir string // директория, где лежит сам playbook.yml (для relative include)
|
||
}
|
||
|
||
// Host — один хост инвентаря.
|
||
type Host struct {
|
||
Name string
|
||
Vars map[string]interface{}
|
||
}
|
||
|
||
// Group — группа хостов, может содержать дочерние группы (children).
|
||
type Group struct {
|
||
Name string
|
||
Hosts map[string]*Host
|
||
Vars map[string]interface{}
|
||
Children []string
|
||
}
|
||
|
||
// Inventory — весь инвентарь: группы + пути к group_vars/host_vars на диске.
|
||
type Inventory struct {
|
||
Groups map[string]*Group
|
||
Dir string // директория инвентаря, для поиска group_vars/host_vars
|
||
}
|