ansible作為python模組庫所使用的方法實例

高洛峰
發布: 2017-02-21 10:29:43
原創
1841 人瀏覽過

ansible是一個python package,是個完全的unpack and play軟體,對客戶端唯一的要求是有ssh有python,並且裝了python-simplejson包,部署上簡單到髮指。以下這篇文章就給大家主要介紹了ansible作為python模組庫使用的方法實例,需要的朋友可以參考借鑒。

前言

ansible是新出現的自動化維運工具,基於Python開發,集合了眾多維運工具(puppet、cfengine、 chef、func、fabric)的優點,實作了批次系統配置、批次程式部署、批次運行指令等功能。 ansible是基於模組工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模組,ansible只是提供一種框架。

主要包括:

      (1)、連接插件connection plugins:負責與被監控端實現通訊;

      (2)、host inventory :指定操作的主機,是一個設定檔裡面定義監控的主機;

      (3)、各種模組核心模組、command模組、自訂模組;

      (4)、藉助於外掛程式完成記錄日誌郵件等功能;

      (5)、playbook:當劇本執行多個任務時,非必要可讓節點一次執行多個任務。

Asible是維運工具中算是非常好的利器,我個人比較喜歡,可以根據需求靈活配置yml檔案來實現不同的業務需求,因為不需要安裝客戶端,上手還是非常容易的,在某些情況下你可能需要將ansible作為python的一個庫元件寫入到自己的腳本中,今天的腳本腳本就將展示下ansible如何跟python腳本結合,也就是如何在python腳本中使用ansible,我們逐步展開。

先看第一個例子:

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json
 
# the fastest way to set up the inventory
 
# hosts list
hosts = ["10.11.12.66"]
# set up the inventory, if no group is defined then 'all' group is used by default
example_inventory = ansible.inventory.Inventory(hosts)
 
pm = ansible.runner.Runner(
 module_name = 'command',
 module_args = 'uname -a',
 timeout = 5,
 inventory = example_inventory,
 subset = 'all' # name of the hosts group 
 )
 
out = pm.run()
 
print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))
登入後複製

這個例子展示我們如何在python腳本中運行如何透過ansible執行系統指令,我們接下來看第二個例子,跟著我們的yml檔案對接。

簡單的yml檔案內容如下:

- hosts: sample_group_name
 tasks:
 - name: just an uname
 command: uname -a
登入後複製

呼叫playbook的python腳本如下:

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json
 
### setting up the inventory
 
## first of all, set up a host (or more)
example_host = ansible.inventory.host.Host(
 name = '10.11.12.66',
 port = 22
 )
# with its variables to modify the playbook
example_host.set_variable( 'var', 'foo')
 
## secondly set up the group where the host(s) has to be added
example_group = ansible.inventory.group.Group(
 name = 'sample_group_name'
 )
example_group.add_host(example_host)
 
## the last step is set up the invetory itself
example_inventory = ansible.inventory.Inventory()
example_inventory.add_group(example_group)
example_inventory.subset('sample_group_name')
 
# setting callbacks
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
 
# creating the playbook instance to run, based on "test.yml" file
pb = ansible.playbook.PlayBook(
 playbook = "test.yml",
 stats = stats,
 callbacks = playbook_cb,
 runner_callbacks = runner_cb,
 inventory = example_inventory,
 check=True
 )
 
# running the playbook
pr = pb.run() 
 
# print the summary of results for each host
print json.dumps(pr, sort_keys=True, indent=4, separators=(',', ': '))
登入後複製

更多ansible作為python模組庫使用的方法實例相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板