设为首页 收藏本站
查看: 401|回复: 0

[经验分享] 使用Python操作zManager API 管理主机

[复制链接]

尚未签到

发表于 2017-5-2 09:46:08 | 显示全部楼层 |阅读模式
目前,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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-371941-1-1.html 上篇帖子: python之subprocess 创建子进程 下篇帖子: Editplus语法高亮实现是Python 编辑调试环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表