63 righe
1.5 KiB
Go
63 righe
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
|
|
}
|