基于Python开发云主机类型管理脚本分享

 更新时间:2023年02月01日 09:00:12   作者:cloudfeyn费冰  
这篇文章主要为大家详细介绍了如何基于Python开发一个云主机类型管理脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

开发flavor_manager.py程序,来完成云主机类型管理的相关操作。

该文件拥有以下功能:

  • 根据命令行参数,创建一个云主机类型,返回response。
  • 查询admin账户下所有的云主机类型
  • 查询给定具体名称的云主机类型
  • 支持删除指定的id云主机类型

操作并不复杂,程序也相对较简单,大致分为两大部分

一,解析传入的参数,将参数转化为程序使用的变量

二,通过openstacksdk,使用获得的变量完成相应行为。

基础

首先构建我们的程序主题,肯定是需要argparse模块,那么我们先把argparse模块添加进我们的程序。

 import argparse
 ​
 parse = argparse.ArgumentParser()
 args = parse.parse_args()

这做不了什么,也不能满足题目的要求,所以我做出改变,既然我们需要让程序拥有四种功能,那肯定要写出四个相应的实现方法,而参数解析是必须的,那么我们需要这样一个操作,当我们首先解析出需要的操作时,就进行反馈,将继续的参数解析到相应的功能里,这样就把四种功能分开,整个程序会变得很整洁。

创建解析对象

再回来看看题目,四种功能使用位置参数来分别区分,既然如此,我们第一个参数就设置为 option ,用来识别程序需要完成的功能,之后将带入相应的解析中,并调取需要的程序来完成相应的行为。

整体思路就是这样,可能你还没跟上。那么让我来演示第一步的解析:

 import argparse
 ​
 parse = argparse.ArgumentParser()
 parse.add_argument('option')
 ​
 if __name__ == '__main__':
     args = parse.parse_args()
     print(args.option)

可以预见,这一步后,程序中被添加进了一个必须的参数,也就是我们需要的位置参数,如果你输入 create,那么程序中的args.option就设置为create,诸如此类,getall ,get,delete。也就很好区分了,接下来我们需要一个判断,在不同的判断中,我们读入不同的参数。

解析位置参数

还是一步一步来吧,我们先以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")

可以看到,我已经把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")
     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")

很显然,我还没有把具体实现填入,仅仅只是更改了输出用以区分,检查一下我们是否解析了所有的参数。

填入程序主体

因为接下来我要将实现填入了,这是程序中较为重要的一步。

  • -n指定flavor名称,数据类型为字符串
  • -m指定内存大小,数据类型为int,单位M
  • -v指定虚拟cpu个数,数据类型为int
  • -d指定磁盘大小,内存大小类型为int,单位G
  • -id指定id,类型为字符串

在程序中我们已经做到了这些参数的解析,那么我们先填入create的实现,程序变成了下面这样。

 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")

我希望你还能看懂,在这一步,我导入了openstack这个包,我创建了一个连接对象conn,这样我就能操作openstack,我写入了一个方法create_flavor并指定了它可以传入的参数,当option读入create时,将会调用这个方法,并传入相应的参数。由方法中的连接对象调取create_flaovr方法来完成最后的创建,完成后,这个方法将response返回并打印到终端。

我将运行的结果贴在下方:

 (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'})}))

很明显,这是一个正确的输出,如此,我就不废话了,将所有功能快速的填入,只需要根据功能创建剩余的三个方法即可。

 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))

总结

到这里整个命令行脚本就大体完成了,如果需要别的改动,只需要按照这个思路修改就可以了。更多的argparse模块的使用可以参照官方文档的解析,非常详细,而且配有非常多的案例,当然,这太麻烦了,我找到了一个写的很不错的文档推荐给大家,我自己写的就太糟糕了。

以上就是基于Python开发云主机类型管理脚本分享的详细内容,更多关于Python云主机管理脚本的资料请关注脚本之家其它相关文章!

相关文章

  • Python堆栈的具体使用

    Python堆栈的具体使用

    本文主要介绍了Python堆栈的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 6个实用的Python自动化脚本详解

    6个实用的Python自动化脚本详解

    每天你都可能会执行许多重复的任务,例如阅读 pdf、播放音乐、查看天气、打开书签、清理文件夹等等,使用自动化脚本,就无需手动一次又一次地完成这些任务,非常方便。快跟随小编一起试一试吧
    2022-01-01
  • 在python中使用with打开多个文件的方法

    在python中使用with打开多个文件的方法

    今天小编就为大家分享一篇在python中使用with打开多个文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 解决项目pycharm能运行,在终端却无法运行的问题

    解决项目pycharm能运行,在终端却无法运行的问题

    今天小编就为大家分享一篇解决项目pycharm能运行,在终端却无法运行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python使用matplotlib库生成随机漫步图

    python使用matplotlib库生成随机漫步图

    这篇文章主要为大家详细介绍了使用Python的matplotlib库生成随机漫步图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • python去除字符串中的空格、特殊字符和指定字符的三种方法

    python去除字符串中的空格、特殊字符和指定字符的三种方法

    本文主要介绍了python去除字符串中的空格、特殊字符和指定字符的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 基于Python实现Word文档与SVG格式的相互转换

    基于Python实现Word文档与SVG格式的相互转换

    Word和SVG是两种常见的文件格式,各自有不同的应用场景,在实际应用中,我们可能需要将Word文档内容转换为SVG图形用于网页展示,或者将 SVG图形嵌入到Word文档中进行编辑和排版,这篇博客将探讨如何使用Python实现Word与SVG 格式的相互转换,需要的朋友可以参考下
    2025-02-02
  • Pytorch使用卷积神经网络对CIFAR10图片进行分类方式

    Pytorch使用卷积神经网络对CIFAR10图片进行分类方式

    这篇文章主要介绍了Pytorch使用卷积神经网络对CIFAR10图片进行分类方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python实现简单飞机大战小游戏

    python实现简单飞机大战小游戏

    这篇文章主要为大家详细介绍了python实现简单飞机大战小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 在Pytorch中自定义dataset读取数据的实现代码

    在Pytorch中自定义dataset读取数据的实现代码

    这篇文章给大家介绍了如何在Pytorch中自定义dataset读取数据,文中给出了详细的图文介绍和代码讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12

最新评论