由于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. poj 1417 True Liars(并查集+背包dp)

    题目链接:http://poj.org/problem?id=1417 题意:就是给出n个问题有p1个好人,p2个坏人,问x,y是否是同类人,坏人只会说谎话,好人只会说实话. 最后问能否得出全部的好人 ...

  2. MPA JS CSS预处理方案

    1.WebPack 添加配置文件webpack.config.js,直接在当前目录运行 webpack. var basepath = '/root/webapps/happ'; var glob = ...

  3. 2019icpc南昌网络赛_I_Yukino With Subinterval

    题意 给定一个序列,两种操作,单点修改,询问区间\([l,r]\)值域在\([x,y]\)范围内的连续段个数. 分析 原数组为\(a\),构造一个新的数组\(b\),\(b[i]=(a[i]==a[i ...

  4. Netty源码分析 (八)----- write过程 源码分析

    上一篇文章主要讲了netty的read过程,本文主要分析一下write和writeAndFlush. 主要内容 本文分以下几个部分阐述一个java对象最后是如何转变成字节流,写到socket缓冲区中去 ...

  5. kafka入门配置

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行“随机读写”的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? ...

  6. Kubernetes监控实践

    一.Kubernetes介绍 Kubernetes(K8s)是一个开源平台,能够有效简化应用管理.应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用. 作为可扩展的容错平台,K8s ...

  7. 提供就医帮助的安卓APP

    首先 这是我们团队第一次开发安卓APP,也是我 个人第一个开发项目APP,俗话说:“万事开头难”.所以对于新手的我们来说,做好开发前的准备至关重要.凡事预则立不预则废! 首先我们团队这次开发的提供就医 ...

  8. Apache Commons Collections 反序列化详细分析学习总结

    0x01.环境准备: Apache Commons Collections 3.1版本,下载链接参考: https://www.secfree.com/a/231.html jd jui地址(将jar ...

  9. Swoole入门到实战 打造高性能 赛事直播平台(完整版)

    Thinkphp+Swoole入门到实战打造高性能赛事直播平台 第1章 课程介绍 欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司 ...

  10. charles 客户端进程

    本文参考:charles 客户端进程 客户端进程工具/client_process 显示使每个请求的本地客户端进程; 客户端进程工具显示负责进行每个请求的本地客户端进程的名称. 客户端进程通常是您的W ...