@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,69 @@
1
+ import type { FormikErrors } from 'formik';
2
+ import { cloneDeep } from 'lodash';
3
+ import React from 'react';
4
+
5
+ import type { IStage, IStageConfigProps } from '@spinnaker/core';
6
+ import { FormikStageConfig, FormValidator } from '@spinnaker/core';
7
+
8
+ import { CloudFoundryCreateServiceBindingsStageConfigForm } from './CloudFoundryCreateServiceBindingsStageConfigForm';
9
+
10
+ export interface ServiceBindingRequests {
11
+ serviceInstanceName: String;
12
+ }
13
+
14
+ export function CloudFoundryCreateServiceBindingsConfig({
15
+ application,
16
+ pipeline,
17
+ stage,
18
+ updateStage,
19
+ }: IStageConfigProps) {
20
+ const stageWithDefaults = React.useMemo(() => {
21
+ return {
22
+ serviceBindingRequests: [],
23
+ restageRequired: true,
24
+ restartRequired: false,
25
+ credentials: '',
26
+ region: '',
27
+ ...cloneDeep(stage),
28
+ };
29
+ }, []);
30
+
31
+ return (
32
+ <FormikStageConfig
33
+ application={application}
34
+ onChange={updateStage}
35
+ pipeline={pipeline}
36
+ stage={stageWithDefaults}
37
+ validate={validateCloudFoundryCreateServiceBindingsStage}
38
+ render={(props) => <CloudFoundryCreateServiceBindingsStageConfigForm {...props} />}
39
+ />
40
+ );
41
+ }
42
+
43
+ export function validateCloudFoundryCreateServiceBindingsStage(stage: IStage): FormikErrors<IStage> {
44
+ const formValidator = new FormValidator(stage);
45
+
46
+ formValidator.field('credentials', 'Account').required();
47
+ formValidator.field('region', 'Region').required();
48
+ formValidator.field('cluster', 'Cluster').required();
49
+ formValidator.field('target', 'Target').required();
50
+
51
+ formValidator
52
+ .field('serviceBindingRequests', 'Service Binding Requests')
53
+ .required()
54
+ .withValidators((serviceBindingRequests: ServiceBindingRequests[]) => {
55
+ if (validateServiceBindingRequests(serviceBindingRequests)) {
56
+ return undefined;
57
+ }
58
+ return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';
59
+ });
60
+
61
+ return formValidator.validateForm();
62
+ }
63
+
64
+ export function validateServiceBindingRequests(serviceBindingRequests: ServiceBindingRequests[]): boolean {
65
+ if (serviceBindingRequests?.length < 1) {
66
+ return false;
67
+ }
68
+ return serviceBindingRequests.every((req) => req?.serviceInstanceName);
69
+ }
@@ -0,0 +1,230 @@
1
+ import React from 'react';
2
+ import { from as observableFrom, Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+
5
+ import type { Application, IAccount, IArtifact, IFormikStageConfigInjectedProps, IRegion } from '@spinnaker/core';
6
+ import {
7
+ AccountService,
8
+ ArtifactTypePatterns,
9
+ excludeAllTypesExcept,
10
+ NgReact,
11
+ StageArtifactSelectorDelegate,
12
+ StageConfigField,
13
+ StageConstants,
14
+ TextInput,
15
+ } from '@spinnaker/core';
16
+
17
+ import { AccountRegionClusterSelector } from '../../../presentation/widgets/accountRegionClusterSelector';
18
+
19
+ interface ICloudFoundryCreateServiceBindingsStageConfigState {
20
+ accounts: IAccount[];
21
+ regions: string[];
22
+ application: Application;
23
+ }
24
+
25
+ export class CloudFoundryCreateServiceBindingsStageConfigForm extends React.Component<
26
+ IFormikStageConfigInjectedProps,
27
+ ICloudFoundryCreateServiceBindingsStageConfigState
28
+ > {
29
+ private static readonly excludedArtifactTypes = excludeAllTypesExcept(
30
+ ArtifactTypePatterns.BITBUCKET_FILE,
31
+ ArtifactTypePatterns.CUSTOM_OBJECT,
32
+ ArtifactTypePatterns.EMBEDDED_BASE64,
33
+ ArtifactTypePatterns.GCS_OBJECT,
34
+ ArtifactTypePatterns.GITHUB_FILE,
35
+ ArtifactTypePatterns.GITLAB_FILE,
36
+ ArtifactTypePatterns.S3_OBJECT,
37
+ ArtifactTypePatterns.HTTP_FILE,
38
+ ArtifactTypePatterns.ORACLE_OBJECT,
39
+ );
40
+
41
+ private destroy$ = new Subject();
42
+
43
+ constructor(props: IFormikStageConfigInjectedProps, context: any) {
44
+ super(props, context);
45
+ this.state = {
46
+ accounts: [],
47
+ regions: [],
48
+ application: props.application,
49
+ };
50
+ observableFrom(AccountService.listAccounts('cloudfoundry'))
51
+ .pipe(takeUntil(this.destroy$))
52
+ .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts }));
53
+ }
54
+
55
+ public componentDidMount() {
56
+ const stage = this.props.formik.values;
57
+ this.props.formik.setFieldValue('cloudProvider', 'cloudfoundry');
58
+ if (stage.serviceBindingRequests && stage.serviceBindingRequests.length === 0) {
59
+ this.props.formik.setFieldValue('serviceBindingRequests', [
60
+ {
61
+ serviceInstanceName: '',
62
+ updatable: false,
63
+ },
64
+ ]);
65
+ }
66
+ if (stage.credentials) {
67
+ this.loadRegions(stage.credentials);
68
+ }
69
+ }
70
+
71
+ public componentWillUnmount(): void {
72
+ this.destroy$.next();
73
+ }
74
+
75
+ private loadRegions = (creds: string) => {
76
+ this.setState({ regions: [] });
77
+ observableFrom(AccountService.getRegionsForAccount(creds))
78
+ .pipe(takeUntil(this.destroy$))
79
+ .subscribe((regionList: IRegion[]) => {
80
+ const regions = regionList.map((r) => r.name);
81
+ regions.sort((a, b) => a.localeCompare(b));
82
+ this.setState({ regions: regions });
83
+ });
84
+ };
85
+
86
+ private onTemplateArtifactEdited = (artifact: IArtifact, index: number) => {
87
+ this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, null);
88
+ this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, artifact);
89
+ };
90
+
91
+ private onTemplateArtifactSelected = (id: string, index: number) => {
92
+ this.props.formik.setFieldValue(`serviceBindingRequests[${index}].id`, id);
93
+ this.props.formik.setFieldValue(`serviceBindingRequests[${index}].artifact`, null);
94
+ };
95
+
96
+ private addInputArtifact = () => {
97
+ const stage = this.props.formik.values;
98
+ const newServiceBindingRequests = [
99
+ ...stage.serviceBindingRequests,
100
+ {
101
+ serviceInstanceName: '',
102
+ updatable: false,
103
+ },
104
+ ];
105
+
106
+ this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);
107
+ };
108
+
109
+ private removeInputArtifact = (index: number) => {
110
+ const stage = this.props.formik.values;
111
+ const newServiceBindingRequests = [...stage.serviceBindingRequests];
112
+ newServiceBindingRequests.splice(index, 1);
113
+ this.props.formik.setFieldValue('serviceBindingRequests', newServiceBindingRequests);
114
+ };
115
+
116
+ private targetUpdated = (target: string) => {
117
+ this.props.formik.setFieldValue('target', target);
118
+ };
119
+
120
+ private restageRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {
121
+ this.props.formik.setFieldValue('restageRequired', event.target.checked);
122
+ this.props.formik.setFieldValue('restartRequired', !event.target.checked);
123
+ };
124
+
125
+ private restartRequiredUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {
126
+ this.props.formik.setFieldValue('restartRequired', event.target.checked);
127
+ this.props.formik.setFieldValue('restageRequired', !event.target.checked);
128
+ };
129
+
130
+ private updatableBindingUpdated = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {
131
+ this.props.formik.setFieldValue(`serviceBindingRequests[${index}].updatable`, event.target.checked);
132
+ };
133
+
134
+ private accountRegionClusterUpdated = (stage: any): void => {
135
+ this.props.formik.setFieldValue(`cluster`, stage.cluster);
136
+ this.props.formik.setFieldValue(`credentials`, stage.credentials);
137
+ this.props.formik.setFieldValue(`region`, stage.region);
138
+ };
139
+
140
+ public render() {
141
+ const stage = this.props.formik.values;
142
+ const { accounts, application } = this.state;
143
+ const { target } = stage;
144
+ const { TargetSelect } = NgReact;
145
+
146
+ return (
147
+ <>
148
+ <h4>Basic Settings</h4>
149
+ <div className="form-horizontal">
150
+ <AccountRegionClusterSelector
151
+ accounts={accounts}
152
+ application={application}
153
+ cloudProvider={'cloudfoundry'}
154
+ isSingleRegion={true}
155
+ onComponentUpdate={this.accountRegionClusterUpdated}
156
+ component={stage}
157
+ />
158
+ </div>
159
+ <StageConfigField label="Target">
160
+ <TargetSelect model={{ target }} options={StageConstants.TARGET_LIST} onChange={this.targetUpdated} />
161
+ </StageConfigField>
162
+ <StageConfigField label="Restage Required">
163
+ <input type="checkbox" checked={stage.restageRequired} onChange={this.restageRequiredUpdated} />
164
+ </StageConfigField>
165
+ <StageConfigField label="Restart Required">
166
+ <input type="checkbox" checked={stage.restartRequired} onChange={this.restartRequiredUpdated} />
167
+ </StageConfigField>
168
+ <h4>Service Bindings</h4>
169
+ {stage.serviceBindingRequests && stage.serviceBindingRequests.length > 0 && (
170
+ <div className="row form-group">
171
+ {stage.serviceBindingRequests.map((a: any, index: number) => {
172
+ return (
173
+ <div key={index}>
174
+ <div className="col-md-offset-1 col-md-8">
175
+ <StageConfigField label="Service Instance Name">
176
+ <TextInput
177
+ onChange={(e: React.ChangeEvent<any>) => {
178
+ this.props.formik.setFieldValue(
179
+ `serviceBindingRequests[${index}].serviceInstanceName`,
180
+ e.target.value,
181
+ );
182
+ }}
183
+ value={a.serviceInstanceName}
184
+ />
185
+ </StageConfigField>
186
+ <StageArtifactSelectorDelegate
187
+ artifact={a.artifact}
188
+ excludedArtifactTypePatterns={
189
+ CloudFoundryCreateServiceBindingsStageConfigForm.excludedArtifactTypes
190
+ }
191
+ expectedArtifactId={a.id}
192
+ label="Service Binding Parameters"
193
+ onArtifactEdited={(artifact) => {
194
+ this.onTemplateArtifactEdited(artifact, index);
195
+ }}
196
+ onExpectedArtifactSelected={(artifact) => this.onTemplateArtifactSelected(artifact.id, index)}
197
+ pipeline={this.props.pipeline}
198
+ stage={stage}
199
+ />
200
+ <StageConfigField label="Updatable Binding">
201
+ <input
202
+ type="checkbox"
203
+ checked={a.updatable}
204
+ onChange={(event) => this.updatableBindingUpdated(event, index)}
205
+ />
206
+ </StageConfigField>
207
+ </div>
208
+ <div className="col-md-1">
209
+ <div className="form-control-static">
210
+ <button onClick={() => this.removeInputArtifact(index)}>
211
+ <span className="glyphicon glyphicon-trash" />
212
+ <span className="sr-only">Remove field</span>
213
+ </button>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ );
218
+ })}
219
+ </div>
220
+ )}
221
+ <StageConfigField fieldColumns={8} label={''}>
222
+ <button className="btn btn-block btn-sm add-new" onClick={() => this.addInputArtifact()}>
223
+ <span className="glyphicon glyphicon-plus-sign" />
224
+ Add Service Binding
225
+ </button>
226
+ </StageConfigField>
227
+ </>
228
+ );
229
+ }
230
+ }
@@ -0,0 +1,19 @@
1
+ import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';
2
+
3
+ import {
4
+ CloudFoundryCreateServiceBindingsConfig,
5
+ validateCloudFoundryCreateServiceBindingsStage,
6
+ } from './CloudFoundryCreateServiceBindingsConfig';
7
+
8
+ export const CF_CREATE_SERVICE_BINDINGS_STAGE_KEY = 'cloudFoundryCreateServiceBindings';
9
+
10
+ Registry.pipeline.registerStage({
11
+ label: 'Create Service Bindings',
12
+ description: 'Create CF service bindings with optional parameters.',
13
+ key: CF_CREATE_SERVICE_BINDINGS_STAGE_KEY,
14
+ component: CloudFoundryCreateServiceBindingsConfig,
15
+ producesArtifacts: false,
16
+ cloudProvider: 'cloudfoundry',
17
+ executionDetailsSections: [ExecutionDetailsTasks],
18
+ validateFn: validateCloudFoundryCreateServiceBindingsStage,
19
+ });
@@ -0,0 +1,50 @@
1
+ import { mock } from 'angular';
2
+ import type { IStage } from 'core';
3
+ import { ApplicationModelBuilder, REACT_MODULE, SpinFormik, StageConfigField } from 'core';
4
+ import { mount } from 'enzyme';
5
+ import React from 'react';
6
+
7
+ import { mockServerGroupDataSourceConfig } from '@spinnaker/mocks';
8
+
9
+ import { CloudFoundryCreateServiceBindingsStageConfigForm } from './CloudFoundryCreateServiceBindingsStageConfigForm';
10
+
11
+ describe('<CloudFoundryCreateServiceBindingsStageConfigForm/>', function () {
12
+ beforeEach(mock.module(REACT_MODULE));
13
+ beforeEach(mock.inject());
14
+
15
+ const getProps = () => {
16
+ return {
17
+ application: ApplicationModelBuilder.createApplicationForTests('my-application', mockServerGroupDataSourceConfig),
18
+ pipeline: {
19
+ application: 'my-application',
20
+ id: 'pipeline-id',
21
+ limitConcurrent: true,
22
+ keepWaitingPipelines: true,
23
+ name: 'My Pipeline',
24
+ parameterConfig: [],
25
+ stages: [],
26
+ triggers: [],
27
+ },
28
+ } as any;
29
+ };
30
+
31
+ it('loads component correctly with 2 serviceBindingRequests', function () {
32
+ const stage = ({
33
+ serviceBindingRequests: [{ serviceInstanceName: 'service1' }, { serviceInstanceName: 'service2' }],
34
+ } as unknown) as IStage;
35
+
36
+ const props = getProps();
37
+ const component = mount(
38
+ <SpinFormik
39
+ initialValues={stage}
40
+ onSubmit={() => null}
41
+ validate={() => null}
42
+ render={(formik) => <CloudFoundryCreateServiceBindingsStageConfigForm {...props} formik={formik} />}
43
+ />,
44
+ );
45
+ expect(component.find(StageConfigField).findWhere((x) => x.text() === 'Target').length).toBe(1);
46
+ expect(component.find(StageConfigField).findWhere((x) => x.text() === 'Restage Required').length).toBe(1);
47
+ expect(component.find(StageConfigField).findWhere((x) => x.text() === 'Restart Required').length).toBe(1);
48
+ expect(component.find(StageConfigField).findWhere((x) => x.text() === 'Service Instance Name').length).toBe(2);
49
+ });
50
+ });
@@ -0,0 +1,116 @@
1
+ import React from 'react';
2
+ import type { Option } from 'react-select';
3
+ import { from as observableFrom, Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+
6
+ import type { IAccount, IRegion, IStageConfigProps } from '@spinnaker/core';
7
+ import { AccountService, ReactSelectInput, StageConfigField, TextInput } from '@spinnaker/core';
8
+
9
+ interface ICloudFoundryCreateServiceKeyStageConfigState {
10
+ accounts: string[];
11
+ regions: string[];
12
+ }
13
+
14
+ export class CloudFoundryCreateServiceKeyStageConfig extends React.Component<
15
+ IStageConfigProps,
16
+ ICloudFoundryCreateServiceKeyStageConfigState
17
+ > {
18
+ private destroy$ = new Subject();
19
+
20
+ constructor(props: IStageConfigProps) {
21
+ super(props);
22
+ props.stage.cloudProvider = 'cloudfoundry';
23
+ this.state = {
24
+ accounts: [],
25
+ regions: [],
26
+ };
27
+ }
28
+
29
+ public componentDidMount(): void {
30
+ observableFrom(AccountService.listAccounts('cloudfoundry'))
31
+ .pipe(takeUntil(this.destroy$))
32
+ .subscribe((rawAccounts: IAccount[]) => this.setState({ accounts: rawAccounts.map((it) => it.name) }));
33
+ if (this.props.stage.credentials) {
34
+ this.clearAndReloadRegions();
35
+ }
36
+ }
37
+
38
+ public componentWillUnmount(): void {
39
+ this.destroy$.next();
40
+ }
41
+
42
+ private clearAndReloadRegions = () => {
43
+ this.setState({ regions: [] });
44
+ observableFrom(AccountService.getRegionsForAccount(this.props.stage.credentials))
45
+ .pipe(takeUntil(this.destroy$))
46
+ .subscribe((regionList: IRegion[]) => {
47
+ const regions = regionList.map((r) => r.name);
48
+ regions.sort((a, b) => a.localeCompare(b));
49
+ this.setState({ regions });
50
+ });
51
+ };
52
+
53
+ private serviceInstanceNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {
54
+ this.props.updateStageField({ serviceInstanceName: event.target.value });
55
+ };
56
+
57
+ private serviceKeyNameUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {
58
+ this.props.updateStageField({ serviceKeyName: event.target.value });
59
+ };
60
+
61
+ private accountUpdated = (option: Option<string>) => {
62
+ const credentials = option.target.value;
63
+ this.setState({
64
+ regions: [],
65
+ });
66
+ this.props.updateStageField({
67
+ credentials,
68
+ region: '',
69
+ });
70
+ this.clearAndReloadRegions();
71
+ };
72
+
73
+ private regionUpdated = (option: Option<string>) => {
74
+ const region = option.target.value;
75
+ this.props.updateStageField({
76
+ region,
77
+ });
78
+ };
79
+
80
+ public render() {
81
+ const { credentials, region, serviceInstanceName, serviceKeyName } = this.props.stage;
82
+ const { accounts, regions } = this.state;
83
+
84
+ return (
85
+ <div className="form-horizontal">
86
+ <StageConfigField label="Account">
87
+ <ReactSelectInput
88
+ clearable={false}
89
+ onChange={this.accountUpdated}
90
+ value={credentials}
91
+ stringOptions={accounts}
92
+ />
93
+ </StageConfigField>
94
+ <StageConfigField label="Region">
95
+ <ReactSelectInput clearable={false} onChange={this.regionUpdated} value={region} stringOptions={regions} />
96
+ </StageConfigField>
97
+ <StageConfigField label="Service Instance Name">
98
+ <TextInput
99
+ type="text"
100
+ className="form-control"
101
+ onChange={this.serviceInstanceNameUpdated}
102
+ value={serviceInstanceName}
103
+ />
104
+ </StageConfigField>
105
+ <StageConfigField label="Service Key Name">
106
+ <TextInput
107
+ type="text"
108
+ className="form-control"
109
+ onChange={this.serviceKeyNameUpdated}
110
+ value={serviceKeyName}
111
+ />
112
+ </StageConfigField>
113
+ </div>
114
+ );
115
+ }
116
+ }
@@ -0,0 +1,21 @@
1
+ import type { IStage } from '@spinnaker/core';
2
+ import { ExecutionDetailsTasks, Registry } from '@spinnaker/core';
3
+
4
+ import { CloudFoundryCreateServiceKeyStageConfig } from './CloudFoundryCreateServiceKeyStageConfig';
5
+ import { CloudFoundryServiceKeyExecutionDetails } from '../../../presentation';
6
+
7
+ Registry.pipeline.registerStage({
8
+ accountExtractor: (stage: IStage) => [stage.context.credentials],
9
+ cloudProvider: 'cloudfoundry',
10
+ component: CloudFoundryCreateServiceKeyStageConfig,
11
+ description: 'Create a service key',
12
+ executionDetailsSections: [CloudFoundryServiceKeyExecutionDetails, ExecutionDetailsTasks],
13
+ key: 'createServiceKey',
14
+ label: 'Create Service Key',
15
+ validators: [
16
+ { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },
17
+ { type: 'requiredField', fieldName: 'region', preventSave: true },
18
+ { type: 'requiredField', fieldName: 'serviceInstanceName', preventSave: true },
19
+ { type: 'requiredField', fieldName: 'serviceKeyName', preventSave: true },
20
+ ],
21
+ });
@@ -0,0 +1,69 @@
1
+ import type { FormikErrors } from 'formik';
2
+ import { cloneDeep } from 'lodash';
3
+ import React from 'react';
4
+
5
+ import type { IStage, IStageConfigProps } from '@spinnaker/core';
6
+ import { FormikStageConfig, FormValidator } from '@spinnaker/core';
7
+
8
+ import { CloudFoundryDeleteServiceBindingsStageConfigForm } from './CloudFoundryDeleteServiceBindingsStageConfigForm';
9
+
10
+ interface ServiceUnbindingRequests {
11
+ serviceInstanceName: String;
12
+ }
13
+
14
+ export function CloudFoundryDeleteServiceBindingsConfig({
15
+ application,
16
+ pipeline,
17
+ stage,
18
+ updateStage,
19
+ }: IStageConfigProps) {
20
+ const stageWithDefaults = React.useMemo(() => {
21
+ return {
22
+ serviceUnbindingRequests: [],
23
+ restageRequired: true,
24
+ restartRequired: false,
25
+ credentials: '',
26
+ region: '',
27
+ ...cloneDeep(stage),
28
+ };
29
+ }, []);
30
+
31
+ return (
32
+ <FormikStageConfig
33
+ application={application}
34
+ onChange={updateStage}
35
+ pipeline={pipeline}
36
+ stage={stageWithDefaults}
37
+ validate={validateCloudFoundryDeleteServiceBindingsStage}
38
+ render={(props) => <CloudFoundryDeleteServiceBindingsStageConfigForm {...props} />}
39
+ />
40
+ );
41
+ }
42
+
43
+ export function validateCloudFoundryDeleteServiceBindingsStage(stage: IStage): FormikErrors<IStage> {
44
+ const formValidator = new FormValidator(stage);
45
+
46
+ formValidator.field('credentials', 'Account').required();
47
+ formValidator.field('region', 'Region').required();
48
+ formValidator.field('cluster', 'Cluster').required();
49
+ formValidator.field('target', 'Target').required();
50
+
51
+ formValidator
52
+ .field('serviceUnbindingRequests', 'Service Binding Requests')
53
+ .required()
54
+ .withValidators((serviceUnbindingRequests: ServiceUnbindingRequests[]) => {
55
+ if (validateServiceUnbindingRequests(serviceUnbindingRequests)) {
56
+ return undefined;
57
+ }
58
+ return 'There should be at least one service binding request. At a minimum, each request must have a service instance name.';
59
+ });
60
+
61
+ return formValidator.validateForm();
62
+ }
63
+
64
+ export function validateServiceUnbindingRequests(serviceUnbindingRequests: ServiceUnbindingRequests[]): boolean {
65
+ if (serviceUnbindingRequests?.length < 1) {
66
+ return false;
67
+ }
68
+ return serviceUnbindingRequests.every((req) => req.serviceInstanceName);
69
+ }