使用C#和.NET访问Isilon集群API

在开发自动化和可视化应用程序时,经常需要与存储系统进行交互。EMC的Isilon是一个可扩展的网络附加存储(NAS)平台,它提供了一个REST API,允许通过编程方式管理集群。本文将介绍如何使用C#.NET框架来访问Isilon的API,包括认证、授权以及如何获取集群数据。

API工作流程

IsilonAPI的主要组成部分包括认证/授权,它决定了提供的用户名和密码是否有效,并且是否有权使用API。API分为两个子部分:平台部分和命名空间部分。平台部分允许查看和修改集群的配置,而命名空间部分则根据访问级别,允许访问集群上的文件系统和文件。

如果打算使用API在集群上进行配置更改,强烈建议将所有请求发送到单个节点,以避免配置冲突。

基本认证

有两种方式可以对Isilon API进行认证。第一种是使用基本认证,这意味着必须在每个请求的HTTP头中包含凭据。每个请求都需要针对集群进行认证,这会带来一些开销。

string IsilonServerAddress = "https://10.20.30.160:8080"; string ResourceString = "/platform/1/dedupe/dedupe-summary"; string UserName = "*username*"; string Password = "*password*"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(IsilonServerAddress + ResourceString); request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(UserName + ":" + Password))); HttpWebResponse response = (HttpWebResponse)request.GetResponse();

上述代码创建了一个HTTP Web请求对象,并指定了集群节点的IP地址。它还指定了要获取的资源,在这个例子中是/platform/1/dedupe/dedupe-summary,它是平台部分的一部分。这个API调用将返回一个包含集群去重统计信息的响应。

返回的页面包含以JavaScript对象表示法(JSON)格式请求的数据,如下所示:

{ "summary": { "block_size": 8192, "estimated_physical_blocks": 0.0, "estimated_saved_blocks": 0.0, "logical_blocks": 0.0, "saved_logical_blocks": 0.0, "total_blocks": 18609648, "used_blocks": 1406655.0 } }

会话认证

第二种对Isilon API进行认证的方式是使用会话cookie。在这种方法中,使用HTTP POST命令将JSON认证对象传递给Isilon API。集群的响应将包含一个会话cookie,该cookie可以在一段时间内用于访问集群上的资源。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(IsilonServerAddress + ResourceString); request.Method = "POST"; request.ContentType = "application/json"; StringBuilder builder = new StringBuilder(); builder.Append("{\r\n"); builder.Append("\"username\": \"" + UserName + "\", \r\n"); builder.Append("\"password\": \"" + Password + "\",\r\n"); builder.Append("\"services\": [\"platform\"] \r\n"); builder.Append("}"); StreamWriter writer = new StreamWriter(request.GetRequestStream()); writer.Write(builder.ToString()); writer.Flush(); writer.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string cookie = response.Headers["Set-Cookie"]; response.Close();

现在已经获得了cookie,可以使用它来请求与前面示例中相同的去重统计信息。这次将cookie放在请求流上,以对集群的请求进行认证。响应将与前面示例中返回的JSON对象相同。

ResourceString = "/platform/1/dedupe/dedupe-summary"; request = (HttpWebRequest)WebRequest.Create(IsilonServerAddress + ResourceString); request.Headers.Add("Cookie", cookie); response = (HttpWebResponse)request.GetResponse();

JSON序列化

现在已经成功连接、认证,并且可以从集群请求资源,下一步是将数据序列化为.NET对象,以便在应用程序中使用。上述示例返回了一个Summary类型的对象,详细的信息可以在EMC提供的API参考文档中找到。

为了将返回的数据序列化为.NET对象,需要定义一个带有适当数据合同定义的.NET类。

[DataContract] public class DeduplicationStats { [DataMember(Name = "block_size")] public int BlockSize; [DataMember(Name = "estimated_physical_blocks")] public int EstimatedPhysicalBlocks; [DataMember(Name = "estimated_saved_blocks")] public int EstimatedSavedBlocks; [DataMember(Name = "logical_blocks")] public int LogicalBlocks; [DataMember(Name = "saved_logical_blocks")] public int SavedLogicalBlocks; [DataMember(Name = "total_blocks")] public int TotalBlocks; [DataMember(Name = "used_blocks")] public int UsedBlocks; } [DataContract] public class IsilonResponse { [DataMember(Name = "summary")] public DeduplicationStats DedupeStats; }

现在可以使用System.Runtime.Serialization.Json命名空间中的DataContractJsonSerializer对象将JSON对象序列化为IsilonResponse对象。完成以下代码后,可以访问对象以获取集群去重统计信息。

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(IsilonResponse)); IsilonResponse stats = (IsilonResponse)js.ReadObject(response.GetResponseStream());

这是一个简单的示例,展示了如何使用C#.NET框架连接到Isilon集群并对其执行基本命令。API具有丰富的功能,包括配置和文件系统访问。可以使用API执行审计、配置协议、作业、池、配额和快照设置等配置任务,以及目录和文件级别的操作。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485