首页 > 其他分享 >openstacksdk快速上手

openstacksdk快速上手

时间:2023-01-28 00:55:05浏览次数:38  
标签:openstacksdk name create project openstack 快速 conn network

hello,大家好,这里是费冰,今天是大年初六,唉,这么早就被迫营业了。
那么今天来解读一波openstacksdk。

Openstacksdk是什么

其实我很难说明一个是什么的问题。如果你使用过python,了解过sdk的概念,那么openstack sdk对你应该很容易理解。这是一个封装好的工具包,里面有众多可以帮助我们操作 openstack的方法,有了sdk,一方面我们可以直接使用已封装的功能,这将节省大量的时间,另一方面我们可以基于sdk开发更高级的功能。
下面我将演示如何使用openstacksdk。

如何使用openstacksdk

概述

openstack对外提供几种不同的接口:

  • RESTful API
  • openstackclient
  • openstack SDKS

RESTful API已经介绍过,openstackclient就是openstack命令行,日常使用我们已经很熟悉了。
:::info

:::

安装

在使用之前,需要使用pip安装openstack

pip install openstacksdk

配置

openstacksdk在使用的时候,首先得完成和openstack进行认证的过程。openstacksdk提供了几种简便的认证方法。可以直接在连接时传入认证数据,也可以使用配置文件来提供认证数据,我将演示这两种方法。

clouds.yaml文件

如果使用配置文件的形式,那么你需要准备一个clouds.yaml文件,将这个文件放置在python文件同目录下,这个文件的内容如下:

clouds:
  zed:
    region_name: RegionOne
    auth:
      project_domain_name: Default
      user_domain_name: Default
      username: admin
      password: passwordadmin
      project_name: admin
      auth_url: http://192.168.10.25:5000

clouds.yaml文件的查找顺序是:

  • 本目录(python运行文件的目录)
  • ~/.config/openstack/目录
  • /etc/openstack/目录

直接传入认证数据

使用connect方法来创建一个连接,如下所示:

def create_connection(auth_url, region, project_name, username, password,
                      user_domain, project_domain):
    return openstack.connect(
        auth_url=auth_url,
        project_name=project_name,
        username=username,
        password=password,
        region_name=region,
        user_domain_name=user_domain,
        project_domain_name=project_domain,
    )

使用

完成openstack的配置之后,我们就可以很容易的使用openstacksdk来和openstack进行交互,这里我将演示如何编写python文件来创建一个云主机。
当然,在使用之前,还得有一个正常运行的openstack集群。
为了将代码完整展示,我在这里使用的是直接传入参数来定义的连接。

列出所有用户

示例如下:

import openstack
#定义连接函数,从参数中直接传入信息
def create_connection(auth_url, region, project_name, username, password, user_domain, project_domain):
  	return openstack.connect(
      	auth_url=auth_url,
      	roject_name=project_name,
        username=username,
        password=password,
        region_name=region,
        user_domain_name=user_domain,
        project_domain_name=project_domain,
    )

# 创建连接
conn = create_connection("http://192.168.10.25:5000","RegionOne","admin","admin","passwordadmin","Default","Default")

if __name__ == '__main__':
  	#列出所有用户
    for user in conn.list_users():
        print(user.to_dict())

观察这个示例我们发现,openstacksdk的使用比RESTful API简便了许多,这是因为sdk已经将api的操作封装好,我们只需要方便的拿出使用就可以了。
以上是一个列出所有用户的小例子。如果我们想要在openstack中创建一台云主机,那么可用的镜像,可用的网络,合适的云主机类型都是必须的。接下来我来演示如何创建这些资源。

镜像操作

注意,python文件中的定义连接函数和创建连接已省略,以下只列出主要代码段落。

列出镜像

for image in conn.list_images():
  	print(image)

创建镜像

def create_image(conn):
		# 镜像文件
    filename = 'G:\\cirros-0.5.1-x86_64-disk.img'

    # 创建镜像并上传镜像文件
    image_attrs = {
        'name': EXAMPLE_IMAGE_NAME,
        'filename': filename,
        'disk_format': 'raw',
        'container_format': 'bare',
        'visibility': 'public',
    }
    conn.create_image(**image_attrs)

网络操作

列出网络

def list_network(conn):
  	for network in conn.list_networks():
      	print(network)

列出子网

def list_subnet(conn):
  	for subnet in conn.list_subnets():
      	print(subnet)

列出路由器

def list_routers(conn):
  	for router in conn.list_routers():
      	print(router)

创建网络

def create_network(conn):
  	network = conn.create_network(name="example_network")
  	subnet = conn.create_subnet(
      	name='example-subnet',
        network_id=network.id,
        ip_version='4',
        cidr='10.0.2.0/24',
        gateway_ip='10.0.2.1')
  	print(network)

问题来了,如果我想要创建一个外部网络怎么办呢?
这里其实就比普通的网络创建多两个参数,示例如下:

def create_network(conn):
  	# 外部网络参数,必须和实际环境对应
		privoder = {'physical_network':'External','network_type':flat}
  	# 所属project_id
  	project_id=admin
		network = conn.create_network(name="example_network",provider=provider,project_id=project_id)
  	subnet = conn.create_subnet(
      	name='example-subnet',
        network_id=network.id,
        ip_version='4',
        cidr='10.0.2.0/24',
        gateway_ip='10.0.2.1')
  	print(network)

云主机操作

创建云主机类型

def create_flavor(conn)
  	flavor = conn.create_flavor(
      	name='example-flavor',
      	ram='1024',
      	vcpus='1',
      	disk='10',
      	flavorid="auto",
  	)
  	print(flavor)

列出云主机类型

def list_flavors(conn):
  	for flavor in conn.list_flavors():
      	print(flavor)

至此,我们已经拿到了创建云主机的所有必须资源,现在让我们试着创建云主机:

创建云主机

def create_server(conn):

    image = conn.get_image_id("cirros")
    flavor = conn.get_flavor("m1.tiny").id
    network = conn.get_network("network").id

    server = conn.compute.create_server(
        name=SERVER_NAME, image=image, flavor_id=flavor,
        network=network)

    server = conn.wait_for_server(server)
  	print(server)

总结

以上就是openstacksdk的一些常用操作了,openstack里有太多常用的操作,只有掌握其中规律,多做练习才能掌握。

标签:openstacksdk,name,create,project,openstack,快速,conn,network
From: https://www.cnblogs.com/feyncode/p/17069559.html

相关文章

  • Axios快速入门
    参考目录json-server:https://www.cnblogs.com/fly_dragon/p/9150732.html安装json-server新建文件夹json-server,使用cmd在目录下使用命令npminstall-gjson-server......
  • 快速幂c++
    是求(a^b)modp如果用暴力解法O(b)点击查看TLE代码c++#include<iostream>usingnamespacestd;intmain(){inta,b,p;longlongres=1;cin>>a>>b>......
  • 通过脚本实现Java程序在window系统中的快速启动和快速停止
    本文的目的是通过脚本实现Java程序在window系统中的快速启动和快速停止启动java程序前台方式启动java-jarxxx.jar登录后复制通过这种方式启动的缺点是需要保持cmd窗......
  • drf快速入门
     1.Web应用模式在开发Web应用中,有两种应用模式:1.前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。[前后端不分离](assets/depended_front......
  • 快速排序和归并排序
    快速排序:  归并排序:  注意分成两个区间时的+1和-1是写在哪里的。......
  • Laravel9+Vue+ElementUI后台快速开发框架
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • Laravel9+Vue+ElementUI快速搭建后台管理系统
    项目介绍一款PHP语言基于Laravel9.x、Vue、ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本......
  • 怎样才能快速成为优秀的程序员
    ​​http://www.itcast.cn/subject/czschool/index.shtml​​在国内,IT行业目前仍然属于新兴行业,整个社会的信息化也处在快速发展的过程中,从事软件开发,可以说是性价比最高的......
  • hdu:Kiki & Little Kiki 2(矩阵快速幂)
    ProblemDescriptionTherearenlightsinacirclenumberedfrom1ton.Theleftoflight1islightn,andtheleftoflightk(1<k<=n)isthelightk-1.A......
  • SparkSQL-第一章:SparkSQL快速入门
    Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!一、什么是SparkSQLSparkSQL是Spark的一个模块,......