基于Python開(kāi)發(fā)云主機(jī)類型管理腳本分享
開(kāi)發(fā)flavor_manager.py程序,來(lái)完成云主機(jī)類型管理的相關(guān)操作。
該文件擁有以下功能:
- 根據(jù)命令行參數(shù),創(chuàng)建一個(gè)云主機(jī)類型,返回response。
- 查詢admin賬戶下所有的云主機(jī)類型
- 查詢給定具體名稱的云主機(jī)類型
- 支持刪除指定的id云主機(jī)類型
操作并不復(fù)雜,程序也相對(duì)較簡(jiǎn)單,大致分為兩大部分
一,解析傳入的參數(shù),將參數(shù)轉(zhuǎn)化為程序使用的變量
二,通過(guò)openstacksdk,使用獲得的變量完成相應(yīng)行為。
基礎(chǔ)
首先構(gòu)建我們的程序主題,肯定是需要argparse模塊,那么我們先把a(bǔ)rgparse模塊添加進(jìn)我們的程序。
import argparse ? parse = argparse.ArgumentParser() args = parse.parse_args()
這做不了什么,也不能滿足題目的要求,所以我做出改變,既然我們需要讓程序擁有四種功能,那肯定要寫出四個(gè)相應(yīng)的實(shí)現(xiàn)方法,而參數(shù)解析是必須的,那么我們需要這樣一個(gè)操作,當(dāng)我們首先解析出需要的操作時(shí),就進(jìn)行反饋,將繼續(xù)的參數(shù)解析到相應(yīng)的功能里,這樣就把四種功能分開(kāi),整個(gè)程序會(huì)變得很整潔。
創(chuàng)建解析對(duì)象
再回來(lái)看看題目,四種功能使用位置參數(shù)來(lái)分別區(qū)分,既然如此,我們第一個(gè)參數(shù)就設(shè)置為 option ,用來(lái)識(shí)別程序需要完成的功能,之后將帶入相應(yīng)的解析中,并調(diào)取需要的程序來(lái)完成相應(yīng)的行為。
整體思路就是這樣,可能你還沒(méi)跟上。那么讓我來(lái)演示第一步的解析:
import argparse
?
parse = argparse.ArgumentParser()
parse.add_argument('option')
?
if __name__ == '__main__':
args = parse.parse_args()
print(args.option)
可以預(yù)見(jiàn),這一步后,程序中被添加進(jìn)了一個(gè)必須的參數(shù),也就是我們需要的位置參數(shù),如果你輸入 create,那么程序中的args.option就設(shè)置為create,諸如此類,getall ,get,delete。也就很好區(qū)分了,接下來(lái)我們需要一個(gè)判斷,在不同的判斷中,我們讀入不同的參數(shù)。
解析位置參數(shù)
還是一步一步來(lái)吧,我們先以create為例:
import argparse
?
parse = argparse.ArgumentParser()
parse.add_argument('option')
parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')
parse.add_argument('-m', '--ram', type=int, metavar='size-mb', default=256, help='Memory size in MB (DEFAULT 256M)')
parse.add_argument('-v', '--vcpus', type=int, metavar='vcpus', default=1, help='Number of vcpus (default 1)')
parse.add_argument('-d', '--disk', type=int, metavar='size-gb', default=0, help='Disk size in GB (default 0G)')
parse.add_argument('-id', '--id', type=str, metavar='id', default='auto', help='Unique flavor ID')
?
if __name__ == '__main__':
args = parse.parse_args()
if args.option == 'create':
print("i will create new flavor")
可以看到,我已經(jīng)把create這個(gè)行為剝離開(kāi)來(lái),接下來(lái)想必你已經(jīng)知道我要做什么了。讓我們把四種功能補(bǔ)全看看。
解析可選參數(shù)
import argparse
?
parse = argparse.ArgumentParser()
parse.add_argument('option')
parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')
parse.add_argument('-m', '--ram', type=int, metavar='size-mb', default=256, help='Memory size in MB (DEFAULT 256M)')
parse.add_argument('-v', '--vcpus', type=int, metavar='vcpus', default=1, help='Number of vcpus (default 1)')
parse.add_argument('-d', '--disk', type=int, metavar='size-gb', default=0, help='Disk size in GB (default 0G)')
parse.add_argument('-id', '--id', type=str, metavar='id', default='auto', help='Unique flavor ID')
?
if __name__ == '__main__':
args = parse.parse_args()
if args.option == 'create':
print("i will create new flavor")
if args.option == 'getall':
print("i will inquire all flavor")
if args.option == 'get':
print("i will get flavor by id")
if args.option == 'delete':
print("i will delete flavor by id")
很顯然,我還沒(méi)有把具體實(shí)現(xiàn)填入,僅僅只是更改了輸出用以區(qū)分,檢查一下我們是否解析了所有的參數(shù)。
填入程序主體
因?yàn)榻酉聛?lái)我要將實(shí)現(xiàn)填入了,這是程序中較為重要的一步。
- -n指定flavor名稱,數(shù)據(jù)類型為字符串
- -m指定內(nèi)存大小,數(shù)據(jù)類型為int,單位M
- -v指定虛擬cpu個(gè)數(shù),數(shù)據(jù)類型為int
- -d指定磁盤大小,內(nèi)存大小類型為int,單位G
- -id指定id,類型為字符串
在程序中我們已經(jīng)做到了這些參數(shù)的解析,那么我們先填入create的實(shí)現(xiàn),程序變成了下面這樣。
import argparse
import opentack
?
parse = argparse.ArgumentParser()
parse.add_argument('option')
parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')
parse.add_argument('-m', '--ram', type=int, metavar='size-mb', default=256, help='Memory size in MB (DEFAULT 256M)')
parse.add_argument('-v', '--vcpus', type=int, metavar='vcpus', default=1, help='Number of vcpus (default 1)')
parse.add_argument('-d', '--disk', type=int, metavar='size-gb', default=0, help='Disk size in GB (default 0G)')
parse.add_argument('-id', '--id', type=str, metavar='id', default='auto', help='Unique flavor ID')
?
conn = opentack.connect(
auth_url='http://192.168.10.25:5000',
username='admin',
password='passwordadmin',
project_name='admin',
project_domain_name='Default',
)
?
?
def create_flavor(name, ram, vcpus, disk, flavorid):
response = conn.create_flavor(name, ram, vcpus, disk, flavorid=flavorid)
return response
?
?
if __name__ == '__main__':
args = parse.parse_args()
if args.option == 'create':
print(create_flavor(name=args.name, ram=args.ram, vcpus=args.vcpus, disk=args.disk, flavorid=args.id))
if args.option == 'getall':
print("i will inquire all flavor")
if args.option == 'get':
print("i will get flavor by id")
if args.option == 'delete':
print("i will delete flavor by id")
我希望你還能看懂,在這一步,我導(dǎo)入了openstack這個(gè)包,我創(chuàng)建了一個(gè)連接對(duì)象conn,這樣我就能操作openstack,我寫入了一個(gè)方法create_flavor并指定了它可以傳入的參數(shù),當(dāng)option讀入create時(shí),將會(huì)調(diào)用這個(gè)方法,并傳入相應(yīng)的參數(shù)。由方法中的連接對(duì)象調(diào)取create_flaovr方法來(lái)完成最后的創(chuàng)建,完成后,這個(gè)方法將response返回并打印到終端。
我將運(yùn)行的結(jié)果貼在下方:
(venv) PS D:\Python> python .\demo3.py create -n flavor_small -m 1024 -v 1 -d 10 -id 100000
openstack.compute.v2.flavor.Flavor(disk=10, OS-FLV-EXT-DATA:ephemeral=0, id=100000, os-flavor-access:is_public=True, name=flavor_small, ram=1024, rxtx_factor=1.0, swap=, vcpus=1, description=None, OS-FLV-DISABLED:disabled=False, extra_specs={}, location=Munch({'cloud': 'zed', 'region_name': '', 'zone': None, 'project': Munch({'id': '80074c3b4d09419e87ba0b8c05ce5164', 'name': 'admin', 'domain_id': None, 'domain_name': 'Default'})}))
很明顯,這是一個(gè)正確的輸出,如此,我就不廢話了,將所有功能快速的填入,只需要根據(jù)功能創(chuàng)建剩余的三個(gè)方法即可。
import argparse
import openstack
?
parse = argparse.ArgumentParser()
parse.add_argument('option')
parse.add_argument('-n', '--name', type=str, metavar='name', help='New flavor name')
parse.add_argument('-m', '--ram', type=int, metavar='size-mb', default=256, help='Memory size in MB (DEFAULT 256M)')
parse.add_argument('-v', '--vcpus', type=int, metavar='vcpus', default=1, help='Number of vcpus (default 1)')
parse.add_argument('-d', '--disk', type=int, metavar='size-gb', default=0, help='Disk size in GB (default 0G)')
parse.add_argument('-id', '--id', type=str, metavar='id', default='auto', help='Unique flavor ID')
?
conn = openstack.connect(
auth_url='http://192.168.10.25:5000',
username='admin',
password='passwordadmin',
project_name='admin',
project_domain_name='Default',
)
?
?
def create_flavor(name, ram, vcpus, disk, flavorid):
response = conn.create_flavor(name, ram, vcpus, disk, flavorid=flavorid)
return response
?
def getall_flavor():
response = conn.list_flavors()
return response
?
def get_flavor(id):
response = conn.get_flavor_by_id(id)
return response
?
def delete_flavor(id):
response = conn.delete_flavor(id)
return response
if __name__ == '__main__':
args = parse.parse_args()
if args.option == 'create':
print(create_flavor(args.name, args.ram, args.vcpus, args.disk, args.id))
if args.option == 'getall':
print(getall_flavor())
if args.option == 'get':
print(get_flavor(args.id))
if args.option == 'delete':
print(delete_flavor(args.id))
總結(jié)
到這里整個(gè)命令行腳本就大體完成了,如果需要?jiǎng)e的改動(dòng),只需要按照這個(gè)思路修改就可以了。更多的argparse模塊的使用可以參照官方文檔的解析,非常詳細(xì),而且配有非常多的案例,當(dāng)然,這太麻煩了,我找到了一個(gè)寫的很不錯(cuò)的文檔推薦給大家,我自己寫的就太糟糕了。
以上就是基于Python開(kāi)發(fā)云主機(jī)類型管理腳本分享的詳細(xì)內(nèi)容,更多關(guān)于Python云主機(jī)管理腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
6個(gè)實(shí)用的Python自動(dòng)化腳本詳解
每天你都可能會(huì)執(zhí)行許多重復(fù)的任務(wù),例如閱讀 pdf、播放音樂(lè)、查看天氣、打開(kāi)書簽、清理文件夾等等,使用自動(dòng)化腳本,就無(wú)需手動(dòng)一次又一次地完成這些任務(wù),非常方便。快跟隨小編一起試一試吧2022-01-01
在python中使用with打開(kāi)多個(gè)文件的方法
今天小編就為大家分享一篇在python中使用with打開(kāi)多個(gè)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
解決項(xiàng)目pycharm能運(yùn)行,在終端卻無(wú)法運(yùn)行的問(wèn)題
今天小編就為大家分享一篇解決項(xiàng)目pycharm能運(yùn)行,在終端卻無(wú)法運(yùn)行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python使用matplotlib庫(kù)生成隨機(jī)漫步圖
這篇文章主要為大家詳細(xì)介紹了使用Python的matplotlib庫(kù)生成隨機(jī)漫步圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
python去除字符串中的空格、特殊字符和指定字符的三種方法
本文主要介紹了python去除字符串中的空格、特殊字符和指定字符的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
基于Python實(shí)現(xiàn)Word文檔與SVG格式的相互轉(zhuǎn)換
Word和SVG是兩種常見(jiàn)的文件格式,各自有不同的應(yīng)用場(chǎng)景,在實(shí)際應(yīng)用中,我們可能需要將Word文檔內(nèi)容轉(zhuǎn)換為SVG圖形用于網(wǎng)頁(yè)展示,或者將 SVG圖形嵌入到Word文檔中進(jìn)行編輯和排版,這篇博客將探討如何使用Python實(shí)現(xiàn)Word與SVG 格式的相互轉(zhuǎn)換,需要的朋友可以參考下2025-02-02
Pytorch使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)CIFAR10圖片進(jìn)行分類方式
這篇文章主要介紹了Pytorch使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)CIFAR10圖片進(jìn)行分類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
python實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
在Pytorch中自定義dataset讀取數(shù)據(jù)的實(shí)現(xiàn)代碼
這篇文章給大家介紹了如何在Pytorch中自定義dataset讀取數(shù)據(jù),文中給出了詳細(xì)的圖文介紹和代碼講解,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12

