版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
CLOUDCOMPUTING使用OpenStack的API接口
創(chuàng)建虛擬機實例OpenStack平臺對外提供API接口,認(rèn)證用戶通過接口可以訪問各個服務(wù)的功能。這些API具有統(tǒng)一的形式,均基于HTTP協(xié)議實現(xiàn)。OpenStackAPI服務(wù)進程在接收了客戶端的HTTPRequest請求之后,通過路由模塊將URL轉(zhuǎn)換成為相應(yīng)的資源,并路由到合適的操作方法,從而實現(xiàn)從API到具體操作的映射。本項目中,我們將學(xué)習(xí)訪問OpenStackAPI接口的基本方法,并通過OpenStackAPI接口創(chuàng)建云主機。項目十四云計算基礎(chǔ)架構(gòu)平臺應(yīng)用任務(wù):一訪問OpenStack的API接口二通過OpenStackAPI接口創(chuàng)建云主機任務(wù)一訪問OpenStack的API接口本任務(wù)將學(xué)習(xí)OpenStack的API調(diào)用方法涉及使用Python腳本調(diào)用API,重點是認(rèn)證令牌(Token)的獲取和使用,以及正確組裝發(fā)送HTTP請求的方法。通過練習(xí),可以學(xué)習(xí)如何使用Python腳本發(fā)送包含認(rèn)證令牌和相關(guān)操作信息的HTTP請求,并解析服務(wù)器返回的響應(yīng)以獲取所需的信息,從而實現(xiàn)對OpenStack的管理和操作。官網(wǎng)(/api-quick-start/)可以查詢OpenStack平臺的API接口,文檔中包含OpenStack各個服務(wù)對應(yīng)的API。官網(wǎng)文檔中使用命令行下的curl命令對API進行調(diào)用,從認(rèn)證到獲取image鏡像和servers云主機很詳細(xì),但是作為初學(xué)者會覺得直接使用curl命令很繁瑣。下面通過Python代碼使用requests類代替curl命令來實現(xiàn)OpenStackAPI的訪問,訪問過程更容易閱讀。訪問OpenStack的API接口OpenStack平臺API的訪問流程如下:訪問OpenStack的API接口(1)為了獲得對OpenStack服務(wù)的訪問許可,即獲得認(rèn)證令牌,首先需要向OpenStack認(rèn)證服務(wù)(Keystone)發(fā)送攜帶證書信息。(2)認(rèn)證服務(wù)根據(jù)用戶提交的認(rèn)證信息,生成并返回訪問OpenStack服務(wù)RESTAPI的認(rèn)證令牌(Token)。客戶端還能從認(rèn)證服務(wù)獲取其他服務(wù)的URL終端地址??蛻舳烁鶕?jù)URL終端地址向?qū)?yīng)OpenStack服務(wù)發(fā)送REST請求時,每次請求都需要在X-Auth-Token請求頭中提供自己的認(rèn)證令牌。由于要使用API的URL終端地址,所以首先需要登錄控制節(jié)點controller,使用如下命令來查看API的URL終端地址。命令中指定只查看“ServiceName”、“Enabled”和“URL”三個字段。訪問OpenStack的API接口openstackendpointlist-c"ServiceName"-c"Enabled"-c"URL"圖中列出了所有的API對應(yīng)的URL,下面代碼中將用到keystone的URL“http://controller:5000/v3”。下面編寫Python代碼,通過訪問OpenStackAPI接口獲得用戶信息,讀者重點要學(xué)會訪問API接口的基本流程,尤其是令牌的獲取。訪問OpenStack的API接口Python代碼的設(shè)計思路如下:(1)使用requests類獲取用戶的認(rèn)證令牌(2)利用認(rèn)證令牌組裝http請求的header(3)使用組裝的header和URL終端地址初始化用戶管理類(4)通過用戶管理類,訪問用戶信息,每次訪問都是需要攜帶header頭信息在工具VSC中,新建Python文件api_identity.py,編寫代碼如下所示。訪問OpenStack的API接口1importrequests,json2#獲取認(rèn)證令牌3defget_auth_token(controller_ip,domain,user,password):4try:5#設(shè)置URL6URL=f"http://{controller_ip}:5000/v3/auth/tokens"7#設(shè)置請求體body8body={9"auth":{10"identity":{11"methods":[12"password"13],訪問OpenStack的API接口14"password":{15"user":{16"domain":{17"name":domain18},19"name":user,20"password":password21}22}23},訪問OpenStack的API接口24"scope":{25"project":{26"domain":{27"name":domain28},29"name":user30}31}32}33}34#設(shè)置請求類型為application/json35headers={36"Content-Type":"application/json"37}38print(body)訪問OpenStack的API接口39#獲取令牌40token=requests.post(URL,data=json.dumps(body),headers=headers).headers['X-Subject-Token']41print(f"獲取Token值:{str(token)}")42#在后續(xù)的請求頭中設(shè)置令牌(toker)43headers={44"X-Auth-Token":token45}46returnheaders47exceptExceptionase:48print(f"獲取Token值失敗,請檢查訪問云主機控制節(jié)點IP是否正確?輸出錯誤信息如下:{str(e)}")49exit(0)訪問OpenStack的API接口50#用戶管理類,獲取用戶列表51classuser_manager:52def__init__(self,handers:dict,resURL:str):53self.headers=handers54self.resURL=resURL55#獲取所有用戶的列表5657defget_users(self):58status_code=requests.get(self.resURL,headers=self.headers).text59print(f"返回狀態(tài):{str(status_code)}")60returnstatus_code61訪問OpenStack的API接口62if__name__=='__main__':63#控制服務(wù)器的地址64controller_ip="0"65#用戶所在域66domain="demo"67#用戶名字68user="admin"69#用戶密碼70password="000000"71headers=get_auth_token(controller_ip,domain,user,password)72print("headers:",headers)73#獲取所有用戶的列表74user_m=user_manager(headers,f"http://{controller_ip}:5000/v3/users")75users=user_m.get_users()76print("查詢所有users:",users)訪問OpenStack的API接口運行上面的代碼,代碼能正常執(zhí)行,即證明python代碼能正確的獲取認(rèn)證令牌,并且能正確使用令牌訪問OpenStack平臺的服務(wù)。執(zhí)行結(jié)果如右圖所示。任務(wù)二通過OpenStackAPI接口創(chuàng)建云主機本任務(wù)中,將學(xué)習(xí)通過API接口創(chuàng)建云主機,重點在于使用Python通過HTTP請求發(fā)送正確的API調(diào)用。這包括構(gòu)造包含必要信息(如身份驗證令牌、操作類型、請求參數(shù)等)的HTTP請求,并解析服務(wù)器返回的HTTP響應(yīng)以獲取所需的信息。Python中可以使用requests庫來發(fā)送HTTP請求,并處理響應(yīng)以便創(chuàng)建和管理OpenStack云主機。程序的整體設(shè)計思路如下:(1)使用requests類獲取用戶的認(rèn)證令牌(2)利用認(rèn)證令牌組裝http請求的header(3)使用組裝的header和URL終端地址初始化云主機管理類(4)通過云主機管理類,訪問API接口創(chuàng)建云主機,每次訪問都是攜帶認(rèn)證信息的http請求通過OpenStackAPI接口創(chuàng)建云主機在VSC中,新建python文件api_compute.py,代碼如下所示。通過OpenStackAPI接口創(chuàng)建云主機1importrequests,json2#獲取認(rèn)證令牌3defget_auth_token(controller_ip,domain,user,password):4try:5#設(shè)置URL6URL=f"http://{controller_ip}:5000/v3/auth/tokens"7#根據(jù)openstack在線幫助文檔設(shè)置body體8body={9"auth":{10"identity":{11"methods":[12"password"13],通過OpenStackAPI接口創(chuàng)建云主機14"password":{15"user":{16"domain":{17"name":domain18},19"name":user,20"password":password21}22}23},通過OpenStackAPI接口創(chuàng)建云主機24"scope":{25"project":{26"domain":{27"name":domain28},29"name":user30}31}32}33}34#設(shè)置請求類型為application/json35headers={36"Content-Type":"application/json"37}38print(body)通過OpenStackAPI接口創(chuàng)建云主機39#獲取token40token=requests.post(URL,data=json.dumps(body),headers=headers).headers['X-Subject-Token']41print(f"獲取Token值:{str(token)}")42#在請求頭中設(shè)置令牌(token)43headers={44"X-Auth-Token":token45}46returnheaders47exceptExceptionase:48print(f"獲取Token值失敗,請檢查訪問云主機控制節(jié)點IP是否正確?輸出錯誤信息如下:{str(e)}")49exit(0)通過OpenStackAPI接口創(chuàng)建云主機50#云主機管理類51classserver_manager:52def__init__(self,handers:dict,resURL:str):53self.headers=handers54self.resURL=resURL55通過OpenStackAPI接口創(chuàng)建云主機56#必須內(nèi)容name、flavorRef、networks、imageRef57defcreate_server(self,server_name:str,imageRef,flavorRef,networks_id):58body={59"server":{60"name":server_name,61"flavorRef":flavorRef,62"imageRef":imageRef,63"networks":[{64"uuid":networks_id65}],66}67}68response=requests.post(self.resURL,data=json.dumps(body),headers=self.headers)69print(response.status_code)70ifresponse.status_code==202:71return{"serverItemCreatedSuccess":response.status_code}72returnresponse.text73通過OpenStackAPI接口創(chuàng)建云主機74defget_servers(self):75status_code=requests.get(self.resURL,headers=self.headers).text76print(f"返回狀態(tài):{str(status_code)}")77returnstatus_code78通過OpenStackAPI接口創(chuàng)建云主機79if__name__=='__main__':80#控制服務(wù)器的地址81controller_ip="0"82#用戶所在域83domain="demo"84#用戶名字85user="admin"86#用戶密碼87password="000000"88#獲取包含認(rèn)證令牌的http頭信息89headers=get_auth_token(controller_ip,domain,user,password)90print("headers:",headers)91#創(chuàng)建主機管理對象,URL地址來源于之前執(zhí)行的openstackEndPointlist和openstack在線文檔92server_m=server_manager(headers,f"http://{controller_ip}:8774/v2.1/servers")93#查詢所有云主機94servers=server_m.get_servers()95print("查詢所有servers:",servers)通過OpenStackAPI接口創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電信考試真題及答案
- 會計初級考試試題及答案
- 2025年反洗錢考試題庫附全部答案
- 醫(yī)院合同考試試題及答案
- 檔案管理模擬試題及答案
- 初中電學(xué)實驗試題及答案
- 中共涼山州委辦公室2025年面向全州公開考調(diào)公務(wù)員的(3人)考試備考題庫附答案
- 中國農(nóng)業(yè)科學(xué)院2026年度第一批統(tǒng)一公開招聘備考題庫附答案
- 九江市贛北勞動保障事務(wù)代理所招聘勞務(wù)派遣制員工備考題庫必考題
- 北京市豐臺區(qū)北宮鎮(zhèn)社區(qū)衛(wèi)生服務(wù)中心招聘3人一考試備考題庫必考題
- 工程勘察設(shè)計行業(yè)質(zhì)量管理體系
- 復(fù)方蒲公英注射液對心血管系統(tǒng)作用研究
- 2021-2022學(xué)年浙江省寧波市鎮(zhèn)海區(qū)蛟川書院八年級(上)期末數(shù)學(xué)試卷(附答案詳解)
- (新版)老年人能力評估師理論考試復(fù)習(xí)題庫(含答案)
- 光纖激光打標(biāo)機說明書
- 治理現(xiàn)代化下的高校合同管理
- 境外宗教滲透與云南邊疆民族地區(qū)意識形態(tài)安全研究
- GB/T 33365-2016鋼筋混凝土用鋼筋焊接網(wǎng)試驗方法
- GB/T 28920-2012教學(xué)實驗用危險固體、液體的使用與保管
- ARDS患者的護理查房課件
- 人大企業(yè)經(jīng)濟學(xué)考研真題-802經(jīng)濟學(xué)綜合歷年真題重點
評論
0/150
提交評論