由于Openstack更新很快,现在准备搭建基于Queen版本的Openstack,Queen版本要求keystone版本为V3,所以之前大多数接口都不能用了,百度了一下都没有比较新的实例,官方文档又过于简单。所以简单总结下各客户端的调用方式,非常简单的案例,仅供参考。

1 前期准备

1确保已经安装了python

2根据需求安装openstack相关服务调用的python库

pip install python-openstackclient

确保版本大于3.0.0,所有服务调用都基于keystone,一定要安装

pip install python-keystoneclient
pip install python-heatclient
pip install python-glanceclient
pip install python-novaclient
pip install python-neutronclient

3如果安装的openstack的所有的入口ip都映射为controller,我们就需要在本机的/etc/hosts中也加一条映射

<ip> controller

2 获取客户端连接

1创建keystone session :最近版本的openstack所有服务都只能keystone v3版本才能调用,并且推荐session的方式。

from keystoneauth1.identity import v3
from keystoneauth1 import session def get_keystone_session():
# auth_url为keystone的endpoint入口,新版本openstack中(Tenant租户改名为project)
auth = v3.Password(auth_url="http://<ip>:5000/v3", username="",password="", project_name="",user_domain_id="", project_domain_id="")
sess = session.Session(auth=auth)
return sess

2获取keystone客户端

from keystoneclient.v3 import client as keyclient

def get_keystone_client():
sess = get_keystone_session()
keystone = keyclient.Client(session=sess)
return keystone

3获取nova客户端

from novaclient import client

def get_nova_client():
sess = get_keystone_session()
nova = client.Client(2, session=sess)
return nova

4获取glance客户端

from glanceclient import Client

def get_glance_client():
sess = get_keystone_session()
glance = Client('2', session=sess)
return glance

5获取neutron客户端

from neutronclient.v2_0 import client as ntclient

def get_neutron_client():
sess = get_keystone_session()
neutron = ntclient.Client(session=sess)
return neutron

6获取heat客户端

heat客户端的获取比较复杂,尝试了多种方式发现只能通过keystone客户端返回的token的认证

from heatclient import client as hclient

def get_heat_client():
creds = {}
creds['username'] = ''
creds['password'] = ''
creds['auth_url'] = 'http://<ip>:5000/v3'
creds['project_name'] = ''
ks_client = keyclient.Client(**creds)
heat_endpoint = ks_client.service_catalog.url_for(service_type='orchestration', endpoint_type='publicURL')
# 后来需求Heat服务单独改为HTTPS,可以在以下参数中加入 insecure=True
heat = hclient.Client('1', heat_endpoint, token=ks_client.auth_token)
return heat

3简单测试

之前的获取客户端方式写在openstackapi.py中方便调用

1keystone

import openstackapi as api

keystone = api.get_keystone_client()
list = keystone.projects.list()
for p in list:
print p

2nova

python-novaclient8之后network被移除,应该用neutron代替

import openstackapi as api

def nova_create_flavor(nova, instance_name):
nova.servers.create(instance_name) def show_server_info(nova):
instances = nova.servers.list()
for instance in instances:
print instance def show_flavor_info(nova):
flavors = nova.flavors.list()
for flavor in flavors:
print flavor def get_instance_id(nova, instance_name):
instances = nova.servers.list()
for instance in instances:
if instance.name == instance_name:
return instance.id def get_instance(nova, instance_id):
return nova.servers.get(instance_id) def get_flavor_id(nova, flavor_name):
flavors = nova.flavors.list()
for flavor in flavors:
if flavor.name == flavor_name:
return flavor.id if __name__ == '__main__':
nova = api.get_nova_client()
show_server_info(nova)
show_flavor_info(nova)
id = get_instance_id(nova, <name>)
print id
instance = get_instance(nova,id)
print '################################'
print instance

3glance

创建上传qcow2镜像,删除镜像

import openstackapi as api

def list_image():
list = glance.images.list()
for image in list:
print image.name, image.id, image.status def get_id_by_name(name):
list = glance.images.list()
id = ''
for image in list:
if image.name == name:
id = image.id
return id if __name__ == "__main__":
glance = api.get_glance_client()
print '####### list #########'
list_image()
name = "test-py-api"
glance.images.create(name=name, disk_format="qcow2", container_format="bare", is_public="true")
print '####### list after create #########'
list = list_image()
id = get_id_by_name(name)
glance.images.upload(id , open('/目录/***.qcow2', 'rb'))
print '####### list after upload qcow2 #########'
list_image()
glance.images.delete(id)
print '####### list after delete qcow2 #########'
list_image()

4neutron

import openstackapi as api

def show_network_info(neutron):
print ' #### network list ####'
networks = neutron.list_networks()
for network in networks:
print network if __name__ == '__main__':
neutron = api.get_neutron_client()
show_network_info(neutron)

5heat

首先写好一个heat编排模板,然后通过接口上传并且自动执行编排

import openstackapi as api
from heatclient.common import template_utils def get_heat_file():
path = "/目录/***.yaml"
tpl_files, template = template_utils.get_template_contents(path)
create_fields = {
'stack_name': '',
'disable_rollback': 'false',
'parameters': '',
'template': template,
'files': dict(list(tpl_files.items()))
}
return create_fields def list_stack(heat):
list = heat.stacks.list()
for stack in list:
print stack if __name__ == "__main__":
heat = api.get_heat_client()
create_fields = get_heat_file()
heat.stacks.create(**create_fields)
list_stack(heat)

4接口汇总

from keystoneauth1.identity import v3
from keystoneauth1 import session
from keystoneauth1 import loading
from keystoneclient.v3 import client as keyclient
from glanceclient import Client
from novaclient import client
from neutronclient.v2_0 import client as ntclient
from heatclient import client as hclient def get_keystone_session():
loader = loading.get_plugin_loader('password')
auth = v3.Password(auth_url="http://<Openstack Controller Ip>:5000/v3", username="admin",password="<pwd>", project_name="admin",user_domain_id="default", project_domain_id="default")
sess = session.Session(auth=auth)
return sess def get_nova_client():
sess = get_keystone_session()
nova = client.Client(2, session=sess)
return nova def get_glance_client():
sess = get_keystone_session()
glance = Client('2', session=sess)
return glance def get_keystone_client():
sess = get_keystone_session()
keystone = keyclient.Client(session=sess)
return keystone def get_neutron_client():
sess = get_keystone_session()
neutron = ntclient.Client(session=sess)
return neutron def get_heat_client():
creds = {}
creds['username'] = 'admin'
creds['password'] = 'admin1234'
creds['auth_url'] = 'http://<Openstack Controller Ip>:5000/v3'
creds['project_name'] = 'admin'
ks_client = keyclient.Client(**creds)
heat_endpoint = ks_client.service_catalog.url_for(service_type='orchestration', endpoint_type='publicURL')
heat = hclient.Client('1', heat_endpoint, token=ks_client.auth_token)
return heat def list_images():
glance = get_glance_client()
list = glance.images.list()
return list def show_images():
list = list_images()
for image in list:
print image.name, image.id, image.status def get_image_id_by_name(image_name):
list = list_images()
id = ''
for image in list:
if image.name == image_name:
id = image.id
return id
return id def upload_image(image_name, image_path):
glance = get_glance_client()
glance.images.create(name=image_name, disk_format="qcow2", container_format="bare", is_public="true")
id = get_image_id_by_name(image_name)
glance.images.upload(id , open(image_path, 'rb')) def delete_image(image_name):
glance = get_glance_client()
id = get_image_id_by_name(image_name)
if id != '':
glance.images.delete(id)

Python调用 Openstack 主要服务(keystone,nova,glance,neutron,heat)的更多相关文章

  1. python调用openstack的api,create_instance的程序解析

    python调用openstack的api,create_instance的程序解析 2017年10月17日 15:27:24 CloudXli 阅读数:848   版权声明:本文为博主原创文章,未经 ...

  2. 安装OpenStack计算服务(nova)

    1. 配置数据库 数据库安装在控制节(controller)点上 $ mysql -u root -p 2.创建 glance 数据库 CREATE DATABASE nova; GRANT ALL ...

  3. openstack (4)---部署Glance镜像服务,Nova计算服务

    一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...

  4. CentOS7安装OpenStack(Rocky版)-03.安装Glance镜像服务组件(控制节点)

    上篇文章分享了keystone的安装配置,本文接着分享openstack的镜像服务glance. --------------- 完美的分割线 ---------------- 3.0.glance概 ...

  5. 云计算管理平台之OpenStack计算服务nova

    一.nova简介 nova是openstack中的计算服务,其主要作用是帮助我们在计算节点上管理虚拟机的核心服务:这里的计算节点就是指用于提供运行虚拟机实例的主机,通常像这种计算节点有很多台,那么虚拟 ...

  6. openstack Q版部署-----nova服务配置-控制节点(5)

    一.创建数据库(控制节点) 创建数据库以及用户: CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; ...

  7. OpenStack 计算服务 Nova计算节点部署(八)

    如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. nova计算节点IP是192.168.137.12 环境准备 安装时间同步 yum install ntpdat ...

  8. OpenStack 计算服务 Nova介绍和控制节点部署(七)

    介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点nova-c ...

  9. OpenStack 计算服务 Nova介绍和控制节点部署 (八)

    一)nova在keystone上服务注册 1.1创建nova务实体 [root@controller ~]# source admin-openrc [root@controller ~]# open ...

随机推荐

  1. 最长上升子序列模板 hdu 1087 Super Jumping! Jumping! Jumping!

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  2. 【Spring】编程式事务和声明式事务

    一.概述 二.准备工作 1. 创建表 2. 创建项目并引入Maven依赖 3. 编写实体类 4. 编写Dao层 5. 业务层 6. XML中的配置 7. 测试 三.编程式事务 1. 在业务层代码上使用 ...

  3. MySQL Explain学习笔记

    目录 一.执行计划概念 二.Explain用法 三.Explain属性介绍 3.1 id属性 3.2 select_type属性 3.3 table属性 3.4 type属性 3.5 possible ...

  4. BZOJ 刷题总结(持续更新)

    本篇博客按照题号排序(带*为推荐题目) 1008 [HNOI2008]越狱 很经典的题了..龟速乘,龟速幂裸题,, 1010 [HNOI2008]玩具装箱toy* 斜率优化 基本算是裸题. 1012 ...

  5. python列表排序用法

    错误用法::: a=list('hdfoiegfjil').sort()

  6. C# DATETIME格式转换汇总 根据日期过期星期

    C# DateTime.Now.Year --2019(年) DateTime.Now.Month --9(月) DateTime.Now.Day   --19(日) DateTime.Now.Hou ...

  7. Python--使用四种随机方法(Random)来产生随机价格

    import random # 卖橘子的计算器:写一段代码,提示用户输入橘子的价格,# 然后随机生成购买的斤数(5到10斤之间),最后计算出应该支付的金额! # 第一种# orange_price = ...

  8. 数据库高级:SQL-CREATE-TABLE语句

    作者:松软科技(www.sysoft.net.cn) 发布时间:2019/3/17 9:34:51 CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CRE ...

  9. setuptools的安装

    Python 2.x:    sudo apt-get install python-setuptools           (python2.x版本执行此命令) Python 3.x:    su ...

  10. 三、SpringBoot 整合mybatis 多数据源以及分库分表

    前言 说实话,这章本来不打算讲的,因为配置多数据源的网上有很多类似的教程.但是最近因为项目要用到分库分表,所以让我研究一下看怎么实现.我想着上一篇博客讲了多环境的配置,不同的环境调用不同的数据库,那接 ...