mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Extending Config Drive support * Added support for VMware * Build configdrive.iso on ssvm * Added support for VPC and Isolated Networks * Moved implementation to new Service Provider * UI fix: add support for urlencoded userdata * Add support for building systemvm behind a proxy Co-Authored-By: Raf Smeets <raf.smeets@nuagenetworks.net> Co-Authored-By: Frank Maximus <frank.maximus@nuagenetworks.net> Co-Authored-By: Sigert Goeminne <sigert.goeminne@nuagenetworks.net>
141 lines
21 KiB
Batchfile
141 lines
21 KiB
Batchfile
@echo off
|
|
|
|
REM Licensed to the Apache Software Foundation (ASF) under one
|
|
REM or more contributor license agreements. See the NOTICE file
|
|
REM distributed with this work for additional information
|
|
REM regarding copyright ownership. The ASF licenses this file
|
|
REM to you under the Apache License, Version 2.0 (the
|
|
REM "License"); you may not use this file except in compliance
|
|
REM with the License. You may obtain a copy of the License at
|
|
REM
|
|
REM http://www.apache.org/licenses/LICENSE-2.0
|
|
REM
|
|
REM Unless required by applicable law or agreed to in writing,
|
|
REM software distributed under the License is distributed on an
|
|
REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
REM KIND, either express or implied. See the License for the
|
|
REM specific language governing permissions and limitations
|
|
REM under the License.
|
|
|
|
rem ----------------------------------------------------------------------------------------------------------------
|
|
set PasswordReset_Script=cloud-set-guest-password-configdrive.vbs
|
|
echo Set owshNet = CreateObject^("WScript.Network"^) > %PasswordReset_Script%
|
|
echo strComputer = owshNet.ComputerName >> %PasswordReset_Script%
|
|
echo Const HKEY_CURRENT_USER = ^&H80000001 >> %PasswordReset_Script%
|
|
echo registryKeyPath = "SOFTWARE\CLOUDSTACKmd5Checksum\" >> %PasswordReset_Script%
|
|
echo registryKeyName = "PasswordMd5Checksum" >> %PasswordReset_Script%
|
|
echo CDPath = "" >> %PasswordReset_Script%
|
|
echo configLabelName = "config-2" >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Set fso = CreateObject ^("Scripting.FileSystemobject"^) >> %PasswordReset_Script%
|
|
echo For Each drive In fso.Drives >> %PasswordReset_Script%
|
|
echo If drive.DriveType = 4 And drive.IsReady Then >> %PasswordReset_Script%
|
|
echo If drive.VolumeName = configLabelName Then >> %PasswordReset_Script%
|
|
echo CDPath = drive.Path >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo Exit For >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo Next >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo IF CDPath = "" Then >> %PasswordReset_Script%
|
|
echo WScript.Echo "Config Drive not found to set the password to VM" >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo PasswordFileName = "\VM_PASSWORD.txt" >> %PasswordReset_Script%
|
|
echo PasswordFilePath = CDPath ^& "\CLOUDSTACK\PASSWORD" ^& PasswordFileName >> %PasswordReset_Script%
|
|
echo Set ObjFile = fso.OpenTextFile^(PasswordFilePath^) >> %PasswordReset_Script%
|
|
echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
|
|
echo WScript.Echo "Error: " ^& PasswordFilePath ^& " --- " ^& Err.Description >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo Password = ObjFile.ReadLine >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo PasswordMd5checsumFileName = "\VM_PASSWORD_MD5CHECKSUM.txt" >> %PasswordReset_Script%
|
|
echo PasswordMd5checsumFilePath = CDPath ^& "\CLOUDSTACK\PASSWORD" ^& PasswordMd5checsumFileName >> %PasswordReset_Script%
|
|
echo Set ObjFile2 = fso.OpenTextFile^(PasswordMd5checsumFilePath^) >> %PasswordReset_Script%
|
|
echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
|
|
echo WScript.Echo "Error: " ^& PasswordMd5checsumFilePath ^& " --- " ^& Err.Description >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo registryKeyValue = ObjFile2.ReadLine >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo ' The below logic is to make sure script sets the password to VM only when new password appears in config drive >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Set registryObject=GetObject^("winmgmts:{impersonationLevel=impersonate}!\\" ^& strComputer ^& "\root\default:StdRegProv"^) >> %PasswordReset_Script%
|
|
echo If registryObject.EnumKey^(HKEY_CURRENT_USER, registryKeyPath, "", ""^) = 0 Then >> %PasswordReset_Script%
|
|
echo registryObject.GetStringValue HKEY_CURRENT_USER, registryKeyPath, registryKeyName, previousRegistryKeyValue >> %PasswordReset_Script%
|
|
echo If ^(previousRegistryKeyValue ^<^> registryKeyValue^) Then >> %PasswordReset_Script%
|
|
echo SavePasswordChecksum^(^) >> %PasswordReset_Script%
|
|
echo SetPasswordToVM^(^) >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo Else >> %PasswordReset_Script%
|
|
echo Return = registryObject.CreateKey^(HKEY_CURRENT_USER, registryKeyPath^) >> %PasswordReset_Script%
|
|
echo If ^(Return = 0^) And ^(Err.Number = 0^) Then >> %PasswordReset_Script%
|
|
echo SavePasswordChecksum^(^) >> %PasswordReset_Script%
|
|
echo SetPasswordToVM^(^) >> %PasswordReset_Script%
|
|
echo Else >> %PasswordReset_Script%
|
|
echo Wscript.Echo Now ^& vbTab ^& "Create Registry Key failed while setting the password to VM. Error = " ^& Err.Number >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo ' >> %PasswordReset_Script%
|
|
echo ' Procedure to set the password to the VM >> %PasswordReset_Script%
|
|
echo ' >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Sub SetPasswordToVM^(^) >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Set objUser = GetObject^("WinNT://" ^& strComputer ^& "/administrator"^) >> %PasswordReset_Script%
|
|
echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
|
|
echo WScript.Echo Now ^& vbTab ^& "Error connecting to " ^& strComputer ^& " --- " ^& Err.Description >> %PasswordReset_Script%
|
|
echo Err.Clear >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo Else >> %PasswordReset_Script%
|
|
echo Select Case Password >> %PasswordReset_Script%
|
|
echo Case "" >> %PasswordReset_Script%
|
|
echo WScript.Echo Now ^& vbTab ^& "Config drive did not have any password for the VM" >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo Case "saved_password" >> %PasswordReset_Script%
|
|
echo WScript.Echo Now ^& vbTab ^& "VM has already saved the password" >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo Case else >> %PasswordReset_Script%
|
|
echo objUser.Setpassword Password >> %PasswordReset_Script%
|
|
echo objUser.Setinfo >> %PasswordReset_Script%
|
|
echo If Err.Number ^<^> 0 Then >> %PasswordReset_Script%
|
|
echo wscript.Echo Now ^& vbTab ^& "Error setting password for " ^& strComputer ^& "\Administrator" ^& " --- " ^& Err.Description >> %PasswordReset_Script%
|
|
echo Err.Clear >> %PasswordReset_Script%
|
|
echo WScript.Quit >> %PasswordReset_Script%
|
|
echo Else >> %PasswordReset_Script%
|
|
echo WScript.Echo Now ^& vbTab ^& "Password set for " ^& strComputer ^& "\Administrator" >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo End Select >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo End Sub >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Sub SavePasswordChecksum^(^) >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo Return = registryObject.SetStringValue^(HKEY_CURRENT_USER, registryKeyPath, registryKeyName, registryKeyValue^) >> %PasswordReset_Script%
|
|
echo If ^(Return ^<^> 0^) Or ^(Err.Number ^<^> 0^) Then >> %PasswordReset_Script%
|
|
echo Wscript.Echo Now ^& vbTab ^& "SetStringValue to Registry Key failed while setting the password to VM. Error = " ^& Err.Number >> %PasswordReset_Script%
|
|
echo End If >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
echo End Sub >> %PasswordReset_Script%
|
|
echo. >> %PasswordReset_Script%
|
|
rem -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
cscript //Nologo %PasswordReset_Script%
|