@spinnaker/cloudfoundry 0.0.0-main-2

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 (286) hide show
  1. package/CHANGELOG.md +1085 -0
  2. package/LICENSE.txt +203 -0
  3. package/dist/cf.module.d.ts +24 -0
  4. package/dist/cf.settings.d.ts +7 -0
  5. package/dist/common/applicationName.validator.d.ts +1 -0
  6. package/dist/deploymentStrategy/CloudFoundryDeploymentStrategySelector.d.ts +21 -0
  7. package/dist/deploymentStrategy/strategies/redblack/redblack.strategy.d.ts +10 -0
  8. package/dist/deploymentStrategy/strategies/rollingredblack/AdditionalFields.d.ts +22 -0
  9. package/dist/domain/ICloudFoundryAccount.d.ts +7 -0
  10. package/dist/domain/ICloudFoundryApplication.d.ts +4 -0
  11. package/dist/domain/ICloudFoundryCluster.d.ts +5 -0
  12. package/dist/domain/ICloudFoundryDroplet.d.ts +19 -0
  13. package/dist/domain/ICloudFoundryInstance.d.ts +4 -0
  14. package/dist/domain/ICloudFoundryLoadBalancer.d.ts +25 -0
  15. package/dist/domain/ICloudFoundryServerGroup.d.ts +41 -0
  16. package/dist/domain/ICloudFoundrySpace.d.ts +9 -0
  17. package/dist/domain/index.d.ts +8 -0
  18. package/dist/help/cloudfoundry.help.d.ts +1 -0
  19. package/dist/image/image.reader.cf.d.ts +4 -0
  20. package/dist/index.d.ts +6 -0
  21. package/dist/index.js +5929 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/instance/details/CloudFoundryInstanceActions.d.ts +11 -0
  24. package/dist/instance/details/CloudFoundryInstanceDetails.d.ts +23 -0
  25. package/dist/instance/details/index.d.ts +1 -0
  26. package/dist/instance/details/sections/CloudFoundryInstanceDetailsSection.d.ts +9 -0
  27. package/dist/instance/details/sections/index.d.ts +1 -0
  28. package/dist/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.d.ts +33 -0
  29. package/dist/loadBalancer/configure/loadBalancerDetails.d.ts +32 -0
  30. package/dist/loadBalancer/details/CloudFoundryLoadBalancerActions.d.ts +10 -0
  31. package/dist/loadBalancer/details/CloudFoundryLoadBalancerDetails.d.ts +26 -0
  32. package/dist/loadBalancer/details/index.d.ts +1 -0
  33. package/dist/loadBalancer/details/sections/CloudFoundryLoadBalancerDetailsSection.d.ts +9 -0
  34. package/dist/loadBalancer/details/sections/CloudFoundryLoadBalancerLinksSection.d.ts +9 -0
  35. package/dist/loadBalancer/details/sections/CloudFoundryLoadBalancerStatusSection.d.ts +9 -0
  36. package/dist/loadBalancer/details/sections/index.d.ts +3 -0
  37. package/dist/loadBalancer/index.d.ts +3 -0
  38. package/dist/loadBalancer/loadBalancer.transformer.d.ts +25 -0
  39. package/dist/pipeline/config/validation/cfTargetImpedance.validator.d.ts +9 -0
  40. package/dist/pipeline/config/validation/instanceSize.validator.d.ts +15 -0
  41. package/dist/pipeline/config/validation/requiredRoutes.validator.d.ts +4 -0
  42. package/dist/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfig.d.ts +7 -0
  43. package/dist/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfigForm.d.ts +13 -0
  44. package/dist/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestDetailsTab.d.ts +6 -0
  45. package/dist/pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage.d.ts +1 -0
  46. package/dist/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.d.ts +11 -0
  47. package/dist/pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module.d.ts +1 -0
  48. package/dist/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsConfig.d.ts +9 -0
  49. package/dist/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsStageConfigForm.d.ts +26 -0
  50. package/dist/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage.d.ts +1 -0
  51. package/dist/pipeline/stages/createServiceKey/CloudFoundryCreateServiceKeyStageConfig.d.ts +19 -0
  52. package/dist/pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module.d.ts +1 -0
  53. package/dist/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsConfig.d.ts +10 -0
  54. package/dist/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsStageConfigForm.d.ts +20 -0
  55. package/dist/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage.d.ts +1 -0
  56. package/dist/pipeline/stages/deleteServiceKey/CloudFoundryDeleteServiceKeyStageConfig.d.ts +19 -0
  57. package/dist/pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module.d.ts +1 -0
  58. package/dist/pipeline/stages/deployService/CloudFoundryDeployServiceStageConfig.d.ts +24 -0
  59. package/dist/pipeline/stages/deployService/CreateServiceInstanceDirectInput.d.ts +29 -0
  60. package/dist/pipeline/stages/deployService/CreateUserProvidedInput.d.ts +19 -0
  61. package/dist/pipeline/stages/deployService/ICloudFoundryServiceManifestSource.d.ts +24 -0
  62. package/dist/pipeline/stages/deployService/ServiceTagsInput.d.ts +17 -0
  63. package/dist/pipeline/stages/deployService/cloudFoundryDeployServiceStage.module.d.ts +1 -0
  64. package/dist/pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module.d.ts +1 -0
  65. package/dist/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfig.d.ts +5 -0
  66. package/dist/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfigForm.d.ts +19 -0
  67. package/dist/pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module.d.ts +1 -0
  68. package/dist/pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module.d.ts +1 -0
  69. package/dist/pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module.d.ts +1 -0
  70. package/dist/pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module.d.ts +1 -0
  71. package/dist/pipeline/stages/resizeAsg/CloudFoundryResizeAsgStageConfig.d.ts +17 -0
  72. package/dist/pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module.d.ts +1 -0
  73. package/dist/pipeline/stages/rollbackCluster/CloudFoundryRollbackClusterStageConfig.d.ts +17 -0
  74. package/dist/pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module.d.ts +1 -0
  75. package/dist/pipeline/stages/runJob/CloudFoundryRunJobStageConfig.d.ts +14 -0
  76. package/dist/pipeline/stages/runJob/RunJobExecutionDetails.d.ts +6 -0
  77. package/dist/pipeline/stages/runJob/cloudFoundryRunJob.module.d.ts +1 -0
  78. package/dist/pipeline/stages/shareService/CloudFoundryShareServiceExecutionDetails.d.ts +6 -0
  79. package/dist/pipeline/stages/shareService/CloudFoundryShareServiceStageConfig.d.ts +21 -0
  80. package/dist/pipeline/stages/shareService/cloudFoundryShareServiceStage.module.d.ts +1 -0
  81. package/dist/pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module.d.ts +1 -0
  82. package/dist/pipeline/stages/unshareService/CloudFoundryUnshareServiceExecutionDetails.d.ts +6 -0
  83. package/dist/pipeline/stages/unshareService/CloudFoundryUnshareServiceStageConfig.d.ts +18 -0
  84. package/dist/pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module.d.ts +1 -0
  85. package/dist/presentation/forms/index.d.ts +2 -0
  86. package/dist/presentation/forms/inputs/FormikConfigField.d.ts +10 -0
  87. package/dist/presentation/forms/inputs/index.d.ts +1 -0
  88. package/dist/presentation/forms/serverGroup/Buildpacks.d.ts +8 -0
  89. package/dist/presentation/forms/serverGroup/EnvironmentVariables.d.ts +8 -0
  90. package/dist/presentation/forms/serverGroup/HealthCheck.d.ts +12 -0
  91. package/dist/presentation/forms/serverGroup/InstanceParameters.d.ts +12 -0
  92. package/dist/presentation/forms/serverGroup/Routes.d.ts +10 -0
  93. package/dist/presentation/forms/serverGroup/Services.d.ts +5 -0
  94. package/dist/presentation/forms/serverGroup/index.d.ts +6 -0
  95. package/dist/presentation/index.d.ts +3 -0
  96. package/dist/presentation/pipeline/index.d.ts +1 -0
  97. package/dist/presentation/pipeline/stages/CloudFoundryAsgStageConfig.d.ts +14 -0
  98. package/dist/presentation/pipeline/stages/CloudFoundryLoadBalancersExecutionDetails.d.ts +6 -0
  99. package/dist/presentation/pipeline/stages/CloudFoundryLoadBalancersStageConfig.d.ts +25 -0
  100. package/dist/presentation/pipeline/stages/CloudFoundryServiceExecutionDetails.d.ts +6 -0
  101. package/dist/presentation/pipeline/stages/CloudFoundryServiceKeyExecutionDetails.d.ts +6 -0
  102. package/dist/presentation/pipeline/stages/index.d.ts +5 -0
  103. package/dist/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.d.ts +33 -0
  104. package/dist/presentation/widgets/accountRegionClusterSelector/FormikAccountRegionClusterSelector.d.ts +32 -0
  105. package/dist/presentation/widgets/accountRegionClusterSelector/index.d.ts +2 -0
  106. package/dist/presentation/widgets/index.d.ts +1 -0
  107. package/dist/presentation/widgets/recentLogs/CloudFoundryRecentLogs.d.ts +27 -0
  108. package/dist/routeDomains/index.d.ts +1 -0
  109. package/dist/routeDomains/routeDomainSelectField.d.ts +15 -0
  110. package/dist/serverGroup/configure/index.d.ts +4 -0
  111. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.cf.d.ts +12 -0
  112. package/dist/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.d.ts +14 -0
  113. package/dist/serverGroup/configure/serverGroupConfigurationModel.cf.d.ts +65 -0
  114. package/dist/serverGroup/configure/wizard/CreateServerGroupModal.d.ts +31 -0
  115. package/dist/serverGroup/configure/wizard/ServerGroupTemplateSelection.d.ts +16 -0
  116. package/dist/serverGroup/configure/wizard/sections/artifactSettings/ArtifactSettings.cf.d.ts +17 -0
  117. package/dist/serverGroup/configure/wizard/sections/artifactSettings/ConstantArtifactSettings.cf.d.ts +11 -0
  118. package/dist/serverGroup/configure/wizard/sections/basicSettings/BasicSettings.cf.d.ts +24 -0
  119. package/dist/serverGroup/configure/wizard/sections/cloneSettings/CloneSettings.cf.d.ts +21 -0
  120. package/dist/serverGroup/configure/wizard/sections/configurationSettings/ConfigurationSettings.cf.d.ts +22 -0
  121. package/dist/serverGroup/details/cfServerGroupDetailsGetter.d.ts +4 -0
  122. package/dist/serverGroup/details/cloudFoundryServerGroupActions.d.ts +24 -0
  123. package/dist/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.d.ts +28 -0
  124. package/dist/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.d.ts +28 -0
  125. package/dist/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.d.ts +37 -0
  126. package/dist/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.d.ts +36 -0
  127. package/dist/serverGroup/details/sections/ApplicationManagerSection.d.ts +6 -0
  128. package/dist/serverGroup/details/sections/BoundServicesSection.d.ts +6 -0
  129. package/dist/serverGroup/details/sections/BuildSection.d.ts +6 -0
  130. package/dist/serverGroup/details/sections/EnvironmentVariablesSection.d.ts +6 -0
  131. package/dist/serverGroup/details/sections/HealthCheckSection.d.ts +6 -0
  132. package/dist/serverGroup/details/sections/ICloudFoundryServerGroupDetailsSectionProps.d.ts +5 -0
  133. package/dist/serverGroup/details/sections/MetricsSection.d.ts +6 -0
  134. package/dist/serverGroup/details/sections/PackageSection.d.ts +6 -0
  135. package/dist/serverGroup/details/sections/ServerGroupInformationSection.d.ts +6 -0
  136. package/dist/serverGroup/details/sections/ServerGroupSizingSection.d.ts +6 -0
  137. package/dist/serverGroup/details/sections/index.d.ts +9 -0
  138. package/dist/serverGroup/index.d.ts +5 -0
  139. package/dist/serverGroup/serverGroup.transformer.d.ts +10 -0
  140. package/package.json +52 -0
  141. package/src/cf.module.ts +85 -0
  142. package/src/cf.settings.ts +14 -0
  143. package/src/common/applicationName.validator.ts +43 -0
  144. package/src/common/cloudFoundry.less +16 -0
  145. package/src/deploymentStrategy/CloudFoundryDeploymentStrategySelector.tsx +175 -0
  146. package/src/deploymentStrategy/strategies/redblack/redblack.strategy.ts +11 -0
  147. package/src/deploymentStrategy/strategies/rollingredblack/AdditionalFields.tsx +161 -0
  148. package/src/domain/ICloudFoundryAccount.ts +9 -0
  149. package/src/domain/ICloudFoundryApplication.ts +5 -0
  150. package/src/domain/ICloudFoundryCluster.ts +6 -0
  151. package/src/domain/ICloudFoundryDroplet.ts +22 -0
  152. package/src/domain/ICloudFoundryInstance.ts +5 -0
  153. package/src/domain/ICloudFoundryLoadBalancer.ts +29 -0
  154. package/src/domain/ICloudFoundryServerGroup.ts +47 -0
  155. package/src/domain/ICloudFoundrySpace.ts +10 -0
  156. package/src/domain/index.ts +8 -0
  157. package/src/help/cloudfoundry.help.ts +31 -0
  158. package/src/image/image.reader.cf.ts +17 -0
  159. package/src/index.ts +7 -0
  160. package/src/instance/details/CloudFoundryInstanceActions.tsx +59 -0
  161. package/src/instance/details/CloudFoundryInstanceDetails.tsx +154 -0
  162. package/src/instance/details/index.ts +1 -0
  163. package/src/instance/details/sections/CloudFoundryInstanceDetailsSection.tsx +49 -0
  164. package/src/instance/details/sections/index.ts +1 -0
  165. package/src/loadBalancer/configure/CloudFoundryMapLoadBalancerModal.tsx +210 -0
  166. package/src/loadBalancer/configure/loadBalancerDetails.tsx +228 -0
  167. package/src/loadBalancer/details/CloudFoundryLoadBalancerActions.tsx +61 -0
  168. package/src/loadBalancer/details/CloudFoundryLoadBalancerDetails.tsx +148 -0
  169. package/src/loadBalancer/details/index.ts +1 -0
  170. package/src/loadBalancer/details/sections/CloudFoundryLoadBalancerDetailsSection.tsx +63 -0
  171. package/src/loadBalancer/details/sections/CloudFoundryLoadBalancerLinksSection.tsx +34 -0
  172. package/src/loadBalancer/details/sections/CloudFoundryLoadBalancerStatusSection.tsx +27 -0
  173. package/src/loadBalancer/details/sections/index.ts +3 -0
  174. package/src/loadBalancer/index.ts +3 -0
  175. package/src/loadBalancer/loadBalancer.transformer.ts +144 -0
  176. package/src/logo/cf.icon.svg +12 -0
  177. package/src/logo/cf.logo.less +5 -0
  178. package/src/logo/cf.logo.svg +12 -0
  179. package/src/pipeline/config/validation/cfTargetImpedance.validator.ts +60 -0
  180. package/src/pipeline/config/validation/instanceSize.validator.ts +66 -0
  181. package/src/pipeline/config/validation/requiredRoutes.validator.ts +26 -0
  182. package/src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfig.tsx +62 -0
  183. package/src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestConfigForm.tsx +174 -0
  184. package/src/pipeline/stages/bakeCloudFoundryManifest/BakeCloudFoundryManifestDetailsTab.tsx +35 -0
  185. package/src/pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestConfig.spec.tsx +80 -0
  186. package/src/pipeline/stages/bakeCloudFoundryManifest/bakeCloudFoundryManifestStage.ts +35 -0
  187. package/src/pipeline/stages/cloneServerGroup/CloudFoundryCloneServerGroupStageConfig.tsx +113 -0
  188. package/src/pipeline/stages/cloneServerGroup/cloudFoundryCloneServerGroupStage.module.ts +14 -0
  189. package/src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsConfig.spec.tsx +35 -0
  190. package/src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsConfig.tsx +69 -0
  191. package/src/pipeline/stages/createServiceBindings/CloudFoundryCreateServiceBindingsStageConfigForm.tsx +230 -0
  192. package/src/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStage.ts +19 -0
  193. package/src/pipeline/stages/createServiceBindings/cloudFoundryCreateServiceBindingsStageForm.spec.tsx +50 -0
  194. package/src/pipeline/stages/createServiceKey/CloudFoundryCreateServiceKeyStageConfig.tsx +116 -0
  195. package/src/pipeline/stages/createServiceKey/cloudFoundryCreateServiceKeyStage.module.ts +21 -0
  196. package/src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsConfig.tsx +69 -0
  197. package/src/pipeline/stages/deleteServiceBindings/CloudFoundryDeleteServiceBindingsStageConfigForm.tsx +158 -0
  198. package/src/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStage.ts +19 -0
  199. package/src/pipeline/stages/deleteServiceBindings/cloudFoundryDeleteServiceBindingsStageForm.spec.tsx +49 -0
  200. package/src/pipeline/stages/deleteServiceKey/CloudFoundryDeleteServiceKeyStageConfig.tsx +116 -0
  201. package/src/pipeline/stages/deleteServiceKey/cloudFoundryDeleteServiceKeyStage.module.ts +22 -0
  202. package/src/pipeline/stages/deployService/CloudFoundryDeployServiceStageConfig.tsx +198 -0
  203. package/src/pipeline/stages/deployService/CreateServiceInstanceDirectInput.tsx +164 -0
  204. package/src/pipeline/stages/deployService/CreateUserProvidedInput.tsx +116 -0
  205. package/src/pipeline/stages/deployService/ICloudFoundryServiceManifestSource.ts +27 -0
  206. package/src/pipeline/stages/deployService/ServiceTagsInput.tsx +89 -0
  207. package/src/pipeline/stages/deployService/cloudFoundryDeployServiceStage.module.ts +153 -0
  208. package/src/pipeline/stages/deployService/cloudfoundryDeployServiceStage.less +12 -0
  209. package/src/pipeline/stages/destroyAsg/cloudFoundryDestroyAsgStage.module.ts +23 -0
  210. package/src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfig.tsx +46 -0
  211. package/src/pipeline/stages/destroyService/CloudFoundryDestroyServiceStageConfigForm.tsx +134 -0
  212. package/src/pipeline/stages/destroyService/cloudFoundryDestroyServiceStage.module.ts +20 -0
  213. package/src/pipeline/stages/disableAsg/cloudFoundryDisableAsgStage.module.ts +18 -0
  214. package/src/pipeline/stages/enableAsg/cloudFoundryEnableAsgStage.module.ts +18 -0
  215. package/src/pipeline/stages/mapLoadBalancers/cloudFoundryMapLoadBalancersStage.module.ts +21 -0
  216. package/src/pipeline/stages/resizeAsg/CloudFoundryResizeAsgStageConfig.tsx +148 -0
  217. package/src/pipeline/stages/resizeAsg/cloudFoundryResizeAsgStage.module.ts +52 -0
  218. package/src/pipeline/stages/rollbackCluster/CloudFoundryRollbackClusterStageConfig.tsx +90 -0
  219. package/src/pipeline/stages/rollbackCluster/cloudFoundryRollbackClusterStage.module.ts +19 -0
  220. package/src/pipeline/stages/runJob/CloudFoundryRunJobStageConfig.tsx +100 -0
  221. package/src/pipeline/stages/runJob/RunJobExecutionDetails.tsx +62 -0
  222. package/src/pipeline/stages/runJob/cloudFoundryRunJob.module.ts +24 -0
  223. package/src/pipeline/stages/shareService/CloudFoundryShareServiceExecutionDetails.tsx +52 -0
  224. package/src/pipeline/stages/shareService/CloudFoundryShareServiceStageConfig.tsx +141 -0
  225. package/src/pipeline/stages/shareService/cloudFoundryShareServiceStage.module.ts +21 -0
  226. package/src/pipeline/stages/unmapLoadBalancers/cloudFoundryUnmapLoadBalancersStage.module.ts +21 -0
  227. package/src/pipeline/stages/unshareService/CloudFoundryUnshareServiceExecutionDetails.tsx +46 -0
  228. package/src/pipeline/stages/unshareService/CloudFoundryUnshareServiceStageConfig.tsx +114 -0
  229. package/src/pipeline/stages/unshareService/cloudFoundryUnshareServiceStage.module.ts +21 -0
  230. package/src/presentation/forms/index.ts +2 -0
  231. package/src/presentation/forms/inputs/FormikConfigField.tsx +28 -0
  232. package/src/presentation/forms/inputs/index.ts +1 -0
  233. package/src/presentation/forms/serverGroup/Buildpacks.tsx +69 -0
  234. package/src/presentation/forms/serverGroup/EnvironmentVariables.tsx +94 -0
  235. package/src/presentation/forms/serverGroup/HealthCheck.tsx +57 -0
  236. package/src/presentation/forms/serverGroup/InstanceParameters.tsx +63 -0
  237. package/src/presentation/forms/serverGroup/Routes.tsx +74 -0
  238. package/src/presentation/forms/serverGroup/Services.tsx +62 -0
  239. package/src/presentation/forms/serverGroup/index.ts +6 -0
  240. package/src/presentation/index.ts +3 -0
  241. package/src/presentation/pipeline/index.ts +1 -0
  242. package/src/presentation/pipeline/stages/CloudFoundryAsgStageConfig.tsx +67 -0
  243. package/src/presentation/pipeline/stages/CloudFoundryLoadBalancersExecutionDetails.tsx +53 -0
  244. package/src/presentation/pipeline/stages/CloudFoundryLoadBalancersStageConfig.tsx +116 -0
  245. package/src/presentation/pipeline/stages/CloudFoundryServiceExecutionDetails.tsx +46 -0
  246. package/src/presentation/pipeline/stages/CloudFoundryServiceKeyExecutionDetails.tsx +52 -0
  247. package/src/presentation/pipeline/stages/index.ts +5 -0
  248. package/src/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.spec.tsx +385 -0
  249. package/src/presentation/widgets/accountRegionClusterSelector/AccountRegionClusterSelector.tsx +231 -0
  250. package/src/presentation/widgets/accountRegionClusterSelector/FormikAccountRegionClusterSelector.tsx +164 -0
  251. package/src/presentation/widgets/accountRegionClusterSelector/index.ts +2 -0
  252. package/src/presentation/widgets/index.ts +1 -0
  253. package/src/presentation/widgets/recentLogs/CloudFoundryRecentLogs.tsx +112 -0
  254. package/src/routeDomains/index.ts +1 -0
  255. package/src/routeDomains/routeDomainSelectField.tsx +48 -0
  256. package/src/serverGroup/configure/index.ts +4 -0
  257. package/src/serverGroup/configure/serverGroupCommandBuilder.service.cf.ts +168 -0
  258. package/src/serverGroup/configure/serverGroupCommandBuilderShim.service.cf.ts +64 -0
  259. package/src/serverGroup/configure/serverGroupConfigurationModel.cf.ts +77 -0
  260. package/src/serverGroup/configure/wizard/CreateServerGroupModal.tsx +194 -0
  261. package/src/serverGroup/configure/wizard/ServerGroupTemplateSelection.tsx +55 -0
  262. package/src/serverGroup/configure/wizard/sections/artifactSettings/ArtifactSettings.cf.tsx +78 -0
  263. package/src/serverGroup/configure/wizard/sections/artifactSettings/ConstantArtifactSettings.cf.tsx +49 -0
  264. package/src/serverGroup/configure/wizard/sections/basicSettings/BasicSettings.cf.tsx +163 -0
  265. package/src/serverGroup/configure/wizard/sections/cloneSettings/CloneSettings.cf.tsx +101 -0
  266. package/src/serverGroup/configure/wizard/sections/configurationSettings/ConfigurationSettings.cf.tsx +230 -0
  267. package/src/serverGroup/configure/wizard/serverGroup.less +3 -0
  268. package/src/serverGroup/details/cfServerGroupDetailsGetter.ts +60 -0
  269. package/src/serverGroup/details/cloudFoundryServerGroupActions.tsx +365 -0
  270. package/src/serverGroup/details/mapLoadBalancers/CloudFoundryMapLoadBalancersModal.tsx +137 -0
  271. package/src/serverGroup/details/mapLoadBalancers/CloudFoundryUnmapLoadBalancersModal.tsx +137 -0
  272. package/src/serverGroup/details/resize/CloudFoundryResizeServerGroupModal.tsx +232 -0
  273. package/src/serverGroup/details/rollback/CloudFoundryRollbackServerGroupModal.tsx +179 -0
  274. package/src/serverGroup/details/sections/ApplicationManagerSection.tsx +28 -0
  275. package/src/serverGroup/details/sections/BoundServicesSection.tsx +39 -0
  276. package/src/serverGroup/details/sections/BuildSection.tsx +61 -0
  277. package/src/serverGroup/details/sections/EnvironmentVariablesSection.tsx +34 -0
  278. package/src/serverGroup/details/sections/HealthCheckSection.tsx +28 -0
  279. package/src/serverGroup/details/sections/ICloudFoundryServerGroupDetailsSectionProps.ts +6 -0
  280. package/src/serverGroup/details/sections/MetricsSection.tsx +28 -0
  281. package/src/serverGroup/details/sections/PackageSection.tsx +27 -0
  282. package/src/serverGroup/details/sections/ServerGroupInformationSection.tsx +58 -0
  283. package/src/serverGroup/details/sections/ServerGroupSizingSection.tsx +27 -0
  284. package/src/serverGroup/details/sections/index.ts +9 -0
  285. package/src/serverGroup/index.ts +5 -0
  286. package/src/serverGroup/serverGroup.transformer.ts +42 -0
@@ -0,0 +1,137 @@
1
+ import type { Formik } from 'formik';
2
+ import { Form } from 'formik';
3
+ import React from 'react';
4
+ import { Modal, ModalFooter } from 'react-bootstrap';
5
+
6
+ import type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';
7
+ import {
8
+ ModalClose,
9
+ noop,
10
+ ReactInjector,
11
+ ReactModal,
12
+ SpinFormik,
13
+ TaskMonitor,
14
+ TaskMonitorWrapper,
15
+ } from '@spinnaker/core';
16
+ import type { ICloudFoundryServerGroup } from '../../../domain';
17
+ import { Routes } from '../../../presentation/forms/serverGroup';
18
+
19
+ export interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {
20
+ application: Application;
21
+ serverGroup: ICloudFoundryServerGroup;
22
+ }
23
+
24
+ export interface ICloudFoundryLoadBalancerLinksModalState {
25
+ initialValues: ICloudFoundryLoadBalancerLinksModalValues;
26
+ taskMonitor: TaskMonitor;
27
+ }
28
+
29
+ export interface ICloudFoundryLoadBalancerLinksModalValues {
30
+ routes: string[];
31
+ }
32
+
33
+ export interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {
34
+ routes: string[];
35
+ serverGroupName: string;
36
+ }
37
+
38
+ export class CloudFoundryMapLoadBalancersModal extends React.Component<
39
+ ICloudFoundryLoadBalancerLinksModalProps,
40
+ ICloudFoundryLoadBalancerLinksModalState
41
+ > {
42
+ public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {
43
+ closeModal: noop,
44
+ dismissModal: noop,
45
+ };
46
+
47
+ private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();
48
+
49
+ public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {
50
+ return ReactModal.show(CloudFoundryMapLoadBalancersModal, props, {});
51
+ }
52
+
53
+ constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {
54
+ super(props);
55
+
56
+ this.state = {
57
+ initialValues: {
58
+ routes: [''],
59
+ },
60
+ taskMonitor: new TaskMonitor({
61
+ application: props.application,
62
+ title: 'Mapping a route to your server group',
63
+ modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),
64
+ onTaskComplete: () => this.props.application.serverGroups.refresh(),
65
+ }),
66
+ };
67
+ }
68
+
69
+ private close = (args?: any): void => {
70
+ this.props.dismissModal.apply(null, args);
71
+ };
72
+
73
+ private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {
74
+ const { routes } = values;
75
+ const { serverGroup } = this.props;
76
+ const coreServerGroup: IServerGroup = {
77
+ account: serverGroup.account,
78
+ cloudProvider: serverGroup.cloudProvider,
79
+ cluster: serverGroup.cluster,
80
+ instanceCounts: serverGroup.instanceCounts,
81
+ instances: serverGroup.instances,
82
+ loadBalancers: routes,
83
+ name: serverGroup.name,
84
+ region: serverGroup.region,
85
+ type: serverGroup.type,
86
+ };
87
+
88
+ this.state.taskMonitor.submit(() => {
89
+ return ReactInjector.serverGroupWriter.mapLoadBalancers(coreServerGroup, this.props.application, {
90
+ serverGroupName: serverGroup.name,
91
+ });
92
+ });
93
+ };
94
+
95
+ public render() {
96
+ const { serverGroup } = this.props;
97
+ const { initialValues } = this.state;
98
+ return (
99
+ <>
100
+ <TaskMonitorWrapper monitor={this.state.taskMonitor} />
101
+ <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>
102
+ ref={this.formikRef}
103
+ initialValues={initialValues}
104
+ onSubmit={this.submit}
105
+ render={(formik) => {
106
+ return (
107
+ <>
108
+ <ModalClose dismiss={this.close} />
109
+ <Modal.Header>
110
+ <Modal.Title>Map route to {serverGroup.name}</Modal.Title>
111
+ </Modal.Header>
112
+ <Modal.Body>
113
+ <Form className="form-horizontal">
114
+ <Routes fieldName="routes" isRequired={true} singleRouteOnly={true} />
115
+ </Form>
116
+ </Modal.Body>
117
+ <ModalFooter>
118
+ <button className="btn btn-default" onClick={this.close}>
119
+ Cancel
120
+ </button>
121
+ <button
122
+ type="submit"
123
+ className="btn btn-primary"
124
+ onClick={() => this.submit(formik.values)}
125
+ disabled={!formik.isValid}
126
+ >
127
+ Submit
128
+ </button>
129
+ </ModalFooter>
130
+ </>
131
+ );
132
+ }}
133
+ />
134
+ </>
135
+ );
136
+ }
137
+ }
@@ -0,0 +1,137 @@
1
+ import type { Formik } from 'formik';
2
+ import { Form } from 'formik';
3
+ import React from 'react';
4
+ import { Modal, ModalFooter } from 'react-bootstrap';
5
+
6
+ import type { Application, IModalComponentProps, IServerGroup, IServerGroupJob } from '@spinnaker/core';
7
+ import {
8
+ ModalClose,
9
+ noop,
10
+ ReactInjector,
11
+ ReactModal,
12
+ SpinFormik,
13
+ TaskMonitor,
14
+ TaskMonitorWrapper,
15
+ } from '@spinnaker/core';
16
+ import type { ICloudFoundryServerGroup } from '../../../domain';
17
+ import { Routes } from '../../../presentation/forms/serverGroup';
18
+
19
+ export interface ICloudFoundryLoadBalancerLinksModalProps extends IModalComponentProps {
20
+ application: Application;
21
+ serverGroup: ICloudFoundryServerGroup;
22
+ }
23
+
24
+ export interface ICloudFoundryLoadBalancerLinksModalState {
25
+ initialValues: ICloudFoundryLoadBalancerLinksModalValues;
26
+ taskMonitor: TaskMonitor;
27
+ }
28
+
29
+ export interface ICloudFoundryLoadBalancerLinksModalValues {
30
+ routes: string[];
31
+ }
32
+
33
+ export interface ICloudFoundryLoadBalancerLinkJob extends IServerGroupJob {
34
+ routes: string[];
35
+ serverGroupName: string;
36
+ }
37
+
38
+ export class CloudFoundryUnmapLoadBalancersModal extends React.Component<
39
+ ICloudFoundryLoadBalancerLinksModalProps,
40
+ ICloudFoundryLoadBalancerLinksModalState
41
+ > {
42
+ public static defaultProps: Partial<ICloudFoundryLoadBalancerLinksModalProps> = {
43
+ closeModal: noop,
44
+ dismissModal: noop,
45
+ };
46
+
47
+ private formikRef = React.createRef<Formik<ICloudFoundryLoadBalancerLinksModalValues>>();
48
+
49
+ public static show(props: ICloudFoundryLoadBalancerLinksModalProps): Promise<ICloudFoundryLoadBalancerLinkJob> {
50
+ return ReactModal.show(CloudFoundryUnmapLoadBalancersModal, props, {});
51
+ }
52
+
53
+ constructor(props: ICloudFoundryLoadBalancerLinksModalProps) {
54
+ super(props);
55
+
56
+ this.state = {
57
+ initialValues: {
58
+ routes: [''],
59
+ },
60
+ taskMonitor: new TaskMonitor({
61
+ application: props.application,
62
+ title: 'Unmapping a route from your server group',
63
+ modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),
64
+ onTaskComplete: () => this.props.application.serverGroups.refresh(),
65
+ }),
66
+ };
67
+ }
68
+
69
+ private close = (args?: any): void => {
70
+ this.props.dismissModal.apply(null, args);
71
+ };
72
+
73
+ private submit = (values: ICloudFoundryLoadBalancerLinksModalValues): void => {
74
+ const { routes } = values;
75
+ const { serverGroup } = this.props;
76
+ const coreServerGroup: IServerGroup = {
77
+ account: serverGroup.account,
78
+ cloudProvider: serverGroup.cloudProvider,
79
+ cluster: serverGroup.cluster,
80
+ instanceCounts: serverGroup.instanceCounts,
81
+ instances: serverGroup.instances,
82
+ loadBalancers: routes,
83
+ name: serverGroup.name,
84
+ region: serverGroup.region,
85
+ type: serverGroup.type,
86
+ };
87
+
88
+ this.state.taskMonitor.submit(() => {
89
+ return ReactInjector.serverGroupWriter.unmapLoadBalancers(coreServerGroup, this.props.application, {
90
+ serverGroupName: serverGroup.name,
91
+ });
92
+ });
93
+ };
94
+
95
+ public render() {
96
+ const { serverGroup } = this.props;
97
+ const { initialValues } = this.state;
98
+ return (
99
+ <>
100
+ <TaskMonitorWrapper monitor={this.state.taskMonitor} />
101
+ <SpinFormik<ICloudFoundryLoadBalancerLinksModalValues>
102
+ ref={this.formikRef}
103
+ initialValues={initialValues}
104
+ onSubmit={this.submit}
105
+ render={(formik) => {
106
+ return (
107
+ <>
108
+ <ModalClose dismiss={this.close} />
109
+ <Modal.Header>
110
+ <Modal.Title>Unmap route from {serverGroup.name}</Modal.Title>
111
+ </Modal.Header>
112
+ <Modal.Body>
113
+ <Form className="form-horizontal">
114
+ <Routes fieldName="routes" isRequired={true} singleRouteOnly={true} />
115
+ </Form>
116
+ </Modal.Body>
117
+ <ModalFooter>
118
+ <button className="btn btn-default" onClick={this.close}>
119
+ Cancel
120
+ </button>
121
+ <button
122
+ type="submit"
123
+ className="btn btn-primary"
124
+ onClick={() => this.submit(formik.values)}
125
+ disabled={!formik.isValid}
126
+ >
127
+ Submit
128
+ </button>
129
+ </ModalFooter>
130
+ </>
131
+ );
132
+ }}
133
+ />
134
+ </>
135
+ );
136
+ }
137
+ }
@@ -0,0 +1,232 @@
1
+ import type { Formik, FormikProps } from 'formik';
2
+ import { Form } from 'formik';
3
+ import React from 'react';
4
+ import { Modal, ModalFooter } from 'react-bootstrap';
5
+
6
+ import type { Application, ICapacity, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';
7
+ import {
8
+ FormikFormField,
9
+ ModalClose,
10
+ noop,
11
+ NumberInput,
12
+ ReactInjector,
13
+ ReactModal,
14
+ SpinFormik,
15
+ TaskMonitor,
16
+ TaskMonitorWrapper,
17
+ TaskReason,
18
+ } from '@spinnaker/core';
19
+ import type { ICloudFoundryServerGroup } from '../../../domain';
20
+
21
+ export interface ICloudFoundryResizeServerGroupModalProps extends IModalComponentProps {
22
+ application: Application;
23
+ serverGroup: ICloudFoundryServerGroup;
24
+ }
25
+
26
+ export interface ICloudFoundryResizeServerGroupModalState {
27
+ initialValues: ICloudFoundryResizeServerGroupValues;
28
+ taskMonitor: TaskMonitor;
29
+ }
30
+
31
+ export interface ICloudFoundryResizeServerGroupValues {
32
+ desired: number | string;
33
+ diskQuota?: number;
34
+ memory?: number;
35
+ reason?: string;
36
+ }
37
+
38
+ export interface ICloudFoundryResizeJob extends IServerGroupJob {
39
+ capacity?: Partial<ICapacity>;
40
+ diskQuota?: number;
41
+ instanceCount?: number;
42
+ memory?: number;
43
+ serverGroupName: string;
44
+ reason?: string;
45
+ }
46
+
47
+ export class CloudFoundryResizeServerGroupModal extends React.Component<
48
+ ICloudFoundryResizeServerGroupModalProps,
49
+ ICloudFoundryResizeServerGroupModalState
50
+ > {
51
+ public static defaultProps: Partial<ICloudFoundryResizeServerGroupModalProps> = {
52
+ closeModal: noop,
53
+ dismissModal: noop,
54
+ };
55
+
56
+ private formikRef = React.createRef<Formik<ICloudFoundryResizeServerGroupValues>>();
57
+
58
+ public static show(props: ICloudFoundryResizeServerGroupModalProps): Promise<ICloudFoundryResizeJob> {
59
+ const modalProps = {};
60
+ return ReactModal.show(CloudFoundryResizeServerGroupModal, props, modalProps);
61
+ }
62
+
63
+ constructor(props: ICloudFoundryResizeServerGroupModalProps) {
64
+ super(props);
65
+
66
+ const { capacity, diskQuota, memory } = props.serverGroup;
67
+ const { desired } = capacity;
68
+ this.state = {
69
+ initialValues: {
70
+ desired,
71
+ diskQuota: diskQuota,
72
+ memory: memory,
73
+ },
74
+ taskMonitor: new TaskMonitor({
75
+ application: props.application,
76
+ title: 'Resizing your server group',
77
+ modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),
78
+ onTaskComplete: () => this.props.application.serverGroups.refresh(),
79
+ }),
80
+ };
81
+ }
82
+
83
+ private close = (args?: any): void => {
84
+ this.props.dismissModal.apply(null, args);
85
+ };
86
+
87
+ private submit = (values: ICloudFoundryResizeServerGroupValues): void => {
88
+ const { desired, diskQuota, memory, reason } = values;
89
+ const { serverGroup, application } = this.props;
90
+ const capacity = {
91
+ min: desired,
92
+ max: desired,
93
+ desired,
94
+ };
95
+
96
+ const command: ICloudFoundryResizeJob = {
97
+ capacity,
98
+ diskQuota,
99
+ memory,
100
+ reason,
101
+ serverGroupName: serverGroup.name,
102
+ };
103
+
104
+ this.state.taskMonitor.submit(() => {
105
+ return ReactInjector.serverGroupWriter.resizeServerGroup(serverGroup, application, command);
106
+ });
107
+ };
108
+
109
+ private renderDesired(formik: FormikProps<ICloudFoundryResizeServerGroupValues>): JSX.Element {
110
+ const { serverGroup } = this.props;
111
+ const { capacity } = serverGroup;
112
+ return (
113
+ <div>
114
+ <div className="form-group">
115
+ <div className="col-md-3 sm-label-right">Current size</div>
116
+ <div className="col-md-4">
117
+ <div className="horizontal middle">
118
+ <input type="number" className="NumberInput form-control" value={capacity.desired} disabled={true} />
119
+ <div className="sp-padding-xs-xaxis">instances</div>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ <div className="form-group">
124
+ <div className="col-md-3 sm-label-right">Resize to</div>
125
+ <div className="col-md-4">
126
+ <div className="horizontal middle">
127
+ <FormikFormField
128
+ name="desired"
129
+ input={(props) => <NumberInput {...props} min={0} />}
130
+ touched={true}
131
+ required={true}
132
+ onChange={(value) => {
133
+ formik.setFieldValue('min', value);
134
+ formik.setFieldValue('max', value);
135
+ }}
136
+ />
137
+ <div className="sp-padding-xs-xaxis">instances</div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ );
143
+ }
144
+
145
+ private renderQuota(
146
+ formik: FormikProps<ICloudFoundryResizeServerGroupValues>,
147
+ field: string,
148
+ fieldLabel: string,
149
+ initialValue: number,
150
+ ): JSX.Element {
151
+ return (
152
+ <div>
153
+ <div className="form-group">
154
+ <div className="col-md-3 sm-label-right">Current size</div>
155
+ <div className="col-md-5">
156
+ <div className="horizontal middle">
157
+ <div className="StandardFieldLayout flex-container-h baseline margin-between-lg">
158
+ <input type="number" className="NumberInput form-control" value={initialValue} disabled={true} />
159
+ </div>
160
+ <div className="sp-padding-xs-xaxis">{fieldLabel}</div>
161
+ </div>
162
+ </div>
163
+ </div>
164
+ <div className="form-group">
165
+ <div className="col-md-3 sm-label-right">Resize to</div>
166
+ <div className="col-md-5">
167
+ <div className="horizontal middle">
168
+ <FormikFormField
169
+ name={field}
170
+ input={(props) => <NumberInput {...props} min={64} />}
171
+ touched={true}
172
+ required={true}
173
+ onChange={(value) => {
174
+ formik.setFieldValue('min', value);
175
+ formik.setFieldValue('max', value);
176
+ }}
177
+ />
178
+ <div className="sp-padding-xs-xaxis">{fieldLabel}</div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ );
184
+ }
185
+
186
+ public render() {
187
+ const { serverGroup } = this.props;
188
+ const { diskQuota, memory } = serverGroup;
189
+ const { initialValues } = this.state;
190
+ return (
191
+ <>
192
+ <TaskMonitorWrapper monitor={this.state.taskMonitor} />
193
+ <SpinFormik<ICloudFoundryResizeServerGroupValues>
194
+ ref={this.formikRef}
195
+ initialValues={initialValues}
196
+ onSubmit={this.submit}
197
+ render={(formik) => {
198
+ return (
199
+ <>
200
+ <ModalClose dismiss={this.close} />
201
+ <Modal.Header>
202
+ <Modal.Title>Resize {serverGroup.name}</Modal.Title>
203
+ </Modal.Header>
204
+ <Modal.Body>
205
+ <Form className="form-horizontal">
206
+ {this.renderDesired(formik)}
207
+ {this.renderQuota(formik, 'diskQuota', 'Disk (MB)', diskQuota)}
208
+ {this.renderQuota(formik, 'memory', 'Mem (MB)', memory)}
209
+ <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />
210
+ </Form>
211
+ </Modal.Body>
212
+ <ModalFooter>
213
+ <button className="btn btn-default" onClick={this.close}>
214
+ Cancel
215
+ </button>
216
+ <button
217
+ type="submit"
218
+ className="btn btn-primary"
219
+ onClick={() => this.submit(formik.values)}
220
+ disabled={!formik.isValid}
221
+ >
222
+ Submit
223
+ </button>
224
+ </ModalFooter>
225
+ </>
226
+ );
227
+ }}
228
+ />
229
+ </>
230
+ );
231
+ }
232
+ }
@@ -0,0 +1,179 @@
1
+ import type { Formik } from 'formik';
2
+ import { Form } from 'formik';
3
+ import React from 'react';
4
+ import { Modal, ModalFooter } from 'react-bootstrap';
5
+
6
+ import type { Application, IModalComponentProps, IServerGroupJob } from '@spinnaker/core';
7
+ import {
8
+ FormikFormField,
9
+ ModalClose,
10
+ noop,
11
+ ReactInjector,
12
+ ReactModal,
13
+ ReactSelectInput,
14
+ SpinFormik,
15
+ TaskMonitor,
16
+ TaskMonitorWrapper,
17
+ TaskReason,
18
+ } from '@spinnaker/core';
19
+ import type { ICloudFoundryServerGroup } from '../../../domain';
20
+
21
+ export interface ICloudFoundryRollbackServerGroupModalProps extends IModalComponentProps {
22
+ application: Application;
23
+ serverGroup: ICloudFoundryServerGroup;
24
+ previousServerGroup: ICloudFoundryServerGroup;
25
+ allServerGroups: ICloudFoundryServerGroup[];
26
+ disabledServerGroups: ICloudFoundryServerGroup[];
27
+ }
28
+
29
+ export interface ICloudFoundryRollbackServerGroupModalState {
30
+ initialValues: ICloudFoundryRollbackServerGroupValues;
31
+ taskMonitor: TaskMonitor;
32
+ }
33
+
34
+ export interface ICloudFoundryRollbackServerGroupValues {
35
+ restoreServerGroupName: string;
36
+ reason?: string;
37
+ }
38
+
39
+ export interface ICloudFoundryRollbackJob extends IServerGroupJob {
40
+ rollbackType: string;
41
+ rollbackContext: {
42
+ rollbackServerGroupName: string;
43
+ restoreServerGroupName: string;
44
+ targetHealthyRollbackPercentage: number;
45
+ };
46
+ }
47
+
48
+ export class CloudFoundryRollbackServerGroupModal extends React.Component<
49
+ ICloudFoundryRollbackServerGroupModalProps,
50
+ ICloudFoundryRollbackServerGroupModalState
51
+ > {
52
+ public static defaultProps: Partial<ICloudFoundryRollbackServerGroupModalProps> = {
53
+ closeModal: noop,
54
+ dismissModal: noop,
55
+ };
56
+
57
+ private formikRef = React.createRef<Formik<ICloudFoundryRollbackServerGroupValues>>();
58
+
59
+ public static show(props: ICloudFoundryRollbackServerGroupModalProps): Promise<ICloudFoundryRollbackJob> {
60
+ const modalProps = {};
61
+ return ReactModal.show(CloudFoundryRollbackServerGroupModal, props, modalProps);
62
+ }
63
+
64
+ constructor(props: ICloudFoundryRollbackServerGroupModalProps) {
65
+ super(props);
66
+
67
+ const { previousServerGroup, serverGroup } = props;
68
+ const { name } = serverGroup;
69
+ this.state = {
70
+ initialValues: {
71
+ restoreServerGroupName: previousServerGroup ? previousServerGroup.name : undefined,
72
+ },
73
+ taskMonitor: new TaskMonitor({
74
+ application: props.application,
75
+ title: 'Rollback ' + name,
76
+ modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),
77
+ onTaskComplete: () => this.props.application.serverGroups.refresh(),
78
+ }),
79
+ };
80
+ }
81
+
82
+ private close = (args?: any): void => {
83
+ this.props.dismissModal.apply(null, args);
84
+ };
85
+
86
+ private submit = (values: ICloudFoundryRollbackServerGroupValues): void => {
87
+ const { reason, restoreServerGroupName } = values;
88
+ const { serverGroup, application } = this.props;
89
+
90
+ const command: ICloudFoundryRollbackJob = {
91
+ rollbackType: 'EXPLICIT',
92
+ rollbackContext: {
93
+ rollbackServerGroupName: serverGroup.name,
94
+ restoreServerGroupName,
95
+ targetHealthyRollbackPercentage: 100,
96
+ },
97
+ reason,
98
+ };
99
+
100
+ this.state.taskMonitor.submit(() => {
101
+ return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);
102
+ });
103
+ };
104
+
105
+ public render() {
106
+ const { allServerGroups, serverGroup } = this.props;
107
+ const { initialValues } = this.state;
108
+ return (
109
+ <>
110
+ <TaskMonitorWrapper monitor={this.state.taskMonitor} />
111
+ <SpinFormik<ICloudFoundryRollbackServerGroupValues>
112
+ ref={this.formikRef}
113
+ initialValues={initialValues}
114
+ onSubmit={this.submit}
115
+ render={(formik) => {
116
+ return (
117
+ <>
118
+ <ModalClose dismiss={this.close} />
119
+ <Modal.Header>
120
+ <Modal.Title>Rollback {serverGroup.name}</Modal.Title>
121
+ </Modal.Header>
122
+ <Modal.Body>
123
+ <Form className="form-horizontal">
124
+ <div className="row" style={{ marginTop: '10px', marginBottom: '10px' }}>
125
+ <div className="col-md-3 sm-label-right">Restore to</div>
126
+ <div className="col-md-7">
127
+ <FormikFormField
128
+ name="restoreServerGroupName"
129
+ fastField={true}
130
+ input={(props) => (
131
+ <ReactSelectInput
132
+ inputClassName="cloudfoundry-react-select"
133
+ {...props}
134
+ stringOptions={
135
+ allServerGroups && allServerGroups.map((sg: ICloudFoundryServerGroup) => sg.name)
136
+ }
137
+ clearable={false}
138
+ />
139
+ )}
140
+ required={true}
141
+ />
142
+ </div>
143
+ </div>
144
+ <TaskReason reason={formik.values.reason} onChange={(val) => formik.setFieldValue('reason', val)} />
145
+ </Form>
146
+ <div className="row">
147
+ <div className="col-sm-4 sm-label-right">Rollback Operations</div>
148
+ </div>
149
+ <div className="row">
150
+ <div className="col-sm-11 col-sm-offset-1">
151
+ <ol>
152
+ <li>
153
+ Enable <em>{formik.values.restoreServerGroupName || 'previous server group'}</em>
154
+ </li>
155
+ <li>Disable {serverGroup.name}</li>
156
+ </ol>
157
+ <p>
158
+ This rollback will affect server groups in {serverGroup.account} ({serverGroup.region}
159
+ ).
160
+ </p>
161
+ </div>
162
+ </div>
163
+ </Modal.Body>
164
+ <ModalFooter>
165
+ <button className="btn btn-default" onClick={this.close}>
166
+ Cancel
167
+ </button>
168
+ <button type="submit" className="btn btn-primary" onClick={() => this.submit(formik.values)}>
169
+ Submit
170
+ </button>
171
+ </ModalFooter>
172
+ </>
173
+ );
174
+ }}
175
+ />
176
+ </>
177
+ );
178
+ }
179
+ }