目前,Python在大数据处理领域和自动化测试开发方面的应用逐渐火热起来,这是一篇我以前写的实际项目中应用Python调用主机的API的文章
1 什么是zManager 以及其REST API 接口
zEnterprise System由三大部分组成:IBM zEnterprise 大型机、IBM zEnterprise BladeCenter Extension (zBX)刀片扩展机柜和IBM zEnterprise Unified Resource Manager (Unified Resource Manager,zManager)管理固件,zManager能够管理跨越System Z、特定的POWER7和System x服务器上运行的工作负载,实现资源的统一管理。
HMC是管理zManager的访问点。在这个范围内,HMC提供了一个基于WEB的,可以远程操作的图形用户界面(UI),让用户可以操作zManager的。另外,HMC也具备zManager webservice API的实现,这些API与UI的操作是相对应的。
Webservice API是一个面向WEB的编程接口,它可以让潜在的zManager的功能能够被一些高级的应用程序、系统自动化方法,或者例行脚本所使用。
2 API的组件
Web Services API包括两个主要的组件,分别是Web services接口和异步通知(Asynchronous Notification),这两个组件都是通过客户端应用程序对HMC发起TCP/IP网络连接去访问的。
2.1 Web services接口
Web services接口是一个面向request和response的编程接口,通过它,客户端应用程序可以获取zManager所管理的系统资源的信息,并可以对这些资源进行配置和控制等各种动作。
正如任何面向web的接口,客户端应用程序通过位于TCP/IP socket连接之上的HTTP传输协议与Web services接口进行交互。客户端应用程序通过组装并发送基于文本的消息发起一个HTTP request,同样,Web services API返回一个基于文本的HTTP response。使用HTTP让客户端API编程语言变得多元化。Java,Perl和Python等广泛支持HTTP操作的语言都可以被用来实现客户端应用程序。
Web service API的设计受到了表示状态转移(Representational State Transfer,REST)接口设计思想的影响。可管理的系统资源被关联到持久的URI,并可以通过URI进行标识。REST风格下的get,put,post和delete操作恰好对应HTTP的GET, PUT, POST和Delete方法。Request和Response的数据使用Javascript Object Notaion(JSON)来表示。将API方法映射到HTTP的做法简化了客户端应用程序的开发过程,使得客户端不必像使用其他web service接口设计方法那样,需要有额外的工具和库才可以访问API。
2.2 异步通知
Web Services接口大多应用在客户端应用程序与zManager之间的交互是短期行为的场景下:客户端发送一个request,获得一个response,处理这个response,然后就会“忘记”与它进行交互的zManager资源。也就是说,此时客户端并不试图长期保持(或者缓存)zManager资源且维护缓存使其具有时效性。
然而对于一些比较高级的管理应用程序,包括discovery,monitoring和高级的provisioning,并非基于它们对zManager的需求去“请求并忘记”zManager资源。取而代之,它们需要长期保存(如缓存)很多zManager资源的目录信息、配置和状态等等,并使其具有时效性。
为了支持这种更高级的应用程序,Web services API提供了一个异步通知模块,通过它,zManager可以及时通知感兴趣的客户端资源的更新。异步通知模块使用Java Message Serive(JMS)开发,它是一个开源的可以用来在各个应用之间传递消息的标准的API和框架。
3 如何使用zManager API?
调用API即通过编程的手段操作该接口。通过编程的方式访问 zManage web service API, 所选的编程语言无论内建还是扩展,必须支持如下特性:
支持HTTP
支持SSL
创建和解析JSON对象
支持JMS链接或者STOMP协议(可选)
3.1 Python以及其优点
而Python能够很好的支持以上特性,此外还成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。
Python是一种面向对象、直译式计算机程序设计语言。Python语法简洁而清晰,具有丰富和强大的类库。Python也翻译作“蟒蛇”,该语言的特性是善于将不同的系统缠绕在一起。因此它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。
3.2 操作zManager API的基本流程
API是基于会话的(session), 所有的请求都是在一个API session中完成的。
操作API的流程如下:
1 . 与HMC建立SSL socket
# Connect to HMC at address <HMCserver> with 100 second request timeout
conn = httplib.HTTPSConnection(HMCserver, 6794, timeout=100)
conn.connect()
2. 登录到HMC打开一个API session
logon_req = {"userid": userid, "password": password}
req_body = json.dumps(logon_req)
req_hdrs = {"Content-Type": "application/json"}
conn.request("POST", "/api/sessions", req_body, req_hdrs)
response = conn.getresponse()
if response.status != 204:
# If the response provides a body, always read it.
resp_body = response.read()
if response.status != 200:
# Handle failure (eg. wrong psasword)
raise Exception("Request failed (status: %d)" % response.status)
# Retrieve session id from response for later use
logon_resp = json.loads(resp_body)
session_id = logon_resp["api-session"]
3 . 发起一个API请求
# 获取HMC的特性,其中session id是上一步创建的
req_hdrs = {"X-API-Session": session_id}
conn.request("GET", "/api/console", None, req_hdrs)
response = conn.getresponse()
if response.status != 204:
resp_body = response.read()
if response.status != 200:
raise Exception("Request failed (status: %d)" % response.status)
# Convert result JSON into Python objects for processing
console_props = json.loads(resp_body)
print "HMC name is %s." % console_props["name"]
4. 退出登录,关闭API session
req_hdrs = {"X-API-Session": session_id}
conn.request("DELETE", "/api/sessions/this-session", None, req_hdrs)
response = conn.getresponse()
if response.status != 204:
resp_body = response.read()
if response.status != 204:
raise Exception("Request failed (status: %d)" % response.status)
4 应用实例:使用API激活一个LPAR
通过API去激活一个LPAR需要使用HTTP方法POST, 请求的URI为/api/logical-partitions/{logical-partition-id}/operations/activate
在请求的实体中需要构建一个JSON对象包含如下内容:
activation-profile-name:所使用的activation profile的名字
在这个请求的URI中{logical-partition-id}是所要激活的LPAR的id,要获取这个ID
1.首先需要列出当前HMC所管理的CPC,返回结果包含{cpc-id}
GET /api/cpcs
2.接着列出当前CPC下的LPAR,返回结果包含{logical-partition-id}
GET /api/cpcs/{cpc-id}/logical-partitions
获取到LPAR的id就可以发起激活LAPR的请求了, 通常{logical-partition-id}的格式类似如下字符串“fd0255cc-bf90-3295-b8e6-ba61ddc0c08f”。
body_dict = { activation-profile-name : DEFAULT }
body = json.dumps(body_dict)
conn.post("api/logical-partitions/fd0255cc-bf90-3295-b8e6-ba61ddc0c08f/operations/activate", body)
激活一个logical partition 将包含以下操作:
初始化logical partition
给logical partition 分配系统资源
为logical partition 加载CP(control program)或者是操作系统
可见该操作需要一定时间才能完成,当激活LPAR的操作发起后,后台会返回状态码为202(Accepted)的响应。该响应的实体包含一个URI,查询该URI会得到激活LPAR操作的状态: "running" 或者"completed" .当状态为“completed”时激活LPAR的操作完成,同时响应中包含操作的结果。
通过上面的例子展示了通过zManager API 管理主机的方法,事实上zManager 提供了相当丰富的API,几乎涵盖了HMC里涉及到的所有操作,可以参考System z Hardware Management Console Web Services API (Version 2.11.1)了解API的细节。
参考资料:
关于z/OS的信息请访问http://www-03.ibm.com/systems/z/os/zos/
关于zManager API 请参考Hardware Management Console Web Services API Version 2.11.1, IBM System z (SC27-2616-00)
原文链接:
https://www.ibm.com/developerworks/community/blogs/IBMzOS/entry/20131207?lang=en
分享到:
相关推荐
Python 3.8.2 是一个重要的 Python 语言版本,其中文 API 文档为开发者提供了丰富的参考资料,帮助理解和使用这个版本的各种特性和功能。以下是对这些文档内容的详细概述: 1. **PythonC API 参考手册**:这是针对...
标题中的“dnspod_python_DNSPodAPI_源码”表明这是一个使用Python语言实现的项目,它利用DNSPod的API来管理DNS记录。DNSPod是一家知名的DNS服务提供商,提供了API接口供开发者使用,以便自动化地管理和更新DNS设置...
5. **faq.pdf**:常见问题解答,收集了Python使用过程中可能会遇到的问题和解决方法,包括版本兼容性、性能优化、内存管理等常见问题。 6. **extending.pdf**:扩展Python,讲述了如何使用C或C++编写Python扩展,...
在本项目中,我们主要探讨的是一个基于Python的酒店管理系统,该系统采用了现代Web开发框架FastAPI以及关系型数据库MySQL,并且利用了Tortoise-ORM进行数据操作。以下是关于这些关键技术点的详细说明。 首先,...
nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调nmap api,用Python可调...
最后,`pythonAPI和学习笔记大礼包` 这个文件很可能包含了一位开发者或者教育者整理的Python学习笔记,可能包括个人的理解、实例代码、常见问题解答等。这样的笔记通常具有很高的实用价值,因为它们是实践经验和思考...
这是一个基于FastAPI和Vue3的Python管理后台设计,使用JavaScript、Vue、Python、CSS、TypeScript、HTML和Shell语言开发,包含1511个文件。主要文件类型包括487个JavaScript文件、248个Vue文件、228个SVG文件、126个...
Python API文件是CarMaker为了方便用户进行脚本化操作和扩展功能而提供的。这个压缩包包含了7个示例文件,这些示例展示了如何利用Python API来实现不同的功能,如设置车辆参数、加载模型、控制仿真过程、读取和处理...
Python-CTPAPI-v6.3.19穿透式监管版本
Python是当今广泛使用的编程语言,尤其在Web开发领域,它提供了强大的工具来构建和交互RESTful API。微软作为技术巨头,也提供了丰富的REST API供开发者使用。本指南将深入探讨如何利用Python与微软的REST API进行...
总的来说,使用Python3和`python-gitlab`库与GitLab API进行交互,可以帮助开发者有效地自动化GitLab平台的管理和监控工作。结合提供的`get-gitInfo.py`脚本,你将能够快速地获取和处理GitLab上的各种资源信息,从而...
Python的文档和API(应用程序编程接口)对于学习、理解和使用Python语言至关重要。这些资源为开发者提供了详细的信息,帮助他们掌握语法、函数、模块以及如何构建自己的项目。 首先,Python的官方文档是学习Python...
8. **安全与认证**:在实际使用中,为了保护交易账户的安全,需要对API调用进行用户身份验证,可能涉及证书、密钥或登录凭证的管理。 9. **并发与多线程**:在编写自动交易程序时,可能需要处理多个并发任务,如...
Python C-API(Application Programming Interface)是Python提供的一套与C语言交互的接口集合,它允许开发者使用C或C++语言来编写扩展模块,并在Python环境中调用这些模块。通过C-API,开发者可以利用C语言的强大...
python调用github api ,http://api.github.com,查看仓库信息
Python 2.5.2 API文档是Python编程语言在2.5.2版本时的官方技术参考手册,它以CHM(Compiled HTML Help)格式提供,这种格式是一种由微软开发的用于存储和检索HTML帮助文档的系统。这篇文档是Python开发者、学习者和...
总结起来,这个"python_C_api调用实现demo"是一个实际操作的例子,展示了如何使用Python C API在不同平台上编写、编译和使用C扩展模块。通过这个示例,你可以学习到C API的基本用法、跨平台构建策略以及Python与C...
- 密钥管理:确保密钥的安全存储,不要在代码中硬编码,可以使用环境变量或者密钥管理服务。 - 请求参数处理:所有参与签名的参数都需要进行编码处理,避免特殊字符导致的问题。 - 时间戳:在签名中加入时间戳...
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。"Python中文API"和"Python学习笔记"是学习和深入理解Python的重要资源。本压缩包包含的内容涵盖了Python 2.7的英文API、Python 2.5...
该API还提供了矩阵的栈操作和视图操作,允许用户灵活地处理矩阵数据。 7. 重新优化 MOSEK Fusion API for Python提供了重新优化机制,允许用户快速重新优化优化模型。此外,该API还提供了vectorization机制,允许...