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


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

 

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

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

首先分析主文件ansible,代碼和注釋如下:

1、 from __future__ import (absolute_import, division, print_function)
2、 __metaclass__ = type


3、 __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__模塊,把下一個新版本的特性導入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性。詳見:

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”文件中

單獨寫篇文章分析: 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM