zoukankan      html  css  js  c++  java
  • scvmm sdk之ddtkh(二)

    ddtkh,dynamic datacenter toolkit for hosters,原先发布在codeplex开源社区,后来被微软归档到开发者社区中,从本质上来说它是一个企业级应用的套件,集成了微软的scvmm、scom、dpm和sms这几款windows平台应用,经过进一步的封装,通过wcf的方式提供这些应用的api接口。

    现在社区提供了3.0和3.1两中版本,3.0之后各个应用的封装开发包独立出来了。比如有人需要2012的scvmm开发包,可以下载3.1的,不支持scvmm2008。

    这里我们介绍3.0的scvmm2008的版本。首先我们看一下sample的解决方案。

    1

    我们看一下hosts目录下的寄宿服务

    ConfigurationService为Systems Management Server服务,这款应用包含软件管理,资产管理和故障处理等工具包,它有一种wql查询语言,类似sql,可以通过这种语言调用wmi来获取和监视计算机的运行状况,wmi叫windows管理规范,是windows操作系统的重要组件。

    dpm为Microsoft Data Protection Manager提供服务,顾名思义,是用来管理存储的,可以提供基于磁盘备份解决方案。随着2012版本的发布,功能也不断完善,随着虚拟化技术的不断发展,对备份需求也不断提高,这款产品也值得研究一下。

    monitor是Microsoft System Center Operations Manager,它可以为操作系统性能进行综合的分析,作为推广者可以根据监控数据进行多方位的评估,合理安排资源,而客户可以利用它来监控自己的系统环境运行状况,根据自身需要申请调整资源。

    virtualmachinemanagement就是scvmm了,是基于微软基于hyperv的界面化管理应用。

    我们主要介绍scvmm的部分,部分工程已unload。

    在services目录下面,我们需要这几个上图几个已加载的工程即可。

    FaultContracts:错误异常的代理类。

    Management:调用wmi组件的封装包。

    DataContract:scvmm的代理类。

    ServiceContracts:wcf接口定义。

    ServiceImplementation:接口实现,关键工程,这下面是powershell的封装包。

    在VirtualMachineManagementService.cs连接scvmm的一段代码,原先配置信息是放在宿主服务的config文件里,我这里已有改动,具体请看sample。(我这里强制使用了session模式,保持了登录状态,避免每次调用wcf重新连接。)

     1 public bool Connect(string serverName, int serverPort, string userName, string password)
     2 {
     3     this.serverName = serverName;
     4     this.serverPort = serverPort;
     5     this.userName = userName;
     6     this.password = password;
     7 
     8     try
     9     {
    10         SecureCredential auditUserCredentialObject = new SecureCredential(userName, GetSecurePassword(password));
    11         NTAccount account = new NTAccount(auditUserCredentialObject.Account);
    12         SecurityIdentifier identifier = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
    13         UserOrGroup key = UserOrGroup.CreateFromSid(identifier.Value);
    14 
    15         conn = new ServerConnection(serverName, serverPort, Profile.Administrator, auditUserCredentialObject, ServerConnection.InitializationStrategy.LazyInitialization, true, true);
    16         if (conn.IsConnected)
    17         {
    18             return true;
    19         }
    20         else
    21         {
    22             return false;
    23         }
    24     }
    25     catch (Exception ex)
    26     {
    27         return false;
    28         throw new HostingManagementException("Cannot connect to SCVMM server." + ex.Message);
    29     }
    30 }

     介绍下config文件配置。server名填scvmm server地址,端口号默认是8100,登录名密码是域帐号,这里还有一个DomainSecurityGroup,这个在sample貌似没有用到,应该是用它来限制客户端使用身份,在Microsoft.Hosting.Management工程有一段。这些配置信息完全可以像套件配置一样放在数据库里。

    1 <appSettings>
    2     <add key="DomainSecurityGroup" value="domain"/>
    3     <add key="SCVMMServerName" value="localhost"/>
    4     <add key="SCVMMServerPort" value="8100"/>
    5     <add key="SCVMMUserName" value="domainadministrator"/>
    6     <add key="SCVMMPassword" value="password"/>
    7 </appSettings>

    另外,在wcf定义的接口中,功能也是不完全的,开发者可以根据自己的需要更改。

    比如获取共享库信息、刷新共享库,暴露接口就是没有的,但在sample中powershell都基本上已经封装好了,我们只需要写一些逻辑代码。建议在调用这些接口之前,用powershell命令试试。

     1 public static LibraryShare GetLibraryShareByName(ServerConnection conn, string name)
     2 {
     3     try
     4     {
     5         using (PSWrapper.CmdletProcessor cp = GetCmdletProcessor())
     6         {
     7             var list = PSWrapper.LibraryShare.Get(cp);
     8             if (list.Length > 0)
     9             {
    10                 return list.Where(x => x.Name.Equals(name)).FirstOrDefault();
    11             }
    12             return null;
    13         }
    14     }
    15     catch (Exception ex)
    16     {
    17         throw new HostingManagementException("Failed to get Library Share:" + ex.Message, ex);
    18     }
    19 }

     另外在学习sample的过程中可能会遇到以下两个错误。

    The Windows PowerShell snap-in 'Microsoft.SystemCenter.VirtualMachineManager' is not installed on this computer.

    这是本地没有安装scvmm服务,sample不要直接在本地运行,如果有需要可以安装一个scvmm,或者将wcf部署到scvmm所在系统的iis上。

    No snap-ins have been registered for windows powershell version 2.

    意思是说没有注册scvmm组件的管理单元。Microsoft.SystemCenter.VirtualMachineManager的powershell工具集只支持x64的平台,需要把vs项目的目标平台设置成64位的。

  • 相关阅读:
    hdu5834 Magic boy Bi Luo with his excited tree 【树形dp】
    POJ2152 Fire 【树形dp】
    POJ1848 Tree 【树形dp】
    hdu3586 Information Disturbing 【树形dp】
    BZOJ4557 [JLoi2016]侦察守卫 【树形dp】
    BZOJ4000 [TJOI2015]棋盘 【状压dp + 矩阵优化】
    BZOJ1487 [HNOI2009]无归岛 【仙人掌dp】
    BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】
    洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】
    3-3 银行业务队列简单模拟
  • 原文地址:https://www.cnblogs.com/yuefei/p/3945437.html
Copyright © 2011-2022 走看看