擴展OpenStack的nova metadata api

1. 場景python

雲計算環境中,當虛擬機啓動時不免須要作一些初始化配置,這必然涉及到虛擬機如何獲取數據,誰又提供這些數據的問題。固然,這裏不得不提AWS,他們想到在虛擬機內使用一個固定的IP(http://169.254.169.254)來獲取一些相關數據(metadata:元數據),進而完成一些配置工做。而OpenStack繼承了這種設計。天然,這裏還有一些很不錯的工具,例如: cloudinit (http://cloudinit.readthedocs.org/en/latest/)。它被安裝在製做好的鏡像中,當鏡像派生出實例虛擬機時,在虛擬機內的cloudinit與元數據服務配合完成初始化工做。cloudinit 功能很強大,能夠分加載層次(能夠在boot層次上加載,也能夠在操做系統之上加載),還能夠分頻率(只運行一次,天天......)運行等等,固然在這裏它是題外話。shell

目前cloudinit在windows系的鏡像中是不支持的,也許你不須要一個這麼大而全的工具的時候,你只想在虛擬機系統啓動時經過讀取本身的metadata api完成一些小設置,那麼這裏會告訴你一個基本的例子。windows

2. 目錄結構api

假設你已經有一套部署好的OpenStack,這裏以單節點OpenStack爲例。python2.7

你能夠經過如下命令,查找到nova api源碼所在的目錄(固然,這裏你也能夠直接下源碼查看)。curl

cd /
locate nova/api

切換到nova api 的源碼目錄函數

cd /usr/lib/python2.7/dist-packages/nova/api/
#安裝tree(apt-get install tree)
tree -d

其中metadata目錄就是metadata api所在源碼,再進去一探究竟,內部文件以下:工具

3. 虛機訪問元數據服務雲計算

在個人OpenStack環境中是有一臺虛擬機的,進入其系統,查看一下元數據服務的狀況,這裏的狀況正常url

再查看內部的metadata,記住裏面的這些api,它們都會在源碼中出現哦

4. metadata源碼中的對應點

退出虛擬機系統,回到OpenStack的/usr/lib/python2.7/dist-packages/nova/api/metadata目錄。

打開(vi/nano) base.py文件,找到(這裏請熟練使用vi,nano或其餘編輯工具)InstanceMetadata類的get_ec2_metadata方法,

在方法內部有一個metadata字典,看到了什麼?是否是與虛擬機內經過 http://169.254.169.254/latest/meta-data  獲取的列表是一致的!

這裏這些api都是能夠訪問的

 

5. 添加本身的metadata api

這裏只是簡單例子,詳細的擴展須要涉及更多。

這裏這個例子實現的功能是 虛擬機經過元數據API訪問獲取OpenStack系統的系統時間。

在源碼文件底部定義一個get_system_time函數,保存文件

重啓nova-api

sudo service nova-api restart


6. 驗證

從新進入虛擬機系統,使用以下URL,就能夠獲取時間

curl http://169.254.169.254/latest/meta-data/get_system_time

相關文章
相關標籤/搜索