回覆列表
  • 1 # 使用者8037723100181

    由於Openstack使用python,python是動態型別語言,引數型別不容易從程式碼中看出,因此個人建議首先需要部署一個單節點Openstack環境,建議使用RDO:Packstack quickstart,當然樂於折騰使用devstack也是沒有問題的。其次需要安裝科學的程式碼閱讀工具,圖形介面使用pycharm沒有問題,不過通常在虛擬機器中是沒有圖形介面的,首選vim,需要簡單的配置使其支援程式碼跳轉和程式碼搜尋,可以參考GitHub - int32bit/dotfiles: A set of vim, zsh, git, and tmux configuration files.在閱讀原始碼之前,首先得了解Openstack程式碼的架構,至少得知道所有服務的入口,以nova為例,所有的服務入口都是nova-api,對應程式碼:nova/api/openstack/compute,其中雲主機生命週期管理通常在nova/api/openstack/compute/servers.py下,因此不管執行什麼操作,首先在這個目錄入手。其次需要知道nova模組的命名原則:

    api.py是供其它元件呼叫的介面,比如nova/api/openstack/compute/servers.py緊接著呼叫nova/compute/api.pyrpcapi.py是RPC Client庫,用於封裝RPC呼叫manager.py是所有RPC服務端程式碼入口,也是核心功能的實現部分,如果你想了解reboot是怎麼實現的,又不被亂七八糟的RPC呼叫和模組呼叫所累,可以直接看nova/compute/manager.py,從中可以發現它怎麼呼叫libvirt實現虛擬機器重啟的。最後毫無疑問需要掌握python的除錯技巧,推薦pdb、ipdb、ptpdb,其中ptpdb最好用,不過需要手動安裝。打斷點前需要注意程式碼執行時屬於哪個服務元件,並不是在nova/compute目錄就是nova-compute服務執行,比如nova-api服務會呼叫nova/compute/api.py,但仍屬於nova-api服務。在發起RPC呼叫前,永遠不可能發生服務程序轉化。通常nova/xxx/api.py、nova/xxx/rpcapi.py仍是在呼叫方執行,而nova/xxx/manager.py一定在nova-xxx服務執行。另外需要注意打了斷點後的服務必須在前端執行,不能在後臺執行,比如我們在nova/compute/manager.py中打了斷點,我們需要kill掉後臺程序:然後直接在終端執行nova-compute即可。本人閱讀原始碼時順便整理了下nova的操作序列圖,可供參考GitHub - int32bit/openstack-workflow: Openstack Sequence Diagrams以上是本人閱讀原始碼的方式,僅供參考!

  • 中秋節和大豐收的關聯?
  • 財產清查中查明的各種財產物資的盤虧?