`
xglv2013
  • 浏览: 38001 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Python操作zManager API 管理主机

阅读更多
目前,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
1
分享到:
评论

相关推荐

    Python3.8.2中文API文档

    Python 3.8.2 是一个重要的 Python 语言版本,其中文 API 文档为开发者提供了丰富的参考资料,帮助理解和使用这个版本的各种特性和功能。以下是对这些文档内容的详细概述: 1. **PythonC API 参考手册**:这是针对...

    Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法

    本文将详细介绍如何使用Python通过Zabbix API获取信息以及实现监控。 首先,我们需要了解Zabbix API的基本概念。Zabbix API是Zabbix提供的一个接口,它允许外部程序通过JSON-RPC协议与Zabbix服务器进行交互,进行如...

    Python3.8官方中文API参考手册

    5. **faq.pdf**:常见问题解答,收集了Python使用过程中可能会遇到的问题和解决方法,包括版本兼容性、性能优化、内存管理等常见问题。 6. **extending.pdf**:扩展Python,讲述了如何使用C或C++编写Python扩展,...

    用Python FastAPI与PostgreSQL进行增删改查操作

    本教程将介绍如何使用FastAPI与PostgreSQL进行基本的增删改查(CRUD)操作。 首先,确保已经安装了必要的库:fastapi、uvicorn和psycopg2。`fastapi`是用于构建API的框架,`uvicorn`是一个ASGI服务器,用于运行Fast...

    Python使用FastAPI.docx

    Python使用FastAPI

    python login api_python_API_web_hook_

    首先,Python API是指使用Python语言构建的接口,它允许开发者访问和操作服务或数据。Python因为其简洁的语法和强大的库支持,成为了开发API的热门选择。在Python API中,常见的框架有Flask和Django,它们提供了一套...

    python酒店管理系统,fastapi框架,采用mysql数据库,采用了tortoise-orm连接数据库

    在本项目中,我们主要探讨的是一个基于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可调nmap api,用Python可调...

    纯Python编写的Dash-FastAPI-Admin中后台管理系统源码

    项目概述:这是一款纯Python实现的后台管理系统——Dash-FastAPI-Admin,整合了Dash和FastAPI框架,旨在为用户提供高效、便捷的中后台管理解决方案。项目主要采用Python语言编写,同时包含了JavaScript和CSS以支持...

    豆包 API 调用示例代码详解-Python版

    在本文中,我们将详细介绍如何使用 Python 调用豆包 API,并提供相关的事前准备和代码执行步骤。 一、事前准备 密钥申请: 要使用豆包 API,首先需要申请一个授权密钥。在上述代码中,密钥存储在 headers 字典的 ...

    TradeX.dll的Python API 使用演示程序

    Python API是TradeX.dll与Python程序之间的桥梁,它封装了DLL的底层操作,使得开发者可以使用Python的语法和习惯来调用交易和行情功能。这大大降低了开发复杂度,提高了代码的可读性和可维护性。 3. **A股程序化...

    CarMaker的Python API文件

    Python API文件是CarMaker为了方便用户进行脚本化操作和扩展功能而提供的。这个压缩包包含了7个示例文件,这些示例展示了如何利用Python API来实现不同的功能,如设置车辆参数、加载模型、控制仿真过程、读取和处理...

    Python-CTPAPI-v6.3.19穿透式监管版本.zip

    Python-CTPAPI-v6.3.19穿透式监管版本

    使用python3通过python-gitlab的API来获取gitlab的仓库、用户等信息

    总的来说,使用Python3和`python-gitlab`库与GitLab API进行交互,可以帮助开发者有效地自动化GitLab平台的管理和监控工作。结合提供的`get-gitInfo.py`脚本,你将能够快速地获取和处理GitLab上的各种资源信息,从而...

    Python-微软RESTAPI的指南

    Python是当今广泛使用的编程语言,尤其在Web开发领域,它提供了强大的工具来构建和交互RESTful API。微软作为技术巨头,也提供了丰富的REST API供开发者使用。本指南将深入探讨如何利用Python与微软的REST API进行...

    基于FastAPI和Vue3的Python管理后台设计源码

    这是一个基于FastAPI和Vue3的Python管理后台设计,使用JavaScript、Vue、Python、CSS、TypeScript、HTML和Shell语言开发,包含1511个文件。主要文件类型包括487个JavaScript文件、248个Vue文件、228个SVG文件、126个...

    python api 学习资料分享

    `#SYSTEM`可能指的是操作系统交互,Python提供了os、sys和subprocess等模块,可以用来执行系统命令、管理文件和目录,以及与操作系统进行各种交互。 `#TOCIDX`可能是目录索引,这在组织和检索大型文档集合时很有用...

    Python C-API

    Python C-API(Application Programming Interface)是Python提供的一套与C语言交互的接口集合,它允许开发者使用C或C++语言来编写扩展模块,并在Python环境中调用这些模块。通过C-API,开发者可以利用C语言的强大...

    TradeX.dll的Python API 源代码

    8. **安全与认证**:在实际使用中,为了保护交易账户的安全,需要对API调用进行用户身份验证,可能涉及证书、密钥或登录凭证的管理。 9. **并发与多线程**:在编写自动交易程序时,可能需要处理多个并发任务,如...

    python调用github api

    python调用github api ,http://api.github.com,查看仓库信息

Global site tag (gtag.js) - Google Analytics