@axway/axway-central-cli 3.9.0 → 3.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.security-profile.json +18 -0
- package/dist/commands/edit/environment.js +21 -3
- package/dist/commands/install/helpers/regex.js +1 -1
- package/dist/commands/install/helpers/templates/kafkaTemplates.js +38 -0
- package/dist/commands/install/kafkaAgents.js +36 -4
- package/dist/common/ApiServerClient.js +22 -23
- package/dist/common/utils.js +17 -2
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"project": "Amplify - APIC CLI",
|
|
4
|
+
"repo_url": "https://git.ecd.axway.org/apigov/apicentral-cli",
|
|
5
|
+
"security_guide": "https://docs.axway.com/bundle/axway_resources/page/amplify_api_management_platform_security_white_paper.html",
|
|
6
|
+
"requirements": {
|
|
7
|
+
"fortify": true,
|
|
8
|
+
"irius-risk": false,
|
|
9
|
+
"pentest": false,
|
|
10
|
+
"twistlock": false,
|
|
11
|
+
"blackduck": false,
|
|
12
|
+
"third-party-policy-violation": false,
|
|
13
|
+
"appspider": false,
|
|
14
|
+
"insightvm": false
|
|
15
|
+
},
|
|
16
|
+
"suppressions": [
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -12,6 +12,8 @@ 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");
|
|
15
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
18
|
const {
|
|
17
19
|
log
|
|
@@ -25,19 +27,35 @@ const action = async ({
|
|
|
25
27
|
account,
|
|
26
28
|
name,
|
|
27
29
|
output,
|
|
28
|
-
region
|
|
30
|
+
region,
|
|
31
|
+
cache
|
|
29
32
|
} = argv;
|
|
30
33
|
log(`editing ${name} env`);
|
|
31
34
|
let file;
|
|
32
35
|
let commandIsSuccessful = true;
|
|
33
36
|
const render = new _Renderer.default(console, output).startSpin(`Fetching details of "environment/${name}".`);
|
|
34
37
|
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;
|
|
35
48
|
const service = await (0, _dataService.dataService)({
|
|
36
49
|
baseUrl,
|
|
37
50
|
account,
|
|
38
51
|
region
|
|
39
52
|
});
|
|
40
|
-
let response
|
|
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}`);
|
|
41
59
|
file = new _TmpFile.default(response);
|
|
42
60
|
// stop spinner or it will interfere stdio of editor
|
|
43
61
|
render.stopSpin();
|
|
@@ -49,7 +67,7 @@ const action = async ({
|
|
|
49
67
|
const {
|
|
50
68
|
docs
|
|
51
69
|
} = await (0, _utils.loadAndVerifySpecs)(file.path, new Set([_types.Kind.Environment]));
|
|
52
|
-
response = await service.put(`/management/
|
|
70
|
+
response = await service.put(`/management/${version}/environments/${name}`, docs[0]);
|
|
53
71
|
render.success((0, _cliKit.chalk)`{greenBright "environment/${name}" has successfully been edited.}`);
|
|
54
72
|
// render result if output flag has been provided
|
|
55
73
|
output && (0, _resultsRenderers.renderResponse)(console, response, output);
|
|
@@ -62,5 +62,5 @@ const GitLabRegexPatterns = exports.GitLabRegexPatterns = {
|
|
|
62
62
|
};
|
|
63
63
|
const KafkaRegexPatterns = exports.KafkaRegexPatterns = {
|
|
64
64
|
bootstrapServerRegex: '^(SASL_SSL:\/\/|SASL_PLAINTEXT:\/\/|PLAINTEXT:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z0-9]{1,5}(:[0-9]{1,5})$',
|
|
65
|
-
|
|
65
|
+
urlRegex: '^(http:\/\/|https:\/\/)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$'
|
|
66
66
|
};
|
|
@@ -24,6 +24,10 @@ class KafkaAgentValues {
|
|
|
24
24
|
_defineProperty(this, "clusterSaslMechanism", void 0);
|
|
25
25
|
_defineProperty(this, "clusterSaslUser", void 0);
|
|
26
26
|
_defineProperty(this, "clusterSaslPassword", void 0);
|
|
27
|
+
_defineProperty(this, "saslOauthTokenUrl", void 0);
|
|
28
|
+
_defineProperty(this, "saslOauthClientId", void 0);
|
|
29
|
+
_defineProperty(this, "saslOauthClientSecret", void 0);
|
|
30
|
+
_defineProperty(this, "saslOauthClientScopes", void 0);
|
|
27
31
|
_defineProperty(this, "schemaRegistryEnabled", void 0);
|
|
28
32
|
_defineProperty(this, "schemaRegistryUrl", void 0);
|
|
29
33
|
_defineProperty(this, "schemaRegistryAuthEnabled", void 0);
|
|
@@ -42,6 +46,10 @@ class KafkaAgentValues {
|
|
|
42
46
|
this.clusterSaslMechanism = '';
|
|
43
47
|
this.clusterSaslUser = '';
|
|
44
48
|
this.clusterSaslPassword = '';
|
|
49
|
+
this.saslOauthTokenUrl = '';
|
|
50
|
+
this.saslOauthClientId = '';
|
|
51
|
+
this.saslOauthClientSecret = '';
|
|
52
|
+
this.saslOauthClientScopes = '';
|
|
45
53
|
this.schemaRegistryEnabled = false;
|
|
46
54
|
this.schemaRegistryUrl = '';
|
|
47
55
|
this.schemaRegistryAuthEnabled = true;
|
|
@@ -70,9 +78,19 @@ KAFKA_CLUSTER_AUTH_APIKEY_SECRET={{clusterAPISecret}}
|
|
|
70
78
|
KAFKA_CLUSTER_SERVERS={{clusterServer}}
|
|
71
79
|
{{#compare . clusterSaslMechanism "NONE" operator="!="}}
|
|
72
80
|
KAFKA_CLUSTER_AUTH_SASL_MECHANISM={{clusterSaslMechanism}}
|
|
81
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="=="}}
|
|
82
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_TOKENURL={{saslOauthTokenUrl}}
|
|
83
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_CLIENTID={{saslOauthClientId}}
|
|
84
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_CLIENTSECRET={{saslOauthClientSecret}}
|
|
85
|
+
{{#compare . saslOauthClientScopes "" operator="!=" }}
|
|
86
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_SCOPES={{saslOauthClientScopes}}
|
|
87
|
+
{{/compare}}
|
|
88
|
+
{{/compare}}
|
|
89
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="!="}}
|
|
73
90
|
KAFKA_CLUSTER_AUTH_SASL_USERNAME={{clusterSaslUser}}
|
|
74
91
|
KAFKA_CLUSTER_AUTH_SASL_PASSWORD={{clusterSaslPassword}}
|
|
75
92
|
{{/compare}}
|
|
93
|
+
{{/compare}}
|
|
76
94
|
{{/if}}
|
|
77
95
|
|
|
78
96
|
{{#if cloudEnabled}}
|
|
@@ -85,8 +103,18 @@ KAFKA_SCHEMAREGISTRY_ENABLED=true
|
|
|
85
103
|
KAFKA_SCHEMAREGISTRY_URL={{schemaRegistryUrl}}
|
|
86
104
|
{{#if schemaRegistryAuthEnabled}}
|
|
87
105
|
KAFKA_SCHEMAREGISTRY_AUTH_SASL_MECHANISM={{clusterSaslMechanism}}
|
|
106
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="=="}}
|
|
107
|
+
KAFKA_SCHEMAREGISTRY_AUTH_SASL_OAUTH_TOKENURL={{saslOauthTokenUrl}}
|
|
108
|
+
KAFKA_SCHEMAREGISTRY_AUTH_SASL_OAUTH_CLIENTID={{saslOauthClientId}}
|
|
109
|
+
KAFKA_SCHEMAREGISTRY_AUTH_SASL_OAUTH_CLIENTSECRET={{saslOauthClientSecret}}
|
|
110
|
+
{{#compare . saslOauthClientScopes "" operator="!=" }}
|
|
111
|
+
KAFKA_SCHEMAREGISTRY_AUTH_SASL_OAUTH_SCOPES={{saslOauthClientScopes}}
|
|
112
|
+
{{/compare}}
|
|
113
|
+
{{/compare}}
|
|
114
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="!="}}
|
|
88
115
|
KAFKA_SCHEMAREGISTRY_AUTH_SASL_USERNAME={{clusterSaslUser}}
|
|
89
116
|
KAFKA_SCHEMAREGISTRY_AUTH_SASL_PASSWORD={{clusterSaslPassword}}
|
|
117
|
+
{{/compare}}
|
|
90
118
|
{{/if}}
|
|
91
119
|
{{/if}}
|
|
92
120
|
{{/if}}
|
|
@@ -129,9 +157,19 @@ KAFKA_CLUSTER_AUTH_APIKEY_SECRET={{clusterAPISecret}}
|
|
|
129
157
|
KAFKA_CLUSTER_SERVERS={{clusterServer}}
|
|
130
158
|
{{#compare . clusterSaslMechanism "NONE" operator="!="}}
|
|
131
159
|
KAFKA_CLUSTER_AUTH_SASL_MECHANISM={{clusterSaslMechanism}}
|
|
160
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="=="}}
|
|
161
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_TOKENURL={{saslOauthTokenUrl}}
|
|
162
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_CLIENTID={{saslOauthClientId}}
|
|
163
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_CLIENTSECRET={{saslOauthClientSecret}}
|
|
164
|
+
{{#compare . saslOauthClientScopes "" operator="!=" }}
|
|
165
|
+
KAFKA_CLUSTER_AUTH_SASL_OAUTH_SCOPES={{saslOauthClientScopes}}
|
|
166
|
+
{{/compare}}
|
|
167
|
+
{{/compare}}
|
|
168
|
+
{{#compare . clusterSaslMechanism "OAUTHBEARER" operator="!="}}
|
|
132
169
|
KAFKA_CLUSTER_AUTH_SASL_USERNAME={{clusterSaslUser}}
|
|
133
170
|
KAFKA_CLUSTER_AUTH_SASL_PASSWORD={{clusterSaslPassword}}
|
|
134
171
|
{{/compare}}
|
|
172
|
+
{{/compare}}
|
|
135
173
|
{{/if}}
|
|
136
174
|
|
|
137
175
|
# Amplify Central configs
|
|
@@ -37,6 +37,7 @@ let SaslMechanismTypes = exports.SaslMechanismTypes = /*#__PURE__*/function (Sas
|
|
|
37
37
|
SaslMechanismTypes["SCRAM_SHA_256"] = "SCRAM-SHA-256";
|
|
38
38
|
SaslMechanismTypes["SCRAM_SHA_512"] = "SCRAM-SHA-512";
|
|
39
39
|
SaslMechanismTypes["PLAIN"] = "PLAIN";
|
|
40
|
+
SaslMechanismTypes["OAUTHBEARER"] = "OAUTHBEARER";
|
|
40
41
|
SaslMechanismTypes["NONE"] = "NONE";
|
|
41
42
|
return SaslMechanismTypes;
|
|
42
43
|
}({}); // KafkaPrompts - prompts for user inputs
|
|
@@ -52,9 +53,13 @@ const prompts = {
|
|
|
52
53
|
saslMechanismMsg: "Select the SASL Mechanism you wish to use for authentication",
|
|
53
54
|
enterSaslUsername: "Enter the SASL Username",
|
|
54
55
|
enterSaslPassword: "Enter the SASL Password",
|
|
56
|
+
enterSaslOAuthTokenUrl: "Enter the SASL/OAUTHBEARER Token Url",
|
|
57
|
+
enterSaslOAuthClientId: "Enter the SASL/OAUTHBEARER Client Id",
|
|
58
|
+
enterSaslOAuthClientSecret: "Enter the SASL/OAUTHBEARER Client Secret",
|
|
59
|
+
enterSaslOAuthClientScopes: "Enter the SASL/OAUTHBEARER Client Scopes(comma separated list)",
|
|
55
60
|
schemaRegistryEnabledMsg: 'Do you want to use Schema Registry with Kafka cluster?',
|
|
56
61
|
enterSchemaRegistryUrl: 'Enter the Schema Registry Url',
|
|
57
|
-
schemaRegistryAuthEnabled: 'Do you want to authenticate Schema Registry with SASL
|
|
62
|
+
schemaRegistryAuthEnabled: 'Do you want to authenticate Schema Registry with SASL mechanism?',
|
|
58
63
|
enterSchemaRegistryAPIKey: 'Enter the Schema Registry API Key Id',
|
|
59
64
|
enterSchemaRegistryAPISecret: 'Enter the Schema Registry API Key Secret'
|
|
60
65
|
};
|
|
@@ -126,10 +131,30 @@ const askSaslMechanism = async () => {
|
|
|
126
131
|
}, {
|
|
127
132
|
name: SaslMechanismTypes.SCRAM_SHA_512,
|
|
128
133
|
value: SaslMechanismTypes.SCRAM_SHA_512
|
|
134
|
+
}, {
|
|
135
|
+
name: SaslMechanismTypes.OAUTHBEARER,
|
|
136
|
+
value: SaslMechanismTypes.OAUTHBEARER
|
|
129
137
|
}]
|
|
130
138
|
});
|
|
131
139
|
};
|
|
132
140
|
exports.askSaslMechanism = askSaslMechanism;
|
|
141
|
+
const askSaslOAuthBearerTokenUrl = async () => await (0, _basicPrompts.askInput)({
|
|
142
|
+
msg: prompts.enterSaslOAuthTokenUrl,
|
|
143
|
+
allowEmptyInput: false,
|
|
144
|
+
validate: (0, _basicPrompts.validateRegex)(helpers.KafkaRegexPatterns.urlRegex, helpers.invalidValueExampleErrMsg('Token URL', 'https://www.testdomain.com/oauth/token'))
|
|
145
|
+
});
|
|
146
|
+
const askSaslOAuthBearerClientId = async () => await (0, _basicPrompts.askInput)({
|
|
147
|
+
msg: prompts.enterSaslOAuthClientId,
|
|
148
|
+
allowEmptyInput: false
|
|
149
|
+
});
|
|
150
|
+
const askSaslOAuthBearerClientSecret = async () => await (0, _basicPrompts.askInput)({
|
|
151
|
+
msg: prompts.enterSaslOAuthClientSecret,
|
|
152
|
+
allowEmptyInput: false
|
|
153
|
+
});
|
|
154
|
+
const askSaslOAuthBearerScopes = async () => await (0, _basicPrompts.askInput)({
|
|
155
|
+
msg: prompts.enterSaslOAuthClientScopes,
|
|
156
|
+
allowEmptyInput: true
|
|
157
|
+
});
|
|
133
158
|
const askSaslUsername = async () => await (0, _basicPrompts.askInput)({
|
|
134
159
|
msg: prompts.enterSaslUsername
|
|
135
160
|
});
|
|
@@ -155,7 +180,7 @@ const askIsSchemaRegistryAuthEnabled = async () => {
|
|
|
155
180
|
exports.askIsSchemaRegistryAuthEnabled = askIsSchemaRegistryAuthEnabled;
|
|
156
181
|
const askSchemaRegistryUrl = async () => await (0, _basicPrompts.askInput)({
|
|
157
182
|
msg: prompts.enterSchemaRegistryUrl,
|
|
158
|
-
validate: (0, _basicPrompts.validateRegex)(helpers.KafkaRegexPatterns.
|
|
183
|
+
validate: (0, _basicPrompts.validateRegex)(helpers.KafkaRegexPatterns.urlRegex, helpers.invalidValueExampleErrMsg('Schema Registry Url', 'https://www.testdomain.com'))
|
|
159
184
|
});
|
|
160
185
|
const askSchemaRegistryAPIKey = async () => await (0, _basicPrompts.askInput)({
|
|
161
186
|
msg: prompts.enterSchemaRegistryAPIKey
|
|
@@ -177,8 +202,15 @@ const gatewayConnectivity = async installConfig => {
|
|
|
177
202
|
kafkaAgentValues.clusterServer = await askClusterServer();
|
|
178
203
|
kafkaAgentValues.clusterSaslMechanism = await askSaslMechanism();
|
|
179
204
|
if (kafkaAgentValues.clusterSaslMechanism !== SaslMechanismTypes.NONE) {
|
|
180
|
-
kafkaAgentValues.
|
|
181
|
-
|
|
205
|
+
if (kafkaAgentValues.clusterSaslMechanism == SaslMechanismTypes.OAUTHBEARER) {
|
|
206
|
+
kafkaAgentValues.saslOauthTokenUrl = await askSaslOAuthBearerTokenUrl();
|
|
207
|
+
kafkaAgentValues.saslOauthClientId = await askSaslOAuthBearerClientId();
|
|
208
|
+
kafkaAgentValues.saslOauthClientSecret = await askSaslOAuthBearerClientSecret();
|
|
209
|
+
kafkaAgentValues.saslOauthClientScopes = await askSaslOAuthBearerScopes();
|
|
210
|
+
} else {
|
|
211
|
+
kafkaAgentValues.clusterSaslUser = await askSaslUsername();
|
|
212
|
+
kafkaAgentValues.clusterSaslPassword = await askSaslPassword();
|
|
213
|
+
}
|
|
182
214
|
}
|
|
183
215
|
}
|
|
184
216
|
if (installConfig.switches.isDaEnabled) {
|
|
@@ -126,7 +126,7 @@ class ApiServerClient {
|
|
|
126
126
|
* @param {ResourceDefinition} args.resourceDef resource definition
|
|
127
127
|
* @param {string} [args.scopeName] scope name
|
|
128
128
|
* @param {ResourceDefinition} [args.scopeDef] scope definition
|
|
129
|
-
* @param {
|
|
129
|
+
* @param {string} [args.version] api's version
|
|
130
130
|
* @returns {Promise<Array<() => Promise<any> | null>} returns an array of "request creators" functions
|
|
131
131
|
* that will be used in {@link resolveSubResourcesRequests} to create sub-resources when needed
|
|
132
132
|
*/
|
|
@@ -137,7 +137,7 @@ class ApiServerClient {
|
|
|
137
137
|
resourceDef,
|
|
138
138
|
scopeDef,
|
|
139
139
|
scopeName,
|
|
140
|
-
version
|
|
140
|
+
version,
|
|
141
141
|
createAction,
|
|
142
142
|
language
|
|
143
143
|
}) {
|
|
@@ -288,7 +288,6 @@ class ApiServerClient {
|
|
|
288
288
|
resource,
|
|
289
289
|
scopeDef,
|
|
290
290
|
scopeName,
|
|
291
|
-
version = ApiServerVersions.v1alpha1,
|
|
292
291
|
withSubResources = true,
|
|
293
292
|
language
|
|
294
293
|
}) {
|
|
@@ -306,6 +305,7 @@ class ApiServerClient {
|
|
|
306
305
|
account: this.account,
|
|
307
306
|
team: this.team
|
|
308
307
|
});
|
|
308
|
+
const version = resource.apiVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resource.apiVersion;
|
|
309
309
|
const urlPath = this.buildResourceUrlPath({
|
|
310
310
|
resourceDef,
|
|
311
311
|
scopeDef,
|
|
@@ -362,7 +362,6 @@ class ApiServerClient {
|
|
|
362
362
|
resource,
|
|
363
363
|
scopeDef,
|
|
364
364
|
scopeName,
|
|
365
|
-
version = ApiServerVersions.v1alpha1,
|
|
366
365
|
subResourceName,
|
|
367
366
|
language
|
|
368
367
|
}) {
|
|
@@ -373,6 +372,7 @@ class ApiServerClient {
|
|
|
373
372
|
pending: null
|
|
374
373
|
};
|
|
375
374
|
const canUpdateMainResource = !language && !subResourceName;
|
|
375
|
+
const version = resource.apiVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resource.apiVersion;
|
|
376
376
|
if (canUpdateMainResource) {
|
|
377
377
|
try {
|
|
378
378
|
const service = await (0, _dataService.dataService)({
|
|
@@ -441,8 +441,7 @@ class ApiServerClient {
|
|
|
441
441
|
resource,
|
|
442
442
|
subResourceName,
|
|
443
443
|
scopeDef,
|
|
444
|
-
scopeName
|
|
445
|
-
version = ApiServerVersions.v1alpha1
|
|
444
|
+
scopeName
|
|
446
445
|
}) {
|
|
447
446
|
log(`updateSubResource, spec.kind = ${resourceDef.spec.kind}, name = ${resource.name}`);
|
|
448
447
|
const result = {
|
|
@@ -450,6 +449,7 @@ class ApiServerClient {
|
|
|
450
449
|
error: null,
|
|
451
450
|
pending: null
|
|
452
451
|
};
|
|
452
|
+
const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
|
|
453
453
|
try {
|
|
454
454
|
var _resourceDef$spec$sub3, _resourceDef$spec$sub4;
|
|
455
455
|
const service = await (0, _dataService.dataService)({
|
|
@@ -500,14 +500,15 @@ class ApiServerClient {
|
|
|
500
500
|
scopeDef,
|
|
501
501
|
scopeName,
|
|
502
502
|
wait,
|
|
503
|
-
|
|
504
|
-
|
|
503
|
+
forceDelete = false,
|
|
504
|
+
resourceAPIVersion
|
|
505
505
|
}) {
|
|
506
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}`);
|
|
507
507
|
const result = {
|
|
508
508
|
data: null,
|
|
509
509
|
error: null
|
|
510
510
|
};
|
|
511
|
+
const version = resourceAPIVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceAPIVersion;
|
|
511
512
|
try {
|
|
512
513
|
const service = await (0, _dataService.dataService)({
|
|
513
514
|
baseUrl: this.baseUrl,
|
|
@@ -538,8 +539,7 @@ class ApiServerClient {
|
|
|
538
539
|
resourceDef,
|
|
539
540
|
resourceName,
|
|
540
541
|
scopeDef,
|
|
541
|
-
scopeName
|
|
542
|
-
version
|
|
542
|
+
scopeName
|
|
543
543
|
});
|
|
544
544
|
if (!!res.data) {
|
|
545
545
|
result.data = null;
|
|
@@ -577,7 +577,6 @@ class ApiServerClient {
|
|
|
577
577
|
resourceDef,
|
|
578
578
|
scopeDef,
|
|
579
579
|
scopeName,
|
|
580
|
-
version = ApiServerVersions.v1alpha1,
|
|
581
580
|
query,
|
|
582
581
|
progressListener,
|
|
583
582
|
expand,
|
|
@@ -585,6 +584,7 @@ class ApiServerClient {
|
|
|
585
584
|
fieldSet
|
|
586
585
|
}) {
|
|
587
586
|
log(`getResourcesList, spec.kind = ${resourceDef.spec.kind}`);
|
|
587
|
+
const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
|
|
588
588
|
const result = {
|
|
589
589
|
data: null,
|
|
590
590
|
error: null
|
|
@@ -633,12 +633,13 @@ class ApiServerClient {
|
|
|
633
633
|
resourceName,
|
|
634
634
|
scopeDef,
|
|
635
635
|
scopeName,
|
|
636
|
-
version = ApiServerVersions.v1alpha1,
|
|
637
636
|
expand,
|
|
638
637
|
langDef,
|
|
639
|
-
fieldSet
|
|
638
|
+
fieldSet,
|
|
639
|
+
resourceVersion
|
|
640
640
|
}) {
|
|
641
641
|
log(`getResourceByName, spec.kind = ${resourceDef.spec.kind}, name = ${resourceName}`);
|
|
642
|
+
const version = resourceVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceVersion;
|
|
642
643
|
const result = {
|
|
643
644
|
data: null,
|
|
644
645
|
error: null
|
|
@@ -736,7 +737,7 @@ class ApiServerClient {
|
|
|
736
737
|
* sorting of the array of resources with "compareResourcesByKindAsc".
|
|
737
738
|
* @param resources array of resources to create
|
|
738
739
|
*/
|
|
739
|
-
async bulkCreate(resources, sortedDefsMap
|
|
740
|
+
async bulkCreate(resources, sortedDefsMap) {
|
|
740
741
|
log(`bulk create`);
|
|
741
742
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
742
743
|
const pendingSubResources = [];
|
|
@@ -773,8 +774,7 @@ class ApiServerClient {
|
|
|
773
774
|
resource,
|
|
774
775
|
resourceDef,
|
|
775
776
|
scopeDef,
|
|
776
|
-
scopeName
|
|
777
|
-
version
|
|
777
|
+
scopeName
|
|
778
778
|
});
|
|
779
779
|
if (res.data && !res.error) {
|
|
780
780
|
// note: bulk operation requires creation of sub-resources after all main resources created
|
|
@@ -826,7 +826,7 @@ class ApiServerClient {
|
|
|
826
826
|
* sorting of the array of resources with "compareResourcesByKindAsc".
|
|
827
827
|
* @param resources array of resources to create
|
|
828
828
|
*/
|
|
829
|
-
async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName
|
|
829
|
+
async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName) {
|
|
830
830
|
log(`bulk create or update`);
|
|
831
831
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
832
832
|
const applyResults = [];
|
|
@@ -864,7 +864,8 @@ class ApiServerClient {
|
|
|
864
864
|
resourceDef,
|
|
865
865
|
resourceName: resource.name,
|
|
866
866
|
scopeDef,
|
|
867
|
-
scopeName
|
|
867
|
+
scopeName,
|
|
868
|
+
resourceVersion: resource.apiVersion
|
|
868
869
|
}) : null;
|
|
869
870
|
|
|
870
871
|
// Create new resources first
|
|
@@ -877,7 +878,6 @@ class ApiServerClient {
|
|
|
877
878
|
resourceDef,
|
|
878
879
|
scopeDef,
|
|
879
880
|
scopeName,
|
|
880
|
-
version,
|
|
881
881
|
language
|
|
882
882
|
});
|
|
883
883
|
} else if (getResult.data) {
|
|
@@ -887,7 +887,6 @@ class ApiServerClient {
|
|
|
887
887
|
resourceDef,
|
|
888
888
|
scopeDef,
|
|
889
889
|
scopeName,
|
|
890
|
-
version,
|
|
891
890
|
language,
|
|
892
891
|
subResourceName
|
|
893
892
|
});
|
|
@@ -953,7 +952,7 @@ class ApiServerClient {
|
|
|
953
952
|
* Order of calls calculated by sorting of the array of resources with "compareResourcesByKindDesc".
|
|
954
953
|
* @param resources array of resources to create
|
|
955
954
|
*/
|
|
956
|
-
async bulkDelete(resources, sortedDefsMap, wait, forceDelete
|
|
955
|
+
async bulkDelete(resources, sortedDefsMap, wait, forceDelete) {
|
|
957
956
|
log(`bulk delete`);
|
|
958
957
|
const sortedDefsArray = Array.from(sortedDefsMap.values());
|
|
959
958
|
const bulkResult = {
|
|
@@ -990,8 +989,8 @@ class ApiServerClient {
|
|
|
990
989
|
resourceDef,
|
|
991
990
|
scopeDef,
|
|
992
991
|
scopeName,
|
|
993
|
-
|
|
994
|
-
|
|
992
|
+
forceDelete,
|
|
993
|
+
resourceAPIVersion: resource.apiVersion
|
|
995
994
|
});
|
|
996
995
|
if (res.error) {
|
|
997
996
|
for (const nextError of res.error) {
|
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.getConfig = exports.createLanguageSubresourceNames = exports.configFile = exports.compareResourcesByKindDesc = exports.compareResourcesByKindAsc = exports.buildTemplate = exports.buildGenericResource = void 0;
|
|
9
|
+
exports.parseScopeParam = exports.loadAndVerifySpecs = exports.loadAndVerifyApigeeXCredentialFile = exports.isWindows = exports.isValidJson = exports.isApiServerErrorType = exports.isApiServerErrorResponseType = exports.hbsCompare = exports.getLatestServedAPIVersion = 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,6 +14,7 @@ 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");
|
|
17
18
|
var _CompositeError = require("./CompositeError");
|
|
18
19
|
var _types = require("./types");
|
|
19
20
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
@@ -414,4 +415,18 @@ function ValueFromKey(stringEnum, key) {
|
|
|
414
415
|
if (k === stringEnum[key]) return k;
|
|
415
416
|
}
|
|
416
417
|
return undefined;
|
|
417
|
-
}
|
|
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;
|