成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Perl進行虛擬化環境的自動化管理和部署

運維 系統運維 自動化
本文介紹使用Perl創建腳本管理虛擬化環境的技巧,比如使用libvirt API管理KVM/QEMU/Xen虛擬機,使用vSphere SDK管理VMware環境等。掌握這些工具將有助于提高系統管理員的工作效率。

  概述


  虛擬化作為云計算的基礎,是目前一個重要的趨勢。通過虛擬化可以提高 IT 資源和應用程序的效率和可用性。基于內核的虛擬機 KVM 在 2008 年被 RedHat 收購后,在 IBM 和 RedHat 的聯合推動下得到了全面的發展。最新發布的 RHEL 版本中已經全面支持了 KVM 虛擬機,并集成了一整套基于 libvirt 的管理工具 (virsh/virt-top/virt-install/virt-manager 等 )。虛擬化領域的主要廠商 VMware 的 vSphere 虛擬環境提供的 vSphere Client 讓用戶可通過直觀的圖形化方式管理 vCenter/ESX server/datacenter/cluster/VM 等對象。但是當被管理對象數量龐大時,使用 virt-manager 或者 vSphere Client 的圖形化方式來處理一些日常事務就顯得費時費力了。為此用戶可以通過相應的 API 來編寫程序管理這些日常事務。本文將介紹 libvirt API 和 vSphere SDK for Perl 在系統管理方面的應用。本文將對于開發人員、系統管理員、系統測試人員有所幫助。

使用 libvirt 管理 KVM 環境

  libvirt 是一套實現 Linux 虛擬化功能的開源 API,旨在提供一種單一的方式管理多種不同的虛擬化方案。目前 libvirt 支持如下的 hypervisor:

  •   KVM/QEMU
  •   Xen
  •   LXC
  •   OpenVZ
  •   VirtualBox
  •   VMware ESX, workstation, player
  •   Microsoft Hyper-V

  伴隨著 libvirt,RHEL 最新的發行版還包含了一系列基于 libvirt 的工具用于簡化虛擬機的維護管理:

  •   virt-install: 用于創建虛擬機
  •   virsh: 交互式/批處理 shell,可以用于完成虛擬環境的日常管理工作
  •   virt-manager: 一個圖形化的界面 , 用于 Hypervisor 及其虛擬機的管理
  •   virt-clone: 用于虛擬機克隆
  •   virt-viewer: 安全連接虛擬機的圖形控制臺工具

  雖然 libvirt 本身由 C 開發 , 它提供了多種主流語言的綁定。系統管理員可以自由選擇他們熟悉的語言,如 Python、Perl、Ruby、Java、PHP 等 .#p#

  使用 virsh 管理 KVM 虛擬機


  基于 libvirt 的管理工具中最常用的是 virsh。virsh 命令的格式如下:

  virsh [OPTION] COMMAND ARG

  在不提供任何參數時,virsh 提供一個交互式 shell。管理員可以通過 virsh 編寫一些簡單的 shell 腳本完成虛擬機/網絡/存儲的配置。下面的代碼片段顯示了 virsh 命令的使用方法。

  使用 ssh 協議連接到 KVM hypervisor:

  [root@BJGSSLA]# virsh connect qemu+ssh://9.9.9.9/system
  root@9.9.9.9's password:

  列舉域 (guest VM):

  [root@BJGSSLA]# virsh list
  Id   Name   State
  --------------------------
  32   rhkvm   running
  33   rhkvm01   running
  34   xpkvm   running

  列舉域的詳細信息:

  [root@BJGSSLA]# virsh dominfo rhkvm
  Id:   32
  Name:   rhkvm
  UUID:   9d37e044-b134-c923-bbe6-0db40707ff9b
  OS Type:   hvm
  State:   running
  CPU(s):   1
  CPU time:   92.6s
  Max memory:   524288 kB
  Used memory:   524288 kB
  Persistent:   yes
  Autostart:   disable
  Managed save:   yes

  掛起,繼續,重啟域:

  [root@BJGSSLA]# virsh suspend rhkvm
  Domain rhkvm suspended
  [root@BJGSSLA]# virsh resume rhkvm
  Doamin rhkvm resumed
  [root@BJGSSLA]# virsh reboot rhkvm
  Domain rhkvm is being rebooted

  快照管理:

  [root@BJGSSLA]# virsh snapshot-create rhkvm
  Domain snapshot 1336311489 created
  [root@BJGSSLA]# virsh snapshot-list rhkvm
  Name   Create Time   State
  -----------------------------------------------------
  1336311489   2012-05-06 09:38:09 -0400   running
  [root@BJGSSLA]# virsh snapshot-revert rhkvm 1336311489

  注:在 KVM 虛擬環境中物理宿主機被稱為節點 (node),每個 guest 被稱為域 (domain) 。#p#

  基于 libvirt API 編寫 Perl 腳本


  virsh 可以勝任大部分日常的工作,更復雜的需求可以通過 libvirt API 編程實現。本節將介紹基于如何使用 libvirt for Perl 來獲得更加精細的虛擬機信息。

  CPAN 上的 Sys::Virt 模塊即為 libvirt 的 Perl 綁定。首先根據 KVM 環境中 libvirt 的版本下載、編譯、安裝對應的 Sys-Virt 模塊。本文的實驗環境中使用 0.9.4 版 libvirt, 因此使用 Sys-Virt-0.9.4:

  http://search.cpan.org/~danberr/Sys-Virt-0.9.4/

  編譯安裝 Sys::Virt 模塊:

  [root@BJGSSLA]# perl Makefile.PL
  [root@BJGSSLA]# make
  [root@BJGSSLA]# make install

  下面將通過編寫一個簡單的監控程序來介紹 libvirt API 的使用。在生產環境中,管理員經常需要監視虛擬機的 CPU 使用率。如果發現某些虛擬機的 CPU 使用率異常,管理員可以提醒虛擬機的主人或者掛起某些虛擬機來保證整個虛擬化環境的正常運轉。

  基于 libvirt 開發的虛擬機性能監視工具 virt-top 的文檔中提供了一個簡化的實現算法:

  1. 對虛擬機的 cpuTime 進行周期性采樣。此值可以通過 Sys::Virt::Domain 類的 get_info 方法得到,以納秒為單位,記錄了開機到目前所經過的 CPU 時間
  2. 假定兩次采樣的實際時間是 t1 和 t2,虛擬機 CPU 運行時間為 vt1 和 vt2
  3. 此虛擬機的 CPU 使用率可以按下式計算:
  %CPU = 100% * (vt2 - vt1) / ((t2-v1) * #_of_cores * 10^9)

  上述公式中的采樣實際時間 (t1 和 t2) 可以通過 Perl 標準庫模塊 Time::HiRes 的 gettimeofday 方法獲得。 #_of_cores 表示宿主機的 CPU 核數。此參數可以通過 Sys::Virt 類的 get_node_info 方法得到。

  清單 1. vcpu_util.pl
  #!/usr/bin/perl -w
  # usage: vcpu_util --uri uri --dom DOM_Name
  use strict;
  use warnings;
  use Time::HiRes;
  use Getopt::Long;
  use Sys::Virt;
  my ($uri, $dom);
  # 從命令行參數中獲得 hypervisor 連接信息和虛擬機名
  GetOptions('uri=s' => \$uri, 'dom=s' => \$dom);
  # 獲得 hypervisor 連接對象
  my $conn   = Sys::Virt->new(address => $uri) or die \
  "Cannot connect to the hypervisor: $uri. $!\n";
  # 獲得虛擬機對象
  my $vm   = $conn->get_domain_by_name($dom) or die \
  "Cannot find the domain: $dom. $!\n";
  my ($start_time, $end_time, $start_vtime, $end_vtime);
  # 獲得第一次采樣的實際時間
  $start_time   = Time::HiRes::gettimeofday();
  # 獲得第一次采樣的虛擬機 CPU 時間
  $start_vtime   = $vm->get_info()->{'cpuTime'};
  # 等待下一次采樣
  sleep(1);
  # 獲得第二次采樣的實際時間
  $end_time   = Time::HiRes::gettimeofday();
  # 獲得第二次采樣的虛擬機 CPU 時間
  $end_vtime   = $vm->get_info()->{'cpuTime'};
  # 獲得宿主 CPU 的核數
  my $n_cores   = $conn->get_node_info()->{'cores'};
  # 計算虛擬機 CPU 的利用率
  my $util_rate   = 100 * ($end_vtime - $start_vtime) / (($end_time - \
  $start_time) * 1000000000 * $n_cores);
  printf "CPU utilization of $dom in $uri is: %.2f%%.\n", $util_rate;

  下面是某次運行的結果:

  [root@BJGSSLA]# ./vcpu_util.pl --uri qemu:///system --dom rhkvm
  CPU utilization of rhkvm in qemu:///system is: 4.46%

 #p#

  使用 vSphere SDK 管理 VMware 環境


  上一節介紹的 libvirt 是一套通用的 API,因此也可以用來管理 VMware 環境。但是在這方面 VMware 本身提供的 vSphere SDK 的功能則更具針對性。下面我們將學習如何使用 vSphere SDK for Perl 來管理 VMware 虛擬化環境。

搭建 vSphere SDK for Perl 開發環境

  可以從 VMware 的官方站點找到最新的 vSphere SDK for Perl。 讀者需要注冊 VMware 帳號,登錄后根據需要選擇合適的平臺版本下載。

  在開始使用 vSphere SDK for Perl 之前,需要確保開發環境與 vSphere 之間的連接正常工作。我們可以通過訪問 Managed Object Browser (MOB) 來測試連接狀況:

  https://<vCenter_IP>/mob

  MOB 是一個基于 Web 的服務器端 (ESX/vCenter) 程序,用以瀏覽服務器端各種對象的屬性方法等。如果瀏覽器能正確顯示下面的頁面,則說明開發環境與 vSphere 之間的連接正常。

  圖 1. 使用 MOB 檢查連接狀態

  確保與 VMware 環境連接正常后,我們需要安裝 vSphere SDK for Perl。安裝前確保其所依賴的 OpenSSL/LibXML2/e2fsprogs 等工具已經安裝。vSphere SDK for Perl 的安裝過程非常簡單,解壓安裝包,執行 vmware-install.pl,接受默認參數即可:

  [root@BJGSSLA]# tar – zxvf VMware-vSphere-CLI-4.X.X-XXXXX.i386.tar.gz
  [root@BJGSSLA]# /<extract_location>/sudo vmware-vsphere-cli-distrib/vmware-install.pl

  安裝完成后可運行 vSphere SDK for Perl 的一些示例程序來測試開發環境是否可用,例如 datacenterlisting.pl。此程序可獲得 ESX/ESXi 主機以及這些主機上虛機的列表:

  [root@BJGSSLA]# cd /usr/share/doc/vmware-vcli/samples/discovery/
  [root@BJGSSLA]# perl datacenterlisting.pl --server <vCenter_IP> \
  --datacenter <datacenter_name> \
  --username <user_name> --password <password>

  在本文的實驗環境中,該腳本的運行結果為:

  [root@BJGSSLA]# perl datacenterlisting.pl --server 9.115.66.131 --datacenter MyDC \
  --username administrator --password passw0rd
  Hosts found:
  1: 9.115.208.49
  VM's found:
  1: WIN2K3
  2: WIN2K8R2
  3: RHEL5

 #p#

  與 VMware 環境交互的一般流程


  vSphere SDK for Perl 和 vSphere 環境之間的交互流程大致分以下 4 步:

  1. 驗證命令行參數
  2. 連接遠程服務器,傳遞參數
  3. 執行用戶定義操作,如從遠程服務器端查詢對象、收集服務器端對象的信息、獲取或者修改遠程服務器端對象狀態等
  4. 斷開連接

  了解此交互流程將有助于我們理解示例程序的邏輯,更加清晰的組織自己開發的自動化腳本。下面通過解析一段簡單的代碼來說明這個交互過程。

  清單 2. simple_flow.pl

  #! /usr/bin/perl -w
  use strict;
  use warnings;
  # 導入 vSphere SDK for Perl 的運行支持模塊
  # 此模塊用來完成服務器端 - 客戶端數據映射、載入客戶端和服務器端之間的交互函數等
  use VMware::VIRuntime;
  # hash 結構 %opts 存放自定義命令行參數
  my %opts =(
  entity => {
  type => "=s",
  variable => "VI_ENTITY",
  help => "ManagedEntity type: HostSystem, etc",
  required => 1,
  },
  );
  # vSphere SDK for Perl 為所有腳本提供了一些基本的命令行參數,如 --server,--url 等
  # Opts::add_options 方法用以添加用戶自定義參數
  Opts::add_options(%opts);
  # 解析命令行參數
  Opts::parse();
  # 驗證命令行參數
  Opts::validate();
  # 連接遠程服務器,vCenter 或 ESX server
  Util::connect();
  # 提取命令行參數 entity 的值
  my $entity_type = Opts::get_option('entity');
  # 根據 entity 值查詢服務器端對象,
  # Vim::find_entity_views 返回服務器端對象對應的 Perl 視圖
  my $entity_views = Vim::find_entity_views(view_type=>$entity_type);
  # 輸出服務器端對象 Perl 視圖的信息,如類型和名稱等
  foreach my $entity_view (@$entity_views) {
  my $entity_name = $entity_view->name;
  Util::trace(0, "Found $entity_type: $entity_name\n");
  }
  # 斷開與遠程服務器的連接
  Util::disconnect();

  simple_flow.pl 展示了 vSphere SDK for Perl 腳本的一般結構,同時也演示了 Opts 包、Util 包和 Vim 包中一部分常見函數的用法。simple_flow.pl 在本文的實驗環境中的運行結果為:

  [root@BJGSSLA]# ./simple_flow.pl --server 9.115.66.131 --username administrator \
  --password passw0rd --entity HostSystem
  Found HostSystem: 9.115.208.49
  [root@BJGSSLA]# ./simple_flow.pl --server 9.115.66.131 --username administrator \
  --password passw0rd --entity VirtualMachine
  Found VirtualMachine: WIN2K3
  Found VirtualMachine: WIN2K8R2
  Found VirtualMachine: RHEL55

 #p#

  VMware 服務器端對象與 Perl 視圖


  用戶編寫 vSphere SDK for Perl 腳本的目的是訪問和修改服務器端對象,如虛擬機、集群、快照等。為此我們需要了解 vSphere 服務器端對象的組織、服務器端對象與本地 Perl 對象的關系。

  vSphere 服務器端對象被稱為 managed object。每個 managed object 都具有屬性集 (properties) 并提供相關服務 (methods)。下圖顯示 managed object 的繼承結構(部分 ):

  圖 2. 服務器端 managed object 繼承結構(部分 )

  抽象類 ManagedEntity 為服務器端對象定義了最基本的屬性集(如 name,parent 等)和方法(如 Reload,Rename_Task 等)。常見的服務器端對象,如 ResoucePool、HostSystem、Datacenter、VirtualMachine 等都繼承自 ManagedEntity,提供特定的屬性及方法。感興趣的讀者可以通過訪問 MOB 或者 vSphere SDK API 在線參考來深入了解各種 managed object 的細節。

  vSphere SDK for Perl 可以將服務器端對象的屬性和方法映射為本地 Perl 對象,即服務器端對象的本地 Perl 視圖,所以 Perl 視圖可以看作服務器端對象的本地副本,其屬性和方法和服務器端對象一一對應。不過需要注意的是,服務器端對象會實時更新,而 Perl 視圖是靜態的副本,所以當需要最新狀態信息時,用戶必須使用 Vim::update_view_data 顯式刷新 Perl 視圖。

  我們通常可以使用 Vim::find_entity_views 和 Vim::find_entity_view 函數來獲得獲得本地 Perl 視圖(參考 simple_flow.pl 中的示例 )。有時 Vim::find_entity_views 返回結果過多,而 Vim::find_entity_view 返回的結果集中的第一個結果可能并不是我們需要的,此時我們可以使用 filter 參數細化查詢條件、控制查詢結果。下面的代碼片段使用 guestFullName 屬性進行過濾,獲得所有 Windows 虛擬機的視圖:

  清單 3. 使用 filter 參數過濾

  ...
  my $vm_views = Vim::find_entity_views(
  view_type => 'VirtualMachine',
  filter => {
  # config(VirtualMachineConfigInfo 類 ) 是 VirtualMachine 類的屬性
  # guestFullName(xsd:string 類 ) 是 VirtualMachineConfigInfo 類的屬性
  'config.guestFullName' => qr/Windows/
  }
  );
  foreach my $vm (@$vm_views) {
  print "Name: " . $vm->name . "\n";
  }
  ...

  大部分服務器端 managed object 擁有大量的屬性,而我們編寫任務腳本時往往只對其中的一部分感興趣。為得到某個屬性值而構造完整的 Perl 視圖是非常低效的,為此我們可以通過 properties 參數來指定 Perl 視圖中需要的屬性:

  清單 4. 使用 properties 參數獲取必要屬性

  ...
  my $vm_view = Vim::find_entity_view(
  view_type => 'VirtualMachine',
  filter => { 'name' => 'foo' },
  # 只獲取 runtime 屬性中的 powerState 屬性
  properties => [ 'runtime.powerState' ]
  );
  # 讀取 Perl 視圖的 powerState 屬性
  my $state = $vm_view->runtime->powerState;
  ...

 #p#

  使用 vSphere SDK for Perl 完成虛擬機的部署和定制


  虛擬機模板是一種可重用的虛擬機映像,通過模板來部署虛擬機可以避免在安裝系統過程中很多重復操作,極大地提高了效率。但是即使使用模板來部署系統,我們仍然需要手動為各個虛擬機完成一些定制性的工作,如配置 IP、主機名之類。這些定制化工作可以在部署模板時使用 vSphere 提供的 Customization Wizard 或者 Customization Specification 文件來完成。Customization Wizard 以向導的形式讓用戶輸入自定義信息,用戶也可以把定制信息保存為 Customization Specification 文件以便以后復用。對于小規模的部署,這些工具已經足夠。但是當規模變大時,手動輸入、編輯、維護這些信息也會消耗相當多的精力。下面給出的示例代碼將自動化地完成虛擬機部署以及網絡配置工作。

  w2k8_deploy.pl 演示了如何通過 Window 2008R2 模板自動部署虛擬機并配置其網絡。該腳本適用于 XP/2003 以后的 Windows 版本,包括 Windows 2008/Windows 2008 R2/Vista/Win 7 sp1。其中 Windows 2008R2 和 Win7 sp1 的定制需要 vCenter 4.1 update 1。具體 Windows Guest OS 定制化支持請參考 vSphere 相關文檔。

  清單 5. w2k8_deploy.pl

  #!/usr/bin/perl -w
  use strict;
  use warnings;
  use VMware::VIRuntime;
  Opts::parse();
  Opts::validate();
  Util::connect();
  # 部署 Windows 目標虛機并配置網絡
  deploy_W2K8();
  Util::disconnect();Virt-top documentation
  sub deploy_W2K8 {
  my $vmhost = "9.115.208.49";   # 目標虛機所在 ESX server 的地址
  my $ds = "datastore1";   # 目標虛機所在的 datastore
  my $vm_template = "WIN2K8R2";   # 部署目標虛機用的模板
  my $respool = "ResPool";   # 目標虛機所在的 resource pool
  my $vm_name = "WIN2K8R2A";   # 目標虛機的虛機名
  # 獲得模板視圖
  my $vm_template_view = Vim::find_entity_view(
  view_type => 'VirtualMachine',
  filter => {name => $vm_template}
  );
  # 獲得 ESX server 視圖
  my $vmhost_view = Vim::find_entity_view(
  view_type => 'HostSystem',
  filter => {name => $vmhost}
  );
  # 獲得 resource pool 視圖
  my $respool_view = Vim::find_entity_view(
  view_type => 'ResourcePool',
  filter => {name => $respool}
  );
  # 獲得 datastore 視圖
  my $ds_view = Vim::find_entity_view(
  view_type => 'Datastore',
  filter => {name => $ds}
  );
  # 目標虛機重定位信息,指定目標虛機的 datastore/host/resource pool
  my $relocate_spec = VirtualMachineRelocateSpec->new(
  datastore => $ds_view,
  host => $vmhost_view,
  pool => $respool_view,
  );
  # 自定義 Guest Windows os 的網絡配置信息
  # 主機名 /DNS 域 /IP 地址 / 網關 / 子網掩碼 /DNS 服務器 / 用戶及組織 / 序列號 / 密碼等
  my $host_name = "WIN2K8R2A";
  my $domain = "cn.ibm.com";
  my $ip_address = "9.115.208.62";
  my @gateway = ("9.115.208.1");
  my $netmask = "255.255.255.0";
  my @dnsServers = ("9.181.2.101", "9.181.2.102");
  my $full_name = "IBMCN";
  my $org_name = "IBMCN";
  my $prod_ID = "";
  my $password = "passw0rd";
  # Windows Guest OS 的定制不需要指定 Global IP 設置
  my $cust_global_settings = CustomizationGlobalIPSettings->new();
  # 加入 workgroup 組。
  # 若使用域配置,需提供 domainAdmin/domainAdminPassword/joinDomain 參數
  my $cust_identification = CustomizationIdentification->new(
  joinWorkgroup => "workgroup",
  );
  my $cust_gui_unattended = CustomizationGuiUnattended->new(
  autoLogon => 1,
  autoLogonCount => 1,
  timeZone => 190,
  password => CustomizationPassword->new(
  plainText => "true",
  value => $password
  ),
  );
  my $cust_user_data = CustomizationUserData->new(
  computerName => CustomizationFixedName->new(name => $host_name),
  fullName => $full_name,
  orgName => $org_name,
  productId => $prod_ID,
  );
  my $win_prep = CustomizationSysprep->new(
  guiUnattended => $cust_gui_unattended,
  identification => $cust_identification,
  userData => $cust_user_data,
  );
  my $cust_IP_settings = CustomizationIPSettings->new(
  dnsDomain => $domain,
  dnsServerList => \@dnsServers,
  ip => CustomizationFixedIp->new(ipAddress => $ip_address),
  gateway => \@gateway,
  subnetMask => $netmask,
  );
  my $cust_adapter_mapping = CustomizationAdapterMapping->new(
  adapter => $cust_IP_settings,
  );
  my $cust_adapter_mapping_list = [$cust_adapter_mapping];
  my $cust_spec = CustomizationSpec->new(
  globalIPSettings => $cust_global_settings,
  identity => $win_prep,
  nicSettingMap => $cust_adapter_mapping_list,
  );
  my $clone_spec = VirtualMachineCloneSpec->new(
  powerOn => 1,
  template => 0,
  location => $relocate_spec,
  customization => $cust_spec,
  );
  # 啟動任務
  $vm_template_view->CloneVM_Task(
  folder => $vm_template_view->parent,
  name => $vm_name,
  spec=>$clone_spec
  );
  }

  CloneVM_Task 方法執行定制化的模板部署,其中 folder 參數確定目標虛機所在目錄,name 參數確定目標虛機的虛機名,VirtualMachineCloneSpec 類型的 spec 參數用于自定義虛擬機克隆的過程(包括虛擬機硬件配置的定制,Guest OS 定制等 )。可以看到前面大段的代碼都是在構造 VirtualMachineCloneSpec 對象。下面的類圖顯示了各定制對象之間的關系:

  圖 3. VirtualMachineCloneSpec 組成

  windows 2003/xp 以及之前的版本的定制化流程稍有不同。主要表現在:

  1. 構造 CustomizationSysprep 時需要提供 CustomizationLicenseFilePrintData 對象作為參數。至于 CustomizationLicenseFilePrintData 對象的具體構造方法,讀者可以參考 vSphere SDK API 在線文檔。
  2. 在 vCenter 端需要準備 sysprep 文件 (vista/2008 之后的 OS 具有內置的 sysprep,不再需要在 vCenter 端準備 )。從 OS 安裝介質中找到 DEPLOY.cab,解壓到 vCenter sysprep 的相關 OS 目錄下:
  • 若 vCenter 安裝在 2003 Server 上,此路徑為:

  C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter\sysprep\<os-level>\

  • 若 vCenter 安裝在 2008 Server 上,此路徑為:

  C:\ProgramData\VMware\VMware VirtualCenter\sysprep\<os-level>\

  在實際應用中,考慮的代碼的可重用性,比較合適的方法是將需要定制化的參數放到外部文件中(例如使用 XML 格式進行組織 ),以后每次批量部署虛擬機的時候只需要改動必要部分即可。但是為了突出重點,盡可能用簡單的例子來說明自動化配置的邏輯流程,這里仍然把參數直接寫在配置流程中。

  Linux 的定制化過程和 Windows 大致相同,本文不再贅述。其主要區別在于構造 CustomizationSpec 時傳入 CustomizationLinuxPrep 對象作為參數。CustomizationLinuxPrep 和 CustomizationSysprep 均繼承自 CustomizationIdentitySettings。

責任編輯:黃丹 來源: developerWorks
相關推薦

2010-12-24 14:46:31

Perl腳本

2009-09-07 09:15:42

自動化服務虛擬化環境

2024-11-21 15:24:49

2009-05-20 19:10:13

虛擬化綠色化自動化

2024-09-13 15:32:18

2022-11-15 17:07:40

開發自動化前端

2024-01-24 18:50:21

WebFTP服務器

2009-04-16 17:14:52

2009-03-04 17:43:31

虛擬化自動化惠普

2023-11-21 22:48:50

2010-12-06 09:59:58

2011-12-01 09:46:57

2011-12-02 08:15:38

IP網絡

2021-04-19 14:00:03

ExchangelibPython郵箱自動化管理

2021-02-05 10:33:47

云計算自動化云計算虛擬化

2010-11-30 16:26:38

2025-01-02 08:00:39

2013-04-07 17:38:08

2014-04-22 09:26:49

Ubuntu 14.0虛擬化

2013-11-28 10:37:36

虛擬桌面環境
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲日本国产 | 精品视频免费 | a在线观看| 99免费在线视频 | 国内精品一区二区三区 | 久草视频在线播放 | 久久草视频 | 黄色一级毛片 | 亚洲成人激情在线观看 | av在线免费观看网站 | 特级毛片爽www免费版 | 精品久久久久久久久久久 | 免费成人在线网 | 五月天婷婷综合 | 欧美jizzhd精品欧美巨大免费 | 亚洲三区在线观看 | 亚洲看片网站 | 日本久草 | 日韩欧美操 | 久久亚洲综合 | 香蕉国产在线视频 | 二区在线视频 | 爱草在线 | 91视频www.| 91精品入口蜜桃 | 色综合久久天天综合网 | 红桃视频一区二区三区免费 | 在线观看国产视频 | 99精品欧美一区二区三区 | 久热久草| 日韩综合在线 | 在线看无码的免费网站 | 天天综合永久入口 | 天天综合久久 | 久久青 | 免费观看的av毛片的网站 | 亚洲成av | 黄色大片在线免费观看 | 国产91久久久久蜜臀青青天草二 | 一区二区免费看 | 久久一区 |