@spinnaker/tencentcloud 2025.3.0 → 2025.4.0-rc1
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/dist/index.js +1 -552
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/dist/index.js
CHANGED
|
@@ -1,553 +1,2 @@
|
|
|
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 };
|
|
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 o,NgReact as c,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}=c;function N({application:e,formik:t,pipeline:n}){const c=t.values,{setFieldValue:s}=t,[C,d]=D([]);S((()=>{var t,n,r,a,i,o,C;l.listAccounts("tencentcloud").then((e=>{d(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)&&s("interestingHealthProviderNames",["Tencentcloud"]),!c.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==c?void 0:c.regions)?void 0:i.length)&&(null==(o=null==e?void 0:e.defaultRegions)?void 0:o.tencentcloud)&&s("regions",[...c.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===c.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===c.preferLargerOverNewer&&s("preferLargerOverNewer","false")}),[]);return b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(k,{application:e,clusterField:"cluster",component:c,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(o,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),(u="server group",1===c.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}=c;function q({application:e,formik:t,pipeline:n}){const o=t.values,{setFieldValue:c}=t,[s,C]=A([]);return O((()=>{var t,n,r,a,i,s,d;l.listAccounts("tencentcloud").then((e=>{C(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)&&c("interestingHealthProviderNames",["Tencentcloud"]),!o.credentials&&(null==(r=null==e?void 0:e.defaultCredentials)?void 0:r.tencentcloud)&&c("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==(s=null==e?void 0:e.defaultRegions)?void 0:s.tencentcloud)&&c("regions",[...o.regions,null==(d=null==e?void 0:e.defaultRegions)?void 0:d.tencentcloud]),void 0===o.remainingEnabledServerGroups&&c("remainingEnabledServerGroups",1),void 0===o.preferLargerOverNewer&&c("preferLargerOverNewer","false")}),[]),b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(x,{application:e,clusterField:"cluster",component:o,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:H}=b,{AccountRegionClusterSelector:R}=c;function M({application:e,formik:t,pipeline:n}){const c=t.values,{setFieldValue:s}=t,[C,d]=H([]);z((()=>{var t,n,r,a,i,o,C;l.listAccounts("tencentcloud").then((e=>{d(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)&&s("interestingHealthProviderNames",["Tencentcloud"]),!c.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==c?void 0:c.regions)?void 0:i.length)&&(null==(o=null==e?void 0:e.defaultRegions)?void 0:o.tencentcloud)&&s("regions",[...c.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===c.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===c.preferLargerOverNewer&&s("preferLargerOverNewer","false")}),[]);return b.createElement("div",{className:"form-horizontal"},!n.strategy&&b.createElement(R,{application:e,clusterField:"cluster",component:c,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(o,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),(p="server group",1===c.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}=c;function V({application:e,formik:t,pipeline:n}){const c=t.values,{setFieldValue:s}=t,[C,d]=L([]);P((()=>{var t,n,r,a,i,o,C;l.listAccounts("tencentcloud").then((e=>{d(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)&&s("interestingHealthProviderNames",["Tencentcloud"]),!c.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==c?void 0:c.regions)?void 0:i.length)&&(null==(o=null==e?void 0:e.defaultRegions)?void 0:o.tencentcloud)&&s("regions",[...c.regions,null==(C=null==e?void 0:e.defaultRegions)?void 0:C.tencentcloud]),void 0===c.remainingEnabledServerGroups&&s("remainingEnabledServerGroups",1),void 0===c.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:c,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",c.shrinkToSize),", keeping the",b.createElement(a,{name:"retainLargerOverNewer",required:!0,input:e=>b.createElement(o,{options:[{label:"largest",value:"true"},{label:"newest",value:"false"}],...e})}),p("server group",c.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}},$="spinnaker.tencentcloud.react";e($,[]).run(["$injector",function(e){T.initialize(e),B.initialize(e)}]);const j="spinnaker.tencentcloud.search.searchResultFormatter";e(j,[]).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 I="spinnaker.tencentcloud";e(I,[$,j]).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 _=f.providers.tencentcloud||{defaults:{}};_&&(_.resetToOriginal=f.resetProvider("tencentcloud"));export{I as TENCENTCLOUD_MODULE,_ as TencentcloudProviderSettings};
|
|
553
2
|
//# 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/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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"}
|
|
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","findImages","params","q","length","$q","when","message","disabled","REST","query","provider","get","catch","getImage","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","className","strategy","createElement","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","constructor","super","arguments","this","$injectorProxy","initialize","$injector","realInjector","proxyInjector","filter","bind","TencentcloudReactInjector","TENCENTCLOUD_REACT_MODULE","module","run","TENCENTCLOUD_SEARCH_SEARCHRESULTFORMATTER","factory","securityGroups","entry","ApplicationNameValidator","registerValidator","validateSpecialCharacters","errors","test","push","validateLoadBalancerCharacters","warnings","includes","validateLength","FirewallLabels","remaining","validate","TENCENTCLOUD_MODULE","config","CloudProviderRegistry","registerProvider","logo","image","reader","DeploymentStrategyRegistry","TencentcloudProviderSettings","SETTINGS","providers","defaults","resetToOriginal","resetProvider"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spinnaker/tencentcloud",
|
|
3
|
+
"repository": {
|
|
4
|
+
"type": "git",
|
|
5
|
+
"url": "https://github.com/spinnaker/spinnaker.git"
|
|
6
|
+
},
|
|
3
7
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "2025.
|
|
8
|
+
"version": "2025.4.0-rc1",
|
|
5
9
|
"module": "dist/index.js",
|
|
6
10
|
"typings": "dist/index.d.ts",
|
|
7
11
|
"publishConfig": {
|
|
@@ -33,5 +37,5 @@
|
|
|
33
37
|
"shx": "0.3.3",
|
|
34
38
|
"typescript": "5.0.4"
|
|
35
39
|
},
|
|
36
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "b8936c65d006d4a4aa89dfb35988af3c007b8637"
|
|
37
41
|
}
|