@axway/axway-central-cli 3.9.0-rc.2 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/edit/environment.js +3 -21
- package/dist/commands/get/index.js +27 -6
- package/dist/commands/install/awsSaasAgents.js +7 -6
- package/dist/commands/install/azureSaasAgents.js +7 -6
- package/dist/common/ApiServerClient.js +82 -85
- package/dist/common/dataService.js +19 -16
- package/dist/common/utils.js +2 -17
- package/package.json +1 -1
|
@@ -12,8 +12,6 @@ var _resultsRenderers = require("../../common/resultsRenderers");
|
|
|
12
12
|
var _TmpFile = _interopRequireDefault(require("../../common/TmpFile"));
|
|
13
13
|
var _types = require("../../common/types");
|
|
14
14
|
var _utils = require("../../common/utils");
|
|
15
|
-
var _ApiServerClient = require("../../common/ApiServerClient");
|
|
16
|
-
var _DefinitionsManager = require("../../common/DefinitionsManager");
|
|
17
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
16
|
const {
|
|
19
17
|
log
|
|
@@ -27,35 +25,19 @@ const action = async ({
|
|
|
27
25
|
account,
|
|
28
26
|
name,
|
|
29
27
|
output,
|
|
30
|
-
region
|
|
31
|
-
cache
|
|
28
|
+
region
|
|
32
29
|
} = argv;
|
|
33
30
|
log(`editing ${name} env`);
|
|
34
31
|
let file;
|
|
35
32
|
let commandIsSuccessful = true;
|
|
36
33
|
const render = new _Renderer.default(console, output).startSpin(`Fetching details of "environment/${name}".`);
|
|
37
34
|
try {
|
|
38
|
-
var _defsManager$findDefs, _defsManager$findDefs2;
|
|
39
|
-
const client = new _ApiServerClient.ApiServerClient({
|
|
40
|
-
baseUrl,
|
|
41
|
-
account,
|
|
42
|
-
region,
|
|
43
|
-
useCache: cache
|
|
44
|
-
});
|
|
45
|
-
const defsManager = new _DefinitionsManager.DefinitionsManager(client);
|
|
46
|
-
await defsManager.init();
|
|
47
|
-
const def = (_defsManager$findDefs = defsManager.findDefsByWord('env')) === null || _defsManager$findDefs === void 0 ? void 0 : (_defsManager$findDefs2 = _defsManager$findDefs.find(def => def)) === null || _defsManager$findDefs2 === void 0 ? void 0 : _defsManager$findDefs2.resource;
|
|
48
35
|
const service = await (0, _dataService.dataService)({
|
|
49
36
|
baseUrl,
|
|
50
37
|
account,
|
|
51
38
|
region
|
|
52
39
|
});
|
|
53
|
-
let response;
|
|
54
|
-
let version = "v1alpha1";
|
|
55
|
-
if (def) {
|
|
56
|
-
version = (0, _utils.getLatestServedAPIVersion)(def);
|
|
57
|
-
}
|
|
58
|
-
response = await service.get(`/management/${version}/environments/${name}`);
|
|
40
|
+
let response = await service.get(`/management/v1alpha1/environments/${name}`);
|
|
59
41
|
file = new _TmpFile.default(response);
|
|
60
42
|
// stop spinner or it will interfere stdio of editor
|
|
61
43
|
render.stopSpin();
|
|
@@ -67,7 +49,7 @@ const action = async ({
|
|
|
67
49
|
const {
|
|
68
50
|
docs
|
|
69
51
|
} = await (0, _utils.loadAndVerifySpecs)(file.path, new Set([_types.Kind.Environment]));
|
|
70
|
-
response = await service.put(`/management
|
|
52
|
+
response = await service.put(`/management/v1alpha1/environments/${name}`, docs[0]);
|
|
71
53
|
render.success((0, _cliKit.chalk)`{greenBright "environment/${name}" has successfully been edited.}`);
|
|
72
54
|
// render result if output flag has been provided
|
|
73
55
|
output && (0, _resultsRenderers.renderResponse)(console, response, output);
|
|
@@ -16,14 +16,15 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
16
16
|
const {
|
|
17
17
|
log
|
|
18
18
|
} = (0, _snooplogg.default)('central: get');
|
|
19
|
-
const getListOrByName = async (resourceDef, client, scopeName, resourceName, scopeDef, query, progressListener, expand, langDef) => {
|
|
19
|
+
const getListOrByName = async (resourceDef, client, scopeName, resourceName, scopeDef, query, progressListener, expand, langDef, fieldSet) => {
|
|
20
20
|
return resourceName ? await client.getResourceByName({
|
|
21
21
|
resourceDef,
|
|
22
22
|
resourceName,
|
|
23
23
|
scopeDef,
|
|
24
24
|
scopeName,
|
|
25
25
|
expand,
|
|
26
|
-
langDef
|
|
26
|
+
langDef,
|
|
27
|
+
fieldSet
|
|
27
28
|
}) : await client.getResourcesList({
|
|
28
29
|
resourceDef,
|
|
29
30
|
scopeDef,
|
|
@@ -31,7 +32,8 @@ const getListOrByName = async (resourceDef, client, scopeName, resourceName, sco
|
|
|
31
32
|
query,
|
|
32
33
|
progressListener,
|
|
33
34
|
expand,
|
|
34
|
-
langDef
|
|
35
|
+
langDef,
|
|
36
|
+
fieldSet
|
|
35
37
|
});
|
|
36
38
|
};
|
|
37
39
|
const get = exports.get = {
|
|
@@ -159,7 +161,7 @@ ${defsManager.getDefsTableForHelpMsg()}`);
|
|
|
159
161
|
*/
|
|
160
162
|
if (scope) {
|
|
161
163
|
const results = await Promise.all(defs.filter(defs => !scope.kind || !defs.scope || defs.scope.spec.kind === scope.kind).map(async defs => ({
|
|
162
|
-
response: await getListOrByName(defs.resource, client, scope.name, resourceName, defs.scope, query, progressListener, languageExpand, languageDefinition),
|
|
164
|
+
response: await getListOrByName(defs.resource, client, scope.name, resourceName, defs.scope, query, progressListener, languageExpand, languageDefinition, argv.output ? undefined : getFieldSetFromDefinitionColumns(defs)),
|
|
163
165
|
cli: defs.cli
|
|
164
166
|
})));
|
|
165
167
|
results.forEach(({
|
|
@@ -179,7 +181,7 @@ ${defsManager.getDefsTableForHelpMsg()}`);
|
|
|
179
181
|
}
|
|
180
182
|
});
|
|
181
183
|
const results = await Promise.all(Object.values(defsMatchingGroup).map(async defs => ({
|
|
182
|
-
response: await getListOrByName(defs.resource, client, undefined, resourceName, undefined, query, progressListener, languageExpand, languageDefinition),
|
|
184
|
+
response: await getListOrByName(defs.resource, client, undefined, resourceName, undefined, query, progressListener, languageExpand, languageDefinition, argv.output ? undefined : getFieldSetFromDefinitionColumns(defs)),
|
|
183
185
|
cli: defs.cli
|
|
184
186
|
})));
|
|
185
187
|
results.forEach(({
|
|
@@ -248,4 +250,23 @@ ${defsManager.getDefsTableForHelpMsg()}`);
|
|
|
248
250
|
desc: `Show the language definition constraint of the returned object. One of: Comma Separated values of ${_types.LanguageTypes.French} | ${_types.LanguageTypes.US} | ${_types.LanguageTypes.German} | ${_types.LanguageTypes.Portugese}`
|
|
249
251
|
}
|
|
250
252
|
}
|
|
251
|
-
};
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Gets the resource field names to be shown when outputting the resource as a table.
|
|
257
|
+
* These names are to be assigned to the api-server HTTP GET request's "fields" query param.
|
|
258
|
+
* @param def The resource definition providing the columns to be shown in the outputed table.
|
|
259
|
+
* @returns Returns a set set of field names.
|
|
260
|
+
*/
|
|
261
|
+
function getFieldSetFromDefinitionColumns(def) {
|
|
262
|
+
var _def$cli, _def$cli$spec, _def$cli$spec$columns;
|
|
263
|
+
const fieldSet = new Set();
|
|
264
|
+
(_def$cli = def.cli) === null || _def$cli === void 0 ? void 0 : (_def$cli$spec = _def$cli.spec) === null || _def$cli$spec === void 0 ? void 0 : (_def$cli$spec$columns = _def$cli$spec.columns) === null || _def$cli$spec$columns === void 0 ? void 0 : _def$cli$spec$columns.forEach(column => {
|
|
265
|
+
let fieldName = column.jsonPath;
|
|
266
|
+
if (fieldName.startsWith('.')) {
|
|
267
|
+
fieldName = fieldName.substring(1);
|
|
268
|
+
}
|
|
269
|
+
fieldSet.add(fieldName);
|
|
270
|
+
});
|
|
271
|
+
return fieldSet;
|
|
272
|
+
}
|
|
@@ -39,9 +39,9 @@ class AWSDataplaneConfig extends DataplaneConfig {
|
|
|
39
39
|
class Sampling {
|
|
40
40
|
constructor() {
|
|
41
41
|
_defineProperty(this, "percentage", void 0);
|
|
42
|
-
_defineProperty(this, "
|
|
42
|
+
_defineProperty(this, "onlyErrors", void 0);
|
|
43
43
|
this.percentage = 1;
|
|
44
|
-
this.
|
|
44
|
+
this.onlyErrors = true;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
class Sanitize {
|
|
@@ -156,7 +156,7 @@ const SaasPrompts = {
|
|
|
156
156
|
TA_FREQUENCY: 'How often should the traffic collection run, leave blank for manual trigger only',
|
|
157
157
|
QUEUE: 'Do you want to discover immediately after installation',
|
|
158
158
|
SAMP_PERCENTAGE: 'Enter the percentage of transactions to sample',
|
|
159
|
-
|
|
159
|
+
SAMP_ONLY_ERRS: 'Do you want to sample only the error transactions for Business and Consumer Insights',
|
|
160
160
|
REDACT_SHOW: 'Enter a regular expression for {0}s that may be shown',
|
|
161
161
|
ENTER_SANITIZE_RULE: 'Do you want to add sanitization rules for {0}s',
|
|
162
162
|
SANITIZE_KEY: 'Enter a regular expression for {0} keys that values should be sanitized',
|
|
@@ -266,9 +266,10 @@ const askForSampling = async hostedAgentValues => {
|
|
|
266
266
|
});
|
|
267
267
|
|
|
268
268
|
// ask sampling all errorsSN
|
|
269
|
-
hostedAgentValues.sampling.
|
|
270
|
-
msg: SaasPrompts.
|
|
271
|
-
choices: _types.YesNoChoices
|
|
269
|
+
hostedAgentValues.sampling.onlyErrors = (await (0, _basicPrompts.askList)({
|
|
270
|
+
msg: SaasPrompts.SAMP_ONLY_ERRS,
|
|
271
|
+
choices: _types.YesNoChoices,
|
|
272
|
+
default: _types.YesNo.No
|
|
272
273
|
})) === _types.YesNo.Yes;
|
|
273
274
|
return hostedAgentValues;
|
|
274
275
|
};
|
|
@@ -54,9 +54,9 @@ class AzureDataplaneConfig extends DataplaneConfig {
|
|
|
54
54
|
class Sampling {
|
|
55
55
|
constructor() {
|
|
56
56
|
_defineProperty(this, "percentage", void 0);
|
|
57
|
-
_defineProperty(this, "
|
|
57
|
+
_defineProperty(this, "onlyErrors", void 0);
|
|
58
58
|
this.percentage = 1;
|
|
59
|
-
this.
|
|
59
|
+
this.onlyErrors = true;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
class Sanitize {
|
|
@@ -174,7 +174,7 @@ const SaasPrompts = {
|
|
|
174
174
|
TA_FREQUENCY: 'How often should the traffic collection run, leave blank for manual trigger only',
|
|
175
175
|
QUEUE: 'Do you want to discover immediately after installation',
|
|
176
176
|
SAMP_PERCENTAGE: 'Enter the percentage of transactions to sample',
|
|
177
|
-
|
|
177
|
+
SAMP_ONLY_ERRS: 'Do you want to sample only the error transactions for Business and Consumer Insights',
|
|
178
178
|
REDACT_SHOW: 'Enter a regular expression for {0}s that may be shown',
|
|
179
179
|
ENTER_SANITIZE_RULE: 'Do you want to add sanitization rules for {0}s',
|
|
180
180
|
SANITIZE_KEY: 'Enter a regular expression for {0} keys that values should be sanitized',
|
|
@@ -288,9 +288,10 @@ const askForSampling = async hostedAgentValues => {
|
|
|
288
288
|
});
|
|
289
289
|
|
|
290
290
|
// ask sampling all errorsSN
|
|
291
|
-
hostedAgentValues.sampling.
|
|
292
|
-
msg: SaasPrompts.
|
|
293
|
-
choices: _types.YesNoChoices
|
|
291
|
+
hostedAgentValues.sampling.onlyErrors = (await (0, _basicPrompts.askList)({
|
|
292
|
+
msg: SaasPrompts.SAMP_ONLY_ERRS,
|
|
293
|
+
choices: _types.YesNoChoices,
|
|
294
|
+
default: _types.YesNo.No
|
|
294
295
|
})) === _types.YesNo.Yes;
|
|
295
296
|
return hostedAgentValues;
|
|
296
297
|
};
|
|
@@ -59,8 +59,9 @@ class ApiServerClient {
|
|
|
59
59
|
/**
|
|
60
60
|
* Build resource url based on its ResourceDefinition and passed scope def and name.
|
|
61
61
|
* Note that for scope url part both name and def needed.
|
|
62
|
+
* The returned URL path is expected to be appended to the base URL.
|
|
62
63
|
*/
|
|
63
|
-
|
|
64
|
+
buildResourceUrlPath({
|
|
64
65
|
resourceDef,
|
|
65
66
|
resourceName,
|
|
66
67
|
scopeDef,
|
|
@@ -68,60 +69,51 @@ class ApiServerClient {
|
|
|
68
69
|
version = ApiServerVersions.v1alpha1,
|
|
69
70
|
forceDelete = false,
|
|
70
71
|
expand,
|
|
71
|
-
langDef
|
|
72
|
+
langDef,
|
|
73
|
+
fieldSet
|
|
72
74
|
}) {
|
|
73
75
|
const groupUrl = `/${resourceDef.metadata.scope.name}/${version}`;
|
|
74
76
|
const scopeUrl = scopeName && scopeDef ? `/${scopeDef.spec.plural}/${encodeURIComponent(scopeName)}` : '';
|
|
75
77
|
const resourceUrl = `/${resourceDef.spec.plural}`;
|
|
76
78
|
const nameUrl = resourceName ? `/${encodeURIComponent(resourceName)}` : '';
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
* Build language definition url based on the language code.
|
|
93
|
-
*/
|
|
94
|
-
buildLanguageDefinitionUrl({
|
|
95
|
-
langCode
|
|
96
|
-
}) {
|
|
97
|
-
let langDefUrl = '';
|
|
98
|
-
let i = 0;
|
|
99
|
-
let embed = '?embed=';
|
|
100
|
-
let expand = '&expand=languages,';
|
|
101
|
-
let fields = '&fields=languages,group,apiVersion,name,kind,metadata,';
|
|
102
|
-
const langCodeArr = langCode.split(',');
|
|
103
|
-
let languageTypesArr = [];
|
|
104
|
-
Object.keys(_types.LanguageTypes).forEach(key => languageTypesArr.push((0, _utils.ValueFromKey)(_types.LanguageTypes, key)));
|
|
105
|
-
langCodeArr.forEach(code => {
|
|
106
|
-
if (code.trim() != '') {
|
|
107
|
-
if (!languageTypesArr.includes(code)) {
|
|
79
|
+
const embedSet = new Set();
|
|
80
|
+
const expandSet = new Set(expand === null || expand === void 0 ? void 0 : expand.split(','));
|
|
81
|
+
if (langDef) {
|
|
82
|
+
var _fieldSet;
|
|
83
|
+
(_fieldSet = fieldSet) !== null && _fieldSet !== void 0 ? _fieldSet : fieldSet = new Set();
|
|
84
|
+
fieldSet.add('languages').add('group').add('apiVersion').add('name').add('kind').add('metadata');
|
|
85
|
+
expandSet.add('languages');
|
|
86
|
+
let languageTypesArr = [];
|
|
87
|
+
Object.keys(_types.LanguageTypes).forEach(key => languageTypesArr.push((0, _utils.ValueFromKey)(_types.LanguageTypes, key)));
|
|
88
|
+
langDef.split(',').forEach(code => {
|
|
89
|
+
if (languageTypesArr.includes(code)) {
|
|
90
|
+
embedSet.add(`languages-${code.trim()}.resource`);
|
|
91
|
+
expandSet.add(`languages-${code.trim()}`);
|
|
92
|
+
fieldSet.add(`languages-${code.trim()}.values`);
|
|
93
|
+
} else if (code.trim().length > 0) {
|
|
108
94
|
console.log(_chalk.default.yellow(`\n\'${code}\' language code is not supported. Allowed language codes: ${_types.LanguageTypes.French} | ${_types.LanguageTypes.German} | ${_types.LanguageTypes.US} | ${_types.LanguageTypes.Portugese}.'`));
|
|
109
|
-
} else {
|
|
110
|
-
if (i < langCodeArr.length - 1) {
|
|
111
|
-
embed = embed + `languages-${code.trim()}.resource` + ",";
|
|
112
|
-
expand = expand + `languages-${code.trim()}` + ",";
|
|
113
|
-
fields = fields + `languages-${code.trim()}.values` + ",";
|
|
114
|
-
} else {
|
|
115
|
-
embed = embed + `languages-${code.trim()}.resource`;
|
|
116
|
-
expand = expand + `languages-${code.trim()}`;
|
|
117
|
-
fields = fields + `languages-${code.trim()}.values`;
|
|
118
|
-
}
|
|
119
95
|
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
let url = `${groupUrl}${scopeUrl}${resourceUrl}${nameUrl}`;
|
|
99
|
+
if (forceDelete || embedSet.size || expandSet.size || fieldSet) {
|
|
100
|
+
const queryParams = [];
|
|
101
|
+
if (forceDelete) {
|
|
102
|
+
queryParams.push('forceDelete=true');
|
|
120
103
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
104
|
+
if (embedSet.size) {
|
|
105
|
+
queryParams.push('embed=' + [...embedSet].join(','));
|
|
106
|
+
}
|
|
107
|
+
if (expandSet.size) {
|
|
108
|
+
queryParams.push('expand=' + [...expandSet].join(','));
|
|
109
|
+
}
|
|
110
|
+
if (fieldSet) {
|
|
111
|
+
// If field set is empty, then return no fields. This is intentional.
|
|
112
|
+
queryParams.push('fields=' + [...fieldSet].join(','));
|
|
113
|
+
}
|
|
114
|
+
url += '?' + queryParams.join('&');
|
|
115
|
+
}
|
|
116
|
+
return url;
|
|
125
117
|
}
|
|
126
118
|
|
|
127
119
|
/**
|
|
@@ -134,7 +126,7 @@ class ApiServerClient {
|
|
|
134
126
|
* @param {ResourceDefinition} args.resourceDef resource definition
|
|
135
127
|
* @param {string} [args.scopeName] scope name
|
|
136
128
|
* @param {ResourceDefinition} [args.scopeDef] scope definition
|
|
137
|
-
* @param {
|
|
129
|
+
* @param {ApiServerVersions} [args.version] api's version
|
|
138
130
|
* @returns {Promise<Array<() => Promise<any> | null>} returns an array of "request creators" functions
|
|
139
131
|
* that will be used in {@link resolveSubResourcesRequests} to create sub-resources when needed
|
|
140
132
|
*/
|
|
@@ -145,7 +137,7 @@ class ApiServerClient {
|
|
|
145
137
|
resourceDef,
|
|
146
138
|
scopeDef,
|
|
147
139
|
scopeName,
|
|
148
|
-
version,
|
|
140
|
+
version = ApiServerVersions.v1alpha1,
|
|
149
141
|
createAction,
|
|
150
142
|
language
|
|
151
143
|
}) {
|
|
@@ -156,7 +148,7 @@ class ApiServerClient {
|
|
|
156
148
|
account: this.account,
|
|
157
149
|
team: this.team
|
|
158
150
|
});
|
|
159
|
-
const
|
|
151
|
+
const urlPath = this.buildResourceUrlPath({
|
|
160
152
|
resourceDef,
|
|
161
153
|
resourceName,
|
|
162
154
|
scopeDef,
|
|
@@ -195,7 +187,7 @@ class ApiServerClient {
|
|
|
195
187
|
return (0, _isEmpty.default)(foundSubResources) ? null : Object.keys(foundSubResources).map(key => {
|
|
196
188
|
return {
|
|
197
189
|
name: key,
|
|
198
|
-
operation: () => service.put(`${
|
|
190
|
+
operation: () => service.put(`${urlPath}/${key}?fields=${key}`, {
|
|
199
191
|
[key]: foundSubResources[key]
|
|
200
192
|
}).catch(err => Promise.reject({
|
|
201
193
|
name: key,
|
|
@@ -296,6 +288,7 @@ class ApiServerClient {
|
|
|
296
288
|
resource,
|
|
297
289
|
scopeDef,
|
|
298
290
|
scopeName,
|
|
291
|
+
version = ApiServerVersions.v1alpha1,
|
|
299
292
|
withSubResources = true,
|
|
300
293
|
language
|
|
301
294
|
}) {
|
|
@@ -313,14 +306,13 @@ class ApiServerClient {
|
|
|
313
306
|
account: this.account,
|
|
314
307
|
team: this.team
|
|
315
308
|
});
|
|
316
|
-
const
|
|
317
|
-
const url = this.buildResourceBaseUrl({
|
|
309
|
+
const urlPath = this.buildResourceUrlPath({
|
|
318
310
|
resourceDef,
|
|
319
311
|
scopeDef,
|
|
320
312
|
scopeName,
|
|
321
313
|
version
|
|
322
314
|
});
|
|
323
|
-
const response = await service.post(
|
|
315
|
+
const response = await service.post(urlPath, (0, _utils.sanitizeMetadata)(resource));
|
|
324
316
|
if (!resource.name) {
|
|
325
317
|
log('createResource, resource does not have a logical name');
|
|
326
318
|
result.warning = true;
|
|
@@ -370,6 +362,7 @@ class ApiServerClient {
|
|
|
370
362
|
resource,
|
|
371
363
|
scopeDef,
|
|
372
364
|
scopeName,
|
|
365
|
+
version = ApiServerVersions.v1alpha1,
|
|
373
366
|
subResourceName,
|
|
374
367
|
language
|
|
375
368
|
}) {
|
|
@@ -380,7 +373,6 @@ class ApiServerClient {
|
|
|
380
373
|
pending: null
|
|
381
374
|
};
|
|
382
375
|
const canUpdateMainResource = !language && !subResourceName;
|
|
383
|
-
const version = resource.apiVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resource.apiVersion;
|
|
384
376
|
if (canUpdateMainResource) {
|
|
385
377
|
try {
|
|
386
378
|
const service = await (0, _dataService.dataService)({
|
|
@@ -389,14 +381,14 @@ class ApiServerClient {
|
|
|
389
381
|
account: this.account,
|
|
390
382
|
team: this.team
|
|
391
383
|
});
|
|
392
|
-
const
|
|
384
|
+
const urlPath = this.buildResourceUrlPath({
|
|
393
385
|
resourceDef,
|
|
394
386
|
resourceName: resource.name,
|
|
395
387
|
scopeDef,
|
|
396
388
|
scopeName,
|
|
397
389
|
version
|
|
398
390
|
});
|
|
399
|
-
result.data = await service.put(
|
|
391
|
+
result.data = await service.put(urlPath, (0, _utils.sanitizeMetadata)(resource));
|
|
400
392
|
} catch (e) {
|
|
401
393
|
log('updateResource, error', e);
|
|
402
394
|
// expecting only a valid ApiServer error response here
|
|
@@ -449,7 +441,8 @@ class ApiServerClient {
|
|
|
449
441
|
resource,
|
|
450
442
|
subResourceName,
|
|
451
443
|
scopeDef,
|
|
452
|
-
scopeName
|
|
444
|
+
scopeName,
|
|
445
|
+
version = ApiServerVersions.v1alpha1
|
|
453
446
|
}) {
|
|
454
447
|
log(`updateSubResource, spec.kind = ${resourceDef.spec.kind}, name = ${resource.name}`);
|
|
455
448
|
const result = {
|
|
@@ -457,7 +450,6 @@ class ApiServerClient {
|
|
|
457
450
|
error: null,
|
|
458
451
|
pending: null
|
|
459
452
|
};
|
|
460
|
-
const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
|
|
461
453
|
try {
|
|
462
454
|
var _resourceDef$spec$sub3, _resourceDef$spec$sub4;
|
|
463
455
|
const service = await (0, _dataService.dataService)({
|
|
@@ -469,14 +461,14 @@ class ApiServerClient {
|
|
|
469
461
|
const knownSubResourcesNames = (_resourceDef$spec$sub3 = (_resourceDef$spec$sub4 = resourceDef.spec.subResources) === null || _resourceDef$spec$sub4 === void 0 ? void 0 : _resourceDef$spec$sub4.names) !== null && _resourceDef$spec$sub3 !== void 0 ? _resourceDef$spec$sub3 : [];
|
|
470
462
|
const foundSubResources = (0, _pickBy.default)(resource, (_, key) => subResourceName == key && knownSubResourcesNames.includes(key));
|
|
471
463
|
const resourceName = resource.name;
|
|
472
|
-
const
|
|
464
|
+
const urlPath = this.buildResourceUrlPath({
|
|
473
465
|
resourceDef,
|
|
474
466
|
resourceName,
|
|
475
467
|
scopeDef,
|
|
476
468
|
scopeName,
|
|
477
469
|
version
|
|
478
470
|
});
|
|
479
|
-
service.put(`${
|
|
471
|
+
service.put(`${urlPath}/${subResourceName}?fields=${subResourceName}`, {
|
|
480
472
|
[subResourceName]: foundSubResources[subResourceName]
|
|
481
473
|
});
|
|
482
474
|
} catch (e) {
|
|
@@ -508,15 +500,14 @@ class ApiServerClient {
|
|
|
508
500
|
scopeDef,
|
|
509
501
|
scopeName,
|
|
510
502
|
wait,
|
|
511
|
-
|
|
512
|
-
|
|
503
|
+
version = ApiServerVersions.v1alpha1,
|
|
504
|
+
forceDelete = false
|
|
513
505
|
}) {
|
|
514
506
|
log(`deleteResourceByName, spec.kind = ${resourceDef.spec.kind}, name = ${resourceName}, scope.kind = ${scopeDef === null || scopeDef === void 0 ? void 0 : scopeDef.spec.kind}, scope.name = ${scopeName}`);
|
|
515
507
|
const result = {
|
|
516
508
|
data: null,
|
|
517
509
|
error: null
|
|
518
510
|
};
|
|
519
|
-
const version = resourceAPIVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceAPIVersion;
|
|
520
511
|
try {
|
|
521
512
|
const service = await (0, _dataService.dataService)({
|
|
522
513
|
baseUrl: this.baseUrl,
|
|
@@ -524,7 +515,7 @@ class ApiServerClient {
|
|
|
524
515
|
account: this.account,
|
|
525
516
|
team: this.team
|
|
526
517
|
});
|
|
527
|
-
const
|
|
518
|
+
const urlPath = this.buildResourceUrlPath({
|
|
528
519
|
resourceDef,
|
|
529
520
|
resourceName,
|
|
530
521
|
scopeDef,
|
|
@@ -532,7 +523,7 @@ class ApiServerClient {
|
|
|
532
523
|
version,
|
|
533
524
|
forceDelete
|
|
534
525
|
});
|
|
535
|
-
const response = await service.delete(
|
|
526
|
+
const response = await service.delete(urlPath);
|
|
536
527
|
// note: delete "response" value from api-server is translated to an empty string currently.
|
|
537
528
|
// If its true, constructing a simple representation from provided data (definition, name, scope name)
|
|
538
529
|
// and manually set it as the "data" key.
|
|
@@ -547,7 +538,8 @@ class ApiServerClient {
|
|
|
547
538
|
resourceDef,
|
|
548
539
|
resourceName,
|
|
549
540
|
scopeDef,
|
|
550
|
-
scopeName
|
|
541
|
+
scopeName,
|
|
542
|
+
version
|
|
551
543
|
});
|
|
552
544
|
if (!!res.data) {
|
|
553
545
|
result.data = null;
|
|
@@ -585,13 +577,14 @@ class ApiServerClient {
|
|
|
585
577
|
resourceDef,
|
|
586
578
|
scopeDef,
|
|
587
579
|
scopeName,
|
|
580
|
+
version = ApiServerVersions.v1alpha1,
|
|
588
581
|
query,
|
|
589
582
|
progressListener,
|
|
590
583
|
expand,
|
|
591
|
-
langDef
|
|
584
|
+
langDef,
|
|
585
|
+
fieldSet
|
|
592
586
|
}) {
|
|
593
587
|
log(`getResourcesList, spec.kind = ${resourceDef.spec.kind}`);
|
|
594
|
-
const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
|
|
595
588
|
const result = {
|
|
596
589
|
data: null,
|
|
597
590
|
error: null
|
|
@@ -603,15 +596,16 @@ class ApiServerClient {
|
|
|
603
596
|
account: this.account,
|
|
604
597
|
team: this.team
|
|
605
598
|
});
|
|
606
|
-
const
|
|
599
|
+
const urlPath = this.buildResourceUrlPath({
|
|
607
600
|
resourceDef,
|
|
608
601
|
scopeDef,
|
|
609
602
|
scopeName,
|
|
610
603
|
version,
|
|
611
604
|
expand,
|
|
612
|
-
langDef
|
|
605
|
+
langDef,
|
|
606
|
+
fieldSet
|
|
613
607
|
});
|
|
614
|
-
const response = await service.getWithPagination(
|
|
608
|
+
const response = await service.getWithPagination(urlPath, query, 50, {}, progressListener);
|
|
615
609
|
result.data = response;
|
|
616
610
|
} catch (e) {
|
|
617
611
|
log('getResourcesList, error: ', e);
|
|
@@ -639,12 +633,12 @@ class ApiServerClient {
|
|
|
639
633
|
resourceName,
|
|
640
634
|
scopeDef,
|
|
641
635
|
scopeName,
|
|
636
|
+
version = ApiServerVersions.v1alpha1,
|
|
642
637
|
expand,
|
|
643
638
|
langDef,
|
|
644
|
-
|
|
639
|
+
fieldSet
|
|
645
640
|
}) {
|
|
646
641
|
log(`getResourceByName, spec.kind = ${resourceDef.spec.kind}, name = ${resourceName}`);
|
|
647
|
-
const version = resourceVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceVersion;
|
|
648
642
|
const result = {
|
|
649
643
|
data: null,
|
|
650
644
|
error: null
|
|
@@ -656,16 +650,17 @@ class ApiServerClient {
|
|
|
656
650
|
account: this.account,
|
|
657
651
|
team: this.team
|
|
658
652
|
});
|
|
659
|
-
const
|
|
653
|
+
const urlPath = this.buildResourceUrlPath({
|
|
660
654
|
resourceDef,
|
|
661
655
|
resourceName,
|
|
662
656
|
scopeDef,
|
|
663
657
|
scopeName,
|
|
664
658
|
version,
|
|
665
659
|
expand,
|
|
666
|
-
langDef
|
|
660
|
+
langDef,
|
|
661
|
+
fieldSet
|
|
667
662
|
});
|
|
668
|
-
const response = await service.get(
|
|
663
|
+
const response = await service.get(urlPath);
|
|
669
664
|
result.data = response;
|
|
670
665
|
} catch (e) {
|
|
671
666
|
log('getResourceByName, error: ', e);
|
|
@@ -741,7 +736,7 @@ class ApiServerClient {
|
|
|
741
736
|
* sorting of the array of resources with "compareResourcesByKindAsc".
|
|
742
737
|
* @param resources array of resources to create
|
|
743
738
|
*/
|
|
744
|
-
async bulkCreate(resources, sortedDefsMap) {
|
|
739
|
+
async bulkCreate(resources, sortedDefsMap, version) {
|
|
745
740
|
log(`bulk create`);
|
|
746
741
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
747
742
|
const pendingSubResources = [];
|
|
@@ -778,7 +773,8 @@ class ApiServerClient {
|
|
|
778
773
|
resource,
|
|
779
774
|
resourceDef,
|
|
780
775
|
scopeDef,
|
|
781
|
-
scopeName
|
|
776
|
+
scopeName,
|
|
777
|
+
version
|
|
782
778
|
});
|
|
783
779
|
if (res.data && !res.error) {
|
|
784
780
|
// note: bulk operation requires creation of sub-resources after all main resources created
|
|
@@ -830,7 +826,7 @@ class ApiServerClient {
|
|
|
830
826
|
* sorting of the array of resources with "compareResourcesByKindAsc".
|
|
831
827
|
* @param resources array of resources to create
|
|
832
828
|
*/
|
|
833
|
-
async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName) {
|
|
829
|
+
async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName, version) {
|
|
834
830
|
log(`bulk create or update`);
|
|
835
831
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
836
832
|
const applyResults = [];
|
|
@@ -868,8 +864,7 @@ class ApiServerClient {
|
|
|
868
864
|
resourceDef,
|
|
869
865
|
resourceName: resource.name,
|
|
870
866
|
scopeDef,
|
|
871
|
-
scopeName
|
|
872
|
-
resourceVersion: resource.apiVersion
|
|
867
|
+
scopeName
|
|
873
868
|
}) : null;
|
|
874
869
|
|
|
875
870
|
// Create new resources first
|
|
@@ -882,6 +877,7 @@ class ApiServerClient {
|
|
|
882
877
|
resourceDef,
|
|
883
878
|
scopeDef,
|
|
884
879
|
scopeName,
|
|
880
|
+
version,
|
|
885
881
|
language
|
|
886
882
|
});
|
|
887
883
|
} else if (getResult.data) {
|
|
@@ -891,6 +887,7 @@ class ApiServerClient {
|
|
|
891
887
|
resourceDef,
|
|
892
888
|
scopeDef,
|
|
893
889
|
scopeName,
|
|
890
|
+
version,
|
|
894
891
|
language,
|
|
895
892
|
subResourceName
|
|
896
893
|
});
|
|
@@ -956,7 +953,7 @@ class ApiServerClient {
|
|
|
956
953
|
* Order of calls calculated by sorting of the array of resources with "compareResourcesByKindDesc".
|
|
957
954
|
* @param resources array of resources to create
|
|
958
955
|
*/
|
|
959
|
-
async bulkDelete(resources, sortedDefsMap, wait, forceDelete) {
|
|
956
|
+
async bulkDelete(resources, sortedDefsMap, wait, forceDelete, version) {
|
|
960
957
|
log(`bulk delete`);
|
|
961
958
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
962
959
|
const bulkResult = {
|
|
@@ -993,8 +990,8 @@ class ApiServerClient {
|
|
|
993
990
|
resourceDef,
|
|
994
991
|
scopeDef,
|
|
995
992
|
scopeName,
|
|
996
|
-
|
|
997
|
-
|
|
993
|
+
version,
|
|
994
|
+
forceDelete
|
|
998
995
|
});
|
|
999
996
|
if (res.error) {
|
|
1000
997
|
for (const nextError of res.error) {
|
|
@@ -126,7 +126,7 @@ const dataService = async ({
|
|
|
126
126
|
clientId,
|
|
127
127
|
team
|
|
128
128
|
});
|
|
129
|
-
|
|
129
|
+
baseUrl = await getBaseUrl(baseUrl, basePath, region, orgRegion);
|
|
130
130
|
const defaultHeaders = getDefaultHeaders({
|
|
131
131
|
orgId,
|
|
132
132
|
token
|
|
@@ -158,8 +158,8 @@ const dataService = async ({
|
|
|
158
158
|
};
|
|
159
159
|
return {
|
|
160
160
|
postFormData: (route, body, headers = {}) => {
|
|
161
|
-
log(`POST (from data): ${
|
|
162
|
-
return fetch('post',
|
|
161
|
+
log(`POST (from data): ${baseUrl + route}`);
|
|
162
|
+
return fetch('post', baseUrl + route, {
|
|
163
163
|
headers: {
|
|
164
164
|
...defaultHeaders,
|
|
165
165
|
...body.getHeaders(),
|
|
@@ -169,9 +169,9 @@ const dataService = async ({
|
|
|
169
169
|
}).then(handleResponse);
|
|
170
170
|
},
|
|
171
171
|
post: (route, data, headers = {}) => {
|
|
172
|
-
log(`POST: ${
|
|
172
|
+
log(`POST: ${baseUrl + route}`);
|
|
173
173
|
log(data);
|
|
174
|
-
return fetch('post',
|
|
174
|
+
return fetch('post', baseUrl + route, {
|
|
175
175
|
headers: {
|
|
176
176
|
...defaultHeaders,
|
|
177
177
|
...headers
|
|
@@ -180,8 +180,8 @@ const dataService = async ({
|
|
|
180
180
|
}).then(handleResponse);
|
|
181
181
|
},
|
|
182
182
|
put: (route, data, headers = {}) => {
|
|
183
|
-
log(`PUT: ${
|
|
184
|
-
return fetch('put',
|
|
183
|
+
log(`PUT: ${baseUrl + route}`);
|
|
184
|
+
return fetch('put', baseUrl + route, {
|
|
185
185
|
headers: {
|
|
186
186
|
...defaultHeaders,
|
|
187
187
|
...headers
|
|
@@ -194,8 +194,8 @@ const dataService = async ({
|
|
|
194
194
|
...defaultHeaders,
|
|
195
195
|
...headers
|
|
196
196
|
};
|
|
197
|
-
log(`GET: ${
|
|
198
|
-
return fetch('get',
|
|
197
|
+
log(`GET: ${baseUrl + route}`, h);
|
|
198
|
+
return fetch('get', baseUrl + route, {
|
|
199
199
|
headers: h
|
|
200
200
|
}).then(handleResponse);
|
|
201
201
|
},
|
|
@@ -210,7 +210,10 @@ const dataService = async ({
|
|
|
210
210
|
* @param progressListener invoked multiple times where argument is assigned progress value 0-100
|
|
211
211
|
*/
|
|
212
212
|
getWithPagination: async function (route, queryParams = '', pageSize = 50, headers = {}, progressListener) {
|
|
213
|
-
const fullUrl =
|
|
213
|
+
const fullUrl = new _url.URL(baseUrl + route);
|
|
214
|
+
if (queryParams) {
|
|
215
|
+
fullUrl.searchParams.set('query', queryParams);
|
|
216
|
+
}
|
|
214
217
|
fullUrl.searchParams.set('pageSize', `${pageSize}`);
|
|
215
218
|
log(`GET (with auto-pagination): ${fullUrl.href}`);
|
|
216
219
|
const response = await fetch('get', fullUrl.toString(), {
|
|
@@ -241,9 +244,9 @@ const dataService = async ({
|
|
|
241
244
|
for (let pageIndex = 1; pageIndex < totalPages; pageIndex++) {
|
|
242
245
|
const thisPageIndex = pageIndex;
|
|
243
246
|
fullUrl.searchParams.set('page', `${thisPageIndex + 1}`);
|
|
244
|
-
const
|
|
247
|
+
const nextRoute = fullUrl.href.substring(baseUrl.length);
|
|
245
248
|
otherPagesCalls.push(limit(async () => {
|
|
246
|
-
allPages[thisPageIndex] = await this.get(
|
|
249
|
+
allPages[thisPageIndex] = await this.get(nextRoute, headers);
|
|
247
250
|
pageDownloadCount++;
|
|
248
251
|
updateProgress();
|
|
249
252
|
}));
|
|
@@ -253,8 +256,8 @@ const dataService = async ({
|
|
|
253
256
|
return (0, _flatten.default)(allPages);
|
|
254
257
|
},
|
|
255
258
|
delete: (route, headers = {}) => {
|
|
256
|
-
log(`DELETE: ${
|
|
257
|
-
return fetch('delete',
|
|
259
|
+
log(`DELETE: ${baseUrl + route}`);
|
|
260
|
+
return fetch('delete', baseUrl + route, {
|
|
258
261
|
headers: {
|
|
259
262
|
...defaultHeaders,
|
|
260
263
|
...headers
|
|
@@ -264,8 +267,8 @@ const dataService = async ({
|
|
|
264
267
|
download: async route => {
|
|
265
268
|
try {
|
|
266
269
|
return await new Promise((resolve, reject) => {
|
|
267
|
-
log(`DOWNLOAD: ${
|
|
268
|
-
const stream = got.stream(
|
|
270
|
+
log(`DOWNLOAD: ${baseUrl + route}`);
|
|
271
|
+
const stream = got.stream(baseUrl + route, {
|
|
269
272
|
retry: 0,
|
|
270
273
|
timeout: _types.ABORT_TIMEOUT
|
|
271
274
|
});
|
package/dist/common/utils.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.FormatString = FormatString;
|
|
7
7
|
exports.KeyValueMapToNameValueArray = KeyValueMapToNameValueArray;
|
|
8
8
|
exports.ValueFromKey = ValueFromKey;
|
|
9
|
-
exports.parseScopeParam = exports.loadAndVerifySpecs = exports.loadAndVerifyApigeeXCredentialFile = exports.isWindows = exports.isValidJson = exports.isApiServerErrorType = exports.isApiServerErrorResponseType = exports.hbsCompare = exports.
|
|
9
|
+
exports.parseScopeParam = exports.loadAndVerifySpecs = exports.loadAndVerifyApigeeXCredentialFile = exports.isWindows = exports.isValidJson = exports.isApiServerErrorType = exports.isApiServerErrorResponseType = exports.hbsCompare = exports.getConfig = exports.createLanguageSubresourceNames = exports.configFile = exports.compareResourcesByKindDesc = exports.compareResourcesByKindAsc = exports.buildTemplate = exports.buildGenericResource = void 0;
|
|
10
10
|
exports.sanitizeMetadata = sanitizeMetadata;
|
|
11
11
|
exports.writeToFile = exports.writeTemplates = exports.verifyScopeParam = exports.verifyFile = exports.transformSimpleFilters = void 0;
|
|
12
12
|
var _fsExtra = require("fs-extra");
|
|
@@ -14,7 +14,6 @@ var _handlebars = _interopRequireDefault(require("handlebars"));
|
|
|
14
14
|
var _jsYaml = require("js-yaml");
|
|
15
15
|
var _os = require("os");
|
|
16
16
|
var _path = require("path");
|
|
17
|
-
var _ApiServerClient = require("./ApiServerClient");
|
|
18
17
|
var _CompositeError = require("./CompositeError");
|
|
19
18
|
var _types = require("./types");
|
|
20
19
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
@@ -415,18 +414,4 @@ function ValueFromKey(stringEnum, key) {
|
|
|
415
414
|
if (k === stringEnum[key]) return k;
|
|
416
415
|
}
|
|
417
416
|
return undefined;
|
|
418
|
-
}
|
|
419
|
-
const getLatestServedAPIVersion = resourceDef => {
|
|
420
|
-
let apiVersions = resourceDef.spec.apiVersions;
|
|
421
|
-
if (apiVersions && apiVersions.length > 0) {
|
|
422
|
-
for (const version of apiVersions) {
|
|
423
|
-
if (version.served && !version.deprecated) {
|
|
424
|
-
return version.name;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
return _ApiServerClient.ApiServerVersions.v1alpha1;
|
|
428
|
-
}
|
|
429
|
-
// if the apiVersions are not set on the resource definition, fallback to v1alpha1 version
|
|
430
|
-
return _ApiServerClient.ApiServerVersions.v1alpha1;
|
|
431
|
-
};
|
|
432
|
-
exports.getLatestServedAPIVersion = getLatestServedAPIVersion;
|
|
417
|
+
}
|