天天看點

自動化運維工具Ansible之Pytho

Ansible 的Python API使用起來相當簡單快捷,使用API可以将某些運維操作封裝成一個帶有WEB界面的操作,免去了每次執行某個操作的時候都需要SSH運作Ansible指令。

官方給出的一個簡單示例:

import ansible.runner
    
    runner = ansible.runner.Runner(
       module_name='ping',
       module_args='',
       pattern='web*',
       forks=10
    )
    datastructure = runner.run()           

複制

run()方法會傳回執行的結果。傳回的資料是一個JSON格式的:

    {
        "dark" : {
           "web1.example.com" : "failure message"
        },
        "contacted" : {
           "web2.example.com" : 1
        }
    }           

複制

Ansible的API使用起來就這麼友善,先是導入ansible,然後直接調用相應的子產品,指派相應的子產品參數即可。

    [root@web1 ~]# cat an.py
    #!/usr/bin/env python
    
    import ansible.runner
    
    runner = ansible.runner.Runner(
        module_name='ping',#調用的子產品
        module_args='',#子產品參數
        pattern='webservers',#主機組,可以是正規表達式如web*
        forks=10
    )
    
    data = runner.run()
    print data
    [root@web1 ~]# python an.py 
    {'dark': {}, 'contacted': {'192.168.1.65': {'invocation': {'module_name': 'ping', 'module_args': ''}, u'changed': False, u'ping': u'pong'}}}           

複制

預設使用的主機資源檔案位置為/etc/ansible/hosts,也可以指定host_list參數,來指定一個inventory檔案的路徑,也可以指定一個動态的inventory腳本。dark裡面是執行失敗的主機清單,contacted是執行操作成功的主機清單。

但是并不是所有的子產品都可以通過API調用的,如template子產品,在ansible1.9或之前的版本中,就無法通過Python API調用。