[one-users] How config Windows vm template?

Carlos Martín Sánchez cmartin at opennebula.org
Thu Aug 11 03:06:29 PDT 2011


Hi André,

Looks like we don't have many users virtualizing windows machines.
Maybe this kind of questions can be better helped in a windows support
list...

Since you took the time to create and share the contextualization scripts,
if you come up with a working procedure and want to contribute a guide or
how-to, we'd be glad to have it in the community wiki [1].

Regards.

[1] http://opennebula.org/documentation:community:index
--
Carlos Martín, MSc
Project Major Contributor
OpenNebula - The Open Source Toolkit for Cloud Computing
www.OpenNebula.org <http://www.opennebula.org/> | cmartin at opennebula.org


2011/8/5 André Monteiro <andremonteiro at ua.pt>

>  Hello,
>
> I've been working in a windows script to contextualize VMs.<http://www.pastie.org/2324611By>
> <http://www.pastie.org/2324611By>
> By your experience, what's the best way to run the script automatically
> when creating a new instance? I can create it manually as a CD-ROM and run
> the windows7.one with the drive attached, but is there an automatic way?
>
> ################### Windows context configuring script ###################
> ########### Created by andremonteiro at ua.pt and tsbatista at ua.pt ###########
>
> [string]$computerName = "$env:computername"
> [string]$ConnectionString = "WinNT://$computerName"
> [string]$ipaddress = ""
> function getContext($file) {
>  $context = @{}
>  switch -regex -file $file {
>   '(.+)="(.+)"' {
>    $name,$value = $matches[1..2]
>    $context[$name] = $value
>   }
>  }
>  return $context
> }
> function addLocalUser($context) {
>     # Create new user
>  $username =  $context["username"]
>  $ADSI = [adsi]$ConnectionString
>  $user = $ADSI.Create("user",$userName)
>  $user.setPassword($context["user_password"])
>  $user.SetInfo()
>
>     # Add user to local Administrators
>     $groups = "Administrators", "Administradores"
>
>     foreach ($grp in $groups) {
>     if([ADSI]::Exists("WinNT://$computerName/$grp,group")) {
>   $group = [ADSI] "WinNT://$computerName/$grp,group"
>    $group.Add("WinNT://$computerName/$username")
>   }
>  }
> }
> function getIp($mac) {
>     $octet = $mac.Split(":")
>     [String] $ip = ""
>     $ip += [convert]::toint32($octet[2],16)
>     $ip += "."+[convert]::toint32($octet[3],16)
>     $ip += "."+[convert]::toint32($octet[4],16)
>     $ip += "."+[convert]::toint32($octet[5],16)
>     $ipaddress = $ip
>     return $ip
> }
> function getGateway($mac) {
>     $octet = $mac.Split(":")
>     [String] $ip = ""
>     $ip += [convert]::toint32($octet[2],16)
>     $ip += "."+[convert]::toint32($octet[3],16)
>     $ip += "."+[convert]::toint32($octet[4],16)
>     $ip += ".1"
>     return $ip
> }
> function configureNetwork($context) {
>     $Nics = Get-WMIObject Win32_NetworkAdapterConfiguration | where
> {$_.IPEnabled -eq "TRUE" -and ($_.MACAddress)}
>     foreach ($nic in $Nics) {
>         [String]$mac = $nic.MACAddress
>         [String]$ip = getIp($mac)
>         [String]$gw = getGateway($mac)
>         $nic.ReleaseDHCPLease()
>         $nic.EnableStatic($ip , "255.255.255.0")
>         $nic.SetGateways($gw)
>         $nic.SetDNSServerSearchOrder($gw)
>         $nic.SetDynamicDNSRegistration("FALSE")
>     }
> }
> function renameComputer($context) {
>     $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem
>     $ComputerInfo.rename($context["HOSTNAME"]+$ipaddress.Split(".")[3])
> }
> function enableRemoteDesktop()
> {
>     #Get RDP parameters
>     #(Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace
> root\cimv2\terminalservices).AllowTsConnections
>     #Set RDP state
>     #(Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace
> root\cimv2\terminalservices).SetAllowTsConnections(1)
>     #Get RDP Required Authentication
>     #(Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace
> root\cimv2\terminalservices -Filter
> "TerminalName='RDP-tcp'").UserAuthenticationRequired
>     #Set RDP Required Authentication
>     #(Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace
> root\cimv2\terminalservices -Filter
> "TerminalName='RDP-tcp'").SetUserAuthenticationRequired(1)
>     $Terminal = (Get-WmiObject -Class "Win32_TerminalServiceSetting"
> -Namespace root\cimv2\terminalservices).SetAllowTsConnections(1)
>     return $Terminal
> }
> # Create folder Context if unexistant
> if( -not(Test-Path "c:\context\")) {
>  New-Item "c:\context\" -type directory
> }
>
> # Execute the script
> if( -not(Test-Path "c:\context\contextualized") -and(Test-Path
> "D:\context.sh")) {
>     $context = @{}
>     $context = getContext('D:\context.sh')
>     Set-ExecutionPolicy unrestricted -force # not needed if already done
> once on the VM
>     addLocalUser($context)
>     configureNetwork($context)
>     renameComputer($context)
>     enableRemoteDesktop()
>     echo "contextualized" |Out-File ("c:\context\contextualized")
>     restart-computer
> }
> # remember to disable password complexity requirements in computer
> # management while rpeparing the cloud image!
> # Remember to run "Set-ExecutionPolicy bypass -force" before this!
>
> --
> André Monteiro
>
>
> *Carlos Martín Sánchez* cmartin at opennebula.org
> <users%40lists.opennebula.org?Subject=Re%3A%20%5Bone-users%5D%20How%20config%20Windows%20vm%20template%3F&In-Reply-To=%3CBANLkTimxR8Z3MbY_PJjPNqGNafegwYs4wQ%40mail.gmail.com%3E>
> *Thu May 12 02:22:09 PDT 2011*
>
>
>    - Previous message: [one-users] How config Windows vm template?
>    <http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/005192.html>
>    - Next message: [one-users] having a problem when shut down a VM
>    <http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/005193.html>
>    - *Messages sorted by:* [ date ]<http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/date.html#5282> [
>    thread ]<http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/thread.html#5282> [
>    subject ]<http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/subject.html#5282> [
>    author ]<http://lists.opennebula.org/pipermail/users-opennebula.org/2011-May/author.html#5282>
>
> ------------------------------
>
> Hi there,
>
> The contextualization offered by OpenNebula is creating that cdrom and
> context.sh script, but it's up to the guest OS to read that file and
> configure itself.
>
> We only provide linux scripts; you would have to create similar ones. I'm
> not sure how difficult that can be since I don't have experience with
> Windows scripting.
>
>
> If you only need to configure the right IP for your VM, then you can try to
> configure a DHCP server in your network (it can be placed in a VM in the
> same VNet). This has been discussed in the list, hopefully these threads
> will help:
>
> [1] http://www.mail-archive.com/users@lists.opennebula.org/msg01143.html
> [2] http://www.mail-archive.com/users@lists.opennebula.org/msg01395.html
>
> Regards
>
> --
> Carlos Martín, MSc
> Project Major Contributor
> OpenNebula - The Open Source Toolkit for Cloud Computingwww.OpenNebula.org <http://www.opennebula.org/> | cmartin at opennebula.org <http://lists.opennebula.org/listinfo.cgi/users-opennebula.org>
>
>
> 2011/5/6 ddd <xrchina2008 at 163.com <http://lists.opennebula.org/listinfo.cgi/users-opennebula.org>>
>
> >*  hi,all*>*        now,my winxp vm is running.but,config's ip and hostname is not*>* right.*>*        now,windows vm's cd-rom is existing context.sh.*>*        This is my vm config file:*>*                 NAME=WinVista*>*                 CPU=1*>*                 MEMORY=1024*>*                 OS=[boot=hd]*>*                 DISK =[source="/root/images/winxp_test.img", clone=yes,*>* target=hda, readonly=no]*>*                 NIC=[network ="Small network"]*>*                 CONTEXT=[*>*                        hostname   = "$NAME$VMID",*>*                        ip_public  = "$NIC[IP, NETWORK=\"Small network\"]",*>*                        target     ="hdb"*>*                 ]*>*                 GRAPHICS =[type ="vnc",listen ="127.0.0.1", port = "1"]*>*        windows template  need config?how?*>*        Please help me.*>*                                                             ---Rong  Xiong*>**>**>**>**>**>**>**>**>**>* _______________________________________________*>* Users mailing list*>* Users at lists.opennebula.org <http://lists.opennebula.org/listinfo.cgi/users-opennebula.org>*>* http://lists.opennebula.org/listinfo.cgi/users-opennebula.org*>**>**
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opennebula.org
> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opennebula.org/pipermail/users-opennebula.org/attachments/20110811/f3eccfd0/attachment-0003.htm>


More information about the Users mailing list