diff options
Diffstat (limited to 'tests/azure_test.py')
-rwxr-xr-x | tests/azure_test.py | 687 |
1 files changed, 0 insertions, 687 deletions
diff --git a/tests/azure_test.py b/tests/azure_test.py deleted file mode 100755 index fd152b7..0000000 --- a/tests/azure_test.py +++ /dev/null @@ -1,687 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -import imp -import json -import time -import pwd - -# waagent has no '.py' therefore create waagent module import manually. -waagent=imp.load_source('waagent','waagent') - -from waagent import RunGetOutput, Run, LoggerInit - -""" -Test waagent in azure using azure-cli -Usage: - -./azure_test.py --stable_vm_image b4590d9e3ed742e4a1d46e5424aa335e__openSUSE-12.3-v120 --source_disk "http://mystorage.blob.core.windows.net/vhds/my-suse2.vhd" --acct "<storage acct key>" --testname my-osuse --mount_point /mnt/disk --agent_path ../waagent --stable_vm_acct_name MyUserName --stable_vm_acct_pass 'myp455wd' --test_vm_acct_name MyUserName --test_vm_acct_pass 'myp455wd' --azure_location "East US" --part_num 1 --retries 20 --fstype scsi --test_vm_acct_cert /root/.ssh/myCert.pem --stable_vm_acct_cert /root/.ssh/myCert.pem --keep_test_vm_vhd no --teardown_test_vm always --prompt no - -azure_test --vm <stable vm name> --testname <testname> [--acct <storage account>] -[--disk <vhd url to use as initial disk image>] -If --disk is specified, use this vhd as starting point, -otherwise use a copy of the stable vm as the starting vhd. - -Starting VHD is attached to stable vm and the sources are copied to it. -Spin up a new VM using the VHD. -Loop waiting for provisioned. -If not provisioned: - Destroy vm and attach the disk to the stable vm. - Copy the logs to the localhost. - Destroy all created objects except the starting vhd. - Exit(1) -If Provosioned: - Copy the logs to the local host. - Exit(0) - -EXAMPLE: - -sudo ./azure_test.py --vm my-stable-vm-name --disk "http://mystorageaccount.blob.core.windows.net/myvhds/my-new-os.vhd" --acct mylong-unquoted-starage-account-id --testname my-vm-test --mount_point /my-stablevm-mountpoint --agent_path ../waagent --vm_acct_name root --testvm_acct_name azureuser --testvm_acct_pass 'azureuserpassword' --location "East US" --part_num 2 --retry 20 --fstype bsd --testvm_acct_cert /home/azureuser/.ssh/myCert.pem --keep_vhd "once" --teardown "always" --prompt "no" -""" - -def makeDiskImage(di_name,vhd_url,location,copy=False): - """ - Create new data disk image of the VHD. If 'copy' - is set to True, then create a new VHD in the form of myvhd-di.vhd - based on the VHD source name. If 'copy is set to False, re-use the - vhd. Returns return code and diskimageVHD path. Code is 0 on - success or the azure-cli error code upon error. - """ - if copy : - target = os.path.dirname(vhd_url) - target = target+ '/' + di_name + '.vhd' - else : - target = vhd_url - cmd='azure vm disk create --json ' + di_name + ' --blob-url ' + target + ' ' + vhd_url - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log(output) - waagent.Log(str(code)) - return target,code - -def makeVMImage(vmi_name,vhd_url,copy=False): - """ - Create new VM Image based on Disk Image. - Returns 0 on success or error code upon error. - """ - if copy : - target = os.path.dirname(vhd_url) - target = target+ '/' + vmi_name + '.vhd' - else : - target = vhd_url - cmd='azure vm image create --json ' + vmi_name + ' --base-vhd ' + target + ' --os Linux --blob-url ' + vhd_url - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log(str(code)) - waagent.Log(output) - return code - -def makeVM(vm_name,vmi_name,vhd_url,test_name,location,vmuser_name,vmuser_pass,vmuser_cert,copy=False): - """ - Create new VM from the VM Image. - Returns 0 on success or error code upon error. - """ - target=os.path.dirname(vhd_url) - target = target + '/' + test_name + '.vhd' - cmd='azure vm create --json ' - if copy : - cmd += ' --blob-url "' + target + '"' - else : - target=vhd_url - cmd += ' --location "' + location + '"' - if os.path.exists(vmuser_cert): - cmd += ' -t "' + vmuser_cert + '"' - cmd += ' -e 22 ' + vm_name + ' ' + vmi_name + ' ' + vmuser_name + ' \'' +vmuser_pass + '\'' - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log(str(code)) - waagent.Log(output) - retry=3 - while code !=0 and retry > 0 : - time.sleep(5) - code,output=RunGetOutput(cmd,False) - retry -=1 - return target - -def flushDiskImage(di_name,dele=True): - """ - Delete the VM Image. - On error we asume the VM disk image is deleted - """ - cmd='azure vm disk delete --json ' - if dele : - cmd += '--blob-delete ' - cmd+= di_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - -def flushVMImage(vmi_name): - """ - Delete the VM Image. - Always delete the underlying blob. - On error we asume the VM image is deleted. - """ - cmd='azure vm image delete --blob-delete --json ' + vmi_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - -def flushVM(vm_name,dele=False): - """ - Delete the VM. - On error we asume the VM is deleted - """ - cmd='azure vm delete --json ' - if dele : - cmd += ' --blob-delete ' - cmd += vm_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - - -def createStableVMFromVMImage(vm_image,vhd_url): - """ - Create a new stable vm, provisioned with acct and certificate from - the VMImage, using the basepath of vhd_url for the new VM's vhd. - """ - stableVM=testname+'-stable-vm' - return makeVM(stableVM,vm_image,vhd_url,testname+'-stable',location,stableVMaccount,stableVMpass,stableVMCert,copy=True) - -def createStableVMFromVHD(vmi_name,vhd_url): - """ - Create a new stable vm, provisioned with acct and certificate from - the VHD, using the basepath of vhd_url for the new VM's vhd. - """ - makeVMImage(vmi_name,vhd_url,False) - return createStableVMFromVMImage(vmi_name,vhd_url) - -def createDiskImageFromStableVMDisk(vm_name): - """ - Determine the media link for the os disk of the stable vm. - Create vhd disk image copy. <vm_name>-<testname>-di - Return new disk_image_media_path or None on error. - """ - cmd='azure vm disk list --json' - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - if code: - print 'Error is ' + str(code) - waagent.Log( 'Error is ' + str(code)) - return None - j=json.loads(output) - source_media_link=None - for i in j : - if i.has_key('AttachedTo'): - if i['AttachedTo']['RoleName'] == vm_name: - source_media_link=i['MediaLink'] - break - if not source_media_link: - print 'Unable to locate OS disk for ' + vm_name - waagent.Log( 'Unable to locate OS disk for ' + vm_name ) - return None - target_name= testname + '-di' - makeDiskImage(target_name,source_media_link,location,copy=True) - target_media_link=os.path.dirname(source_media_link) + '/' + target_name + '.vhd' - return target_media_link - -def addDiskImageToVM(vm_name,di_name): - """ - Attach the disk image to the 'stableVM'. - Returns the LUN if successful otherwise returns None - NOTE: azure vm show may return json matching the disk image - name yet missing the LUN. When this occurs, the LUN is '0'. - """ - cmd='azure vm disk attach --json ' + vm_name + ' ' + di_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log(str(code)) - waagent.Log(output) - cmd='azure vm show --json ' + vm_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - retries=3 - while code != 0 and retries: - retries-=1 - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - - if code == 0: - jsn=json.loads(output) - for i in jsn['DataDisks']: - if i['DiskName'] == di_name: - if 'Lun' in i : - return i['Lun'] - else : - return u'0' - return None - - -def dropDiskImageFromVM(vm_name,lun): - """ - Detach the disk image from the 'stableVM'. - On Error we assume the disk is no longer attached. - """ - cmd='azure vm disk detach --json ' + vm_name + ' ' + lun - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - -def checkVMProvisioned(vm_name): - cmd='azure vm show --json ' + vm_name - print cmd - waagent.Log( cmd) - code,output=RunGetOutput(cmd,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - if code ==0 : - j=json.loads(output) - print vm_name+' instance status: ', j['InstanceStatus'] - waagent.Log( vm_name+' instance status: ' + j['InstanceStatus']) - if j['InstanceStatus'] == 'ReadyRole': - return True, j['InstanceStatus'] - else : - print 'Error: ' + output , code - waagent.Log( 'Error: ' + output + str(code)) - return False, j['InstanceStatus'] - -def updateAgent(agent_path,vm_name,account,cert,disk_mountpoint,mnt_opts,lun,partnum,provisioned_account): - """ - Copy the agent specified in 'agent' to the Disk - using the 'stableVM'. - """ - retries=30 - retry=0 - cmd='uptime' - while ssh_command(vm_name,account,cmd)[1] != 0 and retry < retries : - time.sleep(10) - retry+=1 - #setup sudo NOPASSWD - pss=stableVMpass.replace('$','\$') - cmd='echo \'' + pss + '\' > /home/' + account + '/pswd ' - ssh_command(vm_name,account,cmd) - cmd='echo \'#!/bin/bash\ncat /home/' + account + '/pswd\n\' > /home/' + account + '/pw.sh' - ssh_command(vm_name,account,cmd) - cmd='chmod +x /home/' + account + '/pw.sh' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A mkdir -p ' + disk_mountpoint - ssh_command(vm_name,account,cmd) - retries=3 - # TODO retires here for the mount - #mount - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A mount ' +mnt_opts + ' ' + lunToDiskName(lun,partnum) + ' ' +disk_mountpoint - waagent.Log( cmd) - retry=0 - while ssh_command(vm_name,account,cmd)[1] not in (0,32) and retry < retries : - if retry == 0: - if 'bsd' in fstype: - fcmd = "export SUDO_ASKPASS=./pw.sh && sudo -A fsck_ffs -y " - else : - fcmd = "export SUDO_ASKPASS=./pw.sh && sudo -A fsck -y " - fcmd += lunToDiskName(lun,partnum) - ssh_command(vm_name,account,fcmd) - time.sleep(2) - retry+=1 - - # remove packaged agent service if present. - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' dpkg -r walinuxagent' - ssh_command(vm_name,account,cmd) # remove Ubuntu walinuxagent agent service if present. - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A rm '+ disk_mountpoint+'/etc/default/walinuxagent' - ssh_command(vm_name,account,cmd) # remove Ubuntu walinuxagent agent service if present. - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' rpm -e WALinuxAgent' - ssh_command(vm_name,account,cmd) - #copy agent - remote_path='/tmp' - print 'scp ' + agent_path + ' to ' + vm_name + ' ' + account + ':' + remote_path - waagent.Log( 'scp ' + agent_path + ' to ' + vm_name + ' ' + account + ':' + remote_path) - retry=0 - while scp_to_host_command(account,vm_name,remote_path,agent_path)[1] != 0 and retry < retries : - time.sleep(2) - retry+=1 - # move agent to /usr/sbin - cmd= 'export SUDO_ASKPASS=./pw.sh && sudo -A cp ' + remote_path +'/waagent '+ disk_mountpoint+'/usr/sbin/waagent' - ssh_command(vm_name,account,cmd) - cmd= 'export SUDO_ASKPASS=./pw.sh && sudo -A chmod 755 '+ disk_mountpoint+'/usr/sbin/waagent' - ssh_command(vm_name,account,cmd) - # Fix the password file - if 'bsd' in fstype: - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A cp /etc/master.passwd ' + disk_mountpoint + '/etc/master.passwd' - ssh_command(vm_name,account,cmd) - else : - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A cp /etc/passwd ' + disk_mountpoint + '/etc/passwd' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A cp /etc/shadow ' + disk_mountpoint + '/etc/shadow' - ssh_command(vm_name,account,cmd) - #remove /var/lib/waagent - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A rm -rf ' + disk_mountpoint + '/var/lib/waagent' - ssh_command(vm_name,account,cmd) - #remove /var/log/waagent* - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A rm -rf ' + disk_mountpoint + '/var/log/waagent*' - ssh_command(vm_name,account,cmd) - #delete the provisioning user - if 'bsd' in fstype: - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' rmuser -y ' + provisioned_account - ssh_command(vm_name,account,cmd) - else : - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' userdel -f ' + provisioned_account - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' groupdel ' + provisioned_account - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A rm -rf ' + disk_mountpoint + '/home/' + provisioned_account - ssh_command(vm_name,account,cmd) - # install agent - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chroot '+ disk_mountpoint+' /usr/sbin/waagent verbose install ' - ssh_command(vm_name,account,cmd) - cmd="export SUDO_ASKPASS=./pw.sh && sudo -A sed -i 's/Verbose=n/Verbose=y/' " + disk_mountpoint+"/etc/waagent.conf" - ssh_command(vm_name,account,cmd) - #umount - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A umount ' + lunToDiskName(lun,partnum) - ssh_command(vm_name,account,cmd) - -def gatherAgentInfo(localpath,vm_name,account,cert,disk_mountpoint,mnt_opts,lun,partnum): - """ - Copy the /var/lib/waagent, and /var/log directories to - localhost:localpath. - """ - retries=30 - retry=0 - cmd='uptime' - while ssh_command(vm_name,account,cmd)[1] != 0 and retry < retries : - time.sleep(10) - retry+=1 - #mount - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A mount ' +mnt_opts + ' ' + lunToDiskName(lun,partnum) + ' ' +disk_mountpoint - print cmd - waagent.Log( cmd) - ssh_command(vm_name,account,cmd) - #copy info - Run("mkdir -p "+ localpath) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A mkdir -p /tmp/results' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A cp -r ' + disk_mountpoint + '/var/log /tmp/results/' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A cp -r ' + disk_mountpoint + '/var/lib/waagent /tmp/results/' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chmod -R 777 /tmp/results' - ssh_command(vm_name,account,cmd) - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A chown -R ' + account + ' /tmp/results' - ssh_command(vm_name,account,cmd) - scp_from_host_command(account,vm_name,'/tmp/results/*',localpath) - #umount - cmd='export SUDO_ASKPASS=./pw.sh && sudo -A umount ' + lunToDiskName(lun,partnum) - print cmd - waagent.Log( cmd) - ssh_command(vm_name,account,cmd) - -def lunToDiskName(lun,partnum): - if 'bsd' in fstype : - return lunToFreeBSDDiskName(lun,partnum) - else : - return lunToScsiDiskName(lun,partnum) - -def lunToScsiDiskName(lun,partnum): - """ - Convert lun to '/dev/sd[chr(ord('c')+lun)]partnum' - """ - return str('/dev/sd'+chr( (ord('c')+int(lun)) ) +str(partnum)) - -def lunToFreeBSDDiskName(lun,partnum): - """ - Convert lun to '/dev/da' + str(lun) + 'p' + partnum - """ - return '/dev/da'+ str(int(lun)) + 'p' + str(partnum) - -def ssh_command(host,account,cmd): - """ - Wrapper for an ssh operation. - """ - if stableVMCert == None: - if not os.path.exists('./pw.sh'): - with open('./pw.sh','w') as F: - F.write('#!/bin/bash\ncat ./pswd\n') - os.system('chmod +x ./pw.sh') - with open('./pswd','w') as F: - F.write(stableVMpass) - req = "export SSH_ASKPASS=./pw.sh && setsid ssh -T -o StrictHostKeyChecking='no' " + account + "@" + host.lower() + ".cloudapp.net \"" + cmd + "\"" - else : - req = "ssh -t -o StrictHostKeyChecking='no' " + account + "@" + host.lower() + ".cloudapp.net \"" + cmd + "\"" - print req - waagent.Log(req) - code,output=RunGetOutput(req,False) - print output,code - waagent.Log(str(code)) - waagent.Log(output.encode('ascii','ignore')) - return output,code - -def scp_to_host_command(account,host,remote_path,local_path): - """ - Wrapper for an scp operation. Always uses -r. - Requires key authentication configured. - """ - req="scp -o StrictHostKeyChecking='no' -r " + local_path + " " + account + "@" + host.lower() + ".cloudapp.net:" + remote_path - print req - waagent.Log( req) - code,output=RunGetOutput(req,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - -def scp_from_host_command(account,host,remote_path,local_path): - """ - Wrapper for an scp operation. Always uses -r. - Requires key authentication configured. - """ - req="scp -r " + account + "@" + host.lower() + ".cloudapp.net:" + remote_path + " " + local_path - print req - waagent.Log( req) - code,output=RunGetOutput(req,False) - print output,code - waagent.Log( str(code)) - waagent.Log(output) - return output,code - -def teardown(name): - diskImageName=os.path.splitext(os.path.basename(sourceVHD))[0]+'-di' - while makeDiskImage(diskImageName,sourceVHD,location,True)[1] !=0 : - time.sleep(20) - lun=addDiskImageToVM(stableVM,diskImageName) - while lun == None : - time.sleep(2) - lun=addDiskImageToVM(stableVM,diskImageName) - out,code=flushVM(vmName,True) - if code != 0 : - vmDisk=out[out.find('disk with name ')+len('disk with name '):out.find(' is currently in use')] - while flushDiskImage(vmDisk,True)[1] != 0 : - time.sleep(5) - out,code=flushVMImage(vmImageName) - if code != 0 : - vmDisk=out[out.find('disk with name ')+len('disk with name '):out.find(' is currently in use')] - while flushDiskImage(vmDisk,True)[1] != 0 : - time.sleep(5) - gatherAgentInfo(localInfo+'/'+name,stableVM,stableVMaccount,stableVMCert,stableVMMountpoint,mountOptions,lun,partNum) - print 'Logs for ' + vmName + ' copied to ' + localInfo + '/' + name - waagent.Log( 'Logs for ' + vmName + ' copied to ' + localInfo + '/' + name) - # detach and delete the disk image - while dropDiskImageFromVM(stableVM,lun)[1] != 0 : - time.sleep(2) - while flushDiskImage(diskImageName,('no' in keep_vhd))[1] != 0 : - time.sleep(2) - out,code=flushVM(stableVM,True) - if code != 0 : - stableVMDisk=out[out.find('disk with name ')+len('disk with name '):out.find(' is currently in use')] - while flushDiskImage(stableVMDisk,True)[1] != 0 : - time.sleep(5) - if stableVMImageName: - while flushVMImage(stableVMImageName,True)[1] != 0 : - time.sleep(2) - -def doPrompt() : - if prompt in ('yes','on'): - raw_input('Press enter to continue:') - -if __name__ == '__main__' : - """ - Create a disk image and attach it to StableVM. - Copy the current sources to it. - Detach and delete the disk image container - Delete the vm image container and the VM. - Create a vm image container, and the VM. - Check the VM for provision succedded: - if so, exit - if provisioning failed: - delete the vm, delete the vm image, create a disk image - from the VM's vhd, attach the disk to the stable VM, copy - /var/log and /var/lib/waagent to the localhost. - """ - stableVM='' - mountOptions='' - stableVMMountpoint='/mnt/disk' # need to ensure this is created if not existing. - sourceVHD='' - location="" - localAgent='/home/ericg/Public/git_repos/private/WALinuxAgent-Private/waagent_freebsd' - localInfo='./logs' - stableVMaccount='' # Need to ensure root permissions for this to work - stableVMpass='' - stableVMCert='' - provisionedVMaccount='' - provisionedVMpass='' - provisionedVMCert='' - account='' - testname='azuretest' - partNum=1 - provision_retries=1 - fstype='scsi' - keep_vhd='no' - teardown_test_vm='fail' - teardown_stable_vm='fail' - prompt = 'yes' - stable_vm_vhd=None - stableVMImageName=None - stable_vm_image=None - logfile='azure_test.log' - """ - We need to create a disk image container and attach it to a stable - vm in order to copy the current sources to it. Then we detach it, - delete the disk image container, create a vm image container, and - the VM. - """ - - for i in range(len(sys.argv)) : - if '--stable_vm' == sys.argv[i] : stableVM=sys.argv[i+1] - elif '--source_disk' == sys.argv[i]: sourceVHD=sys.argv[i+1] - elif '--storage_acct' == sys.argv[i]: account=sys.argv[i+1] - elif '--testname' == sys.argv[i] : testname=sys.argv[i+1] - elif '--stable_vm_mount_point' == sys.argv[i] : stableVMMountpoint=sys.argv[i+1] - elif '--agent_path' == sys.argv[i] : localAgent=sys.argv[i+1] - elif '--stable_vm_acct_name' == sys.argv[i] : stableVMaccount=sys.argv[i+1] - elif '--stable_vm_acct_pass' == sys.argv[i] : stableVMpass=sys.argv[i+1] - elif '--stable_vm_acct_cert' == sys.argv[i] : stableVMCert=sys.argv[i+1] - elif '--test_vm_acct_name' == sys.argv[i] : provisionedVMaccount=sys.argv[i+1] - elif '--test_vm_acct_pass' == sys.argv[i] : provisionedVMpass=sys.argv[i+1] - elif '--test_vm_acct_cert' == sys.argv[i] : provisionedVMCert=sys.argv[i+1] - elif '--azure_location' == sys.argv[i] : location=sys.argv[i+1] - elif '--mount_opts' == sys.argv[i] : mountOptions=sys.argv[i+1] - elif '--part_num' == sys.argv[i] : partNum=sys.argv[i+1] - elif '--retries' == sys.argv[i] : provision_retries=int(sys.argv[i+1]) - elif '--fs_type' == sys.argv[i] : fstype=sys.argv[i+1] - elif '--keep_test_vm_vhd' == sys.argv[i] : keep_vhd=sys.argv[i+1] - elif '--teardown_test_vm' == sys.argv[i] : teardown_test_vm=sys.argv[i+1] - elif '--teardown_stable_vm' == sys.argv[i] : teardown_stable_vm=sys.argv[i+1] - elif '--prompt' == sys.argv[i] : prompt=sys.argv[i+1] - elif '--stable_vm_image' == sys.argv[i] : stable_vm_image=sys.argv[i+1] - elif '--stable_vm_vhd' == sys.argv[i] : stable_vm_vhd=sys.argv[i+1] - elif '--logfile' == sys.argv[i] : logfile=sys.argv[i+1] - - LoggerInit(logfile,'') - waagent.Log("User: "+ pwd.getpwuid(os.geteuid()).pw_name +" Running Command :\n" + reduce(lambda x, y: x+' '+y,sys.argv)) - - if len(stableVM) == 0 and not ( stable_vm_image or stable_vm_vhd ): - print '--vm <stable vm> must be provided unless --stable_vm_image or --stable_vm_vhd' - waagent.Log( '--vm <stable vm> must be provided!') - sys.exit(1) - else: - if stable_vm_image: - sourceVHD=createStableVMFromVMImage(stable_vm_image,sourceVHD) - stableVM=testname+'-stable-vm' - elif stable_vm_vhd: - stableVMImageName=testname+'-stable-vi' - sourceVHD=createStableVMFromVHD(stableVMImageName,stable_vm_vhd) - stableVM=testname+'-stable-vm' - p = False - retries = provision_retries - while not p and retries > 0: - p,out = checkVMProvisioned(stableVM) - if not p: - if 'Failed' in out or 'Timeout' in out : - break - print stableVM + ' Not Provisioned - sleeping on retry:' + str( provision_retries - retries ) - waagent.Log( stableVM + ' Not Provisioned - sleeping on retry:' + str( provision_retries - retries ) ) - time.sleep(30) - retries -= 1 - else : - print stableVM + ' Provision SUCCEEDED.' - waagent.Log( stableVM + ' Provision SUCCEEDED.') - # done creating the stable vm - vmImageName=os.path.splitext(os.path.basename(sourceVHD))[0]+'-vi' - #flushVMImage(vmImageName) - - # if no disk image name is provided we want to clone the stable vm disk. - if not sourceVHD: - sourceVHD=createDiskImageFromStableVMDisk(stableVM) - if not sourceVHD: - print 'Errors - unable to create disk image - assuming created' - waagent.Log( 'Errors - unable to create disk image - assuming created') - diskImageName=os.path.splitext(os.path.basename(sourceVHD))[0] - else : - diskImageName=os.path.splitext(os.path.basename(sourceVHD))[0]+'-di' - diskImageVHD,code=makeDiskImage(diskImageName,sourceVHD,location,True) - if code: - print 'Error - unable to make ' + diskImageName - waagent.Log( 'Error - unable to make ' + diskImageName) - - lun=addDiskImageToVM(stableVM,diskImageName) - while lun == None : - time.sleep(2) - lun=addDiskImageToVM(stableVM,diskImageName) - - doPrompt() - updateAgent(localAgent,stableVM,stableVMaccount,stableVMCert,stableVMMountpoint,mountOptions,lun,partNum,provisionedVMaccount) - doPrompt() - #reboot to prevent stale mount bugs - cmd= 'export SUDO_ASKPASS=./pw.sh && sudo -A reboot' - ssh_command(stableVM,stableVMaccount,cmd) - - while dropDiskImageFromVM(stableVM,lun)[1] != 0 : - time.sleep(2) - while flushDiskImage(diskImageName,False)[1] != 0 : - time.sleep(2) - vmImageName=os.path.splitext(os.path.basename(sourceVHD))[0]+'-vi' - flushVMImage(vmImageName) - vmName=testname+'-vm' - flushVM(vmName) - makeVMImage(vmImageName,diskImageVHD,True) - sourceVHD=makeVM(vmName,vmImageName,sourceVHD,testname,location,provisionedVMaccount,provisionedVMpass,provisionedVMCert,True) - print 'The new source vhd is ' + sourceVHD - waagent.Log( 'The new source vhd is ' + sourceVHD) - p = False - retries = provision_retries - while not p and retries > 0: - p,out = checkVMProvisioned(vmName) - if not p: - if 'Failed' in out or 'Timeout' in out : - break - print vmName + ' Not Provisioned - sleeping on retry:' + str( provision_retries - retries ) - waagent.Log( vmName + ' Not Provisioned - sleeping on retry:' + str( provision_retries - retries ) ) - time.sleep(30) - else : - print vmName + ' Provision SUCCEEDED.' - waagent.Log( vmName + ' Provision SUCCEEDED.') - doPrompt() - if teardown_test_vm in ('success','always'): - teardown(testname+'_pass') - sys.exit(0) - retries -= 1 - - print vmName + ' Provision FAILED.' - waagent.Log( vmName + ' Provision FAILED.') - doPrompt() - if teardown_test_vm in ('fail','always'): - teardown(testname+'_fail') - sys.exit(1) |