前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Golang + Ansible构建作业系统

基于Golang + Ansible构建作业系统

作者头像
用户1107783
发布2024-08-01 18:44:28
3141
发布2024-08-01 18:44:28
举报
文章被收录于专栏:云原生运维社区

背景

在近期的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:

要安装最新的稳定版本,请运行以下命令:

代码语言:javascript
复制
$ go get github.com/apenella/go-ansible/v2@v2.0.1

Adhoc:

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
$ 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并批量执行任务!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生运维圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 技术栈
  • 主要功能
  • Go-ansible使用指南
  • 功能展示
    • 快捷命令
      • 模板管理
        • 作业配置
          • 执行历史
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档