今天看了下ansible的API,樓主一看,這玩意牛逼啊,估計ansible Tower也是根據這套API來的吧。
閑話不說,看看咋玩的吧。
咱們先看看接口的主角,ansible.runner.Runner這個類吧
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaukTNzcmYTZmd3YEZSFUQUdETZd3VVdlMPFDTvl2S39CXDNzLclzMvwlMw00LcJDMzZWe39CXt92Yu8GdjFTNuMzcvw1LcpDc0RHaiojIsJye.jpg)
想必大夥也也都看到了,這個類初始化函數裡面的這些參數,就是咱們要輸入的參數,不過全都有預設值,看到了沒,也就是說咱們隻要修改我們需要改變的就OK了。
我們想要調用這個接口,其實很簡單,兩步就OK了,第一步執行個體化ansible.runner.Runner這個類,
第二步,執行個體化後的對象調用run()這個函數。
咱們先舉小例子,看看運作run()函數之後,傳回的結果長什麼樣的吧
想必大夥也看到了,傳回的結果是一個json格式的字典。
dark,指的是沒傳回結果的,因為salt-minion這台機器,樓主沒開機,是以沒傳回。
contacted,這裡面,有我們要的結果。 result['contacted']['stdout']是我們的輸出。
OK,知道這些了。那大夥也差不多知道了,ansible這個接口是幹什麼的了吧?
它幹的活,其實就是把ansible标準庫的子產品,或者咱們自己寫的子產品傳進去,然後我們可以得到
一個字典格式的結果。 有了這個結果,我們就可以對結果進行一系列的處理了。
最重要的一點是啥呢? 有了這個接口,咱們就不用走ansible 指令行,或playbook執行這一流程了。
就可以利用這個接口,寫好一個python子產品,咱們自己的系統就可以直接調用這個子產品,然後得到
正常情況下通過ansible指令行或playbooks才能得到的結果
。
下面再說說自定義module吧,上上一篇總結facts的時候,寫了一個自定義子產品的小例子。
其實ansible裡面自定義子產品,用bash,perl,lua,python,c++等等這些語言都可以寫子產品。
隻要這些子產品,傳回一個json格式的結果給ansible就OK了。
樓主舉個小例子,測試一下。
OK,看看結果吧
當然,咱們自定義的子產品入庫之前,最好先測試一下。可以用ansible安裝包裡的一個東西測試下
OK,自定義子產品就到這裡了。關鍵把輸入和輸出給弄好,中間的過程就可以自由發揮了
最好咱們來看看,怎麼自定義plugins吧。
ansible有很多類型的插件都可以自定義,上一篇咱們總結facts的時候,樓主弄個了自定了loops插件的小例子。 loops插件也是衆多類型插件中的一種。下面這個圖,裡面就是可以自定的插件,
以及插件,預設存放的位置。也就是說咱們,定義好插件直接丢在這些檔案夾裡面就OK了
樓主舉個callback插件的例子吧,因為,這個插件和salt-stack裡的ruturner長的差不多。
咱們ansible執行後的結果,一般來說,不都是列印到螢幕上的嗎?
而callback插件,則可以接收ansible執行的結果,并安裝我們的設計,把結果輸出到不同的地方去。
比如說輸出到檔案,資料庫,發郵件等。
mark一個官網callback例子的位址
https://github.com/ansible/ansible/tree/devel/plugins/callbacks
把檔案丢進/usr/share/ansible_plugins/callback_plugins/檔案夾下面,咱們随便找個playbooks執行下看看結果吧
看到了沒,執行了兩次。。。啥原因,樓主也不知道。。。
ansible,樓主就大多數功能也測試了一遍,沒啥實際需求,一直處于自娛自樂的狀态,不準備搞下去了。。。
搞了兩三個禮拜的salt-stack和ansible,得出一個結論,樓主python太水了。
接下來開始好好補補python了