@spinnaker/google 2026.3.2 → 2026.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/autoscalingPolicy/GceAutoScalingFieldLayout.d.ts +2 -2
  2. package/dist/domain/loadBalancer.d.ts +6 -3
  3. package/dist/image/ImageSelect.d.ts +1 -1
  4. package/dist/index.js +159 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/loadBalancer/configure/common/gceLoadBalancerModels.d.ts +13 -2
  7. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerEditor.d.ts +3 -0
  8. package/dist/loadBalancer/configure/http/GceHttpLoadBalancerModal.d.ts +1 -1
  9. package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.d.ts +30 -0
  10. package/dist/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.d.ts +53 -0
  11. package/dist/loadBalancer/httpLoadBalancerUtils.service.d.ts +3 -1
  12. package/dist/serverGroup/configure/wizard/GceCloneServerGroupModal.d.ts +3 -0
  13. package/dist/serverGroup/configure/wizard/GceServerGroupWizard.types.d.ts +1 -0
  14. package/dist/serverGroup/configure/wizard/customInstance/CustomInstanceConfigurer.d.ts +1 -1
  15. package/dist/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.d.ts +2 -2
  16. package/dist/serverGroup/configure/wizard/pages/AdvancedSettings.d.ts +3 -0
  17. package/dist/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.d.ts +1 -0
  18. package/dist/serverGroup/configure/wizard/pages/Policies.d.ts +21 -3
  19. package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +1 -0
  20. package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacity.d.ts +1 -0
  21. package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +1 -0
  22. package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +1 -0
  23. package/dist/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.d.ts +2 -2
  24. package/dist/serverGroup/details/GceInstanceFlexibilityPolicyDetails.d.ts +2 -2
  25. package/dist/serverGroup/details/stateful/MarkDiskStatefulButton.d.ts +2 -2
  26. package/dist/serverGroup/details/stateful/UpdateBootImageButton.d.ts +2 -2
  27. package/package.json +5 -5
  28. package/src/autoHealingPolicy/GceAutoHealingPolicyEditor.spec.tsx +68 -52
  29. package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.spec.tsx +43 -50
  30. package/src/autoscalingPolicy/GceAutoscalingPolicyEditor.tsx +1 -1
  31. package/src/autoscalingPolicy/GceAutoscalingPolicyWriter.spec.ts +1 -1
  32. package/src/domain/loadBalancer.ts +6 -3
  33. package/src/gce.module.spec.ts +132 -153
  34. package/src/instance/details/GceInstanceDetails.spec.tsx +86 -83
  35. package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.spec.tsx +162 -121
  36. package/src/loadBalancer/configure/choice/GceLoadBalancerChoiceModal.tsx +13 -1
  37. package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.spec.tsx +47 -30
  38. package/src/loadBalancer/configure/common/GceProxyLoadBalancerEditor.tsx +2 -1
  39. package/src/loadBalancer/configure/common/GceProxyLoadBalancerModal.spec.tsx +85 -57
  40. package/src/loadBalancer/configure/common/gceLoadBalancerData.spec.ts +17 -16
  41. package/src/loadBalancer/configure/common/gceLoadBalancerModels.spec.ts +230 -5
  42. package/src/loadBalancer/configure/common/gceLoadBalancerModels.ts +186 -22
  43. package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.spec.ts +298 -2
  44. package/src/loadBalancer/configure/common/gceLoadBalancerSubmission.ts +35 -5
  45. package/src/loadBalancer/configure/common/useGceLoadBalancerData.spec.tsx +37 -46
  46. package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.spec.tsx +399 -58
  47. package/src/loadBalancer/configure/http/GceHttpLoadBalancerEditor.tsx +148 -41
  48. package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.spec.tsx +169 -36
  49. package/src/loadBalancer/configure/http/GceHttpLoadBalancerListenerEditor.tsx +80 -12
  50. package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.spec.tsx +224 -124
  51. package/src/loadBalancer/configure/http/GceHttpLoadBalancerModal.tsx +8 -2
  52. package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.spec.tsx +57 -22
  53. package/src/loadBalancer/configure/http/GceHttpLoadBalancerResourceEditors.tsx +21 -0
  54. package/src/loadBalancer/configure/http/GceHttpLoadBalancerRoutingEditor.spec.tsx +24 -20
  55. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerEditor.spec.tsx +41 -32
  56. package/src/loadBalancer/configure/network/GceNetworkLoadBalancerModal.spec.tsx +35 -30
  57. package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.spec.tsx +443 -0
  58. package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerEditor.tsx +401 -0
  59. package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.spec.tsx +330 -0
  60. package/src/loadBalancer/configure/network/GceRegionalExternalNetworkLoadBalancerModal.tsx +348 -0
  61. package/src/loadBalancer/details/gceLoadBalancerDetails.spec.tsx +439 -35
  62. package/src/loadBalancer/details/gceLoadBalancerDetails.tsx +104 -21
  63. package/src/loadBalancer/httpLoadBalancerUtils.service.spec.ts +126 -0
  64. package/src/loadBalancer/httpLoadBalancerUtils.service.ts +27 -11
  65. package/src/loadBalancer/loadBalancer.setTransformer.spec.ts +165 -0
  66. package/src/loadBalancer/loadBalancer.setTransformer.ts +15 -2
  67. package/src/pipeline/stages/googleStageConfig.spec.js +22 -16
  68. package/src/securityGroup/configure/GceSecurityGroupModal.spec.tsx +177 -193
  69. package/src/securityGroup/configure/GceSecurityGroupModal.tsx +14 -2
  70. package/src/securityGroup/details/GceSecurityGroupDetails.spec.tsx +69 -78
  71. package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +35 -15
  72. package/src/serverGroup/configure/serverGroupConfiguration.service.js +7 -1
  73. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +74 -4
  74. package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.spec.tsx +593 -855
  75. package/src/serverGroup/configure/wizard/GceCloneServerGroupModal.tsx +120 -38
  76. package/src/serverGroup/configure/wizard/GceServerGroupWizard.types.ts +1 -0
  77. package/src/serverGroup/configure/wizard/GceServerGroupWizardPage.spec.tsx +53 -50
  78. package/src/serverGroup/configure/wizard/customInstance/GceCustomInstanceBuilder.spec.tsx +65 -49
  79. package/src/serverGroup/configure/wizard/hiddenMetadataKeys.value.js +1 -0
  80. package/src/serverGroup/configure/wizard/pages/AdvancedSettings.spec.tsx +101 -108
  81. package/src/serverGroup/configure/wizard/pages/AdvancedSettings.tsx +32 -28
  82. package/src/serverGroup/configure/wizard/pages/GceServerGroupFirewalls.spec.tsx +60 -59
  83. package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.spec.tsx +240 -114
  84. package/src/serverGroup/configure/wizard/pages/GceServerGroupLoadBalancers.tsx +152 -63
  85. package/src/serverGroup/configure/wizard/pages/Policies.spec.tsx +93 -48
  86. package/src/serverGroup/configure/wizard/pages/Policies.tsx +80 -55
  87. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.spec.tsx +123 -94
  88. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +24 -18
  89. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.spec.tsx +152 -133
  90. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacity.tsx +40 -37
  91. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.spec.tsx +66 -60
  92. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +8 -2
  93. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.spec.tsx +131 -101
  94. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +29 -28
  95. package/src/serverGroup/configure/wizard/zones/GceInstanceFlexibilityConfigurer.spec.tsx +104 -81
  96. package/src/serverGroup/details/GceInstanceFlexibilityPolicyDetails.spec.tsx +10 -11
  97. package/src/serverGroup/details/autoHealingPolicy/GceAutoHealingPolicyDetails.spec.tsx +51 -59
  98. package/src/serverGroup/details/autoHealingPolicy/modal/GceUpsertAutoHealingPolicyModal.spec.tsx +3 -3
  99. package/src/serverGroup/details/autoscalingPolicy/GceAutoscalingPolicyDetails.spec.tsx +49 -58
  100. package/src/serverGroup/details/autoscalingPolicy/modal/GceUpsertAutoscalingPolicyModal.spec.tsx +3 -3
  101. package/src/serverGroup/details/gceServerGroupDetails.spec.tsx +162 -141
  102. package/src/serverGroup/details/resize/GceResizeServerGroupModal.spec.tsx +102 -86
  103. package/src/serverGroup/details/resize/GceResizeServerGroupModal.tsx +4 -0
  104. package/src/serverGroup/details/rollback/GceRollbackServerGroupModal.spec.tsx +40 -31
  105. package/src/serverGroup/serverGroup.transformer.js +1 -0
  106. package/src/serverGroup/serverGroup.transformer.spec.js +48 -0
  107. package/src/validation/ApplicationNameValidator.spec.ts +1 -1
  108. /package/dist/{gce.logo2ae85d8704b1d6b8.png → gce.logoChI3w_A5.png} +0 -0
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { shallow } from 'enzyme';
2
+ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
3
3
 
4
4
  import { ConfirmationModalService } from '@spinnaker/core';
5
5
 
@@ -30,7 +30,7 @@ describe('GceAutoscalingPolicyDetails', () => {
30
30
  };
31
31
 
32
32
  it('summarizes zero-valued metrics, scale-in controls, and schedules', () => {
33
- const wrapper = shallow(
33
+ const { container } = render(
34
34
  <GceAutoscalingPolicyDetails
35
35
  application={application}
36
36
  mutationsEnabled={true}
@@ -39,16 +39,15 @@ describe('GceAutoscalingPolicyDetails', () => {
39
39
  />,
40
40
  );
41
41
 
42
- expect(wrapper.text()).toContain('CPU Usage');
43
- expect(wrapper.text()).toContain('0%');
44
- expect(wrapper.text()).toContain('Max Scaled-in Replicas');
45
- expect(wrapper.text()).toContain('overnight (disabled)');
42
+ expect(container).toHaveTextContent('CPU Usage: 0%');
43
+ expect(container).toHaveTextContent('Max Scaled-in Replicas');
44
+ expect(container).toHaveTextContent('overnight (disabled)');
46
45
  });
47
46
 
48
47
  it('opens edit after managed-resource confirmation proceeds', async () => {
49
- const show = spyOn(GceUpsertAutoscalingPolicyModal, 'show');
50
- const confirm = spyOn(ConfirmationModalService, 'confirm').and.returnValue(Promise.resolve() as any);
51
- const wrapper = shallow(
48
+ const show = vi.spyOn(GceUpsertAutoscalingPolicyModal, 'show').mockReturnValue(undefined);
49
+ const confirm = vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(Promise.resolve() as any);
50
+ render(
52
51
  <GceAutoscalingPolicyDetails
53
52
  application={application}
54
53
  mutationsEnabled={true}
@@ -57,19 +56,17 @@ describe('GceAutoscalingPolicyDetails', () => {
57
56
  />,
58
57
  );
59
58
 
60
- wrapper.find('[data-testid="edit-autoscaling-policy"]').simulate('click');
59
+ fireEvent.click(screen.getByTestId('edit-autoscaling-policy'));
61
60
  expect(show).not.toHaveBeenCalled();
62
- await Promise.resolve();
63
- await Promise.resolve();
64
61
 
65
- expect(confirm).toHaveBeenCalledWith(jasmine.objectContaining({ header: 'Pause Management?' }));
66
- expect(show).toHaveBeenCalledWith({ application, serverGroup: managedServerGroup, policy });
62
+ expect(confirm).toHaveBeenCalledWith(expect.objectContaining({ header: 'Pause Management?' }));
63
+ await waitFor(() => expect(show).toHaveBeenCalledWith({ application, serverGroup: managedServerGroup, policy }));
67
64
  });
68
65
 
69
66
  it('does not open edit when managed-resource confirmation is cancelled', async () => {
70
- const show = spyOn(GceUpsertAutoscalingPolicyModal, 'show');
71
- spyOn(ConfirmationModalService, 'confirm').and.returnValue(Promise.reject() as any);
72
- const wrapper = shallow(
67
+ const show = vi.spyOn(GceUpsertAutoscalingPolicyModal, 'show').mockReturnValue(undefined);
68
+ vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(Promise.reject() as any);
69
+ render(
73
70
  <GceAutoscalingPolicyDetails
74
71
  application={application}
75
72
  mutationsEnabled={true}
@@ -78,17 +75,16 @@ describe('GceAutoscalingPolicyDetails', () => {
78
75
  />,
79
76
  );
80
77
 
81
- wrapper.find('[data-testid="edit-autoscaling-policy"]').simulate('click');
82
- await Promise.resolve();
83
- await Promise.resolve();
78
+ fireEvent.click(screen.getByTestId('edit-autoscaling-policy'));
79
+ await waitFor(() => expect(ConfirmationModalService.confirm).toHaveBeenCalled());
84
80
 
85
81
  expect(show).not.toHaveBeenCalled();
86
82
  });
87
83
 
88
84
  it('opens add after managed-resource confirmation proceeds', async () => {
89
- const show = spyOn(GceUpsertAutoscalingPolicyModal, 'show');
90
- const confirm = spyOn(ConfirmationModalService, 'confirm').and.returnValue(Promise.resolve() as any);
91
- const wrapper = shallow(
85
+ const show = vi.spyOn(GceUpsertAutoscalingPolicyModal, 'show').mockReturnValue(undefined);
86
+ const confirm = vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(Promise.resolve() as any);
87
+ render(
92
88
  <GceAutoscalingPolicyDetails
93
89
  application={application}
94
90
  mutationsEnabled={true}
@@ -97,19 +93,17 @@ describe('GceAutoscalingPolicyDetails', () => {
97
93
  />,
98
94
  );
99
95
 
100
- wrapper.find('[data-testid="add-autoscaling-policy"]').simulate('click');
96
+ fireEvent.click(screen.getByTestId('add-autoscaling-policy'));
101
97
  expect(show).not.toHaveBeenCalled();
102
- await Promise.resolve();
103
- await Promise.resolve();
104
98
 
105
- expect(confirm).toHaveBeenCalledWith(jasmine.objectContaining({ header: 'Pause Management?' }));
106
- expect(show).toHaveBeenCalledWith({ application, serverGroup: managedServerGroup });
99
+ expect(confirm).toHaveBeenCalledWith(expect.objectContaining({ header: 'Pause Management?' }));
100
+ await waitFor(() => expect(show).toHaveBeenCalledWith({ application, serverGroup: managedServerGroup }));
107
101
  });
108
102
 
109
103
  it('does not open add when managed-resource confirmation is cancelled', async () => {
110
- const show = spyOn(GceUpsertAutoscalingPolicyModal, 'show');
111
- spyOn(ConfirmationModalService, 'confirm').and.returnValue(Promise.reject() as any);
112
- const wrapper = shallow(
104
+ const show = vi.spyOn(GceUpsertAutoscalingPolicyModal, 'show').mockReturnValue(undefined);
105
+ vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(Promise.reject() as any);
106
+ render(
113
107
  <GceAutoscalingPolicyDetails
114
108
  application={application}
115
109
  mutationsEnabled={true}
@@ -118,20 +112,19 @@ describe('GceAutoscalingPolicyDetails', () => {
118
112
  />,
119
113
  );
120
114
 
121
- wrapper.find('[data-testid="add-autoscaling-policy"]').simulate('click');
122
- await Promise.resolve();
123
- await Promise.resolve();
115
+ fireEvent.click(screen.getByTestId('add-autoscaling-policy'));
116
+ await waitFor(() => expect(ConfirmationModalService.confirm).toHaveBeenCalled());
124
117
 
125
118
  expect(show).not.toHaveBeenCalled();
126
119
  });
127
120
 
128
121
  it('offers delete confirmation after managed-resource confirmation proceeds', async () => {
129
- const confirm = spyOn(ConfirmationModalService, 'confirm').and.returnValues(
130
- Promise.resolve() as any,
131
- Promise.resolve() as any,
132
- );
133
- const deletePolicy = spyOn(GceAutoscalingPolicyWriter, 'deleteAutoscalingPolicy');
134
- const wrapper = shallow(
122
+ const confirm = vi
123
+ .spyOn(ConfirmationModalService, 'confirm')
124
+ .mockReturnValueOnce(Promise.resolve() as any)
125
+ .mockReturnValueOnce(Promise.resolve() as any);
126
+ const deletePolicy = vi.spyOn(GceAutoscalingPolicyWriter, 'deleteAutoscalingPolicy').mockReturnValue(undefined);
127
+ render(
135
128
  <GceAutoscalingPolicyDetails
136
129
  application={application}
137
130
  mutationsEnabled={true}
@@ -140,12 +133,10 @@ describe('GceAutoscalingPolicyDetails', () => {
140
133
  />,
141
134
  );
142
135
 
143
- wrapper.find('[data-testid="delete-autoscaling-policy"]').simulate('click');
144
- await Promise.resolve();
145
- await Promise.resolve();
136
+ fireEvent.click(screen.getByTestId('delete-autoscaling-policy'));
137
+ await waitFor(() => expect(confirm.mock.calls.length).toBe(2));
146
138
 
147
- expect(confirm.calls.count()).toBe(2);
148
- const deleteConfirmation = confirm.calls.mostRecent().args[0];
139
+ const deleteConfirmation = confirm.mock.lastCall[0];
149
140
  deleteConfirmation.submitMethod();
150
141
 
151
142
  expect(deletePolicy).toHaveBeenCalledWith(application, managedServerGroup);
@@ -155,9 +146,9 @@ describe('GceAutoscalingPolicyDetails', () => {
155
146
  const cancelledConfirmation = {
156
147
  then: (_onProceed: () => void, onCancel: () => void) => Promise.resolve(onCancel()),
157
148
  } as any;
158
- const confirm = spyOn(ConfirmationModalService, 'confirm').and.returnValue(cancelledConfirmation);
159
- const deletePolicy = spyOn(GceAutoscalingPolicyWriter, 'deleteAutoscalingPolicy');
160
- const wrapper = shallow(
149
+ const confirm = vi.spyOn(ConfirmationModalService, 'confirm').mockReturnValue(cancelledConfirmation);
150
+ const deletePolicy = vi.spyOn(GceAutoscalingPolicyWriter, 'deleteAutoscalingPolicy').mockReturnValue(undefined);
151
+ render(
161
152
  <GceAutoscalingPolicyDetails
162
153
  application={application}
163
154
  mutationsEnabled={true}
@@ -166,17 +157,16 @@ describe('GceAutoscalingPolicyDetails', () => {
166
157
  />,
167
158
  );
168
159
 
169
- wrapper.find('[data-testid="delete-autoscaling-policy"]').simulate('click');
170
- await Promise.resolve();
171
- await Promise.resolve();
160
+ fireEvent.click(screen.getByTestId('delete-autoscaling-policy'));
161
+ await waitFor(() => expect(confirm).toHaveBeenCalled());
172
162
 
173
- expect(confirm.calls.count()).toBe(1);
174
- expect(confirm).toHaveBeenCalledWith(jasmine.objectContaining({ header: 'Pause Management?' }));
163
+ expect(confirm.mock.calls.length).toBe(1);
164
+ expect(confirm).toHaveBeenCalledWith(expect.objectContaining({ header: 'Pause Management?' }));
175
165
  expect(deletePolicy).not.toHaveBeenCalled();
176
166
  });
177
167
 
178
168
  it('hides all mutation actions when mutations are disabled', () => {
179
- const details = shallow(
169
+ const details = render(
180
170
  <GceAutoscalingPolicyDetails
181
171
  application={application}
182
172
  mutationsEnabled={false}
@@ -184,7 +174,10 @@ describe('GceAutoscalingPolicyDetails', () => {
184
174
  policy={policy}
185
175
  />,
186
176
  );
187
- const emptyDetails = shallow(
177
+ expect(details.queryByTestId('edit-autoscaling-policy')).not.toBeInTheDocument();
178
+ expect(details.queryByTestId('delete-autoscaling-policy')).not.toBeInTheDocument();
179
+ details.unmount();
180
+ const emptyDetails = render(
188
181
  <GceAutoscalingPolicyDetails
189
182
  application={application}
190
183
  mutationsEnabled={false}
@@ -193,8 +186,6 @@ describe('GceAutoscalingPolicyDetails', () => {
193
186
  />,
194
187
  );
195
188
 
196
- expect(details.find('[data-testid="edit-autoscaling-policy"]').exists()).toBe(false);
197
- expect(details.find('[data-testid="delete-autoscaling-policy"]').exists()).toBe(false);
198
- expect(emptyDetails.isEmptyRender()).toBe(true);
189
+ expect(emptyDetails.container).toBeEmptyDOMElement();
199
190
  });
200
191
  });
@@ -26,13 +26,13 @@ describe('GceUpsertAutoscalingPolicyModal', () => {
26
26
 
27
27
  it('retains edited policy state when task creation is rejected', async () => {
28
28
  const rejection = { failureMessage: 'No permission' };
29
- spyOn(GceAutoscalingPolicyWriter, 'upsertAutoscalingPolicy').and.returnValue(Promise.reject(rejection));
29
+ vi.spyOn(GceAutoscalingPolicyWriter, 'upsertAutoscalingPolicy').mockReturnValue(Promise.reject(rejection));
30
30
  const modal = new GceUpsertAutoscalingPolicyModal({
31
31
  application: { name: 'my-app' },
32
32
  serverGroup: { account: 'my-account', name: 'my-app-main-v001', region: 'us-central1' },
33
33
  policy: { minNumReplicas: 0, cpuUtilization: { utilizationTarget: 0.5 } },
34
- closeModal: jasmine.createSpy('closeModal'),
35
- dismissModal: jasmine.createSpy('dismissModal'),
34
+ closeModal: vi.fn(),
35
+ dismissModal: vi.fn(),
36
36
  } as any);
37
37
  const editedPolicy = { minNumReplicas: 0, cpuUtilization: { utilizationTarget: 0 } };
38
38
  modal.state.policy = editedPolicy;