We would certainly be interested in hearing about your experiences with this!
Thanks, Rob 2011/8/11 Carlos Martín Sánchez <[email protected]>: > 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 | [email protected] > > > 2011/8/5 André Monteiro <[email protected]> >> >> Hello, >> >> I've been working in a windows script to contextualize VMs. >> 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 [email protected] and [email protected] ########### >> >> [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 >> Thu May 12 02:22:09 PDT 2011 >> >> Previous message: [one-users] How config Windows vm template? >> Next message: [one-users] having a problem when shut down a VM >> Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] >> >> ________________________________ >> >> 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/[email protected]/msg01143.html >> [2] http://www.mail-archive.com/[email protected]/msg01395.html >> >> Regards >> >> -- >> 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/5/6 ddd <xrchina2008 at 163.com> >> >> > 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 >> > >> > >> >> _______________________________________________ >> Users mailing list >> [email protected] >> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org >> > > > _______________________________________________ > Users mailing list > [email protected] > http://lists.opennebula.org/listinfo.cgi/users-opennebula.org > > -- Robert E. Parrott, Ph.D. (Phys. '06) Director, Academic Computing Harvard University Sch. of Eng. and App. Sci. Maxwell-Dworkin 211, 33 Oxford St. Cambridge, MA 02138 (617)-496-1520 _______________________________________________ Users mailing list [email protected] http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
