⑴ 如何獲取openstack nova各版本源碼
1.可能很多人把git當作github的客戶端了,以為git管理的文件只能提交到github或者其他的git網站上。2.認為git只能管理代碼由於git的倉庫數據是分布式存儲的,具有脫離伺服器依然全功能可用、歷史可查的特性,所以對於如何使用git的問題,我們完全可以發揮一下想像力,讓git不光可以管理代碼,還可以管理我們的其他文件,讓所有的文檔、資料甚至照片都處於有歷史可查、可分支編輯的狀態。
⑵ openstack nova日誌怎麼查看
計算節點上看nova-compute日誌 tail /var/log/nova-compute.log
控制節點上看nova-api日誌 tail /var/log/nova-api.log
⑶ ubuntu關機後怎麼重啟OpenStack服務,使用Devstack部署的
1、安裝git:
sudo apt-get install git
這個很簡單吧,但就是這個還著實讓我費了一番力氣。因為我擔心ubuntu初始的源不給力,所以剛安裝好便換成了國內的源,偏偏這國內的源無法安裝git,換了好機會仍然是這樣。(網路連接正常,不清楚為什麼會這樣)只能單獨下載包,然後手動安裝了,手動安裝
其實不難(下載到包,之後執行 dpkg -i <包名>),關鍵是得找對版本。
2、獲取devstack腳本:
git clone https://github.com/openstack-dev/devstack.git
3、執行:
cd devstack && ./stack.sh
腳本執行全程只需要按照提示設置幾個密碼,其他無需干預。我沒有讀腳本的源碼,但是根據執行過程的輸出信息大致總結出了他的執行過程:
(1)下載並安裝Openstack運行所需要的系統軟體,大概包括一些python的組件、mysql、rabbitmq-server等
(2)下載openstack組件,包括nova 、keystone、glance、noVNC、horizon等
(3)下載並安裝openstack源碼所依賴的python庫和框架
(4)安裝openstack各組件
(5)啟動各項服務
在較好的網路環境下,有人用不到十分鍾搞定了整個過程,但是我們公司網路環境不是很好,中間還中斷了幾次,大致都與網路有關。遇到較多的問題就是某些軟體無法下載,好在腳本會比較清楚報出錯誤信息,可以將安裝出錯的軟體手動安裝,之後重新執行腳本(最好不要用國內源,用歐美源應該比較靠譜)。過程雖然不是很順利,但是最後還是成功了,看到了dashboard界面。耗時大約3小時。
⑷ 如何開啟OpenStack社區貢獻之路
OpenStack作為第二大開源社區,擁有眾多代碼貢獻者。但是,對於剛剛接觸OpenStack,想要了解OpenStack源碼,並且想為OpenStack的開發貢獻自己的一份力量時,經常會不知從何下手。本文便是針對此類情況,介紹如何加入社區,如何提交commit,如何review代碼等問題展開的。
1簽訂ICLA參與社區貢獻前,需要簽訂ICLA協議。進入docs.openstack.org網站,在Contributor Guides下找到並點擊「OpenStack Infrastructure User Manual 」。
依次打開圖中所標注的鏈接。按照網站說明進行注冊。需要注意的是,在注冊launchpad時,要使用所在公司的郵箱,便於社區統計各公司的貢獻數據。當然,如果你是自由職業者或者所在公司沒有在社區上注冊,則可隨意使用一個郵箱。
圖3當完成以上四步後,便可以看到OpenStack Indivial Contributor License Agreement(ICLA)已驗證。
上傳自己的SSH 密鑰
配置Git Bashgit config --global user.name "XXX"git config --global user.email [email protected]此處填寫要與gerrit賬戶一致。
安裝git-review
下載源碼庫作為剛剛接觸社區的同學,建議先在openstack-manuals項目上下手,一方面可以藉此熟悉openstack。同時,在進行社區貢獻,驗證bug時,促使自己動手操作,增加運維經驗。先從github上下載源代碼,以OpenStack社區手冊openstack-manuals為例:git clone git://github.com/openstack/openstack-manuals.gitcd openstack-manualsgit review -s首先會確保能使用你的ssh key登錄gerrit,默認使用當前git環境變數配置的用戶,否則,會提示輸入gerrit用戶名,可以通過這個鏈接查看gerrit用戶名。成功後,會在openstack-manuals目錄下生成一個.gitreview目錄最新代碼:git checkout mastergit pull新建分支,如果是blueprint,分支名是「bp/BP-NAME」,其中的BP-NAME是在launchpad上bp的名稱;如果是修復bug,分支明是「bug/BUG-NUMBER」,其中BUG-NUMBER可以在bug頁面上找到:git checkout -b BRANTCH-NAME
commit注意,在每提交一個新的commit之前,請先確保代碼是最新的。執行下面兩條命令更新庫。git checkout mastergit pull提交代碼前,還需要對openstack-manuals目錄下的.git文件夾內的兩個文件進行修改。
第一次需要生成一個密碼,可以重復生成,請盡量選擇使用沒有特殊字元的密碼,由大小寫字母加數字的密碼即可。若是在nova項目下,請修改***標注的openstack-manuals為nova即可。
⑸ 全面認識openstack,它到底是什麼包含什麼
(1)官方的解釋相信大家都已經了解了,不了解也沒有關系。現在從常識的角度來給大家解釋和說明。
OpenStack是一個雲平台管理的項目,它不是一個軟體。這個項目由幾個主要的組件組合起來完成一些具體的工作。
OpenStack是一個旨在為公共及私有雲的建設與管理提供軟體的開源項目,OpenStack被公認作為基礎設施即服務(簡稱IaaS)資源的通用前端。
如果這些還不明白,那麼從另外的角度給大家介紹:
首先讓大家看下面兩個圖就很簡單明了了:
此圖為openstack的登錄界面
下面是openstack的一個管理界面
從這兩個圖,相信有一定開發經驗,就能看出openstack是什麼了。可以說他是一個框架,甚至可以從軟體的角度來理解它。如果不明白,就從傳統開發來講解。不知道你是否了解oa,erp等系統,如果不了解可以到網上去找,資料一大把。他和oa,erp有什麼不同。很簡單就是openstack是用做雲計算的一個平台,或則一個解決方案。它是雲計算一個重要組成部分。
上面對openstack有了一個感性的認識。
(2)openstack能幹什麼。
大家都知道阿里雲平台,網路雲平台,而阿里雲平台據傳說就是對openstack的二次開發。對於二次開發相信只要接觸過軟體的都會明白這個概念。不明白的自己網上去查一下。也就是說openstack,可以搭建雲平台,什麼雲平台,公有雲,私有雲。現在網路在招聘的私有雲工程師,應該就是這方面的人才。
(3)openstack自身都包含什麼
以下是5個OpenStack的重要構成部分:
l Nova – 計算服務
l Swift – 存儲服務
l Glance – 鏡像服務
l Keystone – 認證服務
l Horizon – UI服務
圖1 OpenStack基本構架
下圖展示了Keystone、Dashboard二者與其它OpenStack部分的交互。
下面詳細介紹每一個服務:
(一)OpenStack計算設施—-Nova Nova是OpenStack計算的彈性控制器。OpenStack雲實例生命期所需的各種動作都將由Nova進行處理和支撐,這就意味著Nova以管理平台的身份登場,負責管理整個雲的計算資源、網路、授權及測度。雖然Nova本身並不提供任何虛擬能力,但是它將使用libvirt API與虛擬機的宿主機進行交互。Nova通過Web服務API來對外提供處理介面,而且這些介面與Amazon的Web服務介面是兼容的。
功能及特點
l 實例生命周期管理
l 計算資源管理
l 網路與授權管理
l 基於REST的API
l 非同步連續通信
l 支持各種宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
OpenStack計算部件
l Nova彈性雲包含以下主要部分:
l API Server(nova-api)
l 消息隊列(rabbit-mq server)
l 運算工作站(nova-compute)
l 網路控制器(nova-network)
l 卷管理(nova-volume)
l 調度器(nova-scheler)
API伺服器(nova-api)
API伺服器提供了雲設施與外界交互的介面,它是外界用戶對雲實施管理的唯一通道。通過使用web服務來調用各種EC2的API,接著API伺服器便通過消息隊列把請求送達至雲內目標設施進行處理。作為對EC2-api的替代,用戶也可以使用OpenStack的原生API,我們把它叫做「OpenStack API」。
消息隊列(Rabbit MQ Server)
OpenStack內部在遵循AMQP(高級消息隊列協議)的基礎上採用消息隊列進行通信。Nova對請求應答進行非同步調用,當請求接收後便則立即觸發一個回調。由於使用了非同步通信,不會有用戶的動作被長置於等待狀態。例如,啟動一個實例或上傳一份鏡像的過程較為耗時,API調用就將等待返回結果而不影響其它操作,在此非同步通信起到了很大作用,使整個系統變得更加高效。
運算工作站(nova-compute)
運算工作站的主要任務是管理實例的整個生命周期。他們通過消息隊列接收請求並執行,從而對實例進行各種操作。在典型實際生產環境下,會架設許多運算工作站,根據調度演算法,一個實例可以在可用的任意一台運算工作站上部署。
網路控制器(nova-network)
網路控制器處理主機的網路配置,例如IP地址分配,配置項目VLAN,設定安全群組以及為計算節點配置網路。
卷工作站(nova-volume)
卷工作站管理基於LVM的實例卷,它能夠為一個實例創建、刪除、附加卷,也可以從一個實例中分離卷。卷管理為何如此重要?因為它提供了一種保持實例持續存儲的手段,比如當結束一個實例後,根分區如果是非持續化的,那麼對其的任何改變都將丟失。可是,如果從一個實例中將卷分離出來,或者為這個實例附加上卷的話,即使實例被關閉,數據仍然保存其中。這些數據可以通過將卷附加到原實例或其他實例的方式而重新訪問。
因此,為了日後訪問,重要數據務必要寫入卷中。這種應用對於數據伺服器實例的存儲而言,尤為重要。
調度器(nova-scheler)
調度器負責把nova-API調用送達給目標。調度器以名為「nova-schele」的守護進程方式運行,並根據調度演算法從可用資源池中恰當地選擇運算伺服器。有很多因素都可以影響調度結果,比如負載、內存、子節點的遠近、CPU架構等等。強大的是nova調度器採用的是可插入式架構。
目前nova調度器使用了幾種基本的調度演算法:
隨機化:主機隨機選擇可用節點;
可用化:與隨機相似,只是隨機選擇的范圍被指定;
簡單化:應用這種方式,主機選擇負載最小者來運行實例。負載數據可以從別處獲得,如負載均衡伺服器。
(二)OpenStack鏡像伺服器—-GlanceOpenStack鏡像伺服器是一套虛擬機鏡像發現、注冊、檢索系統,我們可以將鏡像存儲到以下任意一種存儲中:
本地文件系統(默認)
l OpenStack對象存儲
l S3直接存儲
l S3對象存儲(作為S3訪問的中間渠道)
l HTTP(只讀)
功能及特點
提供鏡像相關服務
Glance構件
l Glance控制器
l Glance注冊器
(三)OpenStack存儲設施—-Swift
Swift為OpenStack提供一種分布式、持續虛擬對象存儲,它類似於Amazon Web Service的S3簡單存儲服務。Swift具有跨節點百級對象的存儲能力。Swift內建冗餘和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆位元組)和大容量(多對象數量)的測度非常高效。
功能及特點
l 海量對象存儲
l 大文件(對象)存儲
l 數據冗餘管理
l 歸檔能力—–處理大數據集
l 為虛擬機和雲應用提供數據容器
l 處理流媒體
l 對象安全存儲
l 備份與歸檔
l 良好的可伸縮性
Swift組件
l Swift賬戶
l Swift容器
l Swift對象
l Swift代理
l Swift RING
Swift代理伺服器
用戶都是通過Swift-API與代理伺服器進行交互,代理伺服器正是接收外界請求的門衛,它檢測合法的實體位置並路由它們的請求。
此外,代理伺服器也同時處理實體失效而轉移時,故障切換的實體重復路由請求。
Swift對象伺服器
對象伺服器是一種二進制存儲,它負責處理本地存儲中的對象數據的存儲、檢索和刪除。對象都是文件系統中存放的典型的二進制文件,具有擴展文件屬性的元數據(xattr)。
注意:xattr格式被linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是並沒有有效測試證明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同樣能運行良好。不過,XFS被認為是當前最好的選擇。
Swift容器伺服器
容器伺服器將列出一個容器中的所有對象,默認對象列表將存儲為SQLite文件(譯者註:也可以修改為MySQL,安裝中就是以MySQL為例)。容器伺服器也會統計容器中包含的對象數量及容器的存儲空間耗費。
Swift賬戶伺服器
賬戶伺服器與容器伺服器類似,將列出容器中的對象。
Ring(索引環)
Ring容器記錄著Swift中物理存儲對象的位置信息,它是真實物理存儲位置的實體名的虛擬映射,類似於查找及定位不同集群的實體真實物理位置的索引服務。這里所謂的實體指賬戶、容器、對象,它們都擁有屬於自己的不同的Rings。
(四)OpenStack認證服務(Keystone)
Keystone為所有的OpenStack組件提供認證和訪問策略服務,它依賴自身REST(基於Identity API)系統進行工作,主要對(但不限於)Swift、Glance、Nova等進行認證與授權。事實上,授權通過對動作消息來源者請求的合法性進行鑒定。如下圖所示:
Keystone採用兩種授權方式,一種基於用戶名/密碼,另一種基於令牌(Token)。除此之外,Keystone提供以下三種服務:
l 令牌服務:含有授權用戶的授權信息
l 目錄服務:含有用戶合法操作的可用服務列表
l 策略服務:利用Keystone具體指定用戶或群組某些訪問許可權
認證服務組件
服務入口:如Nova、Swift和Glance一樣每個OpenStack服務都擁有一個指定的埠和專屬的URL,我們稱其為入口(endpoints)。
l 區位:在某個數據中心,一個區位具體指定了一處物理位置。在典型的雲架構中,如果不是所有的服務都訪問分布式數據中心或伺服器的話,則也稱其為區位。
l 用戶:Keystone授權使用者
譯者註:代表一個個體,OpenStack以用戶的形式來授權服務給它們。用戶擁有證書(credentials),且可能分配給一個或多個租戶。經過驗證後,會為每個單獨的租戶提供一個特定的令牌。[來源:http://blog.sina.com.cn/s/blog_70064f190100undy.html]
l 服務:總體而言,任何通過Keystone進行連接或管理的組件都被稱為服務。舉個例子,我們可以稱Glance為Keystone的服務。
l 角色:為了維護安全限定,就雲內特定用戶可執行的操作而言,該用戶關聯的角色是非常重要的。
譯者註:一個角色是應用於某個租戶的使用許可權集合,以允許某個指定用戶訪問或使用特定操作。角色是使用許可權的邏輯分組,它使得通用的許可權可以簡單地分組並綁定到與某個指定租戶相關的用戶。
l 租間:租間指的是具有全部服務入口並配有特定成員角色的一個項目。
譯者註:一個租間映射到一個Nova的「project-id」,在對象存儲中,一個租間可以有多個容器。根據不同的安裝方式,一個租間可以代表一個客戶、帳號、組織或項目。
(五)OpenStack管理的Web介面—-Horizon
Horizon是一個用以管理、控制OpenStack服務的Web控制面板,它可以管理實例、鏡像、創建密匙對,對實例添加卷、操作Swift容器等。除此之外,用戶還可以在控制面板中使用終端(console)或VNC直接訪問實例。總之,Horizon具有如下一些特點:
l 實例管理:創建、終止實例,查看終端日誌,VNC連接,添加卷等
l 訪問與安全管理:創建安全群組,管理密匙對,設置浮動IP等
l 偏好設定:對虛擬硬體模板可以進行不同偏好設定
l 鏡像管理:編輯或刪除鏡像
l 查看服務目錄
l 管理用戶、配額及項目用途
l 用戶管理:創建用戶等
l 卷管理:創建卷和快照
l 對象存儲處理:創建、刪除容器和對象
l 為項目下載環境變數
⑹ 在linux中git獲取openstack源碼要多久
OpenStack 是一種基礎架構即服務 (IaaS) 雲計算項目。
資源通過一個儀錶板來管理,該儀錶板向管理員提供了控制權,並通過一個 Web 介面為用戶提供了配置資源的權利。本文將介紹如何設置帳戶、設置開發環境以及如何開始為 OpenStack 做貢獻。
第 1 步:通過在線注冊和密鑰配置來設置帳戶
設置您的 Launchpad 帳戶。Launchpad 是 OpenStack 用來託管其所有項目的位置。請訪問 Launchpad 登錄頁面,使用您的電子郵件地址進行注冊,並為自己選擇一個便於記憶的 Launchpad ID。然後訪問 https://launchpad.net/~LaunchpadID,設置您的 OpenPGP 密鑰,並使用該頁上的說明上傳您的 SSH 公鑰。例如,我的 Launchpad id 是 houshengbo,因此我將訪問 https://launchpad.net/~houshengbo,如圖 1 所示。
圖 1. 設置 OpenPGP 密鑰
為 Gerrit 設置您的 SSH 帳戶。OpenStack 應用了一個代碼評審過程來保證代碼質量。請訪問 OpenStack 代碼審查 頁面,並使用您的 Launchpad 帳戶進行登錄。然後訪問 https://review.openstack.org/#/settings/ssh-keys 並上傳您的 SSH 公鑰。
圖 2. 上傳 SSH 公鑰
第 2 步:簽署 CLA 協議
請加入 OpenStack Foundation(如果您尚未加入)。使用您計劃用於貢獻代碼的電子郵件地址。foundation profile 中的主要電子郵件地址需要與您稍後在 Gerrit 聯系信息中設置的首選電子郵件相匹配。
請訪問 Code Review 頁面。單擊位於該頁面右上角的 Sign In 鏈接。使用您的 Launchpad ID 登錄 Launchpad。
除非您是美國政府雇員(參見以下內容),否則請同意 Indivial Contributor License Agreement 並提供聯系信息。您的所有姓名和電子郵件地址都是公開的。如果需要的話,可以稍後 更新 此聯系信息,但確保主要電子郵件地址始終與為您的 OpenStack Foundation 會員身份設置的電子郵件地址相匹配。
加入 OpenStack Contributors 組。需要以會員身份提交代碼更改。
如果您以個人貢獻者的身份工作,那麼執行上述步驟就足夠了。如果您代表公司或美國政府工作,那麼您可能需要關注其他一些內部審批過程,這些過程因公司而異。有關的詳細信息,請參閱 貢獻者許可協議。
第 3 步:設置本地開發環境
設置 Eclipse 環境:
在 Eclipse 窗口上,單擊 Help > Install New Software。
在 Work with 欄位中,輸入 http://download.eclipse.org/egit/updates 並單擊 Add。
選中位於 Eclipse Git Team Provider 下面的 Eclipse EGit。
單擊 Next,直到您找到 Review Licences 窗口。接受許可條款並單擊 Finish。
在 Eclipse 窗口上,單擊 Help > Install New Software。
配置 Eclipse 的 python interpreter。在 Work with 欄位中,輸入 http://pydev.org/updates並單擊 Add。
選中 PyDev。
單擊 Next,直到您找到 Review Licences 窗口。接受許可條款並單擊 Finish。
安裝附帶 python 的 Ubuntu 11.10 或 11.10+。
安裝 git:sudo apt-get install git。
安裝 Eclipse。
安裝 Eclipse 的 PyDev 插件。
安裝 Eclipse 的 EGit 插件。
設置代碼庫。
打開一個終端,轉到目標目錄(例如,/opt/stack)並運行以下命令以獲得 keystone 代碼:
git clone https://github.com/openstack/keystone.git
將項目導入 Eclipse:運行 Eclipse 並將工作區設置為保存所有項目 (/opt/stack) 的目錄。
創建 PyDev 項目:單擊 File > New > PyDev project。使其名稱與該項目相同,如 keystone,然後單擊Finish。
將該項目與 Egit 同步:在 Eclipse 中,右鍵單擊該項目 (keystone),單擊 Team > Share project,然後單擊 Next 和 Finish。
完成上述步驟之後,應該會在 Eclipse 中看到位於您的項目名稱後面的 [keystone master]。
打開一個終端,轉到目標目錄,並運行以下命令獲得 devstack 代碼:
git clone git://github.com/openstack-dev/devstack.git
在剛剛創建的 devstack 目錄下創建一個名為 localrc 的文件。可以在 DevStack 網站上查找關於如何 配置 localrc 的信息。
運行 ./stack.sh。默認工作目錄是 /opt/stack,可以手動更改它。當初次運行 devstack 獲得成功之後,可以在 /opt/stack 下找到所有代碼。
使用 devstack:
另一個方法是下載特定項目,而不是克隆所有項目。以 Keystone 項目為例:
運行單元測試
對某個項目運行所有單元測試:
打開一個終端並轉到項目目錄,例如 keystone。
運行 ./run_tests.sh 命令。當詢問您是否想創建一個虛擬環境時,選擇 Y 或 N。
測試一個示例:
打開一個終端並轉到項目目錄,例如 keystone。
運行 ./run_tests.sh <file path> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py。
測試一個示例:
打開一個終端並轉到項目目錄,例如 keystone。
運行 ./run_tests.sh <file path>:<class name> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py:CommonHelperTests。
測試一個方法:
打開一個終端並轉到項目目錄,例如 keystone。
運行 ./run_tests.sh <file path>:<class name>.<method name> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py:CommonHelperTests.test_format_helper_raises_malformed_on_incomplete_format。
運行 OpenStack 服務
運行 Devstack 的所有服務:
打開一個終端並轉到 devstack 目錄。
運行 ./stack.sh 命令。在 localrc 中,指定要運行的服務,例如 ENABLED_SERVICES=key,c-api,c-vol,c-sch,mysql,rabbit。
運行 ./unstack.sh 關閉所有服務。
首次運行 ./stack.sh 獲得成功之後,您還可以運行 ./rejoin-stack.sh 來運行所有指定的服務。
在 Eclipse 中運行服務。以 Keystone 為例:
在 Eclipse 中設置 keystone 的調試配置。右鍵單擊腳本 keystone—bin 下的所有內容,然後單擊Debug as > Debug Configurations,如圖 3 所示。
圖 3. 調試配置
設置調試配置。單擊 Arguments 選項卡,選擇 Other 作為工作目錄,然後輸入 ${workspace_loc:keystone},如圖 4 和圖 5 所示。
圖 4. Main 選項卡配置
圖 5. Arguments 選項卡配置
啟動 Keystone:單擊 Debug Configuration 窗口上的 Debug 按鈕,或從 Debug/Run 下拉工具欄按鈕中運行它,如圖 6 所示。
圖 6. 啟動 Keystone 服務
第 4 步:設置本地計算機配置
設置 git 全局配置:
打開一個終端。
運行 git config --global user.name "Firstname Lastname" 命令。
運行 git config --global user.email "[email protected]" 命令。
安裝 git-review 工具:
對於 Ubuntu 12.04 或更高版本,在一個終端中運行 sudo apt-get install git-review 命令。
對於 Ubunu 12.04 之前的版本,則運行 sudo pip install git-review 命令。
配置您的項目以了解 Gerrit:
打開一個終端並轉到項目目錄,例如 keystone。
運行 git review -s 命令。系統會要求您輸入您的 gerrit 用戶名。請鍵入您的 Launchpad id 並按下 Enter 鍵。
第 5 步:OpenStack 工作流程演示
如果您發現了一個 OpenStack 問題,請將它注冊為一個 bug。如果想添加新功能,那麼請將它注冊為藍圖。您將要添加的修改應位於分支版本而不是主版本中。此外,不要在一個分支版本中混合多個 bug 修復或藍圖開發。下面的工作流程顯示了 Keystone 中 bug 修復的一個示例。
提交 Keystone 的 bug:
圖 7. 提交 Keystone 的 bug
訪問 https://launchpad.net/keystone。
單擊 Report a bug,然後輸入概要信息和所需的信息。
單擊 Submit bug report 按鈕。此 bug 具有一個鏈接:https://bugs.launchpad.net/keystone/+bug/1087674 和一個 bug 號:1087674。
在 Assigned to 列中將這個 bug 分配給你自己。
在 keystone 中為此 bug 創建一個分支(分支名稱 Bug1087674):
打開一個終端並轉到 keystone 目錄。
通過 git checkout master 確保 keystone 位於主版本中。
運行 git checkout -b Bug1087674 命令。
在分支 Bug1087674 中修改 keystone 代碼。
將該代碼提交給 Gerrit:
打開一個終端並轉到 keystone 目錄。
運行 git commit -a 命令。
輸入一些注釋。第一段應該是一句話的簡介;第二段可以是詳細說明(可選);如果此分支修復一個 bug 或一個藍圖,則添加 Fixes Bug1087674 或 Blueprint XXXX 作為最後一段。
運行 ctrl+o 命令,按下 Enter 鍵,然後運行 ctrl+x。
運行 git review。
檢查提交的修補程序:
圖 8. 已提交的修補程序的 Review 頁面
轉到 https://review.openstack.org 並使用您的 Launchpad 帳戶登錄。
從頂部水平導航器中,單擊 My > Changes,然後您可以找到您已提交的修補程序。
在此演示中,鏈接為 https://review.openstack.org/#/c/17673/。任何用戶都可以查看此修補程序。任何開發人員都可以給出注釋。
通常,這是提交修補程序的過程。但是如果某些開發人員添加了注釋並且您決定更改此分支,又該如何做呢?下面是一個選項:
打開一個終端並轉到 keystone 目錄。
通過 git checkout Bug1087674 轉到分支 Bug1087674。
對此分支進行進一步修改。
轉到 keystone 目錄。
運行 git commit -a –amend 命令。(不要運行 git commit -a,否則會有多個注釋提交給 Gerrit,建議不要這樣做。)
可能的話,請修改注釋。
運行 ctrl+o 命令,然後按 Enter 鍵並運行 ctrl+x。
運行 git review。
第二次提交此修補程序之後,鏈接 https://review.openstack.org/#/c/17673/ 中有兩個修補程序集,如圖 9 所示。
圖 9. 修補程序集的歷史記錄
此外,如果在您使用分支 Bug1087674 時主分支進行了更改,又會怎樣呢?下面是您可以執行的操作:
打開一個終端,並通過 git checkout master 轉到主分支。
使用 git pull origin master 更新該代碼。
通過 git checkout Bug1087674 切換回此分支。
通過 git rebase -i master 重構該代碼。
如果沒有沖突,則運行 git commit -a –amend 命令並運行 git review。
如果發生沖突,那麼終端會顯示有沖突的文件。
您還可以在 Eclipse 中查找沖突,因為有沖突的文件都標有紅色標記。
手動修復這些沖突。
繼續重構,git rebase —continue。
重構成功之後,運行 git commit -a –amend 命令和 git review。
⑺ 如何獲取openstack nova各版本源碼
完成了G版的openstack 多主機部署,再上面作計算節點的部署的時候,發現默認是用SimpleScheler這個演算法,該演算法的具體實現上哪找呢?
在Folsm版本中就已經廢棄了
如果你想獲取該演算法的源碼,請到launchpad上下載F版本之前(比如E版本)的nova源碼
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2010 Openstack, LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Simple Scheler
"""
from nova import db
from nova import flags
from nova import exception
from nova.scheler import driver
from nova.scheler import chance
FLAGS = flags.FLAGS
flags.DEFINE_integer("max_cores", 16,
"maximum number of instance cores to allow per host")
flags.DEFINE_integer("max_gigabytes", 10000,
"maximum number of volume gigabytes to allow per host")
flags.DEFINE_integer("max_networks", 1000,
"maximum number of networks to allow per host")
class SimpleScheler(chance.ChanceScheler):
"""Implements Naive Scheler that tries to find least loaded host."""
def _schele_instance(self, context, instance_opts, *_args, **_kwargs):
"""Picks a host that is up and has the fewest running instances."""
elevated = context.elevated()
availability_zone = instance_opts.get('availability_zone')
zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')
if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-compute')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
return host
results = db.service_get_all_compute_sorted(elevated)
if zone:
results = [(service, cores) for (service, cores) in results
if service['availability_zone'] == zone]
for result in results:
(service, instance_cores) = result
if instance_cores + instance_opts['vcpus'] > FLAGS.max_cores:
msg = _("All hosts have too many cores")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
return service['host']
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
def schele_run_instance(self, context, request_spec, *_args, **_kwargs):
num_instances = request_spec.get('num_instances', 1)
instances = []
for num in xrange(num_instances):
host = self._schele_instance(context,
request_spec['instance_properties'], *_args, **_kwargs)
instance_ref = self.create_instance_db_entry(context,
request_spec)
driver.cast_to_compute_host(context, host, 'run_instance',
instance_id=instance_ref['id'], **_kwargs)
instances.append(driver.encode_instance(instance_ref))
return instances
def schele_start_instance(self, context, instance_id, *_args, **_kwargs):
instance_ref = db.instance_get(context, instance_id)
host = self._schele_instance(context, instance_ref,
*_args, **_kwargs)
driver.cast_to_compute_host(context, host, 'start_instance',
instance_id=instance_id, **_kwargs)
def schele_create_volume(self, context, volume_id, *_args, **_kwargs):
"""Picks a host that is up and has the fewest volumes."""
elevated = context.elevated()
volume_ref = db.volume_get(context, volume_id)
availability_zone = volume_ref.get('availability_zone')
zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')
if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-volume')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
driver.cast_to_volume_host(context, host, 'create_volume',
volume_id=volume_id, **_kwargs)
return None
results = db.service_get_all_volume_sorted(elevated)
if zone:
results = [(service, gigs) for (service, gigs) in results
if service['availability_zone'] == zone]
for result in results:
(service, volume_gigabytes) = result
if volume_gigabytes + volume_ref['size'] > FLAGS.max_gigabytes:
msg = _("All hosts have too many gigabytes")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_volume_host(context, service['host'],
'create_volume', volume_id=volume_id, **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
def schele_set_network_host(self, context, *_args, **_kwargs):
"""Picks a host that is up and has the fewest networks."""
elevated = context.elevated()
results = db.service_get_all_network_sorted(elevated)
for result in results:
(service, instance_count) = result
if instance_count >= FLAGS.max_networks:
msg = _("All hosts have too many networks")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_network_host(context, service['host'],
'set_network_host', **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)
⑻ 如何獲取openstack nova各版本源碼
如果你想獲取該演算法的源碼,請到launchpad上下載F版本之前(比如E版本)的nova源碼
[python] view plain
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (c) 2010 Openstack, LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a of the License at