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快速上手的更多相关文章

  1. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  2. 快速上手Unity原生Json库

    现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...

  3. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

  4. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  5. 快速上手seajs——简单易用Seajs

    快速上手seajs——简单易用Seajs   原文  http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...

  6. Git版本控制Windows版快速上手

    说到版本控制,之前用过VSS,SVN,Git接触不久,感觉用着还行.写篇博文给大家分享一下使用Git的小经验,让大家对Git快速上手. 说白了Git就是一个控制版本的工具,其实没想象中的那么复杂,咱在 ...

  7. Objective-C快速上手

    最近在开发iOS程序,这篇博文的内容是刚学习Objective-C时做的笔记,力图达到用最短的时间了解OC并使用OC.Objective-C是OS X 和 iOS平台上面的主要编程语言,它是C语言的超 ...

  8. Netron开发快速上手(二):Netron序列化

    Netron是一个C#开源图形库,可以帮助开发人员开发出类似Visio的作图软件.本文继前文”Netron开发快速上手(一)“讨论如何利用Netron里的序列化功能快速保存自己开发的图形对象. 一个用 ...

  9. Netron开发快速上手(一):GraphControl,Shape,Connector和Connection

    版权所有,引用请注明出处:<<http://www.cnblogs.com/dragon/p/5203663.html >> 本文所用示例下载FlowChart.zip 一个用 ...

  10. NHibernate3快速上手教程FluentNHibernate配置与DBHelper

    很多学习NHibernate的新手很容易卡在配置文件这一关,正所谓万事开头难,上手后再配合官方文档就比较容易了. 网上关于配置文件的资料非常多,但由于版本的问题,许多老的教程中都没有明确指出类库的版本 ...

随机推荐

  1. Codeforces Round #811 (Div. 3)D. Color with Occurrences

    题目大意:给出一个文章t和n个字符串s1,s2...sn: 问能否用这n个字符串将整个文章覆盖: 思路:贪心(最小区间覆盖) 记录每个字符串能够覆盖的所有位置(起点,终点,编号) 排序后贪心的求出是否 ...

  2. 【网络】内网穿透方案&FRP内网穿透实战(基础版)

    目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...

  3. 版本控制工具Git介绍-01

    使用版本控制工具是为了方便团队开发,比如多人共同维护一个项目的时候,用版本控制工具可以很方便的维护项目代码,如果哪天你改了一个版本,出问题了,我们也可以很快的找到你改了什么,这里介绍使用比较多的版本控 ...

  4. 元数据Metadata到底有什么用

    什么是元数据 元数据Metadata很简单,是关于数据的数据.这就意味着是数据的描述和上下文.他有助于组织和发现理解数据. 举例: 1张照片中除了照片本身还是,照片的时间日期,大小,格式相机设置,地理 ...

  5. 微信小程序的学习(一)

    一.小程序简介 1.小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API不同 小程序无法调用浏览器中的DOM和BOM的API 但是小程序可以调用微信环境提供 ...

  6. laravel 腾讯云短信发送

    public function tecentSms(Request $request) { $phone = $request->input("hiphone"); $app ...

  7. Go语言核心36讲31

    我们在前两篇文章中讨论了互斥锁.读写锁以及基于它们的条件变量,先来总结一下. 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的goroutine只有一个.读写锁对共享资源的写操作和读操作则 ...

  8. TortoiseGit间接处理linux目录下的仓库,用到window映射linux目录方案

    原始需求 习惯用TortoiseGit查看git仓库信息和历史日志,但这个工具只支持window,我希望linux也能用 虽然有其他linux的GUI的git工具,但我用到的linux基本都是无界面版 ...

  9. 谷歌、微软、Meta?谁才是 Python 最大的金主?

    你知道维护 Python 这个大规模的开源项目,每年需要多少资金吗? 答案是:约 200 万美元! PSF(Python 软件基金会)在 2022 年 6 月发布了 2021 的年度报告,其中披露了以 ...

  10. 解决manjaro无法连接github问题

    修改/etc/hosts文件 1.查看连接ip地址: https://ping.chinaz.com 2.在hosts文件下增加: vim /etc/hosts 需要管理员权限 140.82.113. ...