RM新时代官方网站

Golang實(shí)現(xiàn)ansible自動(dòng)運(yùn)維(golang ansible)

簡介

ansible是自動(dòng)化運(yùn)維工具,基于Python開發(fā)。

ansible目前針對(duì)golang提供對(duì)應(yīng)的SDK、API之類的。

我們這里可以采用直接調(diào)用ansible-playbook這個(gè)命令執(zhí)行我們的任務(wù)。

Golang實(shí)現(xiàn)ansible自動(dòng)運(yùn)維(golang ansible)

python

ansible

Golang實(shí)現(xiàn)ansible自動(dòng)運(yùn)維(golang ansible)

ansible

利用golang的os/exec來執(zhí)行ansible-playbook這個(gè)命令,實(shí)現(xiàn)變量的拼接,由于我習(xí)慣將對(duì)象存在hosts這個(gè)變量里面,因此操作的時(shí)候需要指定hosts這個(gè)變量。

package ansible?import ( "os/exec" "strings" "time")?// RunPlayBook 執(zhí)行通過ansible-playbook命令執(zhí)行ansible任務(wù)func RunPlayBook(ansiblePath, inventory, yamlfile string, vars []string) (result string, ok bool) { startTime := time.Now() commandStr := []string{ansiblePath, "--ssh-common-args='-o StrictHostKeyChecking=no'", "-i", inventory, yamlfile} for _, k := range vars { commandStr = append(commandStr, "-e") commandStr = append(commandStr, k) } // fmt.Println(commandStr) command := exec.Command(commandStr[0], commandStr[1:]...) errString := "" output, err := command.CombinedOutput() if err != nil { errString = "ERROR: " err.Error() } // fmt.Println(string(output)) recapFlag := False // ok := false for _, line := range strings.Split(string(output), "n") { if strings.TrimSpace(line) == "" { continue } if strings.HasPrefix(line, "PLAY RECAP *") { recapFlag = true } if recapFlag { if strings.Contains(line, "unreachable=0") && strings.Contains(line, "failed=0") { ok = true } } } return strings.Join(commandStr, " ") "n " errString "n " string(output) "n=======================================n開始時(shí)間:" startTime.Format("2006-01-02 15:04:05") "n結(jié)束時(shí)間:" time.Now().Format("2006-01-02 15:04:05") "n耗時(shí):" time.Now().Sub(startTime).String(), ok}?

測試

準(zhǔn)備playbook文件

vim /data/ansible/test.yaml

做一個(gè)簡單的測試,將要執(zhí)行的對(duì)象放到hosts這個(gè)變量里面

- name: 測試ansible任務(wù) hosts: "{{ hosts }}" remote_user: root gather_facts: False tasks:   - name: hostname     command: hostname     register: hostname   - name: echo     debug:       msg: "get hostname from {{ hostname }} by {{ powerby }} "

Golang實(shí)現(xiàn)ansible自動(dòng)運(yùn)維(golang ansible)

coding

Go執(zhí)行文件

package main?import ( "ansible/ansible" "fmt")?func main() { result, ok := ansible.RunPlayBook("/data/apps/python3/bin/ansible-playbook", "/etc/ansible/hosts", "/data/ansible/test.yaml", []string{ "hosts=127.0.0.1", "powerby=Golang", }) if ok { fmt.Println("執(zhí)行成功") } else { fmt.Println("執(zhí)行失敗") } fmt.Println(result)}?

執(zhí)行輸出

執(zhí)行成功/data/apps/python3/bin/ansible-playbook --ssh-common-args='-o StrictHostKeyChecking=no' -i /etc/ansible/hosts /data/ansible/test.yaml -e hosts=127.0.0.1 -e powerby=Golang [WARNING]: Found variable using reserved name: hosts?PLAY [測試ansible任務(wù)] *************************************************************?TASK [hostname] ****************************************************************changed: [127.0.0.1]?TASK [echo] ********************************************************************ok: [127.0.0.1] => {    "msg": "get hostname from {'cmd': ['hostname'], 'stdout': 'tosomeone', 'stderr': '', 'rc': 0, 'start': '2020-08-20 22:23:29.851614', 'end': '2020-08-20 22:23:29.852629', 'delta': '0:00:00.001015', 'changed': True, 'stdout_lines': ['linuxopcai'], 'stderr_lines': [], 'failed': False} by Golang "}?PLAY RECAP *********************************************************************127.0.0.1                 : ok=2    changed=1    unreachable=0    failed=0   ??=======================================開始時(shí)間:2020-08-20 22:23:28結(jié)束時(shí)間:2020-08-20 22:23:29耗時(shí):1.067408099s

總結(jié)

Golang實(shí)現(xiàn)ansible自動(dòng)運(yùn)維(golang ansible)

golang

由于歷史原因,很多任務(wù)都還是ansible的任務(wù),只能采用這種方式進(jìn)行過度。

在Go的生態(tài)中,大家有什么推薦的批量自動(dòng)化任務(wù)的包或者工具呢?

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。

(0)
上一篇 2023年5月14日 上午9:40
下一篇 2023年5月14日 上午9:56

相關(guān)推薦

  • 科研項(xiàng)目小組計(jì)劃怎么寫

    科研項(xiàng)目小組計(jì)劃怎么寫 在開始一項(xiàng)科研項(xiàng)目之前,建立一個(gè)高效、協(xié)作、團(tuán)結(jié)的小組是非常重要的。一個(gè)小組需要有明確的目標(biāo)和分工,同時(shí)還需要有一個(gè)良好的溝通和協(xié)作機(jī)制。下面,我將詳細(xì)介紹…

    科研百科 2025年4月15日
    2
  • 倉儲(chǔ)管理系統(tǒng)軟件下載

    倉儲(chǔ)管理系統(tǒng)軟件下載 倉儲(chǔ)管理系統(tǒng)軟件是一種用于管理倉儲(chǔ)物流的軟件,可以幫助企業(yè)更好地管理庫存,提高生產(chǎn)效率,降低成本。倉儲(chǔ)管理系統(tǒng)軟件下載是為企業(yè)提供下載倉儲(chǔ)管理系統(tǒng)軟件的服務(wù)。…

    科研百科 2024年9月30日
    4
  • 課題項(xiàng)目費(fèi)用名目

    課題項(xiàng)目費(fèi)用名目 課題項(xiàng)目費(fèi)用是我們進(jìn)行學(xué)術(shù)研究時(shí)必不可少的一部分,它主要用于支付研究過程中所需的費(fèi)用,如差旅費(fèi)、設(shè)備租賃費(fèi)、實(shí)驗(yàn)室租賃費(fèi)、數(shù)據(jù)收集費(fèi)、文獻(xiàn)檢索費(fèi)等。但是,我們往往…

    科研百科 2024年12月9日
    5
  • 張家界廣播電視臺(tái):擦亮黨建品牌 爭當(dāng)“四個(gè)能手”

    張家界廣播電視臺(tái):擦亮黨建品牌 爭當(dāng)“四個(gè)能手” 品牌創(chuàng)建背景 張家界市廣播電視臺(tái)堅(jiān)持以習(xí)近平新時(shí)代中國特色社會(huì)主義思想為指導(dǎo),堅(jiān)決貫徹落實(shí)新時(shí)代黨的建設(shè)總要求,全面落實(shí)中央、省委…

    科研百科 2022年12月31日
    695
  • 科研項(xiàng)目倫理申請資料

    科研項(xiàng)目倫理申請資料 隨著科技的不斷發(fā)展,科研項(xiàng)目也越來越受到人們的重視。然而,科研項(xiàng)目涉及到的研究內(nèi)容和實(shí)驗(yàn)操作可能會(huì)對(duì)社會(huì)和個(gè)人產(chǎn)生不良影響,因此,科研項(xiàng)目的倫理管理也變得越來…

    科研百科 2025年2月28日
    5
  • 福州大學(xué)科研項(xiàng)目管理費(fèi)福州大學(xué)科研項(xiàng)目管理費(fèi)

    福州大學(xué)科研項(xiàng)目管理費(fèi) 科研項(xiàng)目管理費(fèi)是福州大學(xué)用于支持科研項(xiàng)目的一種費(fèi)用。該費(fèi)用主要用于支付研究人員的薪酬、實(shí)驗(yàn)室設(shè)備、交通費(fèi)用等。福州大學(xué)科研項(xiàng)目管理費(fèi)的使用情況進(jìn)行監(jiān)管,確保…

    科研百科 2024年9月12日
    4
  • 項(xiàng)目管理哪個(gè)系統(tǒng)好些

    項(xiàng)目管理哪個(gè)系統(tǒng)好些 隨著數(shù)字化時(shí)代的到來,越來越多的公司開始采用項(xiàng)目管理系統(tǒng)來輔助他們進(jìn)行項(xiàng)目管理。目前市面上有許多不同的項(xiàng)目管理系統(tǒng),哪一個(gè)更好取決于公司的項(xiàng)目需求和預(yù)算。 一…

    科研百科 2024年12月13日
    1
  • 科研項(xiàng)目材料泄露

    科研項(xiàng)目材料泄露 近年來,隨著科技的不斷發(fā)展,許多科研項(xiàng)目都得到了廣泛的研究。這些項(xiàng)目涉及到許多科學(xué)領(lǐng)域,包括自然科學(xué)、社會(huì)科學(xué)和工程技術(shù)等。然而,隨著項(xiàng)目的推進(jìn),一些研究人員可能…

    科研百科 2025年3月2日
    0
  • 項(xiàng)目工程管理方法及其施工要點(diǎn)(含全套開發(fā)流程圖)(施工項(xiàng)目管理的基本方法)

    項(xiàng)目工程管理內(nèi)容 一、制定項(xiàng)目管理目標(biāo) 安全管理目標(biāo)——國家標(biāo)準(zhǔn)(JGJ59—2011)、企業(yè)標(biāo)準(zhǔn); 工期進(jìn)度目標(biāo)——企業(yè)標(biāo)準(zhǔn)、項(xiàng)目資金效益; 工程質(zhì)量目標(biāo)——國家及行業(yè)標(biāo)準(zhǔn)、企業(yè)…

    科研百科 2022年11月30日
    371
  • 廣西大學(xué)農(nóng)學(xué)院獲得科研項(xiàng)目廣西大學(xué)農(nóng)學(xué)院獲得科研項(xiàng)目

    廣西大學(xué)農(nóng)學(xué)院獲得科研項(xiàng)目 近日,廣西大學(xué)農(nóng)學(xué)院成功獲得多項(xiàng)科研項(xiàng)目,這是學(xué)院近年來發(fā)展的重要成果之一。這些項(xiàng)目涵蓋了多個(gè)領(lǐng)域,包括農(nóng)業(yè)科學(xué)、生態(tài)學(xué)、植物保護(hù)、農(nóng)業(yè)信息技術(shù)等,將為…

    科研百科 2024年9月8日
    1
RM新时代官方网站