背景
在近期的Jenkins训练营上,讲解了Ansible的课程,这让我产生了一个想法:能否通过图形化界面来管理Ansible,并运行一些作业任务以减少服务器的登录次数?恰好我正在优化Go-Easy-Admin,所以决定利用周末的时间开发一个这样的功能。这不仅有助于大家学习,还可以熟练掌握Go-Easy-Admin和Go-Ansible的使用。
技术栈
前端:Vue+Typescript+ArcoDesign
后端:Golang+Gin+Gorm
依赖:Ansible
主要功能
Go-ansible使用指南
Go-ansible 是一个 Go 语言包,允许直接从 Golang 应用程序执行 Ansible 命令,例如 ansible-playbook、ansible-inventory 或 ansible。它为每个命令提供了多种选项,便于将 Ansible 功能无缝集成到您的项目中。需要特别强调的是,go-ansible 并不是 Ansible 的替代实现,而是对 Ansible 命令的封装。让我们一起深入探索 go-ansible 的功能。
安装Go-ansible:
要安装最新的稳定版本,请运行以下命令:
$ go get github.com/apenella/go-ansible/v2@v2.0.1
Adhoc:
$ cat main.go
package main
import (
"context"
"fmt"
"github.com/apenella/go-ansible/v2/pkg/adhoc" // 提供了执行Ansible adhoc命令的功能
"github.com/apenella/go-ansible/v2/pkg/execute" // 提供了执行Ansible命令的通用接口
"github.com/apenella/go-ansible/v2/pkg/execute/stdoutcallback" // 提供了一种特殊的执行器,它使用单行输出来回调stdout的输出
)
func main() {
ansibleAdhocOptions := &adhoc.AnsibleAdhocOptions{
Args: "free -m", // 指定了要执行的命令
Inventory: " 10.0.53.73,", // 指定了目标主机的IP地址
ModuleName: "command", // 指定了使用的Ansible模块
}
adhocCmd := adhoc.NewAnsibleAdhocCmd(
adhoc.WithPattern("all"), // 所有目标执行命令
adhoc.WithAdhocOptions(ansibleAdhocOptions),
)
fmt.Println("Command: ", adhocCmd.String())
Execute := stdoutcallback.NewOnelineStdoutCallbackExecute(
execute.NewDefaultExecute(
execute.WithCmd(adhocCmd),
),
)
err := Execute.Execute(context.TODO())
if err != nil {
panic(err)
}
}
Playbook:
$ cat main.go
package main
import (
"context"
"fmt"
"os"
"github.com/apenella/go-ansible/v2/pkg/playbook"
)
func main() {
ansiblePlaybookOptions := &playbook.AnsiblePlaybookOptions{
Inventory: "10.0.53.73,", // 指定了目标主机的IP地址
}
err := playbook.NewAnsiblePlaybookExecute("task.yml"). // 创建一个新的Ansible playbook执行器实例,指定了要执行的playbook文件(在这个例子中是task.yml)
WithPlaybookOptions(ansiblePlaybookOptions).
Execute(context.TODO())
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
}
功能展示
快捷命令
创建命令:
填写表单:
立即执行:
查看结果:
模板管理
创建模板:
填写表单:
创建成功:
作业配置
创建作业:
填写表单:
立即执行:
执行历史
查看执行结果:
敬请期待后续文章,将介绍如何对接CMDB并批量执行任务!