ansible代碼分析第一篇--主文件—ansible分析

2016年2月23日,學習,分析ansible代碼html

 

ansible是一種運維中使用的批量部署的工具,它自己是一種框架,具體的部署和架構分析,下面這篇文章講的不錯。python

http://os.51cto.com/art/201409/451927_all.htm架構

首先分析主文件ansible,代碼和註釋以下:框架

一、 from __future__ import (absolute_import, division, print_function)
二、 __metaclass__ = type


三、 __requires__ = ['ansible']

第一行引入了3個模塊,具體的做用以下運維

absolute_import  使用相對或絕對路徑來導入模塊,參考這篇文章: http://taoyh163.blog.163.com/blog/static/1958035620074111276292/函數

division   精確除法, 參考這篇文章: http://www.cnblogs.com/feixingfei/archive/2011/12/18/2297596.html工具

print_function  打印函數學習

這行中的__future__是python語法, 解釋以下:測試

Python提供了__future__模塊,把下一個新版本的特性導入到當前版本,因而咱們就能夠在當前版本中測試一些新版本的特性。詳見: ui

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820023084e5263fe54fde4e4e8616597058cc4ba1000

第二行感受解釋挺複雜,能夠參考這篇文章:

http://www.cnblogs.com/huangcong/archive/2011/08/28/2156307.html   3.2部分

第三行是判斷依賴庫,依賴文件都是在ansible這個目錄下面

try:
    import pkg_resources
except Exception:
    pass

原來代碼裏有英文解釋,說是引入這個包保證庫版本和路徑的準確,暫時這麼理解吧。

import os
import sys
import traceback
 
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
from ansible.utils.display import Display
from ansible.utils.unicode import to_unicode

引入了經常使用的包

class LastResort(object):
    def display(self, msg):
        print(msg, file=sys.stderr)
 
    def error(self, msg, wrap_text=None):
        print(msg, file=sys.stderr)

定義了一個類,最後輸出結果排序, 包含兩個方法display error。

if __name__ == ‘__main__’;
 
     display = LastResort()
     cli = None
     me = os.path.basename(sys.argv[0])    

進入主程序,display實例化LastResort這個類,

定義cli這個變量的值爲None

basename() 去掉目錄路徑, 返回文件名

sys.argv[]是用來獲取命令行參數的,sys.argv[0]表示代碼自己文件路徑;好比在CMD命令行輸入 「python  test.py -help」,那麼sys.argv[0]就表明「test.py」。

也就是me的值就是執行文件的名稱

    try:
        display = Display()    

Display 是一個類,前面已經引出過了,對這個類的代碼進行分析,該類定義在」ansible2.0/lib/ansible/utils/display.py」文件中

單獨寫篇文章分析: 

相關文章
相關標籤/搜索