104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
| package app
 | ||
| 
 | ||
| import (
 | ||
| 	"os"
 | ||
| 	"scheduler/modules/crontask"
 | ||
| 	"scheduler/models"
 | ||
| 	"runtime"
 | ||
| 	"scheduler/modules/utils"
 | ||
| 	"scheduler/modules/ansible"
 | ||
| )
 | ||
| 
 | ||
| var  (
 | ||
| 	AppDir string    // 应用根目录
 | ||
| 	ConfDir string   // 配置目录
 | ||
| 	LogDir string    // 日志目录
 | ||
| 	DataDir string   // 数据目录,存放session文件等
 | ||
| 	AppConfig string // 应用配置文件
 | ||
| 	AnsibleHosts string // ansible hosts文件
 | ||
| 	Installed bool   // 应用是否安装过
 | ||
| )
 | ||
| 
 | ||
| func init() {
 | ||
| 	wd, err := os.Getwd()
 | ||
| 	if err != nil {
 | ||
| 		panic(err)
 | ||
| 	}
 | ||
| 	AppDir = wd
 | ||
| 	ConfDir = AppDir + "/conf"
 | ||
| 	LogDir  = AppDir + "/log"
 | ||
| 	DataDir = AppDir + "/data"
 | ||
| 	AppConfig = ConfDir + "/app.ini"
 | ||
| 	AnsibleHosts = ConfDir + "/ansible_hosts.ini"
 | ||
| 	checkDirExists(ConfDir, LogDir, DataDir)
 | ||
| 	// ansible配置文件目录
 | ||
| 	os.Setenv("ANSIBLE_CONFIG", ConfDir)
 | ||
| 	Installed = IsInstalled()
 | ||
| 	if Installed {
 | ||
| 		initResource()
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // 判断应用是否安装过
 | ||
| func IsInstalled() bool {
 | ||
| 	_, err := os.Stat(ConfDir + "/install.lock")
 | ||
| 	if os.IsNotExist(err) {
 | ||
| 		return false
 | ||
| 	}
 | ||
| 
 | ||
| 	return true
 | ||
| }
 | ||
| 
 | ||
| // 检测环境
 | ||
| func CheckEnv()  {
 | ||
| 	// ansible不支持安装在windows上, windows只能作为被控机
 | ||
| 	if runtime.GOOS == "windows" {
 | ||
| 		panic("不支持在windows上运行")
 | ||
| 	}
 | ||
| 	_, err := utils.ExecShell("ansible", "--version")
 | ||
| 	if err != nil {
 | ||
| 		panic(err)
 | ||
| 	}
 | ||
| 	_, err = utils.ExecShell("ansible-playbook", "--version")
 | ||
| 	if err != nil {
 | ||
| 		panic(err)
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // 创建安装锁文件
 | ||
| func CreateInstallLock() error {
 | ||
| 	_, err := os.Create(ConfDir + "/install.lock")
 | ||
| 	if err != nil {
 | ||
| 		utils.RecordLog("创建安装锁文件失败")
 | ||
| 	}
 | ||
| 
 | ||
| 	return err
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| // 初始化资源
 | ||
| func initResource()  {
 | ||
| 	crontask.DefaultCronTask = crontask.NewCronTask()
 | ||
| 	models.Db = models.CreateDb(AppConfig)
 | ||
| 	ansible.DefaultHosts = &ansible.Hosts{}
 | ||
| 	hostModel := new(models.Host)
 | ||
| 	hosts, err := hostModel.List()
 | ||
| 	if err != nil {
 | ||
| 		utils.RecordLog(err)
 | ||
| 	} else {
 | ||
| 		ansible.DefaultHosts.Set(hosts)
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| // 检测目录是否存在
 | ||
| func checkDirExists(path... string)  {
 | ||
| 	for _, value := range(path) {
 | ||
| 		_, err := os.Stat(value)
 | ||
| 		if os.IsNotExist(err) {
 | ||
| 			panic(value + "目录不存在")
 | ||
| 		}
 | ||
| 		if os.IsPermission(err) {
 | ||
| 			panic(value + "目录无权限操作")
 | ||
| 		}
 | ||
| 	}
 | ||
| } |