ansible作為python模塊庫使用的方法實例
前言
ansible是新出現(xiàn)的自動化運維工具,基于Python開發(fā),集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點,實現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。
主要包括:
(1)、連接插件connection plugins:負責和被監(jiān)控端實現(xiàn)通信;
(2)、host inventory:指定操作的主機,是一個配置文件里面定義監(jiān)控的主機;
(3)、各種模塊核心模塊、command模塊、自定義模塊;
(4)、借助于插件完成記錄日志郵件等功能;
(5)、playbook:劇本執(zhí)行多個任務時,非必需可以讓節(jié)點一次性運行多個任務。
Asible是運維工具中算是非常好的利器,我個人比較喜歡,可以根據(jù)需求靈活配置yml文件來實現(xiàn)不同的業(yè)務需求,因為不需要安裝客戶端,上手還是非常容易的,在某些情況下你可能需要將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運行系統(tǒng)命令,我們接下來看第二個例子,跟我們的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=(',', ': '))
總結
以上就是為大家展示的2個小例子希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
解決pip install中UnicodeDecodeError問題的處理
這篇文章主要介紹了解決pip install中UnicodeDecodeError問題的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
python實現(xiàn)飛機大戰(zhàn)游戲(pygame版)
這篇文章主要為大家詳細介紹了python實現(xiàn)pygame版的飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02
numpy.random.shuffle打亂順序函數(shù)的實現(xiàn)
這篇文章主要介紹了numpy.random.shuffle打亂順序函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09
keras.layers.Conv2D()函數(shù)參數(shù)用法及說明
這篇文章主要介紹了keras.layers.Conv2D()函數(shù)參數(shù)用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
解決windows下Sublime Text 2 運行 PyQt 不顯示的方法分享
問題描述:PyQt 環(huán)境正常,可以使用 Windows 的 虛擬 DOS 正常運行,但在 Sublime Text 2 下使用 Ctrl + B 運行后,界面不顯示,但查看任務管理器,有 python.exe 進程。2014-06-06
Python工廠模式實現(xiàn)封裝Webhook群聊機器人詳解
企業(yè)存在給 特定群組 自動推送消息的需求,你可以在群聊中添加一個自定義機器人,通過服務端調用 webhook 地址,即可將外部系統(tǒng)的通知消息即時推送到群聊中。本文就來和大家聊聊具體實現(xiàn)方法2023-02-02

