goherence/internal/parser/types.go
2026-09-11 10:17:25 +03:00

75 lines
3.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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
}