@spinnaker/tencentcloud 0.0.83 → 2025.0.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.0.84](https://github.com/spinnaker/deck/compare/@spinnaker/tencentcloud@0.0.83...@spinnaker/tencentcloud@0.0.84) (2024-06-10)
7
+
8
+ **Note:** Version bump only for package @spinnaker/tencentcloud
9
+
10
+
11
+
12
+
13
+
6
14
  ## [0.0.83](https://github.com/spinnaker/deck/compare/@spinnaker/tencentcloud@0.0.82...@spinnaker/tencentcloud@0.0.83) (2024-05-10)
7
15
 
8
16
  **Note:** Version bump only for package @spinnaker/tencentcloud
package/dist/index.js CHANGED
@@ -1,2 +1,553 @@
1
- import{module as e}from"angular";import{HelpContentsRegistry as t,REST as n,AccountService as l,StageConfigField as r,FormikFormField as a,NumberInput as i,SelectInput as c,NgReact as o,FormikStageConfig as s,FormValidator as C,Registry as d,CheckboxInput as u,ReactInject as p,ApplicationNameValidator as v,FirewallLabels as m,CloudProviderRegistry as g,DeploymentStrategyRegistry as h,SETTINGS as f}from"@spinnaker/core";import{$q as E}from"ngimport";import b from"react";import{cloneDeep as w}from"lodash";const F={};Object.keys(F).forEach((e=>t.register(e,F[e])));class y{findImages(e){return!e.q||e.q.length<3?E.when([{message:"Please enter at least 3 characters...",disabled:!0}]):n("/images/find").query({...e,provider:"tencentcloud"}).get().catch((()=>[]))}getImage(e,t,l){return n("/images").path(l,t,e).query({provider:"tencentcloud"}).get().then((e=>e&&e.length?e[0]:null)).catch((()=>null))}}const{useEffect:S,useState:D}=b,{AccountRegionClusterSelector:k}=o;function N({application:e,formik:t,pipeline:n}){const o=t.values,{setFieldValue:s}=t,[C,d]=D([]);S((()=>{var t,n,r,a,i,c,C;l.listAccounts("tencentcloud").then((e=>{d(e)})),o.isNew&&(null==(t=null==e?void 0:e.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnly)&&s("interestingHealthProviderNames",["Tencentcloud"]),!o.credentials&&(null==(r=null==e?void 0:e.defaultCredentials)?void 0:r.tencentcloud)&&s("credentials",null==(a=null==e?void 0:e.defaultCredentials)?void 0:a.tencentcloud),!(null==(i=null==o?void 0:o.regions)?void 0:i.length)&&(null==(c=null==e?void 0:e.defaultRegions)?void 0:c.tencentcloud)&&s("regions",[...o.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===o.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===o.preferLargerOverNewer&&s("preferLargerOverNewer","false")}),[]);return b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(k,{application:e,clusterField:"cluster",component:o,accounts:C}),b.createElement(r,{label:"Disable Options"},b.createElement("div",{className:"form-inline"},"Keep the",b.createElement(a,{name:"remainingEnabledServerGroups",required:!0,input:e=>b.createElement(i,{...e,min:0})}),b.createElement(a,{name:"preferLargerOverNewer",required:!0,input:e=>b.createElement(c,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),(u="server group",1===o.remainingEnabledServerGroups?u:u+"s")," enabled.")));var u}d.pipeline.registerStage({provides:"disableCluster",key:"disableCluster",cloudProvider:"tencentcloud",component:function({application:e,pipeline:t,stage:n,updateStage:l}){const r=b.useMemo((()=>({cloudProvider:"tencentcloud",regions:n.regions||[],...w(n)})),[]);return b.createElement(s,{application:e,onChange:l,pipeline:t,stage:r,render:e=>b.createElement(N,{...e})})},validateFn:e=>{const t=new C(e);return t.field("credentials","Account").required(),t.field("regions","Regions").required(),t.field("cluster","Cluster").required(),t.validateForm()}});const{useEffect:O,useState:A}=b,{AccountRegionClusterSelector:x}=o;function q({application:e,formik:t,pipeline:n}){const c=t.values,{setFieldValue:o}=t,[s,C]=A([]);return O((()=>{var t,n,r,a,i,s,d;l.listAccounts("tencentcloud").then((e=>{C(e)})),c.isNew&&(null==(t=null==e?void 0:e.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnly)&&o("interestingHealthProviderNames",["Tencentcloud"]),!c.credentials&&(null==(r=null==e?void 0:e.defaultCredentials)?void 0:r.tencentcloud)&&o("credentials",null==(a=null==e?void 0:e.defaultCredentials)?void 0:a.tencentcloud),!(null==(i=null==c?void 0:c.regions)?void 0:i.length)&&(null==(s=null==e?void 0:e.defaultRegions)?void 0:s.tencentcloud)&&o("regions",[...c.regions,null==(d=null==e?void 0:e.defaultRegions)?void 0:d.tencentcloud]),void 0===c.remainingEnabledServerGroups&&o("remainingEnabledServerGroups",1),void 0===c.preferLargerOverNewer&&o("preferLargerOverNewer","false")}),[]),b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(x,{application:e,clusterField:"cluster",component:c,accounts:s}),b.createElement(r,{label:"Rollback Options"},b.createElement("div",{className:"row"},b.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Wait",b.createElement(a,{name:"wait",required:!0,input:e=>b.createElement(i,{...e,min:0})}),"seconds between regional rollbacks."),b.createElement("div",{className:"col-sm-10 col-sm-offset-2"},"Consider rollback successful when",b.createElement(a,{name:"remainingEnabledServerGroups",required:!0,input:e=>b.createElement(i,{...e,min:0,max:100})}),"percent of instances are healthy."))))}d.pipeline.registerStage({provides:"rollbackCluster",key:"rollbackCluster",cloudProvider:"tencentcloud",component:function({application:e,pipeline:t,stage:n,updateStage:l}){const r=b.useMemo((()=>({cloudProvider:"tencentcloud",regions:n.regions||[],...w(n)})),[]);return b.createElement(s,{application:e,onChange:l,pipeline:t,stage:r,render:e=>b.createElement(q,{...e})})},validateFn:e=>{const t=new C(e);return t.field("credentials","Account").required(),t.field("regions","Regions").required(),t.field("cluster","Cluster").required(),t.validateForm()}});const{useEffect:z,useState:R}=b,{AccountRegionClusterSelector:H}=o;function M({application:e,formik:t,pipeline:n}){const o=t.values,{setFieldValue:s}=t,[C,d]=R([]);z((()=>{var t,n,r,a,i,c,C;l.listAccounts("tencentcloud").then((e=>{d(e)})),o.isNew&&(null==(t=null==e?void 0:e.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnly)&&s("interestingHealthProviderNames",["Tencentcloud"]),!o.credentials&&(null==(r=null==e?void 0:e.defaultCredentials)?void 0:r.tencentcloud)&&s("credentials",null==(a=null==e?void 0:e.defaultCredentials)?void 0:a.tencentcloud),!(null==(i=null==o?void 0:o.regions)?void 0:i.length)&&(null==(c=null==e?void 0:e.defaultRegions)?void 0:c.tencentcloud)&&s("regions",[...o.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===o.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===o.preferLargerOverNewer&&s("preferLargerOverNewer","false")}),[]);return b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(H,{application:e,clusterField:"cluster",component:o,accounts:C}),b.createElement(r,{label:"ScaleDown Options"},b.createElement("div",{className:"form-inline"},"Keep the",b.createElement(a,{name:"remainingEnabledServerGroups",required:!0,input:e=>b.createElement(i,{...e,min:0})}),b.createElement(a,{name:"preferLargerOverNewer",required:!0,input:e=>b.createElement(c,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),(p="server group",1===o.remainingFullSizeServerGroups?p:p+"s")," at current size.",b.createElement("p",null,"The remaining server groups will be scaled down to zero instances."))),b.createElement("div",{className:"form-group"},b.createElement(a,{name:"allowScaleDownActive",input:e=>b.createElement(u,{...e,text:"Allow scale down of active server groups"})})));var p}d.pipeline.registerStage({provides:"scaleDownCluster",key:"scaleDownCluster",cloudProvider:"tencentcloud",component:function({application:e,pipeline:t,stage:n,updateStage:l}){const r=b.useMemo((()=>({cloudProvider:"tencentcloud",regions:n.regions||[],...w(n)})),[]);return b.createElement(s,{application:e,onChange:l,pipeline:t,stage:r,render:e=>b.createElement(M,{...e})})},validateFn:e=>{const t=new C(e);return t.field("credentials","Account").required(),t.field("regions","Regions").required(),t.field("cluster","Cluster").required(),t.validateForm()}});const{useEffect:P,useState:L}=b,{AccountRegionClusterSelector:G}=o;function V({application:e,formik:t,pipeline:n}){const o=t.values,{setFieldValue:s}=t,[C,d]=L([]);P((()=>{var t,n,r,a,i,c,C;l.listAccounts("tencentcloud").then((e=>{d(e)})),o.isNew&&(null==(t=null==e?void 0:e.attributes)?void 0:t.platformHealthOnlyShowOverride)&&(null==(n=null==e?void 0:e.attributes)?void 0:n.platformHealthOnly)&&s("interestingHealthProviderNames",["Tencentcloud"]),!o.credentials&&(null==(r=null==e?void 0:e.defaultCredentials)?void 0:r.tencentcloud)&&s("credentials",null==(a=null==e?void 0:e.defaultCredentials)?void 0:a.tencentcloud),!(null==(i=null==o?void 0:o.regions)?void 0:i.length)&&(null==(c=null==e?void 0:e.defaultRegions)?void 0:c.tencentcloud)&&s("regions",[...o.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===o.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===o.preferLargerOverNewer&&s("preferLargerOverNewer","false")}),[]);const p=function(e,t){return 1===t?e:e+"s"};return b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(G,{application:e,clusterField:"cluster",component:o,accounts:C}),b.createElement(r,{label:"Shrink Options"},b.createElement("div",{className:"form-inline"},"Shrink to",b.createElement(a,{name:"remainingEnabledServerGroups",required:!0,input:e=>b.createElement(i,{...e,min:0})}),p("server group",o.shrinkToSize),", keeping the",b.createElement(a,{name:"retainLargerOverNewer",required:!0,input:e=>b.createElement(c,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),p("server group",o.remainingEnabledServerGroups)," enabled.")),b.createElement("div",{className:"form-group"},b.createElement("div",{className:"col-md-offset-3 col-md-6 checkbox"},b.createElement(a,{name:"allowDeleteActive",input:e=>b.createElement(u,{...e,text:"Allow deletion of active server groups"})}))))}d.pipeline.registerStage({provides:"shrinkCluster",key:"shrinkCluster",cloudProvider:"tencentcloud",component:function({application:e,pipeline:t,stage:n,updateStage:l}){const r=b.useMemo((()=>({cloudProvider:"tencentcloud",regions:n.regions||[],...w(n)})),[]);return b.createElement(s,{application:e,onChange:l,pipeline:t,stage:r,render:e=>b.createElement(V,{...e})})},validateFn:e=>{const t=new C(e);return t.field("credentials","Account").required(),t.field("regions","Regions").required(),t.field("cluster","Cluster").required(),t.validateForm()}});const B=new class extends p{constructor(){super(...arguments),this.$injectorProxy={}}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter((e=>"function"==typeof t[e])).forEach((e=>n[e]=t[e].bind(t)))}};const T=new class extends p{initialize(e){this.$injector=e}};e("spinnaker.tencentcloud.react",[]).run(["$injector",function(e){T.initialize(e),B.initialize(e)}]);e("spinnaker.tencentcloud.search.searchResultFormatter",[]).factory("tencentcloudSearchResultFormatter",(function(){return{securityGroups:function(e){}}}));v.registerValidator("tencentcloud",new class{validateSpecialCharacters(e,t){/^[a-zA-Z_0-9.]*$/g.test(e)||t.push("Only dot(.) and underscore(_) special characters are allowed.")}validateLoadBalancerCharacters(e,t){(e.includes(".")||e.includes("_"))&&t.push("If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.")}validateLength(e,t,n){if(e.length>250)n.push("The maximum length for an application in Tencentcloud is 250 characters.");else{if(e.length>240)if(e.length>=248)t.push(`You will not be able to include a stack or detail field for clusters or ${m.get("firewalls")}.`);else{const n=248-e.length;t.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${n} characters to do so.`)}if(e.length>20)if(e.length>32)t.push(`You will not be able to create an Tencentcloud load balancer for this application if the\n application's name is longer than 32 characters (currently: ${e.length} characters)`);else if(e.length>=30)t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${e.length} characters). With separators ("-"), you will not\n be able to add a stack and detail field to any load balancer.`);else{const n=30-e.length;t.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${n} characters to add a stack or detail\n field to any load balancer.`)}}}validate(e=""){const t=[],n=[];return e.length&&(this.validateSpecialCharacters(e,n),this.validateLoadBalancerCharacters(e,t),this.validateLength(e,t,n)),{warnings:t,errors:n}}});const $="spinnaker.tencentcloud";e("spinnaker.tencentcloud",["spinnaker.tencentcloud.react","spinnaker.tencentcloud.search.searchResultFormatter"]).config((()=>{g.registerProvider("tencentcloud",{name:"tencentcloud",logo:{path:"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22%E5%9B%BE%E5%B1%82_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%22120px%22%20height%3D%2248px%22%20viewBox%3D%220%200%20120%2048%22%20style%3D%22enable-background%3Anew%200%200%20120%2048%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cg%3E%20%20%3Cpath%20d%3D%22M93.829%2C13.731H81.181v1.83h3.808v6.673h-4.364v1.83h4.364v11.19h2.013v-11.19h4.814V35.02h3.802v-1.831h-1.788V13.731z%20%20%20%20M87.002%2C22.234v-6.673h4.814v6.673H87.002z%22%2F%3E%20%20%3Crect%20x%3D%2258.743%22%20y%3D%2230.136%22%20width%3D%229.979%22%20height%3D%221.83%22%2F%3E%20%20%3Cpath%20d%3D%22M51.944%2C26.749c0%2C3.328-0.269%2C5.854-0.823%2C8.093c-0.058%2C0.207%2C0.004%2C0.263%2C0.113%2C0.263c0.038%2C0%2C1.525%2C0%2C1.835%2C0%20%20%20c0.613-3.075%2C0.693-5.626%2C0.703-7.477h2.565v5.69h-1.821c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h3.257V13.777h-6.22V26.749z%20%20%20%20M53.774%2C25.98V21.6h2.563v4.38H53.774z%20M56.337%2C15.607v4.346h-2.563v-4.346H56.337z%22%2F%3E%20%20%3Cpath%20d%3D%22M69.429%2C21.196h2.457v-1.647h-7.16c0.216-0.526%2C0.41-1.091%2C0.588-1.702h6.123V16.2h-1.794%20%20%20c0.299-1.018%2C0.651-2.219%2C0.672-2.288c0.036-0.122-0.028-0.169-0.107-0.169h-1.558L67.927%2C16.2h-2.202%20%20%20c0.205-0.952%2C0.384-2.007%2C0.547-3.191c0.019-0.137-0.055-0.164-0.146-0.164c-0.073%2C0-1.278%2C0-1.774%2C0%20%20%20c-0.181%2C1.258-0.371%2C2.342-0.614%2C3.355h-1.08l-0.722-2.457h-1.558c-0.079%2C0-0.143%2C0.047-0.107%2C0.169%20%20%20c0.02%2C0.07%2C0.373%2C1.271%2C0.672%2C2.288h-1.747v1.647h4.079c-0.166%2C0.52-0.41%2C1.133-0.67%2C1.702h-3.858v1.647h2.898%20%20%20c-1.168%2C1.659-2.417%2C2.422-2.915%2C2.727c0%2C0.234%2C0%2C1.83%2C0%2C1.884c0%2C0.095%2C0.075%2C0.196%2C0.373%2C0.027%20%20%20c0.542-0.307%2C1.12-0.655%2C1.705-1.087h6.817l-0.058%2C2.467h-5.382l0.082-1.475c0-0.064-0.046-0.111-0.112-0.111%20%20%20c-0.102%2C0-1.721%2C0-1.721%2C0l-0.173%2C3.122c0%2C0.064%2C0.046%2C0.111%2C0.112%2C0.111c0.102%2C0%2C9.285%2C0%2C9.285%2C0v4.454h-4.185%20%20%20c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h5.807v-7.931h-2.273l0.075-3.203c0.85%2C0.79%2C1.712%2C1.379%2C2.497%2C1.824%20%20%20c0.298%2C0.169%2C0.373%2C0.068%2C0.373-0.027c0-0.054%2C0-1.651%2C0-1.884C71.844%2C23.618%2C70.597%2C22.853%2C69.429%2C21.196z%20M67.188%2C21.196%20%20%20c0.438%2C0.721%2C0.91%2C1.351%2C1.398%2C1.903h-5.991c0.465-0.537%2C0.915-1.163%2C1.335-1.903H67.188z%22%2F%3E%20%20%3Cpath%20d%3D%22M82.457%2C28.864c-0.034%2C0.026-1.742%2C1.32-3.395%2C2.572V19.538h-4.704v2.013h2.704v11.4%20%20%20c-0.644%2C0.488-1.081%2C0.819-1.081%2C0.819l1.105%2C1.459l5.552-4.207c0%2C0%2C0-2.021%2C0-2.073C82.639%2C28.851%2C82.529%2C28.809%2C82.457%2C28.864z%22%20%20%20%2F%3E%20%20%3Cpath%20d%3D%22M77.329%2C17.736c0%2C0%2C2.15%2C0%2C2.2%2C0c0.098%2C0%2C0.137-0.106%2C0.094-0.171c-0.04-0.061-2.775-4.238-2.775-4.238s-2.117%2C0-2.2%2C0%20%20%20c-0.083%2C0-0.144%2C0.096-0.098%2C0.166C74.596%2C13.562%2C77.329%2C17.736%2C77.329%2C17.736z%22%2F%3E%20%20%3Crect%20x%3D%2299.874%22%20y%3D%2214.22%22%20width%3D%2215.888%22%20height%3D%222.013%22%2F%3E%20%20%3Cpath%20d%3D%22M105.637%2C23.841H118v-2.013H97.636v2.013h5.65c-1.167%2C3.064-4.095%2C10.753-4.115%2C10.809%20%20%20c-0.032%2C0.089%2C0.026%2C0.155%2C0.104%2C0.155c0.049%2C0%2C17.523%2C0%2C17.564%2C0c0.083%2C0%2C0.131-0.082%2C0.101-0.16%20%20%20c-0.019-0.049-2.619-6.885-2.619-6.885s-2.103%2C0-2.186%2C0s-0.133%2C0.08-0.105%2C0.153c0.028%2C0.073%2C1.853%2C4.879%2C1.853%2C4.879h-11.646%20%20%20L105.637%2C23.841z%22%2F%3E%20%3C%2Fg%3E%20%3Cg%3E%20%20%3Cpath%20style%3D%22fill%3A%2300A3FF%3B%22%20d%3D%22M39.157%2C33.89c-0.764%2C0.756-2.125%2C1.613-4.361%2C1.689c-1.034%2C0.035-2.241%2C0.039-2.793%2C0.039%20%20%20c-0.603%2C0-5.918%2C0-12.012%2C0c4.37-4.245%2C8.182-7.947%2C8.615-8.367c0.396-0.385%2C1.287-1.237%2C2.056-1.929%20%20%20c1.687-1.519%2C3.206-1.825%2C4.28-1.815c1.683%2C0.016%2C3.214%2C0.703%2C4.308%2C1.813C41.591%2C27.712%2C41.535%2C31.536%2C39.157%2C33.89%20%20%20%20M42.034%2C22.597c-1.795-1.83-4.296-2.983-7.077-2.984c-2.404%2C0-4.474%2C0.829-6.281%2C2.3c-0.788%2C0.641-1.614%2C1.409-2.653%2C2.419%20%20%20c-0.516%2C0.501-15.485%2C15.026-15.485%2C15.026c0.785%2C0.112%2C1.864%2C0.145%2C2.826%2C0.151c0.902%2C0.006%2C18.1%2C0.004%2C18.82%2C0.004%20%20%20c1.449%2C0%2C2.392-0.002%2C3.405-0.076c2.323-0.17%2C4.518-1.022%2C6.292-2.764C45.82%2C32.805%2C45.879%2C26.526%2C42.034%2C22.597z%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%2300C8DC%3B%22%20d%3D%22M17.883%2C21.663c-1.76-1.317-3.729-2.053-5.963-2.05c-2.781%2C0-5.283%2C1.153-7.077%2C2.984%20%20%20c-3.845%2C3.93-3.786%2C10.209%2C0.154%2C14.077c1.582%2C1.553%2C3.498%2C2.398%2C5.541%2C2.684l3.854-3.74c-0.623-0.003-1.518-0.011-2.311-0.038%20%20%20c-2.235-0.076-3.597-0.934-4.361-1.689c-2.379-2.354-2.434-6.178-0.094-8.57c1.094-1.11%2C2.625-1.797%2C4.308-1.813%20%20%20c1.055-0.004%2C2.486%2C0.302%2C4.103%2C1.643c0.772%2C0.64%2C2.486%2C2.147%2C3.239%2C2.825c0.038%2C0.035%2C0.084%2C0.038%2C0.129%2C0.001l2.654-2.589%20%20%20c0.046-0.045%2C0.043-0.105-0.002-0.146C20.781%2C24.088%2C18.972%2C22.474%2C17.883%2C21.663%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%23006EFF%3B%22%20d%3D%22M36%2C17.365c-1.831-5.172-6.762-8.879-12.562-8.879c-6.652%2C0-12.165%2C4.892-13.164%2C11.264%20%20%20c0.535-0.09%2C1.085-0.138%2C1.646-0.138c0.781-0.001%2C1.529%2C0.09%2C2.248%2C0.263c0.014%2C0.003%2C0.028%2C0.005%2C0.042%2C0.008%20%20%20c0.901-4.302%2C4.705-7.498%2C9.228-7.498c3.767%2C0%2C7.072%2C2.272%2C8.562%2C5.492c0.023%2C0.051%2C0.063%2C0.067%2C0.104%2C0.056%20%20%20c1.121-0.308%2C2.464-0.487%2C3.762-0.391C35.992%2C17.552%2C36.04%2C17.481%2C36%2C17.365%22%2F%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"},image:{reader:y}})})),h.registerProvider("tencentcloud",["custom","redblack","rollingpush","rollingredblack"]);const j=f.providers.tencentcloud||{defaults:{}};j&&(j.resetToOriginal=f.resetProvider("tencentcloud"));export{$ as TENCENTCLOUD_MODULE,j as TencentcloudProviderSettings};
1
+ import { module } from 'angular';
2
+ import { HelpContentsRegistry, REST, AccountService, StageConfigField, FormikFormField, NumberInput, SelectInput, NgReact, FormikStageConfig, FormValidator, Registry, CheckboxInput, ReactInject, ApplicationNameValidator, FirewallLabels, CloudProviderRegistry, DeploymentStrategyRegistry, SETTINGS } from '@spinnaker/core';
3
+ import { $q } from 'ngimport';
4
+ import React from 'react';
5
+ import { cloneDeep } from 'lodash';
6
+
7
+ const helpContents = {};
8
+ Object.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));
9
+
10
+ class TencentcloudImageReader {
11
+ findImages(params) {
12
+ if (!params.q || params.q.length < 3) {
13
+ return $q.when([{ message: "Please enter at least 3 characters...", disabled: true }]);
14
+ }
15
+ return REST("/images/find").query({ ...params, provider: "tencentcloud" }).get().catch(() => []);
16
+ }
17
+ getImage(name, region, credentials) {
18
+ return REST("/images").path(credentials, region, name).query({ provider: "tencentcloud" }).get().then((results) => results && results.length ? results[0] : null).catch(() => null);
19
+ }
20
+ }
21
+
22
+ var logo = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22%E5%9B%BE%E5%B1%82_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%22120px%22%20height%3D%2248px%22%20viewBox%3D%220%200%20120%2048%22%20style%3D%22enable-background%3Anew%200%200%20120%2048%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cg%3E%20%20%3Cpath%20d%3D%22M93.829%2C13.731H81.181v1.83h3.808v6.673h-4.364v1.83h4.364v11.19h2.013v-11.19h4.814V35.02h3.802v-1.831h-1.788V13.731z%20%20%20%20M87.002%2C22.234v-6.673h4.814v6.673H87.002z%22%2F%3E%20%20%3Crect%20x%3D%2258.743%22%20y%3D%2230.136%22%20width%3D%229.979%22%20height%3D%221.83%22%2F%3E%20%20%3Cpath%20d%3D%22M51.944%2C26.749c0%2C3.328-0.269%2C5.854-0.823%2C8.093c-0.058%2C0.207%2C0.004%2C0.263%2C0.113%2C0.263c0.038%2C0%2C1.525%2C0%2C1.835%2C0%20%20%20c0.613-3.075%2C0.693-5.626%2C0.703-7.477h2.565v5.69h-1.821c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h3.257V13.777h-6.22V26.749z%20%20%20%20M53.774%2C25.98V21.6h2.563v4.38H53.774z%20M56.337%2C15.607v4.346h-2.563v-4.346H56.337z%22%2F%3E%20%20%3Cpath%20d%3D%22M69.429%2C21.196h2.457v-1.647h-7.16c0.216-0.526%2C0.41-1.091%2C0.588-1.702h6.123V16.2h-1.794%20%20%20c0.299-1.018%2C0.651-2.219%2C0.672-2.288c0.036-0.122-0.028-0.169-0.107-0.169h-1.558L67.927%2C16.2h-2.202%20%20%20c0.205-0.952%2C0.384-2.007%2C0.547-3.191c0.019-0.137-0.055-0.164-0.146-0.164c-0.073%2C0-1.278%2C0-1.774%2C0%20%20%20c-0.181%2C1.258-0.371%2C2.342-0.614%2C3.355h-1.08l-0.722-2.457h-1.558c-0.079%2C0-0.143%2C0.047-0.107%2C0.169%20%20%20c0.02%2C0.07%2C0.373%2C1.271%2C0.672%2C2.288h-1.747v1.647h4.079c-0.166%2C0.52-0.41%2C1.133-0.67%2C1.702h-3.858v1.647h2.898%20%20%20c-1.168%2C1.659-2.417%2C2.422-2.915%2C2.727c0%2C0.234%2C0%2C1.83%2C0%2C1.884c0%2C0.095%2C0.075%2C0.196%2C0.373%2C0.027%20%20%20c0.542-0.307%2C1.12-0.655%2C1.705-1.087h6.817l-0.058%2C2.467h-5.382l0.082-1.475c0-0.064-0.046-0.111-0.112-0.111%20%20%20c-0.102%2C0-1.721%2C0-1.721%2C0l-0.173%2C3.122c0%2C0.064%2C0.046%2C0.111%2C0.112%2C0.111c0.102%2C0%2C9.285%2C0%2C9.285%2C0v4.454h-4.185%20%20%20c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h5.807v-7.931h-2.273l0.075-3.203c0.85%2C0.79%2C1.712%2C1.379%2C2.497%2C1.824%20%20%20c0.298%2C0.169%2C0.373%2C0.068%2C0.373-0.027c0-0.054%2C0-1.651%2C0-1.884C71.844%2C23.618%2C70.597%2C22.853%2C69.429%2C21.196z%20M67.188%2C21.196%20%20%20c0.438%2C0.721%2C0.91%2C1.351%2C1.398%2C1.903h-5.991c0.465-0.537%2C0.915-1.163%2C1.335-1.903H67.188z%22%2F%3E%20%20%3Cpath%20d%3D%22M82.457%2C28.864c-0.034%2C0.026-1.742%2C1.32-3.395%2C2.572V19.538h-4.704v2.013h2.704v11.4%20%20%20c-0.644%2C0.488-1.081%2C0.819-1.081%2C0.819l1.105%2C1.459l5.552-4.207c0%2C0%2C0-2.021%2C0-2.073C82.639%2C28.851%2C82.529%2C28.809%2C82.457%2C28.864z%22%20%20%20%2F%3E%20%20%3Cpath%20d%3D%22M77.329%2C17.736c0%2C0%2C2.15%2C0%2C2.2%2C0c0.098%2C0%2C0.137-0.106%2C0.094-0.171c-0.04-0.061-2.775-4.238-2.775-4.238s-2.117%2C0-2.2%2C0%20%20%20c-0.083%2C0-0.144%2C0.096-0.098%2C0.166C74.596%2C13.562%2C77.329%2C17.736%2C77.329%2C17.736z%22%2F%3E%20%20%3Crect%20x%3D%2299.874%22%20y%3D%2214.22%22%20width%3D%2215.888%22%20height%3D%222.013%22%2F%3E%20%20%3Cpath%20d%3D%22M105.637%2C23.841H118v-2.013H97.636v2.013h5.65c-1.167%2C3.064-4.095%2C10.753-4.115%2C10.809%20%20%20c-0.032%2C0.089%2C0.026%2C0.155%2C0.104%2C0.155c0.049%2C0%2C17.523%2C0%2C17.564%2C0c0.083%2C0%2C0.131-0.082%2C0.101-0.16%20%20%20c-0.019-0.049-2.619-6.885-2.619-6.885s-2.103%2C0-2.186%2C0s-0.133%2C0.08-0.105%2C0.153c0.028%2C0.073%2C1.853%2C4.879%2C1.853%2C4.879h-11.646%20%20%20L105.637%2C23.841z%22%2F%3E%20%3C%2Fg%3E%20%3Cg%3E%20%20%3Cpath%20style%3D%22fill%3A%2300A3FF%3B%22%20d%3D%22M39.157%2C33.89c-0.764%2C0.756-2.125%2C1.613-4.361%2C1.689c-1.034%2C0.035-2.241%2C0.039-2.793%2C0.039%20%20%20c-0.603%2C0-5.918%2C0-12.012%2C0c4.37-4.245%2C8.182-7.947%2C8.615-8.367c0.396-0.385%2C1.287-1.237%2C2.056-1.929%20%20%20c1.687-1.519%2C3.206-1.825%2C4.28-1.815c1.683%2C0.016%2C3.214%2C0.703%2C4.308%2C1.813C41.591%2C27.712%2C41.535%2C31.536%2C39.157%2C33.89%20%20%20%20M42.034%2C22.597c-1.795-1.83-4.296-2.983-7.077-2.984c-2.404%2C0-4.474%2C0.829-6.281%2C2.3c-0.788%2C0.641-1.614%2C1.409-2.653%2C2.419%20%20%20c-0.516%2C0.501-15.485%2C15.026-15.485%2C15.026c0.785%2C0.112%2C1.864%2C0.145%2C2.826%2C0.151c0.902%2C0.006%2C18.1%2C0.004%2C18.82%2C0.004%20%20%20c1.449%2C0%2C2.392-0.002%2C3.405-0.076c2.323-0.17%2C4.518-1.022%2C6.292-2.764C45.82%2C32.805%2C45.879%2C26.526%2C42.034%2C22.597z%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%2300C8DC%3B%22%20d%3D%22M17.883%2C21.663c-1.76-1.317-3.729-2.053-5.963-2.05c-2.781%2C0-5.283%2C1.153-7.077%2C2.984%20%20%20c-3.845%2C3.93-3.786%2C10.209%2C0.154%2C14.077c1.582%2C1.553%2C3.498%2C2.398%2C5.541%2C2.684l3.854-3.74c-0.623-0.003-1.518-0.011-2.311-0.038%20%20%20c-2.235-0.076-3.597-0.934-4.361-1.689c-2.379-2.354-2.434-6.178-0.094-8.57c1.094-1.11%2C2.625-1.797%2C4.308-1.813%20%20%20c1.055-0.004%2C2.486%2C0.302%2C4.103%2C1.643c0.772%2C0.64%2C2.486%2C2.147%2C3.239%2C2.825c0.038%2C0.035%2C0.084%2C0.038%2C0.129%2C0.001l2.654-2.589%20%20%20c0.046-0.045%2C0.043-0.105-0.002-0.146C20.781%2C24.088%2C18.972%2C22.474%2C17.883%2C21.663%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%23006EFF%3B%22%20d%3D%22M36%2C17.365c-1.831-5.172-6.762-8.879-12.562-8.879c-6.652%2C0-12.165%2C4.892-13.164%2C11.264%20%20%20c0.535-0.09%2C1.085-0.138%2C1.646-0.138c0.781-0.001%2C1.529%2C0.09%2C2.248%2C0.263c0.014%2C0.003%2C0.028%2C0.005%2C0.042%2C0.008%20%20%20c0.901-4.302%2C4.705-7.498%2C9.228-7.498c3.767%2C0%2C7.072%2C2.272%2C8.562%2C5.492c0.023%2C0.051%2C0.063%2C0.067%2C0.104%2C0.056%20%20%20c1.121-0.308%2C2.464-0.487%2C3.762-0.391C35.992%2C17.552%2C36.04%2C17.481%2C36%2C17.365%22%2F%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E";
23
+
24
+ const { useEffect: useEffect$3, useState: useState$3 } = React;
25
+ const { AccountRegionClusterSelector: AccountRegionClusterSelector$3 } = NgReact;
26
+ function DisableClusterStageForm({ application, formik, pipeline }) {
27
+ const stage = formik.values;
28
+ const { setFieldValue } = formik;
29
+ const [accounts, setAccounts] = useState$3([]);
30
+ useEffect$3(() => {
31
+ var _a, _b, _c, _d, _e, _f, _g;
32
+ AccountService.listAccounts("tencentcloud").then((accounts2) => {
33
+ setAccounts(accounts2);
34
+ });
35
+ if (stage.isNew && ((_a = application == null ? void 0 : application.attributes) == null ? void 0 : _a.platformHealthOnlyShowOverride) && ((_b = application == null ? void 0 : application.attributes) == null ? void 0 : _b.platformHealthOnly)) {
36
+ setFieldValue("interestingHealthProviderNames", ["Tencentcloud"]);
37
+ }
38
+ if (!stage.credentials && ((_c = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _c.tencentcloud)) {
39
+ setFieldValue("credentials", (_d = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _d.tencentcloud);
40
+ }
41
+ if (!((_e = stage == null ? void 0 : stage.regions) == null ? void 0 : _e.length) && ((_f = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _f.tencentcloud)) {
42
+ setFieldValue("regions", [...stage.regions, (_g = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _g.tencentcloud]);
43
+ }
44
+ if (stage.remainingEnabledServerGroups === void 0) {
45
+ setFieldValue("remainingEnabledServerGroups", 1);
46
+ }
47
+ if (stage.preferLargerOverNewer === void 0) {
48
+ setFieldValue("preferLargerOverNewer", "false");
49
+ }
50
+ }, []);
51
+ const pluralize = function(str, val) {
52
+ if (val === 1) {
53
+ return str;
54
+ }
55
+ return str + "s";
56
+ };
57
+ return /* @__PURE__ */ React.createElement("div", {
58
+ className: "form-horizontal"
59
+ }, !pipeline.strategy && /* @__PURE__ */ React.createElement(AccountRegionClusterSelector$3, {
60
+ application,
61
+ clusterField: "cluster",
62
+ component: stage,
63
+ accounts
64
+ }), /* @__PURE__ */ React.createElement(StageConfigField, {
65
+ label: "Disable Options"
66
+ }, /* @__PURE__ */ React.createElement("div", {
67
+ className: "form-inline"
68
+ }, "Keep the", /* @__PURE__ */ React.createElement(FormikFormField, {
69
+ name: "remainingEnabledServerGroups",
70
+ required: true,
71
+ input: (props) => /* @__PURE__ */ React.createElement(NumberInput, {
72
+ ...props,
73
+ min: 0
74
+ })
75
+ }), /* @__PURE__ */ React.createElement(FormikFormField, {
76
+ name: "preferLargerOverNewer",
77
+ required: true,
78
+ input: (props) => /* @__PURE__ */ React.createElement(SelectInput, {
79
+ options: [
80
+ { label: "largest", value: "true" },
81
+ { label: "newest", value: "false" }
82
+ ],
83
+ ...props
84
+ })
85
+ }), pluralize("server group", stage.remainingEnabledServerGroups), " enabled.")));
86
+ }
87
+
88
+ function DisableClusterConfig({ application, pipeline, stage, updateStage }) {
89
+ const stageWithDefaults = React.useMemo(() => {
90
+ return {
91
+ cloudProvider: "tencentcloud",
92
+ regions: stage.regions || [],
93
+ ...cloneDeep(stage)
94
+ };
95
+ }, []);
96
+ return /* @__PURE__ */ React.createElement(FormikStageConfig, {
97
+ application,
98
+ onChange: updateStage,
99
+ pipeline,
100
+ stage: stageWithDefaults,
101
+ render: (props) => /* @__PURE__ */ React.createElement(DisableClusterStageForm, {
102
+ ...props
103
+ })
104
+ });
105
+ }
106
+
107
+ const validate$3 = (stage) => {
108
+ const formValidator = new FormValidator(stage);
109
+ formValidator.field("credentials", "Account").required();
110
+ formValidator.field("regions", "Regions").required();
111
+ formValidator.field("cluster", "Cluster").required();
112
+ return formValidator.validateForm();
113
+ };
114
+
115
+ Registry.pipeline.registerStage({
116
+ provides: "disableCluster",
117
+ key: "disableCluster",
118
+ cloudProvider: "tencentcloud",
119
+ component: DisableClusterConfig,
120
+ validateFn: validate$3
121
+ });
122
+
123
+ const { useEffect: useEffect$2, useState: useState$2 } = React;
124
+ const { AccountRegionClusterSelector: AccountRegionClusterSelector$2 } = NgReact;
125
+ function RollbackClusterStageForm({ application, formik, pipeline }) {
126
+ const stage = formik.values;
127
+ const { setFieldValue } = formik;
128
+ const [accounts, setAccounts] = useState$2([]);
129
+ useEffect$2(() => {
130
+ var _a, _b, _c, _d, _e, _f, _g;
131
+ AccountService.listAccounts("tencentcloud").then((accounts2) => {
132
+ setAccounts(accounts2);
133
+ });
134
+ if (stage.isNew && ((_a = application == null ? void 0 : application.attributes) == null ? void 0 : _a.platformHealthOnlyShowOverride) && ((_b = application == null ? void 0 : application.attributes) == null ? void 0 : _b.platformHealthOnly)) {
135
+ setFieldValue("interestingHealthProviderNames", ["Tencentcloud"]);
136
+ }
137
+ if (!stage.credentials && ((_c = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _c.tencentcloud)) {
138
+ setFieldValue("credentials", (_d = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _d.tencentcloud);
139
+ }
140
+ if (!((_e = stage == null ? void 0 : stage.regions) == null ? void 0 : _e.length) && ((_f = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _f.tencentcloud)) {
141
+ setFieldValue("regions", [...stage.regions, (_g = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _g.tencentcloud]);
142
+ }
143
+ if (stage.remainingEnabledServerGroups === void 0) {
144
+ setFieldValue("remainingEnabledServerGroups", 1);
145
+ }
146
+ if (stage.preferLargerOverNewer === void 0) {
147
+ setFieldValue("preferLargerOverNewer", "false");
148
+ }
149
+ }, []);
150
+ return /* @__PURE__ */ React.createElement("div", {
151
+ className: "form-horizontal"
152
+ }, !pipeline.strategy && /* @__PURE__ */ React.createElement(AccountRegionClusterSelector$2, {
153
+ application,
154
+ clusterField: "cluster",
155
+ component: stage,
156
+ accounts
157
+ }), /* @__PURE__ */ React.createElement(StageConfigField, {
158
+ label: "Rollback Options"
159
+ }, /* @__PURE__ */ React.createElement("div", {
160
+ className: "row"
161
+ }, /* @__PURE__ */ React.createElement("div", {
162
+ className: "col-sm-10 col-sm-offset-2"
163
+ }, "Wait", /* @__PURE__ */ React.createElement(FormikFormField, {
164
+ name: "wait",
165
+ required: true,
166
+ input: (props) => /* @__PURE__ */ React.createElement(NumberInput, {
167
+ ...props,
168
+ min: 0
169
+ })
170
+ }), "seconds between regional rollbacks."), /* @__PURE__ */ React.createElement("div", {
171
+ className: "col-sm-10 col-sm-offset-2"
172
+ }, "Consider rollback successful when", /* @__PURE__ */ React.createElement(FormikFormField, {
173
+ name: "remainingEnabledServerGroups",
174
+ required: true,
175
+ input: (props) => /* @__PURE__ */ React.createElement(NumberInput, {
176
+ ...props,
177
+ min: 0,
178
+ max: 100
179
+ })
180
+ }), "percent of instances are healthy."))));
181
+ }
182
+
183
+ function RollbackClusterConfig({ application, pipeline, stage, updateStage }) {
184
+ const stageWithDefaults = React.useMemo(() => {
185
+ return {
186
+ cloudProvider: "tencentcloud",
187
+ regions: stage.regions || [],
188
+ ...cloneDeep(stage)
189
+ };
190
+ }, []);
191
+ return /* @__PURE__ */ React.createElement(FormikStageConfig, {
192
+ application,
193
+ onChange: updateStage,
194
+ pipeline,
195
+ stage: stageWithDefaults,
196
+ render: (props) => /* @__PURE__ */ React.createElement(RollbackClusterStageForm, {
197
+ ...props
198
+ })
199
+ });
200
+ }
201
+
202
+ const validate$2 = (stage) => {
203
+ const formValidator = new FormValidator(stage);
204
+ formValidator.field("credentials", "Account").required();
205
+ formValidator.field("regions", "Regions").required();
206
+ formValidator.field("cluster", "Cluster").required();
207
+ return formValidator.validateForm();
208
+ };
209
+
210
+ Registry.pipeline.registerStage({
211
+ provides: "rollbackCluster",
212
+ key: "rollbackCluster",
213
+ cloudProvider: "tencentcloud",
214
+ component: RollbackClusterConfig,
215
+ validateFn: validate$2
216
+ });
217
+
218
+ const { useEffect: useEffect$1, useState: useState$1 } = React;
219
+ const { AccountRegionClusterSelector: AccountRegionClusterSelector$1 } = NgReact;
220
+ function ScaleDownClusterStageForm({ application, formik, pipeline }) {
221
+ const stage = formik.values;
222
+ const { setFieldValue } = formik;
223
+ const [accounts, setAccounts] = useState$1([]);
224
+ useEffect$1(() => {
225
+ var _a, _b, _c, _d, _e, _f, _g;
226
+ AccountService.listAccounts("tencentcloud").then((accounts2) => {
227
+ setAccounts(accounts2);
228
+ });
229
+ if (stage.isNew && ((_a = application == null ? void 0 : application.attributes) == null ? void 0 : _a.platformHealthOnlyShowOverride) && ((_b = application == null ? void 0 : application.attributes) == null ? void 0 : _b.platformHealthOnly)) {
230
+ setFieldValue("interestingHealthProviderNames", ["Tencentcloud"]);
231
+ }
232
+ if (!stage.credentials && ((_c = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _c.tencentcloud)) {
233
+ setFieldValue("credentials", (_d = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _d.tencentcloud);
234
+ }
235
+ if (!((_e = stage == null ? void 0 : stage.regions) == null ? void 0 : _e.length) && ((_f = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _f.tencentcloud)) {
236
+ setFieldValue("regions", [...stage.regions, (_g = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _g.tencentcloud]);
237
+ }
238
+ if (stage.remainingEnabledServerGroups === void 0) {
239
+ setFieldValue("remainingEnabledServerGroups", 1);
240
+ }
241
+ if (stage.preferLargerOverNewer === void 0) {
242
+ setFieldValue("preferLargerOverNewer", "false");
243
+ }
244
+ }, []);
245
+ const pluralize = function(str, val) {
246
+ if (val === 1) {
247
+ return str;
248
+ }
249
+ return str + "s";
250
+ };
251
+ return /* @__PURE__ */ React.createElement("div", {
252
+ className: "form-horizontal"
253
+ }, !pipeline.strategy && /* @__PURE__ */ React.createElement(AccountRegionClusterSelector$1, {
254
+ application,
255
+ clusterField: "cluster",
256
+ component: stage,
257
+ accounts
258
+ }), /* @__PURE__ */ React.createElement(StageConfigField, {
259
+ label: "ScaleDown Options"
260
+ }, /* @__PURE__ */ React.createElement("div", {
261
+ className: "form-inline"
262
+ }, "Keep the", /* @__PURE__ */ React.createElement(FormikFormField, {
263
+ name: "remainingEnabledServerGroups",
264
+ required: true,
265
+ input: (props) => /* @__PURE__ */ React.createElement(NumberInput, {
266
+ ...props,
267
+ min: 0
268
+ })
269
+ }), /* @__PURE__ */ React.createElement(FormikFormField, {
270
+ name: "preferLargerOverNewer",
271
+ required: true,
272
+ input: (props) => /* @__PURE__ */ React.createElement(SelectInput, {
273
+ options: [
274
+ { label: "largest", value: "true" },
275
+ { label: "newest", value: "false" }
276
+ ],
277
+ ...props
278
+ })
279
+ }), pluralize("server group", stage.remainingFullSizeServerGroups), " at current size.", /* @__PURE__ */ React.createElement("p", null, "The remaining server groups will be scaled down to zero instances."))), /* @__PURE__ */ React.createElement("div", {
280
+ className: "form-group"
281
+ }, /* @__PURE__ */ React.createElement(FormikFormField, {
282
+ name: "allowScaleDownActive",
283
+ input: (props) => /* @__PURE__ */ React.createElement(CheckboxInput, {
284
+ ...props,
285
+ text: "Allow scale down of active server groups"
286
+ })
287
+ })));
288
+ }
289
+
290
+ function ScaleDownClusterConfig({ application, pipeline, stage, updateStage }) {
291
+ const stageWithDefaults = React.useMemo(() => {
292
+ return {
293
+ cloudProvider: "tencentcloud",
294
+ regions: stage.regions || [],
295
+ ...cloneDeep(stage)
296
+ };
297
+ }, []);
298
+ return /* @__PURE__ */ React.createElement(FormikStageConfig, {
299
+ application,
300
+ onChange: updateStage,
301
+ pipeline,
302
+ stage: stageWithDefaults,
303
+ render: (props) => /* @__PURE__ */ React.createElement(ScaleDownClusterStageForm, {
304
+ ...props
305
+ })
306
+ });
307
+ }
308
+
309
+ const validate$1 = (stage) => {
310
+ const formValidator = new FormValidator(stage);
311
+ formValidator.field("credentials", "Account").required();
312
+ formValidator.field("regions", "Regions").required();
313
+ formValidator.field("cluster", "Cluster").required();
314
+ return formValidator.validateForm();
315
+ };
316
+
317
+ Registry.pipeline.registerStage({
318
+ provides: "scaleDownCluster",
319
+ key: "scaleDownCluster",
320
+ cloudProvider: "tencentcloud",
321
+ component: ScaleDownClusterConfig,
322
+ validateFn: validate$1
323
+ });
324
+
325
+ const { useEffect, useState } = React;
326
+ const { AccountRegionClusterSelector } = NgReact;
327
+ function ShrinkClusterStageForm({ application, formik, pipeline }) {
328
+ const stage = formik.values;
329
+ const { setFieldValue } = formik;
330
+ const [accounts, setAccounts] = useState([]);
331
+ useEffect(() => {
332
+ var _a, _b, _c, _d, _e, _f, _g;
333
+ AccountService.listAccounts("tencentcloud").then((accounts2) => {
334
+ setAccounts(accounts2);
335
+ });
336
+ if (stage.isNew && ((_a = application == null ? void 0 : application.attributes) == null ? void 0 : _a.platformHealthOnlyShowOverride) && ((_b = application == null ? void 0 : application.attributes) == null ? void 0 : _b.platformHealthOnly)) {
337
+ setFieldValue("interestingHealthProviderNames", ["Tencentcloud"]);
338
+ }
339
+ if (!stage.credentials && ((_c = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _c.tencentcloud)) {
340
+ setFieldValue("credentials", (_d = application == null ? void 0 : application.defaultCredentials) == null ? void 0 : _d.tencentcloud);
341
+ }
342
+ if (!((_e = stage == null ? void 0 : stage.regions) == null ? void 0 : _e.length) && ((_f = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _f.tencentcloud)) {
343
+ setFieldValue("regions", [...stage.regions, (_g = application == null ? void 0 : application.defaultRegions) == null ? void 0 : _g.tencentcloud]);
344
+ }
345
+ if (stage.remainingEnabledServerGroups === void 0) {
346
+ setFieldValue("remainingEnabledServerGroups", 1);
347
+ }
348
+ if (stage.preferLargerOverNewer === void 0) {
349
+ setFieldValue("preferLargerOverNewer", "false");
350
+ }
351
+ }, []);
352
+ const pluralize = function(str, val) {
353
+ if (val === 1) {
354
+ return str;
355
+ }
356
+ return str + "s";
357
+ };
358
+ return /* @__PURE__ */ React.createElement("div", {
359
+ className: "form-horizontal"
360
+ }, !pipeline.strategy && /* @__PURE__ */ React.createElement(AccountRegionClusterSelector, {
361
+ application,
362
+ clusterField: "cluster",
363
+ component: stage,
364
+ accounts
365
+ }), /* @__PURE__ */ React.createElement(StageConfigField, {
366
+ label: "Shrink Options"
367
+ }, /* @__PURE__ */ React.createElement("div", {
368
+ className: "form-inline"
369
+ }, "Shrink to", /* @__PURE__ */ React.createElement(FormikFormField, {
370
+ name: "remainingEnabledServerGroups",
371
+ required: true,
372
+ input: (props) => /* @__PURE__ */ React.createElement(NumberInput, {
373
+ ...props,
374
+ min: 0
375
+ })
376
+ }), pluralize("server group", stage.shrinkToSize), ", keeping the", /* @__PURE__ */ React.createElement(FormikFormField, {
377
+ name: "retainLargerOverNewer",
378
+ required: true,
379
+ input: (props) => /* @__PURE__ */ React.createElement(SelectInput, {
380
+ options: [
381
+ { label: "largest", value: "true" },
382
+ { label: "newest", value: "false" }
383
+ ],
384
+ ...props
385
+ })
386
+ }), pluralize("server group", stage.remainingEnabledServerGroups), " enabled.")), /* @__PURE__ */ React.createElement("div", {
387
+ className: "form-group"
388
+ }, /* @__PURE__ */ React.createElement("div", {
389
+ className: "col-md-offset-3 col-md-6 checkbox"
390
+ }, /* @__PURE__ */ React.createElement(FormikFormField, {
391
+ name: "allowDeleteActive",
392
+ input: (props) => /* @__PURE__ */ React.createElement(CheckboxInput, {
393
+ ...props,
394
+ text: "Allow deletion of active server groups"
395
+ })
396
+ }))));
397
+ }
398
+
399
+ function ShrinkClusterConfig({ application, pipeline, stage, updateStage }) {
400
+ const stageWithDefaults = React.useMemo(() => {
401
+ return {
402
+ cloudProvider: "tencentcloud",
403
+ regions: stage.regions || [],
404
+ ...cloneDeep(stage)
405
+ };
406
+ }, []);
407
+ return /* @__PURE__ */ React.createElement(FormikStageConfig, {
408
+ application,
409
+ onChange: updateStage,
410
+ pipeline,
411
+ stage: stageWithDefaults,
412
+ render: (props) => /* @__PURE__ */ React.createElement(ShrinkClusterStageForm, {
413
+ ...props
414
+ })
415
+ });
416
+ }
417
+
418
+ const validate = (stage) => {
419
+ const formValidator = new FormValidator(stage);
420
+ formValidator.field("credentials", "Account").required();
421
+ formValidator.field("regions", "Regions").required();
422
+ formValidator.field("cluster", "Cluster").required();
423
+ return formValidator.validateForm();
424
+ };
425
+
426
+ Registry.pipeline.registerStage({
427
+ provides: "shrinkCluster",
428
+ key: "shrinkCluster",
429
+ cloudProvider: "tencentcloud",
430
+ component: ShrinkClusterConfig,
431
+ validateFn: validate
432
+ });
433
+
434
+ class TencentcloudNgReactInjector extends ReactInject {
435
+ constructor() {
436
+ super(...arguments);
437
+ this.$injectorProxy = {};
438
+ }
439
+ initialize($injector) {
440
+ const realInjector = $injector;
441
+ const proxyInjector = this.$injectorProxy;
442
+ Object.keys($injector).filter((key) => typeof realInjector[key] === "function").forEach((key) => proxyInjector[key] = realInjector[key].bind(realInjector));
443
+ }
444
+ }
445
+ const TencentcloudNgReact = new TencentcloudNgReactInjector();
446
+
447
+ class TencentcloudReactInject extends ReactInject {
448
+ initialize($injector) {
449
+ this.$injector = $injector;
450
+ }
451
+ }
452
+ const TencentcloudReactInjector = new TencentcloudReactInject();
453
+
454
+ const TENCENTCLOUD_REACT_MODULE = "spinnaker.tencentcloud.react";
455
+ module(TENCENTCLOUD_REACT_MODULE, []).run([
456
+ "$injector",
457
+ function($injector) {
458
+ TencentcloudReactInjector.initialize($injector);
459
+ TencentcloudNgReact.initialize($injector);
460
+ }
461
+ ]);
462
+
463
+ const TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER = "spinnaker.tencentcloud.search.searchResultFormatter";
464
+ module(TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER, []).factory("tencentcloudSearchResultFormatter", function() {
465
+ return {
466
+ securityGroups: function(entry) {
467
+ }
468
+ };
469
+ });
470
+
471
+ class TencentcloudApplicationNameValidator {
472
+ validateSpecialCharacters(name, errors) {
473
+ const pattern = /^[a-zA-Z_0-9.]*$/g;
474
+ if (!pattern.test(name)) {
475
+ errors.push("Only dot(.) and underscore(_) special characters are allowed.");
476
+ }
477
+ }
478
+ validateLoadBalancerCharacters(name, warnings) {
479
+ if (name.includes(".") || name.includes("_")) {
480
+ warnings.push(`If the application's name contains an underscore(_) or dot(.),
481
+ you will not be able to create a load balancer,
482
+ preventing it from being used as a front end service.`);
483
+ }
484
+ }
485
+ validateLength(name, warnings, errors) {
486
+ if (name.length > 250) {
487
+ errors.push("The maximum length for an application in Tencentcloud is 250 characters.");
488
+ return;
489
+ }
490
+ if (name.length > 240) {
491
+ if (name.length >= 248) {
492
+ warnings.push(`You will not be able to include a stack or detail field for clusters or ${FirewallLabels.get("firewalls")}.`);
493
+ } else {
494
+ const remaining = 248 - name.length;
495
+ warnings.push(`If you plan to include a stack or detail field for clusters, you will only
496
+ have ~${remaining} characters to do so.`);
497
+ }
498
+ }
499
+ if (name.length > 20) {
500
+ if (name.length > 32) {
501
+ warnings.push(`You will not be able to create an Tencentcloud load balancer for this application if the
502
+ application's name is longer than 32 characters (currently: ${name.length} characters)`);
503
+ } else {
504
+ if (name.length >= 30) {
505
+ warnings.push(`If you plan to create load balancers for this application, be aware that the character limit
506
+ for load balancer names is 32 (currently: ${name.length} characters). With separators ("-"), you will not
507
+ be able to add a stack and detail field to any load balancer.`);
508
+ } else {
509
+ const remaining = 30 - name.length;
510
+ warnings.push(`If you plan to create load balancers for this application, be aware that the character limit
511
+ for load balancer names is 32. You will only have ~${remaining} characters to add a stack or detail
512
+ field to any load balancer.`);
513
+ }
514
+ }
515
+ }
516
+ }
517
+ validate(name = "") {
518
+ const warnings = [];
519
+ const errors = [];
520
+ if (name.length) {
521
+ this.validateSpecialCharacters(name, errors);
522
+ this.validateLoadBalancerCharacters(name, warnings);
523
+ this.validateLength(name, warnings, errors);
524
+ }
525
+ return {
526
+ warnings,
527
+ errors
528
+ };
529
+ }
530
+ }
531
+ ApplicationNameValidator.registerValidator("tencentcloud", new TencentcloudApplicationNameValidator());
532
+
533
+ const TENCENTCLOUD_MODULE = "spinnaker.tencentcloud";
534
+ module(TENCENTCLOUD_MODULE, [TENCENTCLOUD_REACT_MODULE, TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER]).config(() => {
535
+ CloudProviderRegistry.registerProvider("tencentcloud", {
536
+ name: "tencentcloud",
537
+ logo: {
538
+ path: logo
539
+ },
540
+ image: {
541
+ reader: TencentcloudImageReader
542
+ }
543
+ });
544
+ });
545
+ DeploymentStrategyRegistry.registerProvider("tencentcloud", ["custom", "redblack", "rollingpush", "rollingredblack"]);
546
+
547
+ const TencentcloudProviderSettings = SETTINGS.providers.tencentcloud || { defaults: {} };
548
+ if (TencentcloudProviderSettings) {
549
+ TencentcloudProviderSettings.resetToOriginal = SETTINGS.resetProvider("tencentcloud");
550
+ }
551
+
552
+ export { TENCENTCLOUD_MODULE, TencentcloudProviderSettings };
2
553
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/help/tencentcloud.help.ts","../src/image/image.reader.ts","../src/pipeline/stages/disableCluster/DisableClusterStageForm.tsx","../src/pipeline/stages/disableCluster/disableClusterStage.ts","../src/pipeline/stages/disableCluster/DisableClusterConfig.tsx","../src/pipeline/stages/disableCluster/disableClusterValidators.ts","../src/pipeline/stages/rollbackCluster/RollbackClusterStageForm.tsx","../src/pipeline/stages/rollbackCluster/rollbackClusterStage.ts","../src/pipeline/stages/rollbackCluster/RollbackClusterConfig.tsx","../src/pipeline/stages/rollbackCluster/rollbackClusterValidators.ts","../src/pipeline/stages/scaleDownCluster/ScaleDownClusterStageForm.tsx","../src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.ts","../src/pipeline/stages/scaleDownCluster/ScaleDownClusterConfig.tsx","../src/pipeline/stages/scaleDownCluster/scaledownClusterValidators.ts","../src/pipeline/stages/shrinkCluster/ShrinkClusterStageForm.tsx","../src/pipeline/stages/shrinkCluster/shrinkClusterStage.ts","../src/pipeline/stages/shrinkCluster/ShrinkClusterConfig.tsx","../src/pipeline/stages/shrinkCluster/shrinkClusterValidators.ts","../src/reactShims/tencentcloud.ngReact.ts","../src/reactShims/tencentcloud.react.injector.ts","../src/reactShims/tencentcloud.react.module.ts","../src/search/searchResultFormatter.js","../src/validation/ApplicationNameValidator.ts","../src/tencentcloud.module.ts","../src/logo/tencentcloud.logo.svg","../src/tencentcloud.settings.ts"],"sourcesContent":["import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { $q } from 'ngimport';\n\nimport { REST } from '@spinnaker/core';\nexport interface ITencentcloudSnapshot {\n diskSize: string;\n diskType: string;\n diskUsage: 'SYSTEM_DISK' | 'DATA_DISK';\n snapshotId: string;\n}\nexport interface ITencentcloudImage {\n accounts: string[];\n images: {\n [region: string]: string[];\n };\n imgIds: {\n [region: string]: string[];\n };\n attributes: {\n createdTime?: string;\n creationDate?: string;\n snapshotSet?: ITencentcloudSnapshot[];\n osPlatform: string;\n };\n imageName: string;\n tags: {\n [tag: string]: string;\n };\n tagsByImageId: {\n [imageId: string]: ITencentcloudImage['tags'];\n };\n}\n\nexport class TencentcloudImageReader {\n public findImages(params: { q: string; region?: string }): PromiseLike<ITencentcloudImage[]> {\n if (!params.q || params.q.length < 3) {\n return $q.when([{ message: 'Please enter at least 3 characters...', disabled: true }]) as any;\n }\n\n return REST('/images/find')\n .query({ ...params, provider: 'tencentcloud' })\n .get()\n .catch(() => [] as ITencentcloudImage[]);\n }\n\n public getImage(name: string, region: string, credentials: string): PromiseLike<ITencentcloudImage> {\n return REST('/images')\n .path(credentials, region, name)\n .query({ provider: 'tencentcloud' })\n .get()\n .then((results: any[]) => (results && results.length ? results[0] : null))\n .catch(() => null as ITencentcloudImage);\n }\n}\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport { AccountService, FormikFormField, NgReact, NumberInput, SelectInput, StageConfigField } from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function DisableClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Disable Options\">\n <div className=\"form-inline\">\n Keep the\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n <FormikFormField\n name=\"preferLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingEnabledServerGroups)} enabled.\n </div>\n </StageConfigField>\n </div>\n );\n}\n","import { Registry } from '@spinnaker/core';\n\nimport { DisableClusterConfig } from './DisableClusterConfig';\nimport { validate } from './disableClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'disableCluster',\n key: 'disableCluster',\n cloudProvider: 'tencentcloud',\n component: DisableClusterConfig,\n validateFn: validate,\n});\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { DisableClusterStageForm } from './DisableClusterStageForm';\n\nexport function DisableClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <DisableClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport { AccountService, FormikFormField, NgReact, NumberInput, StageConfigField } from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function RollbackClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Rollback Options\">\n <div className=\"row\">\n <div className=\"col-sm-10 col-sm-offset-2\">\n Wait\n <FormikFormField name=\"wait\" required input={(props) => <NumberInput {...props} min={0} />} />\n seconds between regional rollbacks.\n </div>\n <div className=\"col-sm-10 col-sm-offset-2\">\n Consider rollback successful when\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} max={100} />}\n />\n percent of instances are healthy.\n </div>\n </div>\n </StageConfigField>\n </div>\n );\n}\n","import { Registry } from '@spinnaker/core';\n\nimport { RollbackClusterConfig } from './RollbackClusterConfig';\nimport { validate } from './rollbackClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'rollbackCluster',\n key: 'rollbackCluster',\n cloudProvider: 'tencentcloud',\n component: RollbackClusterConfig,\n validateFn: validate,\n});\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { RollbackClusterStageForm } from './RollbackClusterStageForm';\n\nexport function RollbackClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <RollbackClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n NgReact,\n NumberInput,\n SelectInput,\n StageConfigField,\n} from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function ScaleDownClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"ScaleDown Options\">\n <div className=\"form-inline\">\n Keep the\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n <FormikFormField\n name=\"preferLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingFullSizeServerGroups)} at current size.\n <p>The remaining server groups will be scaled down to zero instances.</p>\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <FormikFormField\n name=\"allowScaleDownActive\"\n input={(props) => <CheckboxInput {...props} text=\"Allow scale down of active server groups\" />}\n />\n </div>\n </div>\n );\n}\n","import { Registry } from '@spinnaker/core';\n\nimport { ScaleDownClusterConfig } from './ScaleDownClusterConfig';\nimport { validate } from './scaledownClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n key: 'scaleDownCluster',\n cloudProvider: 'tencentcloud',\n component: ScaleDownClusterConfig,\n validateFn: validate,\n});\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { ScaleDownClusterStageForm } from './ScaleDownClusterStageForm';\n\nexport function ScaleDownClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <ScaleDownClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n NgReact,\n NumberInput,\n SelectInput,\n StageConfigField,\n} from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function ShrinkClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Shrink Options\">\n <div className=\"form-inline\">\n Shrink to\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n {pluralize('server group', stage.shrinkToSize)}, keeping the\n <FormikFormField\n name=\"retainLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingEnabledServerGroups)} enabled.\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <div className=\"col-md-offset-3 col-md-6 checkbox\">\n <FormikFormField\n name=\"allowDeleteActive\"\n input={(props) => <CheckboxInput {...props} text=\"Allow deletion of active server groups\" />}\n />\n </div>\n </div>\n </div>\n );\n}\n","import { Registry } from '@spinnaker/core';\n\nimport { ShrinkClusterConfig } from './ShrinkClusterConfig';\nimport { validate } from './shrinkClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'shrinkCluster',\n key: 'shrinkCluster',\n cloudProvider: 'tencentcloud',\n component: ShrinkClusterConfig,\n validateFn: validate,\n});\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { ShrinkClusterStageForm } from './ShrinkClusterStageForm';\n\nexport function ShrinkClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <ShrinkClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import IInjectorService = angular.auto.IInjectorService;\n\nimport { ReactInject } from '@spinnaker/core';\n\n// prettier-ignore\nexport class TencentcloudNgReactInjector extends ReactInject {\n public $injectorProxy = {} as IInjectorService;\n\n // Reactified components\n\n public initialize($injector: IInjectorService) {\n const realInjector: { [key: string]: Function } = $injector as any;\n const proxyInjector: { [key: string]: Function } = this.$injectorProxy as any;\n\n Object.keys($injector)\n .filter(key => typeof realInjector[key] === 'function')\n .forEach(key => proxyInjector[key] = realInjector[key].bind(realInjector));\n }\n}\n\nexport const TencentcloudNgReact = new TencentcloudNgReactInjector();\n","import IInjectorService = angular.auto.IInjectorService;\n\nimport { ReactInject } from '@spinnaker/core';\n\n// prettier-ignore\nexport class TencentcloudReactInject extends ReactInject {\n\n\n public initialize($injector: IInjectorService) {\n this.$injector = $injector;\n }\n}\n\nexport const TencentcloudReactInjector: TencentcloudReactInject = new TencentcloudReactInject();\n","import { module } from 'angular';\n\nimport { TencentcloudNgReact } from './tencentcloud.ngReact';\nimport { TencentcloudReactInjector } from './tencentcloud.react.injector';\n\nexport const TENCENTCLOUD_REACT_MODULE = 'spinnaker.tencentcloud.react';\nmodule(TENCENTCLOUD_REACT_MODULE, []).run([\n '$injector',\n function ($injector: any) {\n // Make angular services importable and (TODO when relevant) convert angular components to react\n TencentcloudReactInjector.initialize($injector);\n TencentcloudNgReact.initialize($injector);\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER = 'spinnaker.tencentcloud.search.searchResultFormatter';\nmodule(TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER, []).factory('tencentcloudSearchResultFormatter', function () {\n return {\n securityGroups: function (entry) {},\n };\n});\n","import type { IApplicationNameValidator } from '@spinnaker/core';\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\n\nclass TencentcloudApplicationNameValidator implements IApplicationNameValidator {\n private validateSpecialCharacters(name: string, errors: string[]): void {\n const pattern = /^[a-zA-Z_0-9.]*$/g;\n if (!pattern.test(name)) {\n errors.push('Only dot(.) and underscore(_) special characters are allowed.');\n }\n }\n\n private validateLoadBalancerCharacters(name: string, warnings: string[]) {\n if (name.includes('.') || name.includes('_')) {\n warnings.push(`If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.`);\n }\n }\n\n private validateLength(name: string, warnings: string[], errors: string[]) {\n if (name.length > 250) {\n errors.push('The maximum length for an application in Tencentcloud is 250 characters.');\n return;\n }\n if (name.length > 240) {\n if (name.length >= 248) {\n warnings.push(\n `You will not be able to include a stack or detail field for clusters or ${FirewallLabels.get('firewalls')}.`,\n );\n } else {\n const remaining = 248 - name.length;\n warnings.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n if (name.length > 20) {\n if (name.length > 32) {\n warnings.push(`You will not be able to create an Tencentcloud load balancer for this application if the\n application's name is longer than 32 characters (currently: ${name.length} characters)`);\n } else {\n if (name.length >= 30) {\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${name.length} characters). With separators (\"-\"), you will not\n be able to add a stack and detail field to any load balancer.`);\n } else {\n const remaining = 30 - name.length;\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${remaining} characters to add a stack or detail\n field to any load balancer.`);\n }\n }\n }\n }\n\n public validate(name = '') {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n if (name.length) {\n this.validateSpecialCharacters(name, errors);\n this.validateLoadBalancerCharacters(name, warnings);\n this.validateLength(name, warnings, errors);\n }\n\n return {\n warnings,\n errors,\n };\n }\n}\nApplicationNameValidator.registerValidator('tencentcloud', new TencentcloudApplicationNameValidator());\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/tencentcloud.help';\nimport { TencentcloudImageReader } from './image';\nimport logo from './logo/tencentcloud.logo.svg';\n// load pipeline stage\nimport './pipeline/stages/disableCluster/disableClusterStage';\nimport './pipeline/stages/rollbackCluster/rollbackClusterStage';\nimport './pipeline/stages/scaleDownCluster/scaleDownClusterStage';\nimport './pipeline/stages/shrinkCluster/shrinkClusterStage';\nimport { TENCENTCLOUD_REACT_MODULE } from './reactShims/tencentcloud.react.module';\nimport { TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER } from './search/searchResultFormatter';\nimport './validation/ApplicationNameValidator';\n\nexport const TENCENTCLOUD_MODULE = 'spinnaker.tencentcloud';\nmodule(TENCENTCLOUD_MODULE, [TENCENTCLOUD_REACT_MODULE, TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER]).config(() => {\n CloudProviderRegistry.registerProvider('tencentcloud', {\n name: 'tencentcloud',\n logo: {\n path: logo,\n },\n image: {\n reader: TencentcloudImageReader,\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('tencentcloud', ['custom', 'redblack', 'rollingpush', 'rollingredblack']);\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22%E5%9B%BE%E5%B1%82_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%22120px%22%20height%3D%2248px%22%20viewBox%3D%220%200%20120%2048%22%20style%3D%22enable-background%3Anew%200%200%20120%2048%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cg%3E%20%20%3Cpath%20d%3D%22M93.829%2C13.731H81.181v1.83h3.808v6.673h-4.364v1.83h4.364v11.19h2.013v-11.19h4.814V35.02h3.802v-1.831h-1.788V13.731z%20%20%20%20M87.002%2C22.234v-6.673h4.814v6.673H87.002z%22%2F%3E%20%20%3Crect%20x%3D%2258.743%22%20y%3D%2230.136%22%20width%3D%229.979%22%20height%3D%221.83%22%2F%3E%20%20%3Cpath%20d%3D%22M51.944%2C26.749c0%2C3.328-0.269%2C5.854-0.823%2C8.093c-0.058%2C0.207%2C0.004%2C0.263%2C0.113%2C0.263c0.038%2C0%2C1.525%2C0%2C1.835%2C0%20%20%20c0.613-3.075%2C0.693-5.626%2C0.703-7.477h2.565v5.69h-1.821c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h3.257V13.777h-6.22V26.749z%20%20%20%20M53.774%2C25.98V21.6h2.563v4.38H53.774z%20M56.337%2C15.607v4.346h-2.563v-4.346H56.337z%22%2F%3E%20%20%3Cpath%20d%3D%22M69.429%2C21.196h2.457v-1.647h-7.16c0.216-0.526%2C0.41-1.091%2C0.588-1.702h6.123V16.2h-1.794%20%20%20c0.299-1.018%2C0.651-2.219%2C0.672-2.288c0.036-0.122-0.028-0.169-0.107-0.169h-1.558L67.927%2C16.2h-2.202%20%20%20c0.205-0.952%2C0.384-2.007%2C0.547-3.191c0.019-0.137-0.055-0.164-0.146-0.164c-0.073%2C0-1.278%2C0-1.774%2C0%20%20%20c-0.181%2C1.258-0.371%2C2.342-0.614%2C3.355h-1.08l-0.722-2.457h-1.558c-0.079%2C0-0.143%2C0.047-0.107%2C0.169%20%20%20c0.02%2C0.07%2C0.373%2C1.271%2C0.672%2C2.288h-1.747v1.647h4.079c-0.166%2C0.52-0.41%2C1.133-0.67%2C1.702h-3.858v1.647h2.898%20%20%20c-1.168%2C1.659-2.417%2C2.422-2.915%2C2.727c0%2C0.234%2C0%2C1.83%2C0%2C1.884c0%2C0.095%2C0.075%2C0.196%2C0.373%2C0.027%20%20%20c0.542-0.307%2C1.12-0.655%2C1.705-1.087h6.817l-0.058%2C2.467h-5.382l0.082-1.475c0-0.064-0.046-0.111-0.112-0.111%20%20%20c-0.102%2C0-1.721%2C0-1.721%2C0l-0.173%2C3.122c0%2C0.064%2C0.046%2C0.111%2C0.112%2C0.111c0.102%2C0%2C9.285%2C0%2C9.285%2C0v4.454h-4.185%20%20%20c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h5.807v-7.931h-2.273l0.075-3.203c0.85%2C0.79%2C1.712%2C1.379%2C2.497%2C1.824%20%20%20c0.298%2C0.169%2C0.373%2C0.068%2C0.373-0.027c0-0.054%2C0-1.651%2C0-1.884C71.844%2C23.618%2C70.597%2C22.853%2C69.429%2C21.196z%20M67.188%2C21.196%20%20%20c0.438%2C0.721%2C0.91%2C1.351%2C1.398%2C1.903h-5.991c0.465-0.537%2C0.915-1.163%2C1.335-1.903H67.188z%22%2F%3E%20%20%3Cpath%20d%3D%22M82.457%2C28.864c-0.034%2C0.026-1.742%2C1.32-3.395%2C2.572V19.538h-4.704v2.013h2.704v11.4%20%20%20c-0.644%2C0.488-1.081%2C0.819-1.081%2C0.819l1.105%2C1.459l5.552-4.207c0%2C0%2C0-2.021%2C0-2.073C82.639%2C28.851%2C82.529%2C28.809%2C82.457%2C28.864z%22%20%20%20%2F%3E%20%20%3Cpath%20d%3D%22M77.329%2C17.736c0%2C0%2C2.15%2C0%2C2.2%2C0c0.098%2C0%2C0.137-0.106%2C0.094-0.171c-0.04-0.061-2.775-4.238-2.775-4.238s-2.117%2C0-2.2%2C0%20%20%20c-0.083%2C0-0.144%2C0.096-0.098%2C0.166C74.596%2C13.562%2C77.329%2C17.736%2C77.329%2C17.736z%22%2F%3E%20%20%3Crect%20x%3D%2299.874%22%20y%3D%2214.22%22%20width%3D%2215.888%22%20height%3D%222.013%22%2F%3E%20%20%3Cpath%20d%3D%22M105.637%2C23.841H118v-2.013H97.636v2.013h5.65c-1.167%2C3.064-4.095%2C10.753-4.115%2C10.809%20%20%20c-0.032%2C0.089%2C0.026%2C0.155%2C0.104%2C0.155c0.049%2C0%2C17.523%2C0%2C17.564%2C0c0.083%2C0%2C0.131-0.082%2C0.101-0.16%20%20%20c-0.019-0.049-2.619-6.885-2.619-6.885s-2.103%2C0-2.186%2C0s-0.133%2C0.08-0.105%2C0.153c0.028%2C0.073%2C1.853%2C4.879%2C1.853%2C4.879h-11.646%20%20%20L105.637%2C23.841z%22%2F%3E%20%3C%2Fg%3E%20%3Cg%3E%20%20%3Cpath%20style%3D%22fill%3A%2300A3FF%3B%22%20d%3D%22M39.157%2C33.89c-0.764%2C0.756-2.125%2C1.613-4.361%2C1.689c-1.034%2C0.035-2.241%2C0.039-2.793%2C0.039%20%20%20c-0.603%2C0-5.918%2C0-12.012%2C0c4.37-4.245%2C8.182-7.947%2C8.615-8.367c0.396-0.385%2C1.287-1.237%2C2.056-1.929%20%20%20c1.687-1.519%2C3.206-1.825%2C4.28-1.815c1.683%2C0.016%2C3.214%2C0.703%2C4.308%2C1.813C41.591%2C27.712%2C41.535%2C31.536%2C39.157%2C33.89%20%20%20%20M42.034%2C22.597c-1.795-1.83-4.296-2.983-7.077-2.984c-2.404%2C0-4.474%2C0.829-6.281%2C2.3c-0.788%2C0.641-1.614%2C1.409-2.653%2C2.419%20%20%20c-0.516%2C0.501-15.485%2C15.026-15.485%2C15.026c0.785%2C0.112%2C1.864%2C0.145%2C2.826%2C0.151c0.902%2C0.006%2C18.1%2C0.004%2C18.82%2C0.004%20%20%20c1.449%2C0%2C2.392-0.002%2C3.405-0.076c2.323-0.17%2C4.518-1.022%2C6.292-2.764C45.82%2C32.805%2C45.879%2C26.526%2C42.034%2C22.597z%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%2300C8DC%3B%22%20d%3D%22M17.883%2C21.663c-1.76-1.317-3.729-2.053-5.963-2.05c-2.781%2C0-5.283%2C1.153-7.077%2C2.984%20%20%20c-3.845%2C3.93-3.786%2C10.209%2C0.154%2C14.077c1.582%2C1.553%2C3.498%2C2.398%2C5.541%2C2.684l3.854-3.74c-0.623-0.003-1.518-0.011-2.311-0.038%20%20%20c-2.235-0.076-3.597-0.934-4.361-1.689c-2.379-2.354-2.434-6.178-0.094-8.57c1.094-1.11%2C2.625-1.797%2C4.308-1.813%20%20%20c1.055-0.004%2C2.486%2C0.302%2C4.103%2C1.643c0.772%2C0.64%2C2.486%2C2.147%2C3.239%2C2.825c0.038%2C0.035%2C0.084%2C0.038%2C0.129%2C0.001l2.654-2.589%20%20%20c0.046-0.045%2C0.043-0.105-0.002-0.146C20.781%2C24.088%2C18.972%2C22.474%2C17.883%2C21.663%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%23006EFF%3B%22%20d%3D%22M36%2C17.365c-1.831-5.172-6.762-8.879-12.562-8.879c-6.652%2C0-12.165%2C4.892-13.164%2C11.264%20%20%20c0.535-0.09%2C1.085-0.138%2C1.646-0.138c0.781-0.001%2C1.529%2C0.09%2C2.248%2C0.263c0.014%2C0.003%2C0.028%2C0.005%2C0.042%2C0.008%20%20%20c0.901-4.302%2C4.705-7.498%2C9.228-7.498c3.767%2C0%2C7.072%2C2.272%2C8.562%2C5.492c0.023%2C0.051%2C0.063%2C0.067%2C0.104%2C0.056%20%20%20c1.121-0.308%2C2.464-0.487%2C3.762-0.391C35.992%2C17.552%2C36.04%2C17.481%2C36%2C17.365%22%2F%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IClassicLaunchAllowlist {\n region: string;\n credentials: string;\n}\n\nexport interface ITencentcloudProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n subnetType?: string;\n vpc?: string;\n };\n defaultSecurityGroups?: string[];\n loadBalancers?: {\n inferInternalFlagFromSubnet: boolean;\n certificateTypes?: string[];\n };\n classicLaunchLockout?: number;\n classicLaunchAllowlist?: IClassicLaunchAllowlist[];\n metrics?: {\n customNamespaces?: string[];\n };\n minRootVolumeSize?: number;\n disableSpotPricing?: boolean;\n}\n\nexport const TencentcloudProviderSettings: ITencentcloudProviderSettings = (SETTINGS.providers\n .tencentcloud as ITencentcloudProviderSettings) || { defaults: {} };\n\nif (TencentcloudProviderSettings) {\n TencentcloudProviderSettings.resetToOriginal = SETTINGS.resetProvider('tencentcloud');\n}\n"],"names":["helpContents","Object","keys","forEach","key","HelpContentsRegistry","register","TencentcloudImageReader","[object Object]","params","q","length","$q","when","message","disabled","REST","query","provider","get","catch","name","region","credentials","path","then","results","useEffect","useState","React","AccountRegionClusterSelector","NgReact","DisableClusterStageForm","application","formik","pipeline","stage","values","setFieldValue","accounts","setAccounts","_a","_b","_c","_d","_e","_f","_g","AccountService","listAccounts","accounts2","isNew","attributes","platformHealthOnlyShowOverride","platformHealthOnly","defaultCredentials","tencentcloud","regions","defaultRegions","remainingEnabledServerGroups","preferLargerOverNewer","createElement","className","strategy","clusterField","component","StageConfigField","label","FormikFormField","required","input","props","NumberInput","min","SelectInput","options","value","str","Registry","registerStage","provides","cloudProvider","updateStage","stageWithDefaults","useMemo","cloneDeep","FormikStageConfig","onChange","render","validateFn","formValidator","FormValidator","field","validateForm","RollbackClusterStageForm","max","ScaleDownClusterStageForm","remainingFullSizeServerGroups","CheckboxInput","text","ShrinkClusterStageForm","pluralize","val","shrinkToSize","TencentcloudNgReact","ReactInject","super","arguments","this","$injectorProxy","$injector","realInjector","proxyInjector","filter","bind","TencentcloudReactInjector","module","run","initialize","factory","securityGroups","entry","ApplicationNameValidator","registerValidator","errors","test","push","warnings","includes","FirewallLabels","remaining","validateSpecialCharacters","validateLoadBalancerCharacters","validateLength","TENCENTCLOUD_MODULE","config","CloudProviderRegistry","registerProvider","logo","image","reader","DeploymentStrategyRegistry","TencentcloudProviderSettings","SETTINGS","providers","defaults","resetToOriginal","resetProvider"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/help/tencentcloud.help.ts","../src/image/image.reader.ts","../src/logo/tencentcloud.logo.svg","../src/pipeline/stages/disableCluster/DisableClusterStageForm.tsx","../src/pipeline/stages/disableCluster/DisableClusterConfig.tsx","../src/pipeline/stages/disableCluster/disableClusterValidators.ts","../src/pipeline/stages/disableCluster/disableClusterStage.ts","../src/pipeline/stages/rollbackCluster/RollbackClusterStageForm.tsx","../src/pipeline/stages/rollbackCluster/RollbackClusterConfig.tsx","../src/pipeline/stages/rollbackCluster/rollbackClusterValidators.ts","../src/pipeline/stages/rollbackCluster/rollbackClusterStage.ts","../src/pipeline/stages/scaleDownCluster/ScaleDownClusterStageForm.tsx","../src/pipeline/stages/scaleDownCluster/ScaleDownClusterConfig.tsx","../src/pipeline/stages/scaleDownCluster/scaledownClusterValidators.ts","../src/pipeline/stages/scaleDownCluster/scaleDownClusterStage.ts","../src/pipeline/stages/shrinkCluster/ShrinkClusterStageForm.tsx","../src/pipeline/stages/shrinkCluster/ShrinkClusterConfig.tsx","../src/pipeline/stages/shrinkCluster/shrinkClusterValidators.ts","../src/pipeline/stages/shrinkCluster/shrinkClusterStage.ts","../src/reactShims/tencentcloud.ngReact.ts","../src/reactShims/tencentcloud.react.injector.ts","../src/reactShims/tencentcloud.react.module.ts","../src/search/searchResultFormatter.js","../src/validation/ApplicationNameValidator.ts","../src/tencentcloud.module.ts","../src/tencentcloud.settings.ts"],"sourcesContent":["import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import { $q } from 'ngimport';\n\nimport { REST } from '@spinnaker/core';\nexport interface ITencentcloudSnapshot {\n diskSize: string;\n diskType: string;\n diskUsage: 'SYSTEM_DISK' | 'DATA_DISK';\n snapshotId: string;\n}\nexport interface ITencentcloudImage {\n accounts: string[];\n images: {\n [region: string]: string[];\n };\n imgIds: {\n [region: string]: string[];\n };\n attributes: {\n createdTime?: string;\n creationDate?: string;\n snapshotSet?: ITencentcloudSnapshot[];\n osPlatform: string;\n };\n imageName: string;\n tags: {\n [tag: string]: string;\n };\n tagsByImageId: {\n [imageId: string]: ITencentcloudImage['tags'];\n };\n}\n\nexport class TencentcloudImageReader {\n public findImages(params: { q: string; region?: string }): PromiseLike<ITencentcloudImage[]> {\n if (!params.q || params.q.length < 3) {\n return $q.when([{ message: 'Please enter at least 3 characters...', disabled: true }]) as any;\n }\n\n return REST('/images/find')\n .query({ ...params, provider: 'tencentcloud' })\n .get()\n .catch(() => [] as ITencentcloudImage[]);\n }\n\n public getImage(name: string, region: string, credentials: string): PromiseLike<ITencentcloudImage> {\n return REST('/images')\n .path(credentials, region, name)\n .query({ provider: 'tencentcloud' })\n .get()\n .then((results: any[]) => (results && results.length ? results[0] : null))\n .catch(() => null as ITencentcloudImage);\n }\n}\n","export default \"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20id%3D%22%E5%9B%BE%E5%B1%82_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%22120px%22%20height%3D%2248px%22%20viewBox%3D%220%200%20120%2048%22%20style%3D%22enable-background%3Anew%200%200%20120%2048%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cg%3E%20%20%3Cpath%20d%3D%22M93.829%2C13.731H81.181v1.83h3.808v6.673h-4.364v1.83h4.364v11.19h2.013v-11.19h4.814V35.02h3.802v-1.831h-1.788V13.731z%20%20%20%20M87.002%2C22.234v-6.673h4.814v6.673H87.002z%22%2F%3E%20%20%3Crect%20x%3D%2258.743%22%20y%3D%2230.136%22%20width%3D%229.979%22%20height%3D%221.83%22%2F%3E%20%20%3Cpath%20d%3D%22M51.944%2C26.749c0%2C3.328-0.269%2C5.854-0.823%2C8.093c-0.058%2C0.207%2C0.004%2C0.263%2C0.113%2C0.263c0.038%2C0%2C1.525%2C0%2C1.835%2C0%20%20%20c0.613-3.075%2C0.693-5.626%2C0.703-7.477h2.565v5.69h-1.821c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h3.257V13.777h-6.22V26.749z%20%20%20%20M53.774%2C25.98V21.6h2.563v4.38H53.774z%20M56.337%2C15.607v4.346h-2.563v-4.346H56.337z%22%2F%3E%20%20%3Cpath%20d%3D%22M69.429%2C21.196h2.457v-1.647h-7.16c0.216-0.526%2C0.41-1.091%2C0.588-1.702h6.123V16.2h-1.794%20%20%20c0.299-1.018%2C0.651-2.219%2C0.672-2.288c0.036-0.122-0.028-0.169-0.107-0.169h-1.558L67.927%2C16.2h-2.202%20%20%20c0.205-0.952%2C0.384-2.007%2C0.547-3.191c0.019-0.137-0.055-0.164-0.146-0.164c-0.073%2C0-1.278%2C0-1.774%2C0%20%20%20c-0.181%2C1.258-0.371%2C2.342-0.614%2C3.355h-1.08l-0.722-2.457h-1.558c-0.079%2C0-0.143%2C0.047-0.107%2C0.169%20%20%20c0.02%2C0.07%2C0.373%2C1.271%2C0.672%2C2.288h-1.747v1.647h4.079c-0.166%2C0.52-0.41%2C1.133-0.67%2C1.702h-3.858v1.647h2.898%20%20%20c-1.168%2C1.659-2.417%2C2.422-2.915%2C2.727c0%2C0.234%2C0%2C1.83%2C0%2C1.884c0%2C0.095%2C0.075%2C0.196%2C0.373%2C0.027%20%20%20c0.542-0.307%2C1.12-0.655%2C1.705-1.087h6.817l-0.058%2C2.467h-5.382l0.082-1.475c0-0.064-0.046-0.111-0.112-0.111%20%20%20c-0.102%2C0-1.721%2C0-1.721%2C0l-0.173%2C3.122c0%2C0.064%2C0.046%2C0.111%2C0.112%2C0.111c0.102%2C0%2C9.285%2C0%2C9.285%2C0v4.454h-4.185%20%20%20c-0.089%2C0-0.157%2C0.058-0.11%2C0.184l0.502%2C1.646h5.807v-7.931h-2.273l0.075-3.203c0.85%2C0.79%2C1.712%2C1.379%2C2.497%2C1.824%20%20%20c0.298%2C0.169%2C0.373%2C0.068%2C0.373-0.027c0-0.054%2C0-1.651%2C0-1.884C71.844%2C23.618%2C70.597%2C22.853%2C69.429%2C21.196z%20M67.188%2C21.196%20%20%20c0.438%2C0.721%2C0.91%2C1.351%2C1.398%2C1.903h-5.991c0.465-0.537%2C0.915-1.163%2C1.335-1.903H67.188z%22%2F%3E%20%20%3Cpath%20d%3D%22M82.457%2C28.864c-0.034%2C0.026-1.742%2C1.32-3.395%2C2.572V19.538h-4.704v2.013h2.704v11.4%20%20%20c-0.644%2C0.488-1.081%2C0.819-1.081%2C0.819l1.105%2C1.459l5.552-4.207c0%2C0%2C0-2.021%2C0-2.073C82.639%2C28.851%2C82.529%2C28.809%2C82.457%2C28.864z%22%20%20%20%2F%3E%20%20%3Cpath%20d%3D%22M77.329%2C17.736c0%2C0%2C2.15%2C0%2C2.2%2C0c0.098%2C0%2C0.137-0.106%2C0.094-0.171c-0.04-0.061-2.775-4.238-2.775-4.238s-2.117%2C0-2.2%2C0%20%20%20c-0.083%2C0-0.144%2C0.096-0.098%2C0.166C74.596%2C13.562%2C77.329%2C17.736%2C77.329%2C17.736z%22%2F%3E%20%20%3Crect%20x%3D%2299.874%22%20y%3D%2214.22%22%20width%3D%2215.888%22%20height%3D%222.013%22%2F%3E%20%20%3Cpath%20d%3D%22M105.637%2C23.841H118v-2.013H97.636v2.013h5.65c-1.167%2C3.064-4.095%2C10.753-4.115%2C10.809%20%20%20c-0.032%2C0.089%2C0.026%2C0.155%2C0.104%2C0.155c0.049%2C0%2C17.523%2C0%2C17.564%2C0c0.083%2C0%2C0.131-0.082%2C0.101-0.16%20%20%20c-0.019-0.049-2.619-6.885-2.619-6.885s-2.103%2C0-2.186%2C0s-0.133%2C0.08-0.105%2C0.153c0.028%2C0.073%2C1.853%2C4.879%2C1.853%2C4.879h-11.646%20%20%20L105.637%2C23.841z%22%2F%3E%20%3C%2Fg%3E%20%3Cg%3E%20%20%3Cpath%20style%3D%22fill%3A%2300A3FF%3B%22%20d%3D%22M39.157%2C33.89c-0.764%2C0.756-2.125%2C1.613-4.361%2C1.689c-1.034%2C0.035-2.241%2C0.039-2.793%2C0.039%20%20%20c-0.603%2C0-5.918%2C0-12.012%2C0c4.37-4.245%2C8.182-7.947%2C8.615-8.367c0.396-0.385%2C1.287-1.237%2C2.056-1.929%20%20%20c1.687-1.519%2C3.206-1.825%2C4.28-1.815c1.683%2C0.016%2C3.214%2C0.703%2C4.308%2C1.813C41.591%2C27.712%2C41.535%2C31.536%2C39.157%2C33.89%20%20%20%20M42.034%2C22.597c-1.795-1.83-4.296-2.983-7.077-2.984c-2.404%2C0-4.474%2C0.829-6.281%2C2.3c-0.788%2C0.641-1.614%2C1.409-2.653%2C2.419%20%20%20c-0.516%2C0.501-15.485%2C15.026-15.485%2C15.026c0.785%2C0.112%2C1.864%2C0.145%2C2.826%2C0.151c0.902%2C0.006%2C18.1%2C0.004%2C18.82%2C0.004%20%20%20c1.449%2C0%2C2.392-0.002%2C3.405-0.076c2.323-0.17%2C4.518-1.022%2C6.292-2.764C45.82%2C32.805%2C45.879%2C26.526%2C42.034%2C22.597z%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%2300C8DC%3B%22%20d%3D%22M17.883%2C21.663c-1.76-1.317-3.729-2.053-5.963-2.05c-2.781%2C0-5.283%2C1.153-7.077%2C2.984%20%20%20c-3.845%2C3.93-3.786%2C10.209%2C0.154%2C14.077c1.582%2C1.553%2C3.498%2C2.398%2C5.541%2C2.684l3.854-3.74c-0.623-0.003-1.518-0.011-2.311-0.038%20%20%20c-2.235-0.076-3.597-0.934-4.361-1.689c-2.379-2.354-2.434-6.178-0.094-8.57c1.094-1.11%2C2.625-1.797%2C4.308-1.813%20%20%20c1.055-0.004%2C2.486%2C0.302%2C4.103%2C1.643c0.772%2C0.64%2C2.486%2C2.147%2C3.239%2C2.825c0.038%2C0.035%2C0.084%2C0.038%2C0.129%2C0.001l2.654-2.589%20%20%20c0.046-0.045%2C0.043-0.105-0.002-0.146C20.781%2C24.088%2C18.972%2C22.474%2C17.883%2C21.663%22%2F%3E%20%20%3Cpath%20style%3D%22fill%3A%23006EFF%3B%22%20d%3D%22M36%2C17.365c-1.831-5.172-6.762-8.879-12.562-8.879c-6.652%2C0-12.165%2C4.892-13.164%2C11.264%20%20%20c0.535-0.09%2C1.085-0.138%2C1.646-0.138c0.781-0.001%2C1.529%2C0.09%2C2.248%2C0.263c0.014%2C0.003%2C0.028%2C0.005%2C0.042%2C0.008%20%20%20c0.901-4.302%2C4.705-7.498%2C9.228-7.498c3.767%2C0%2C7.072%2C2.272%2C8.562%2C5.492c0.023%2C0.051%2C0.063%2C0.067%2C0.104%2C0.056%20%20%20c1.121-0.308%2C2.464-0.487%2C3.762-0.391C35.992%2C17.552%2C36.04%2C17.481%2C36%2C17.365%22%2F%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E\"","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport { AccountService, FormikFormField, NgReact, NumberInput, SelectInput, StageConfigField } from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function DisableClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Disable Options\">\n <div className=\"form-inline\">\n Keep the\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n <FormikFormField\n name=\"preferLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingEnabledServerGroups)} enabled.\n </div>\n </StageConfigField>\n </div>\n );\n}\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { DisableClusterStageForm } from './DisableClusterStageForm';\n\nexport function DisableClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <DisableClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import { Registry } from '@spinnaker/core';\n\nimport { DisableClusterConfig } from './DisableClusterConfig';\nimport { validate } from './disableClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'disableCluster',\n key: 'disableCluster',\n cloudProvider: 'tencentcloud',\n component: DisableClusterConfig,\n validateFn: validate,\n});\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport { AccountService, FormikFormField, NgReact, NumberInput, StageConfigField } from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function RollbackClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Rollback Options\">\n <div className=\"row\">\n <div className=\"col-sm-10 col-sm-offset-2\">\n Wait\n <FormikFormField name=\"wait\" required input={(props) => <NumberInput {...props} min={0} />} />\n seconds between regional rollbacks.\n </div>\n <div className=\"col-sm-10 col-sm-offset-2\">\n Consider rollback successful when\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} max={100} />}\n />\n percent of instances are healthy.\n </div>\n </div>\n </StageConfigField>\n </div>\n );\n}\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { RollbackClusterStageForm } from './RollbackClusterStageForm';\n\nexport function RollbackClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <RollbackClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import { Registry } from '@spinnaker/core';\n\nimport { RollbackClusterConfig } from './RollbackClusterConfig';\nimport { validate } from './rollbackClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'rollbackCluster',\n key: 'rollbackCluster',\n cloudProvider: 'tencentcloud',\n component: RollbackClusterConfig,\n validateFn: validate,\n});\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n NgReact,\n NumberInput,\n SelectInput,\n StageConfigField,\n} from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function ScaleDownClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"ScaleDown Options\">\n <div className=\"form-inline\">\n Keep the\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n <FormikFormField\n name=\"preferLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingFullSizeServerGroups)} at current size.\n <p>The remaining server groups will be scaled down to zero instances.</p>\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <FormikFormField\n name=\"allowScaleDownActive\"\n input={(props) => <CheckboxInput {...props} text=\"Allow scale down of active server groups\" />}\n />\n </div>\n </div>\n );\n}\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { ScaleDownClusterStageForm } from './ScaleDownClusterStageForm';\n\nexport function ScaleDownClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <ScaleDownClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import { Registry } from '@spinnaker/core';\n\nimport { ScaleDownClusterConfig } from './ScaleDownClusterConfig';\nimport { validate } from './scaledownClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n key: 'scaleDownCluster',\n cloudProvider: 'tencentcloud',\n component: ScaleDownClusterConfig,\n validateFn: validate,\n});\n","import React from 'react';\n\nimport type { IAccount, IFormikStageConfigInjectedProps } from '@spinnaker/core';\nimport {\n AccountService,\n CheckboxInput,\n FormikFormField,\n NgReact,\n NumberInput,\n SelectInput,\n StageConfigField,\n} from '@spinnaker/core';\n\nconst { useEffect, useState } = React;\nconst { AccountRegionClusterSelector } = NgReact;\n\nexport function ShrinkClusterStageForm({ application, formik, pipeline }: IFormikStageConfigInjectedProps) {\n const stage = formik.values;\n const { setFieldValue } = formik;\n const [accounts, setAccounts] = useState([]);\n\n useEffect(() => {\n AccountService.listAccounts('tencentcloud').then((accounts: IAccount[]) => {\n setAccounts(accounts);\n });\n\n if (\n stage.isNew &&\n application?.attributes?.platformHealthOnlyShowOverride &&\n application?.attributes?.platformHealthOnly\n ) {\n setFieldValue('interestingHealthProviderNames', ['Tencentcloud']);\n }\n\n if (!stage.credentials && application?.defaultCredentials?.tencentcloud) {\n setFieldValue('credentials', application?.defaultCredentials?.tencentcloud);\n }\n\n if (!stage?.regions?.length && application?.defaultRegions?.tencentcloud) {\n setFieldValue('regions', [...stage.regions, application?.defaultRegions?.tencentcloud]);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n setFieldValue('remainingEnabledServerGroups', 1);\n }\n\n if (stage.preferLargerOverNewer === undefined) {\n setFieldValue('preferLargerOverNewer', 'false');\n }\n }, []);\n\n const pluralize = function (str: string, val: string | number) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n return (\n <div className=\"form-horizontal\">\n {!pipeline.strategy && (\n <AccountRegionClusterSelector\n application={application}\n clusterField=\"cluster\"\n component={stage}\n accounts={accounts}\n />\n )}\n <StageConfigField label=\"Shrink Options\">\n <div className=\"form-inline\">\n Shrink to\n <FormikFormField\n name=\"remainingEnabledServerGroups\"\n required\n input={(props) => <NumberInput {...props} min={0} />}\n />\n {pluralize('server group', stage.shrinkToSize)}, keeping the\n <FormikFormField\n name=\"retainLargerOverNewer\"\n required\n input={(props) => (\n <SelectInput\n options={[\n { label: 'largest', value: 'true' },\n { label: 'newest', value: 'false' },\n ]}\n {...props}\n />\n )}\n />\n {pluralize('server group', stage.remainingEnabledServerGroups)} enabled.\n </div>\n </StageConfigField>\n <div className=\"form-group\">\n <div className=\"col-md-offset-3 col-md-6 checkbox\">\n <FormikFormField\n name=\"allowDeleteActive\"\n input={(props) => <CheckboxInput {...props} text=\"Allow deletion of active server groups\" />}\n />\n </div>\n </div>\n </div>\n );\n}\n","import { cloneDeep } from 'lodash';\nimport React from 'react';\n\nimport type { IStageConfigProps } from '@spinnaker/core';\nimport { FormikStageConfig } from '@spinnaker/core';\n\nimport { ShrinkClusterStageForm } from './ShrinkClusterStageForm';\n\nexport function ShrinkClusterConfig({ application, pipeline, stage, updateStage }: IStageConfigProps) {\n const stageWithDefaults = React.useMemo(() => {\n return {\n cloudProvider: 'tencentcloud',\n regions: stage.regions || [],\n ...cloneDeep(stage),\n };\n }, []);\n\n return (\n <FormikStageConfig\n application={application}\n onChange={updateStage}\n pipeline={pipeline}\n stage={stageWithDefaults}\n render={(props) => <ShrinkClusterStageForm {...props} />}\n />\n );\n}\n","import type { IContextualValidator, IStage } from '@spinnaker/core';\nimport { FormValidator } from '@spinnaker/core';\n\nexport const validate: IContextualValidator = (stage: IStage) => {\n const formValidator = new FormValidator(stage);\n formValidator.field('credentials', 'Account').required();\n formValidator.field('regions', 'Regions').required();\n formValidator.field('cluster', 'Cluster').required();\n return formValidator.validateForm();\n};\n","import { Registry } from '@spinnaker/core';\n\nimport { ShrinkClusterConfig } from './ShrinkClusterConfig';\nimport { validate } from './shrinkClusterValidators';\n\nRegistry.pipeline.registerStage({\n provides: 'shrinkCluster',\n key: 'shrinkCluster',\n cloudProvider: 'tencentcloud',\n component: ShrinkClusterConfig,\n validateFn: validate,\n});\n","import IInjectorService = angular.auto.IInjectorService;\n\nimport { ReactInject } from '@spinnaker/core';\n\n// prettier-ignore\nexport class TencentcloudNgReactInjector extends ReactInject {\n public $injectorProxy = {} as IInjectorService;\n\n // Reactified components\n\n public initialize($injector: IInjectorService) {\n const realInjector: { [key: string]: Function } = $injector as any;\n const proxyInjector: { [key: string]: Function } = this.$injectorProxy as any;\n\n Object.keys($injector)\n .filter(key => typeof realInjector[key] === 'function')\n .forEach(key => proxyInjector[key] = realInjector[key].bind(realInjector));\n }\n}\n\nexport const TencentcloudNgReact = new TencentcloudNgReactInjector();\n","import IInjectorService = angular.auto.IInjectorService;\n\nimport { ReactInject } from '@spinnaker/core';\n\n// prettier-ignore\nexport class TencentcloudReactInject extends ReactInject {\n\n\n public initialize($injector: IInjectorService) {\n this.$injector = $injector;\n }\n}\n\nexport const TencentcloudReactInjector: TencentcloudReactInject = new TencentcloudReactInject();\n","import { module } from 'angular';\n\nimport { TencentcloudNgReact } from './tencentcloud.ngReact';\nimport { TencentcloudReactInjector } from './tencentcloud.react.injector';\n\nexport const TENCENTCLOUD_REACT_MODULE = 'spinnaker.tencentcloud.react';\nmodule(TENCENTCLOUD_REACT_MODULE, []).run([\n '$injector',\n function ($injector: any) {\n // Make angular services importable and (TODO when relevant) convert angular components to react\n TencentcloudReactInjector.initialize($injector);\n TencentcloudNgReact.initialize($injector);\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER = 'spinnaker.tencentcloud.search.searchResultFormatter';\nmodule(TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER, []).factory('tencentcloudSearchResultFormatter', function () {\n return {\n securityGroups: function (entry) {},\n };\n});\n","import type { IApplicationNameValidator } from '@spinnaker/core';\nimport { ApplicationNameValidator, FirewallLabels } from '@spinnaker/core';\n\nclass TencentcloudApplicationNameValidator implements IApplicationNameValidator {\n private validateSpecialCharacters(name: string, errors: string[]): void {\n const pattern = /^[a-zA-Z_0-9.]*$/g;\n if (!pattern.test(name)) {\n errors.push('Only dot(.) and underscore(_) special characters are allowed.');\n }\n }\n\n private validateLoadBalancerCharacters(name: string, warnings: string[]) {\n if (name.includes('.') || name.includes('_')) {\n warnings.push(`If the application's name contains an underscore(_) or dot(.),\n you will not be able to create a load balancer,\n preventing it from being used as a front end service.`);\n }\n }\n\n private validateLength(name: string, warnings: string[], errors: string[]) {\n if (name.length > 250) {\n errors.push('The maximum length for an application in Tencentcloud is 250 characters.');\n return;\n }\n if (name.length > 240) {\n if (name.length >= 248) {\n warnings.push(\n `You will not be able to include a stack or detail field for clusters or ${FirewallLabels.get('firewalls')}.`,\n );\n } else {\n const remaining = 248 - name.length;\n warnings.push(`If you plan to include a stack or detail field for clusters, you will only\n have ~${remaining} characters to do so.`);\n }\n }\n if (name.length > 20) {\n if (name.length > 32) {\n warnings.push(`You will not be able to create an Tencentcloud load balancer for this application if the\n application's name is longer than 32 characters (currently: ${name.length} characters)`);\n } else {\n if (name.length >= 30) {\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32 (currently: ${name.length} characters). With separators (\"-\"), you will not\n be able to add a stack and detail field to any load balancer.`);\n } else {\n const remaining = 30 - name.length;\n warnings.push(`If you plan to create load balancers for this application, be aware that the character limit\n for load balancer names is 32. You will only have ~${remaining} characters to add a stack or detail\n field to any load balancer.`);\n }\n }\n }\n }\n\n public validate(name = '') {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n if (name.length) {\n this.validateSpecialCharacters(name, errors);\n this.validateLoadBalancerCharacters(name, warnings);\n this.validateLength(name, warnings, errors);\n }\n\n return {\n warnings,\n errors,\n };\n }\n}\nApplicationNameValidator.registerValidator('tencentcloud', new TencentcloudApplicationNameValidator());\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/tencentcloud.help';\nimport { TencentcloudImageReader } from './image';\nimport logo from './logo/tencentcloud.logo.svg';\n// load pipeline stage\nimport './pipeline/stages/disableCluster/disableClusterStage';\nimport './pipeline/stages/rollbackCluster/rollbackClusterStage';\nimport './pipeline/stages/scaleDownCluster/scaleDownClusterStage';\nimport './pipeline/stages/shrinkCluster/shrinkClusterStage';\nimport { TENCENTCLOUD_REACT_MODULE } from './reactShims/tencentcloud.react.module';\nimport { TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER } from './search/searchResultFormatter';\nimport './validation/ApplicationNameValidator';\n\nexport const TENCENTCLOUD_MODULE = 'spinnaker.tencentcloud';\nmodule(TENCENTCLOUD_MODULE, [TENCENTCLOUD_REACT_MODULE, TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER]).config(() => {\n CloudProviderRegistry.registerProvider('tencentcloud', {\n name: 'tencentcloud',\n logo: {\n path: logo,\n },\n image: {\n reader: TencentcloudImageReader,\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('tencentcloud', ['custom', 'redblack', 'rollingpush', 'rollingredblack']);\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IClassicLaunchAllowlist {\n region: string;\n credentials: string;\n}\n\nexport interface ITencentcloudProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n subnetType?: string;\n vpc?: string;\n };\n defaultSecurityGroups?: string[];\n loadBalancers?: {\n inferInternalFlagFromSubnet: boolean;\n certificateTypes?: string[];\n };\n classicLaunchLockout?: number;\n classicLaunchAllowlist?: IClassicLaunchAllowlist[];\n metrics?: {\n customNamespaces?: string[];\n };\n minRootVolumeSize?: number;\n disableSpotPricing?: boolean;\n}\n\nexport const TencentcloudProviderSettings: ITencentcloudProviderSettings = (SETTINGS.providers\n .tencentcloud as ITencentcloudProviderSettings) || { defaults: {} };\n\nif (TencentcloudProviderSettings) {\n TencentcloudProviderSettings.resetToOriginal = SETTINGS.resetProvider('tencentcloud');\n}\n"],"names":["useEffect","useState","AccountRegionClusterSelector","validate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@spinnaker/tencentcloud",
3
3
  "license": "Apache-2.0",
4
- "version": "0.0.83",
4
+ "version": "2025.0.0",
5
5
  "module": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
7
7
  "publishConfig": {
8
- "access": "public"
8
+ "access": "public",
9
+ "registry": "https://registry.npmjs.org"
9
10
  },
10
11
  "scripts": {
11
12
  "clean": "shx rm -rf dist",
@@ -16,7 +17,7 @@
16
17
  "lib": "npm run build"
17
18
  },
18
19
  "dependencies": {
19
- "@spinnaker/core": "^0.29.0",
20
+ "@spinnaker/core": "^0.29.1",
20
21
  "angular": "1.6.10",
21
22
  "lodash": "^4.17.19",
22
23
  "ngimport": "^0.6.0",
@@ -32,5 +33,5 @@
32
33
  "shx": "0.3.3",
33
34
  "typescript": "4.3.5"
34
35
  },
35
- "gitHead": "082a084908e13888d640e88a5bd6e1571479de14"
36
+ "gitHead": "5b197da8614979a51dc24b0a6f92e19c3162e874"
36
37
  }