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的解決方案。
我們看一下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="domain\administrator"/> 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位的。
文章列表