|
38 | 38 | DiskOffering, |
39 | 39 | Domain, |
40 | 40 | Project, |
| 41 | + ResourceSchedule, |
41 | 42 | ServiceOffering, |
42 | 43 | Template, |
43 | 44 | VirtualMachine, |
|
65 | 66 | DEFAULT_INTERVAL = 30 |
66 | 67 | DEFAULT_QUIETTIME = 60 |
67 | 68 | NAME_PREFIX = "AS-VmGroup-" |
| 69 | +SCHEDULED_RESOURCE_TYPE_ASG = "AutoScaleVmGroup" |
68 | 70 |
|
69 | 71 | CONFIG_NAME_DISK_CONTROLLER = "vmware.root.disk.controller" |
70 | 72 | OS_DEFAULT = "osdefault" |
@@ -860,13 +862,81 @@ def test_04_stop_remove_vm_in_vmgroup(self): |
860 | 862 |
|
861 | 863 | VirtualMachine.delete(vm, self.apiclient, expunge=True) |
862 | 864 |
|
863 | | - @attr(tags=["advanced"], required_hardware="false") |
864 | | - def test_05_remove_vmgroup(self): |
865 | | - """ Verify removal of AutoScaling VM Group""" |
866 | | - self.message("Running test_05_remove_vmgroup") |
| 865 | + @attr(tags=["advanced", "vj", "smoke"], required_hardware="false") |
| 866 | + def test_05_autoscaling_vmgroup_schedule_update(self): |
| 867 | + """Verify resource scheduling updates AutoScale VM Group min/max members""" |
| 868 | + self.message("Running test_05_autoscaling_vmgroup_schedule_update") |
867 | 869 |
|
868 | | - self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=False, expected=False) |
869 | | - self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=True, expected=True) |
| 870 | + vmgroups = AutoScaleVmGroup.list( |
| 871 | + self.regular_user_apiclient, |
| 872 | + id=self.autoscaling_vmgroup.id |
| 873 | + ) |
| 874 | + self.assertEqual( |
| 875 | + isinstance(vmgroups, list), |
| 876 | + True, |
| 877 | + "List autoscale vm groups should return a valid list" |
| 878 | + ) |
| 879 | + self.assertEqual( |
| 880 | + len(vmgroups) > 0, |
| 881 | + True, |
| 882 | + "Expected autoscale vm group to exist" |
| 883 | + ) |
| 884 | + vmgroup = vmgroups[0] |
| 885 | + |
| 886 | + current_min_members = int(vmgroup.minmembers) |
| 887 | + current_max_members = int(vmgroup.maxmembers) |
| 888 | + new_min_members = current_min_members + 1 |
| 889 | + new_max_members = current_max_members + 1 |
| 890 | + |
| 891 | + schedule = ResourceSchedule.create( |
| 892 | + self.regular_user_apiclient, |
| 893 | + SCHEDULED_RESOURCE_TYPE_ASG, |
| 894 | + self.autoscaling_vmgroup.id, |
| 895 | + "update", |
| 896 | + "* * * * *", |
| 897 | + datetime.datetime.now().astimezone().tzinfo, |
| 898 | + (datetime.datetime.now() + datetime.timedelta(seconds=5)).strftime( |
| 899 | + "%Y-%m-%d %H:%M:%S" |
| 900 | + ), |
| 901 | + enabled=True, |
| 902 | + details=[{ |
| 903 | + "minmembers": str(new_min_members)}, |
| 904 | + { |
| 905 | + "maxmembers": str(new_max_members) |
| 906 | + }] |
| 907 | + ) |
| 908 | + self.cleanup.append(schedule) |
| 909 | + self.message("Created AutoScale VM Group schedule with ID: %s" % schedule.id) |
| 910 | + |
| 911 | + schedules = ResourceSchedule.list( |
| 912 | + self.regular_user_apiclient, |
| 913 | + SCHEDULED_RESOURCE_TYPE_ASG, |
| 914 | + self.autoscaling_vmgroup.id, |
| 915 | + id=schedule.id |
| 916 | + ) |
| 917 | + self.assertEqual( |
| 918 | + isinstance(schedules, list), |
| 919 | + True, |
| 920 | + "Check list response returns a valid list for ASG schedules", |
| 921 | + ) |
| 922 | + self.assertNotEqual(len(schedules), 0, "Check ASG schedule list") |
| 923 | + |
| 924 | + # Poll for up to 4 minutes to allow the scheduler worker to run and apply update |
| 925 | + schedule_worked = False |
| 926 | + for _ in range(0, 24): |
| 927 | + time.sleep(10) |
| 928 | + updated_group = AutoScaleVmGroup.list( |
| 929 | + self.regular_user_apiclient, |
| 930 | + id=self.autoscaling_vmgroup.id |
| 931 | + )[0] |
| 932 | + if int(updated_group.minmembers) == new_min_members and int(updated_group.maxmembers) == new_max_members: |
| 933 | + schedule_worked = True |
| 934 | + break |
| 935 | + |
| 936 | + self.assertTrue( |
| 937 | + schedule_worked, |
| 938 | + "Expected scheduled action to update AutoScale VM Group min/max members" |
| 939 | + ) |
870 | 940 |
|
871 | 941 | @attr(tags=["advanced"], required_hardware="false") |
872 | 942 | def test_06_autoscaling_vmgroup_on_project_network(self): |
@@ -1211,3 +1281,11 @@ def test_07_autoscaling_vmgroup_on_vpc_network(self): |
1211 | 1281 |
|
1212 | 1282 | self.delete_vmgroup(autoscaling_vmgroup_vpc, self.regular_user_apiclient, cleanup=False, expected=False) |
1213 | 1283 | self.delete_vmgroup(autoscaling_vmgroup_vpc, self.regular_user_apiclient, cleanup=True, expected=True) |
| 1284 | + |
| 1285 | + @attr(tags=["advanced", "vj"], required_hardware="false") |
| 1286 | + def test_05_remove_vmgroup(self): |
| 1287 | + """ Verify removal of AutoScaling VM Group""" |
| 1288 | + self.message("Running test_05_remove_vmgroup") |
| 1289 | + |
| 1290 | + self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=False, expected=False) |
| 1291 | + self.delete_vmgroup(self.autoscaling_vmgroup, self.regular_user_apiclient, cleanup=True, expected=True) |
0 commit comments