Files
ansible-deploy/internal/services/config.go
T

63 lines
1.5 KiB
Go

package services
import (
"os"
"path/filepath"
"gopkg.in/yaml.v3"
)
// Config 配置
type Config struct {
AnsiblePath string `yaml:"ansible_path"`
InventoryDir string `yaml:"inventory_dir"`
PlaybookDir string `yaml:"playbook_dir"`
LogDir string `yaml:"log_dir"`
SSHTimeout int `yaml:"ssh_timeout"`
MaxParallelism int `yaml:"max_parallelism"`
CallbackPlugin string `yaml:"callback_plugin"`
}
// DefaultConfig 默认配置
func DefaultConfig() *Config {
home, _ := os.UserHomeDir()
return &Config{
AnsiblePath: "/usr/bin/ansible",
InventoryDir: filepath.Join(home, "ansible-deploy/inventory"),
PlaybookDir: filepath.Join(home, "ansible-deploy/playbooks"),
LogDir: filepath.Join(home, "ansible-deploy/logs"),
SSHTimeout: 30,
MaxParallelism: 10,
CallbackPlugin: "json",
}
}
// LoadConfig 加载配置文件
func LoadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return DefaultConfig(), err
}
var cfg Config
if err := yaml.Unmarshal(data, &cfg); err != nil {
return nil, err
}
// 设置默认值
if cfg.AnsiblePath == "" {
cfg.AnsiblePath = "/usr/bin/ansible"
}
if cfg.InventoryDir == "" {
cfg.InventoryDir = filepath.Join(os.Getenv("HOME"), "ansible-deploy/inventory")
}
if cfg.PlaybookDir == "" {
cfg.PlaybookDir = filepath.Join(os.Getenv("HOME"), "ansible-deploy/playbooks")
}
if cfg.LogDir == "" {
cfg.LogDir = filepath.Join(os.Getenv("HOME"), "ansible-deploy/logs")
}
return &cfg, nil
}