@axway/axway-central-cli 2.5.0 → 2.6.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/get/index.js +12 -16
- package/dist/commands/install/agents.js +3 -10
- package/dist/commands/install/edgeAgents.js +1 -1
- package/dist/commands/install/helpers/creators.js +15 -16
- package/dist/commands/install/helpers/inputs.js +25 -30
- package/dist/commands/install/helpers/templates/istioTemplates.js +6 -6
- package/dist/commands/install/istioAgents.js +3 -3
- package/dist/commands/install/platform.js +14 -10
- package/dist/common/ApiServerClient.js +19 -8
- package/dist/common/CoreConfigController.js +67 -68
- package/dist/common/PlatformClient.js +142 -33
- package/dist/common/dataService.js +52 -18
- package/dist/common/types.js +5 -3
- package/package.json +20 -20
- package/dist/common/ApiCentralClient.js +0 -114
|
@@ -52,6 +52,7 @@ const get = {
|
|
|
52
52
|
account,
|
|
53
53
|
region,
|
|
54
54
|
tag,
|
|
55
|
+
team,
|
|
55
56
|
title
|
|
56
57
|
} = argv; // will be set to true and exit 1 if any get result contains an error or args invalid
|
|
57
58
|
|
|
@@ -69,6 +70,7 @@ const get = {
|
|
|
69
70
|
baseUrl,
|
|
70
71
|
account,
|
|
71
72
|
region,
|
|
73
|
+
team,
|
|
72
74
|
useCache: cache
|
|
73
75
|
});
|
|
74
76
|
const defsManager = await new _DefinitionsManager.DefinitionsManager(client).init();
|
|
@@ -166,34 +168,28 @@ ${defsManager.getDefsTableForHelpMsg()}`);
|
|
|
166
168
|
name: 'args',
|
|
167
169
|
desc: 'Command arguments, run "axway central get" to see the examples',
|
|
168
170
|
multiple: true,
|
|
169
|
-
required: false
|
|
170
|
-
type: 'string'
|
|
171
|
+
required: false
|
|
171
172
|
}],
|
|
172
173
|
options: { ..._types.commonCmdArgsDescription,
|
|
173
174
|
'-o, --output [value]': {
|
|
174
|
-
desc: `Additional output formats. One of: ${_types.OutputTypes.yaml} | ${_types.OutputTypes.json}
|
|
175
|
-
type: 'string'
|
|
175
|
+
desc: `Additional output formats. One of: ${_types.OutputTypes.yaml} | ${_types.OutputTypes.json}`
|
|
176
176
|
},
|
|
177
|
-
'-s, --scope [name|kind/name]
|
|
178
|
-
desc:
|
|
179
|
-
type: 'string'
|
|
177
|
+
'-s, --scope [name|kind/name]': {
|
|
178
|
+
desc: 'Scope name or kind/name for scoped resources'
|
|
180
179
|
},
|
|
181
180
|
'-q, --query [RSQL query]': {
|
|
182
|
-
desc:
|
|
183
|
-
type: 'string'
|
|
181
|
+
desc: 'RSQL-formatted query to search for filters that match specific parameters'
|
|
184
182
|
},
|
|
185
183
|
'--title [title]': {
|
|
186
|
-
desc:
|
|
187
|
-
type: 'string'
|
|
184
|
+
desc: 'Title of resource(s) to fetch'
|
|
188
185
|
},
|
|
189
186
|
'--attribute [key=value]': {
|
|
190
|
-
desc:
|
|
191
|
-
type: 'string'
|
|
187
|
+
desc: 'Attribute in key=value pair format to filter by'
|
|
192
188
|
},
|
|
193
189
|
'--tag [tag]': {
|
|
194
|
-
desc:
|
|
195
|
-
|
|
196
|
-
|
|
190
|
+
desc: 'Tag of resource(s) to fetch'
|
|
191
|
+
},
|
|
192
|
+
'--team [guid|name]': 'The team name or guid to use'
|
|
197
193
|
}
|
|
198
194
|
};
|
|
199
195
|
exports.get = get;
|
|
@@ -9,8 +9,6 @@ var _chalk = _interopRequireDefault(require("chalk"));
|
|
|
9
9
|
|
|
10
10
|
var _snooplogg = _interopRequireDefault(require("snooplogg"));
|
|
11
11
|
|
|
12
|
-
var _ApiCentralClient = require("../../common/ApiCentralClient");
|
|
13
|
-
|
|
14
12
|
var _ApiServerClient = require("../../common/ApiServerClient");
|
|
15
13
|
|
|
16
14
|
var _basicPrompts = require("../../common/basicPrompts");
|
|
@@ -84,12 +82,7 @@ const agents = {
|
|
|
84
82
|
const render = new _Renderer.default(console);
|
|
85
83
|
|
|
86
84
|
try {
|
|
87
|
-
//
|
|
88
|
-
const apiCentralClient = new _ApiCentralClient.ApiCentralClient({
|
|
89
|
-
baseUrl,
|
|
90
|
-
account,
|
|
91
|
-
region
|
|
92
|
-
});
|
|
85
|
+
// initialize clients
|
|
93
86
|
const apiServerClient = new _ApiServerClient.ApiServerClient({
|
|
94
87
|
baseUrl,
|
|
95
88
|
account,
|
|
@@ -144,7 +137,7 @@ const agents = {
|
|
|
144
137
|
} // get platform connectivity
|
|
145
138
|
|
|
146
139
|
|
|
147
|
-
installConfig.centralConfig = await platform.getCentralConfig(
|
|
140
|
+
installConfig.centralConfig = await platform.getCentralConfig(apiServerClient, platformClient, defsManager, apicDeployment, installConfig); // Create the object of GatewayTypes -> GatewayConnectivity functions
|
|
148
141
|
|
|
149
142
|
installConfig.gatewayConfig = await agentInstallFlow.AskGatewayQuestions(installConfig, apiServerClient, defsManager); // traceability options
|
|
150
143
|
|
|
@@ -157,7 +150,7 @@ const agents = {
|
|
|
157
150
|
|
|
158
151
|
if (agentInstallFlow.InstallPreprocess) installConfig = await agentInstallFlow.InstallPreprocess(installConfig); // finalize platform setup
|
|
159
152
|
|
|
160
|
-
installConfig = await platform.finalizeCentralInstall(
|
|
153
|
+
installConfig = await platform.finalizeCentralInstall(apiServerClient, platformClient, defsManager, installConfig); // finalize gateway setup and output
|
|
161
154
|
|
|
162
155
|
await agentInstallFlow.FinalizeGatewayInstall(installConfig, apiServerClient, defsManager);
|
|
163
156
|
} catch (e) {
|
|
@@ -317,7 +317,7 @@ const completeInstall = async installConfig => {
|
|
|
317
317
|
|
|
318
318
|
await helpers.createSecret(v7AgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, async () => {
|
|
319
319
|
if (installConfig.centralConfig.ampcDosaInfo.isNew) {
|
|
320
|
-
console.log(_cliKit.chalk.yellow(`The secret '${helpers.amplifyAgentsKeysSecret}' will be created with the same "private_key.pem" and "public_key.pem" that was auto generated to create the
|
|
320
|
+
console.log(_cliKit.chalk.yellow(`The secret '${helpers.amplifyAgentsKeysSecret}' will be created with the same "private_key.pem" and "public_key.pem" that was auto generated to create the Service Account.`));
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
await helpers.createAmplifyAgentKeysSecret(v7AgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, 'public_key', v7AgentValues.centralConfig.dosaAccount.publicKey, 'private_key', v7AgentValues.centralConfig.dosaAccount.privateKey);
|
|
@@ -13,6 +13,8 @@ var _bashCommands = require("../../../common/bashCommands");
|
|
|
13
13
|
|
|
14
14
|
var _Kubectl = require("../../../common/Kubectl");
|
|
15
15
|
|
|
16
|
+
var _PlatformClient = require("../../../common/PlatformClient");
|
|
17
|
+
|
|
16
18
|
var _types = require("../../../common/types");
|
|
17
19
|
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -48,18 +50,15 @@ const createDosaAndCerts = async (client, name) => {
|
|
|
48
50
|
|
|
49
51
|
const publicCert = _fsExtra.default.readFileSync(publicKey).toString();
|
|
50
52
|
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return new _types.DosaAccount(result.data.clientId, publicKey, privateKey);
|
|
53
|
+
const account = await client.createServiceAccount({
|
|
54
|
+
name: name,
|
|
55
|
+
desc: name,
|
|
56
|
+
publicKey: publicCert,
|
|
57
|
+
roles: [_PlatformClient.PlatformServiceAccountRole.ApiCentralAdmin]
|
|
58
|
+
});
|
|
59
|
+
console.log(_chalk.default.green(`New service account "${account.name}" with clientId "${account.client_id}" has been successfully created.`));
|
|
60
|
+
console.log(_chalk.default.green(`The private key has been placed at ${privateKey}\nThe public key has been placed at ${publicKey}`));
|
|
61
|
+
return new _types.DosaAccount(account.client_id, publicKey, privateKey);
|
|
63
62
|
};
|
|
64
63
|
|
|
65
64
|
exports.createDosaAndCerts = createDosaAndCerts;
|
|
@@ -85,9 +84,9 @@ const createByResourceType = async (client, defsManager, name, resourceType, res
|
|
|
85
84
|
});
|
|
86
85
|
|
|
87
86
|
if (!result.data) {
|
|
88
|
-
var _result$
|
|
87
|
+
var _result$error;
|
|
89
88
|
|
|
90
|
-
throw Error(`Cannot create a new ${resourceType.toLowerCase()}${(_result$
|
|
89
|
+
throw Error(`Cannot create a new ${resourceType.toLowerCase()}${(_result$error = result.error) !== null && _result$error !== void 0 && _result$error.length ? `: ${result.error[0].detail}` : '.'}`);
|
|
91
90
|
} else {
|
|
92
91
|
console.log(`New ${resourceType.toLowerCase()} "${result.data.name}" has been successfully created.`);
|
|
93
92
|
}
|
|
@@ -123,9 +122,9 @@ const createNewAgentResource = async (client, defsManager, envName, dataPlaneTyp
|
|
|
123
122
|
});
|
|
124
123
|
|
|
125
124
|
if (!result.data) {
|
|
126
|
-
var _result$
|
|
125
|
+
var _result$error2;
|
|
127
126
|
|
|
128
|
-
throw Error(`Cannot create a new agent ${(_result$
|
|
127
|
+
throw Error(`Cannot create a new agent ${(_result$error2 = result.error) !== null && _result$error2 !== void 0 && _result$error2.length ? `: ${result.error[0].detail}` : '.'}`);
|
|
129
128
|
} else {
|
|
130
129
|
console.log(`New agent of type "${defs[0].resource.name}" named "${result.data.name}" has been successfully created.`);
|
|
131
130
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.transactionLoggingMessages = exports.serviceAccountNameAlreadyExists = exports.selectServiceAccount = exports.selectIngestionProtocol = exports.secretAlreadyExists = exports.namespaceAlreadyExists = exports.k8sClusterMessages = exports.
|
|
6
|
+
exports.transactionLoggingMessages = exports.serviceAccountNameAlreadyExists = exports.selectServiceAccount = exports.selectIngestionProtocol = exports.secretAlreadyExists = exports.namespaceAlreadyExists = exports.k8sClusterMessages = exports.envMessages = exports.enterServiceAccountName = exports.enterPublicKeyPath = exports.enterPrivateKeyPath = exports.enterNamespaceName = exports.createNamespace = exports.createGatewayAgentCredsSecret = exports.createAmplifyAgentKeysSecret = exports.askToEnableTransactionLogging = exports.askServiceAccountName = exports.askPublicKeyPath = exports.askPublicAndPrivateKeysPath = exports.askPrivateKeyPath = exports.askNamespace = exports.askK8sClusterName = exports.askIngestionProtocol = exports.askForSecretName = exports.askEnvironmentName = exports.askDosaClientId = exports.askBundleType = exports.askAgentName = exports.agentMessages = void 0;
|
|
7
7
|
|
|
8
8
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
9
|
|
|
@@ -61,7 +61,7 @@ const secretAlreadyExists = 'Secret already exists. Please enter a new name.';
|
|
|
61
61
|
exports.secretAlreadyExists = secretAlreadyExists;
|
|
62
62
|
const enterNamespaceName = 'Enter a new namespace name';
|
|
63
63
|
exports.enterNamespaceName = enterNamespaceName;
|
|
64
|
-
const selectServiceAccount = 'Select a service account
|
|
64
|
+
const selectServiceAccount = 'Select a service account';
|
|
65
65
|
exports.selectServiceAccount = selectServiceAccount;
|
|
66
66
|
const enterServiceAccountName = 'Enter a new service account name';
|
|
67
67
|
exports.enterServiceAccountName = enterServiceAccountName;
|
|
@@ -74,10 +74,8 @@ exports.selectIngestionProtocol = selectIngestionProtocol;
|
|
|
74
74
|
const serviceAccountNameAlreadyExists = 'Service account already exists. Please enter a new name.';
|
|
75
75
|
exports.serviceAccountNameAlreadyExists = serviceAccountNameAlreadyExists;
|
|
76
76
|
|
|
77
|
-
const askServiceAccountName = async
|
|
78
|
-
console.warn(_chalk.default.yellow(`WARNING: Creating a new
|
|
79
|
-
|
|
80
|
-
const serviceAccountNames = serviceAccounts.map(a => a.name);
|
|
77
|
+
const askServiceAccountName = async serviceAccountNames => {
|
|
78
|
+
console.warn(_chalk.default.yellow(`WARNING: Creating a new service account will overwrite any existing "private_key.pem" and "public_key.pem" files in this directory`));
|
|
81
79
|
const name = await (0, _basicPrompts.askInput)({
|
|
82
80
|
msg: enterServiceAccountName,
|
|
83
81
|
defaultValue: cliNowString,
|
|
@@ -88,41 +86,38 @@ const askServiceAccountName = async serviceAccounts => {
|
|
|
88
86
|
|
|
89
87
|
exports.askServiceAccountName = askServiceAccountName;
|
|
90
88
|
|
|
91
|
-
const fetchServiceAccount = async client => {
|
|
92
|
-
const res = await client.getServiceAccounts();
|
|
93
|
-
if (!res.data) throw Error('Get service accounts error.');
|
|
94
|
-
return res.data;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
exports.fetchServiceAccount = fetchServiceAccount;
|
|
98
|
-
|
|
99
89
|
const askDosaClientId = async (client, showWarning = true) => {
|
|
100
|
-
|
|
101
|
-
const
|
|
90
|
+
// Fetch all existing service accounts.
|
|
91
|
+
const serviceAccounts = await client.getServiceAccounts();
|
|
92
|
+
const serviceAccountNames = serviceAccounts.map(nextAccount => nextAccount.name); // Ask user to select an existing service account or create a new one.
|
|
93
|
+
|
|
94
|
+
const selectedName = await (0, _basicPrompts.askList)({
|
|
102
95
|
msg: selectServiceAccount,
|
|
103
96
|
choices: [{
|
|
104
|
-
name: 'Create a new account',
|
|
97
|
+
name: 'Create a new service account',
|
|
105
98
|
value: 'CREATE_NEW'
|
|
106
|
-
}, new _inquirer.default.Separator(), ...
|
|
99
|
+
}, new _inquirer.default.Separator(), ...serviceAccountNames, new _inquirer.default.Separator()]
|
|
107
100
|
});
|
|
108
101
|
|
|
109
|
-
if (
|
|
110
|
-
|
|
102
|
+
if (selectedName === 'CREATE_NEW') {
|
|
103
|
+
// We're going to create a new service account. Ask for a unique name. (We'll create it later.)
|
|
104
|
+
const name = await askServiceAccountName(serviceAccountNames);
|
|
111
105
|
return {
|
|
112
106
|
clientId: null,
|
|
113
107
|
name,
|
|
114
108
|
isNew: true
|
|
115
109
|
};
|
|
116
110
|
} else {
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
// We're using an existing service account. Notify user to make its keys available to the agents.
|
|
119
112
|
if (showWarning) {
|
|
120
113
|
console.log(_chalk.default.yellow('Please make sure your "private_key.pem" and "public_key.pem" files for the selected service account are copied to the folder location of the agents.'));
|
|
121
|
-
}
|
|
114
|
+
} // Fetch selected service account's client ID and return info about it.
|
|
115
|
+
|
|
122
116
|
|
|
117
|
+
const selectedAccount = serviceAccounts.find(nextAccount => nextAccount.name === selectedName);
|
|
123
118
|
return {
|
|
124
|
-
clientId:
|
|
125
|
-
name:
|
|
119
|
+
clientId: selectedAccount === null || selectedAccount === void 0 ? void 0 : selectedAccount.client_id,
|
|
120
|
+
name: selectedName,
|
|
126
121
|
isNew: false
|
|
127
122
|
};
|
|
128
123
|
}
|
|
@@ -244,7 +239,7 @@ const askEnvironmentName = async (client, defsManager, isAxwayManaged = null) =>
|
|
|
244
239
|
choices: [{
|
|
245
240
|
name: envMessages.createNewEnvironment,
|
|
246
241
|
value: 'CREATE_NEW'
|
|
247
|
-
}, new _inquirer.default.Separator(), ...envs.map(e => e.name), new _inquirer.default.Separator()]
|
|
242
|
+
}, new _inquirer.default.Separator(), ...envs.map(e => e.name).sort((name1, name2) => name1.localeCompare(name2)), new _inquirer.default.Separator()]
|
|
248
243
|
});
|
|
249
244
|
|
|
250
245
|
if (answer === 'CREATE_NEW') {
|
|
@@ -332,11 +327,11 @@ const askAgentName = async (client, defsManager, agentType, scopeName) => {
|
|
|
332
327
|
};
|
|
333
328
|
/**
|
|
334
329
|
* @description Create a secret that contains a public & private key pair for agents to connect to central.
|
|
335
|
-
* If a user is creating a new
|
|
336
|
-
* If they are using an existing account, then the user will be prompted for the keys that created the
|
|
330
|
+
* If a user is creating a new service account, then the keys should be passed in as args.
|
|
331
|
+
* If they are using an existing account, then the user will be prompted for the keys that created the service account.
|
|
337
332
|
* @param namespace The namespace to create the secret in.
|
|
338
333
|
* @param secretName The name of the secret.
|
|
339
|
-
* @param publicKey The file path to the public key attached to the chosen
|
|
334
|
+
* @param publicKey The file path to the public key attached to the chosen service account.
|
|
340
335
|
* @param privateKey The file path to the corresponding private key.
|
|
341
336
|
*/
|
|
342
337
|
|
|
@@ -395,7 +390,7 @@ const askPrivateKeyPath = async () => await (0, _basicPrompts.askInput)({
|
|
|
395
390
|
exports.askPrivateKeyPath = askPrivateKeyPath;
|
|
396
391
|
|
|
397
392
|
const askPublicAndPrivateKeysPath = async () => {
|
|
398
|
-
console.log(_chalk.default.yellow('Please provide the same "private_key.pem" and "public_key.pem" that was used to create the selected
|
|
393
|
+
console.log(_chalk.default.yellow('Please provide the same "private_key.pem" and "public_key.pem" that was used to create the selected Service Account.'));
|
|
399
394
|
const publicKey = await askPublicKeyPath();
|
|
400
395
|
const privateKey = await askPrivateKeyPath();
|
|
401
396
|
return [publicKey, privateKey];
|
|
@@ -71,7 +71,7 @@ als:
|
|
|
71
71
|
# distinguishes events between apic deployments
|
|
72
72
|
apicDeployment: {{centralConfig.deployment}}
|
|
73
73
|
|
|
74
|
-
#
|
|
74
|
+
# service account client ID
|
|
75
75
|
clientID: {{centralConfig.dosaAccount.clientId}}
|
|
76
76
|
|
|
77
77
|
# condor ingestion endpoint
|
|
@@ -85,7 +85,7 @@ als:
|
|
|
85
85
|
per_api: true
|
|
86
86
|
reportAllErrors: {{traceabilityConfig.samplingReportAllErrors}}
|
|
87
87
|
|
|
88
|
-
# name of the secret containing the public & private keys used by the provided
|
|
88
|
+
# name of the secret containing the public & private keys used by the provided service account client ID
|
|
89
89
|
keysSecretName: {{istioAgentValues.keysSecretName}}
|
|
90
90
|
publishHeaders: true
|
|
91
91
|
|
|
@@ -93,7 +93,7 @@ als:
|
|
|
93
93
|
|
|
94
94
|
# discovers API Documentation
|
|
95
95
|
ada:
|
|
96
|
-
#
|
|
96
|
+
# service account client ID
|
|
97
97
|
clientID: {{centralConfig.dosaAccount.clientId}}
|
|
98
98
|
|
|
99
99
|
# name of the K8SCluster the agent is connected to
|
|
@@ -101,12 +101,12 @@ ada:
|
|
|
101
101
|
command: apis
|
|
102
102
|
enabled: {{istioAgentValues.discoveryEnabled}}
|
|
103
103
|
|
|
104
|
-
# name of the secret containing the public & private keys used by the provided
|
|
104
|
+
# name of the secret containing the public & private keys used by the provided service account client ID
|
|
105
105
|
keysSecretName: {{istioAgentValues.keysSecretName}}
|
|
106
106
|
|
|
107
107
|
# discovers running pods/services
|
|
108
108
|
rda:
|
|
109
|
-
#
|
|
109
|
+
# service account client ID
|
|
110
110
|
clientID: {{centralConfig.dosaAccount.clientId}}
|
|
111
111
|
|
|
112
112
|
# name of the connected K8SCluster
|
|
@@ -114,7 +114,7 @@ rda:
|
|
|
114
114
|
command: resources
|
|
115
115
|
enabled: {{istioAgentValues.discoveryEnabled}}
|
|
116
116
|
|
|
117
|
-
# name of the secret containing the public & private keys used by the provided
|
|
117
|
+
# name of the secret containing the public & private keys used by the provided service account client ID
|
|
118
118
|
keysSecretName: {{istioAgentValues.keysSecretName}}
|
|
119
119
|
|
|
120
120
|
# to enable deployment of demo list service with agent installation. Set to true to install the demo service
|
|
@@ -398,11 +398,11 @@ const createHybridOverride = overrides => {
|
|
|
398
398
|
exports.createHybridOverride = createHybridOverride;
|
|
399
399
|
|
|
400
400
|
const installPreprocess = async installConfig => {
|
|
401
|
-
// name of the
|
|
401
|
+
// name of the service account, and if it is new or not
|
|
402
402
|
if (!installConfig.centralConfig.ampcDosaInfo.isNew) {
|
|
403
403
|
[installConfig.centralConfig.dosaAccount.publicKey, installConfig.centralConfig.dosaAccount.privateKey] = await helpers.askPublicAndPrivateKeysPath();
|
|
404
404
|
} else {
|
|
405
|
-
console.log(_chalk.default.yellow(`The secret will be created with the same "private_key.pem" and "public_key.pem" that will be auto generated to create the
|
|
405
|
+
console.log(_chalk.default.yellow(`The secret will be created with the same "private_key.pem" and "public_key.pem" that will be auto generated to create the Service Account, following the completion of these prompts.`));
|
|
406
406
|
}
|
|
407
407
|
|
|
408
408
|
return installConfig;
|
|
@@ -424,7 +424,7 @@ const completeInstall = async (installConfig, apiServerClient, defsManager) => {
|
|
|
424
424
|
|
|
425
425
|
await helpers.createSecret(istioValues.istioAgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, async () => {
|
|
426
426
|
if (installConfig.centralConfig.ampcDosaInfo.isNew) {
|
|
427
|
-
console.log(_chalk.default.yellow(`The secret '${helpers.amplifyAgentsKeysSecret}' will be created with the same "private_key.pem" and "public_key.pem" that was auto generated to create the
|
|
427
|
+
console.log(_chalk.default.yellow(`The secret '${helpers.amplifyAgentsKeysSecret}' will be created with the same "private_key.pem" and "public_key.pem" that was auto generated to create the Service Account.`));
|
|
428
428
|
}
|
|
429
429
|
|
|
430
430
|
await helpers.createAmplifyAgentKeysSecret(istioValues.istioAgentValues.namespace.name, helpers.amplifyAgentsKeysSecret, 'publicKey', istioValues.centralConfig.dosaAccount.publicKey, 'privateKey', istioValues.centralConfig.dosaAccount.privateKey);
|
|
@@ -31,14 +31,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
31
31
|
// Complex prompts
|
|
32
32
|
//
|
|
33
33
|
const askTeamName = async client => {
|
|
34
|
-
var
|
|
34
|
+
var _teams$find;
|
|
35
|
+
|
|
36
|
+
const teams = await client.getTeams();
|
|
37
|
+
|
|
38
|
+
if (!(teams !== null && teams !== void 0 && teams.length)) {
|
|
39
|
+
throw new Error('Account has no teams!');
|
|
40
|
+
}
|
|
35
41
|
|
|
36
|
-
const res = await client.getTeams();
|
|
37
|
-
if (!res.data) throw Error('Get teams error.');
|
|
38
42
|
return (0, _basicPrompts.askList)({
|
|
39
43
|
msg: helpers.envMessages.selectTeam,
|
|
40
|
-
choices:
|
|
41
|
-
default: (
|
|
44
|
+
choices: teams.map(t => t.name).sort((name1, name2) => name1.localeCompare(name2)),
|
|
45
|
+
default: (_teams$find = teams.find(t => t.default)) === null || _teams$find === void 0 ? void 0 : _teams$find.name
|
|
42
46
|
});
|
|
43
47
|
};
|
|
44
48
|
|
|
@@ -82,12 +86,12 @@ const getTraceabilityConfig = async installConfig => {
|
|
|
82
86
|
|
|
83
87
|
exports.getTraceabilityConfig = getTraceabilityConfig;
|
|
84
88
|
|
|
85
|
-
const getCentralConfig = async (
|
|
89
|
+
const getCentralConfig = async (apiServerClient, platformClient, defsManager, apicDeployment, installConfig) => {
|
|
86
90
|
// initiate CentralAgentConfig
|
|
87
91
|
let centralConfig = installConfig.centralConfig;
|
|
88
92
|
await centralConfig.setBaseHost();
|
|
89
93
|
centralConfig.authUrl = `${_CoreConfigController.CoreConfigController.getAuthUrl()}/auth`;
|
|
90
|
-
centralConfig.region = String(
|
|
94
|
+
centralConfig.region = String(apiServerClient.region || (await (0, _utils.getConfig)())[_types.ConfigTypes.REGION] || _types.Regions.US).toUpperCase();
|
|
91
95
|
centralConfig.deployment = apicDeployment || getApicDeployment(centralConfig.region, _CoreConfigController.CoreConfigController.getEnv()); // apic config
|
|
92
96
|
|
|
93
97
|
console.log('\nCONNECTION TO AMPLIFY PLATFORM:');
|
|
@@ -104,7 +108,7 @@ const getCentralConfig = async (apiCentralClient, apiServerClient, platformClien
|
|
|
104
108
|
};
|
|
105
109
|
|
|
106
110
|
if (installConfig.bundleType !== _types.BundleType.TRACEABILITY_OFFLINE) {
|
|
107
|
-
centralConfig.ampcDosaInfo = await helpers.askDosaClientId(
|
|
111
|
+
centralConfig.ampcDosaInfo = await helpers.askDosaClientId(platformClient);
|
|
108
112
|
} // Get the DA Agent name
|
|
109
113
|
|
|
110
114
|
|
|
@@ -126,14 +130,14 @@ const getCentralConfig = async (apiCentralClient, apiServerClient, platformClien
|
|
|
126
130
|
|
|
127
131
|
exports.getCentralConfig = getCentralConfig;
|
|
128
132
|
|
|
129
|
-
const finalizeCentralInstall = async (
|
|
133
|
+
const finalizeCentralInstall = async (apiServerClient, platformClient, defsManager, installConfig) => {
|
|
130
134
|
/**
|
|
131
135
|
* Create agent resources
|
|
132
136
|
*/
|
|
133
137
|
console.log('Creating agent resources');
|
|
134
138
|
|
|
135
139
|
if (installConfig.centralConfig.ampcDosaInfo.isNew) {
|
|
136
|
-
installConfig.centralConfig.dosaAccount = await helpers.createDosaAndCerts(
|
|
140
|
+
installConfig.centralConfig.dosaAccount = await helpers.createDosaAndCerts(platformClient, installConfig.centralConfig.ampcDosaInfo.name);
|
|
137
141
|
} else {
|
|
138
142
|
installConfig.centralConfig.dosaAccount.clientId = installConfig.centralConfig.ampcDosaInfo.clientId;
|
|
139
143
|
}
|
|
@@ -48,7 +48,8 @@ class ApiServerClient {
|
|
|
48
48
|
baseUrl,
|
|
49
49
|
region,
|
|
50
50
|
account,
|
|
51
|
-
useCache
|
|
51
|
+
useCache,
|
|
52
|
+
team
|
|
52
53
|
} = {}) {
|
|
53
54
|
_defineProperty(this, "baseUrl", void 0);
|
|
54
55
|
|
|
@@ -58,11 +59,15 @@ class ApiServerClient {
|
|
|
58
59
|
|
|
59
60
|
_defineProperty(this, "account", void 0);
|
|
60
61
|
|
|
61
|
-
|
|
62
|
+
_defineProperty(this, "team", void 0);
|
|
63
|
+
|
|
64
|
+
log(`initializing client with params: baseUrl = ${baseUrl}, region = ${region}, account = ${account}, useCache = ${useCache}, team = ${team}`);
|
|
62
65
|
this.baseUrl = baseUrl;
|
|
63
66
|
this.account = account;
|
|
64
67
|
this.region = region;
|
|
65
68
|
this.useCache = useCache === undefined ? true : useCache; // using cache by default
|
|
69
|
+
|
|
70
|
+
this.team = team;
|
|
66
71
|
}
|
|
67
72
|
/**
|
|
68
73
|
* Build resource url based on its ResourceDefinition and passed scope def and name.
|
|
@@ -111,7 +116,8 @@ class ApiServerClient {
|
|
|
111
116
|
const service = await (0, _dataService.dataService)({
|
|
112
117
|
baseUrl: this.baseUrl,
|
|
113
118
|
region: this.region,
|
|
114
|
-
account: this.account
|
|
119
|
+
account: this.account,
|
|
120
|
+
team: this.team
|
|
115
121
|
});
|
|
116
122
|
const baseUrl = this.buildResourceBaseUrl({
|
|
117
123
|
resourceDef,
|
|
@@ -238,7 +244,8 @@ class ApiServerClient {
|
|
|
238
244
|
const service = await (0, _dataService.dataService)({
|
|
239
245
|
baseUrl: this.baseUrl,
|
|
240
246
|
region: this.region,
|
|
241
|
-
account: this.account
|
|
247
|
+
account: this.account,
|
|
248
|
+
team: this.team
|
|
242
249
|
});
|
|
243
250
|
const url = this.buildResourceBaseUrl({
|
|
244
251
|
resourceDef,
|
|
@@ -311,7 +318,8 @@ class ApiServerClient {
|
|
|
311
318
|
const service = await (0, _dataService.dataService)({
|
|
312
319
|
baseUrl: this.baseUrl,
|
|
313
320
|
region: this.region,
|
|
314
|
-
account: this.account
|
|
321
|
+
account: this.account,
|
|
322
|
+
team: this.team
|
|
315
323
|
});
|
|
316
324
|
const url = this.buildResourceBaseUrl({
|
|
317
325
|
resourceDef,
|
|
@@ -384,7 +392,8 @@ class ApiServerClient {
|
|
|
384
392
|
const service = await (0, _dataService.dataService)({
|
|
385
393
|
baseUrl: this.baseUrl,
|
|
386
394
|
region: this.region,
|
|
387
|
-
account: this.account
|
|
395
|
+
account: this.account,
|
|
396
|
+
team: this.team
|
|
388
397
|
});
|
|
389
398
|
const url = this.buildResourceBaseUrl({
|
|
390
399
|
resourceDef,
|
|
@@ -463,7 +472,8 @@ class ApiServerClient {
|
|
|
463
472
|
const service = await (0, _dataService.dataService)({
|
|
464
473
|
baseUrl: this.baseUrl,
|
|
465
474
|
region: this.region,
|
|
466
|
-
account: this.account
|
|
475
|
+
account: this.account,
|
|
476
|
+
team: this.team
|
|
467
477
|
});
|
|
468
478
|
const url = this.buildResourceBaseUrl({
|
|
469
479
|
resourceDef,
|
|
@@ -513,7 +523,8 @@ class ApiServerClient {
|
|
|
513
523
|
const service = await (0, _dataService.dataService)({
|
|
514
524
|
baseUrl: this.baseUrl,
|
|
515
525
|
region: this.region,
|
|
516
|
-
account: this.account
|
|
526
|
+
account: this.account,
|
|
527
|
+
team: this.team
|
|
517
528
|
});
|
|
518
529
|
const url = this.buildResourceBaseUrl({
|
|
519
530
|
resourceDef,
|
|
@@ -7,12 +7,8 @@ exports.CoreConfigController = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _amplifyCliUtils = require("@axway/amplify-cli-utils");
|
|
9
9
|
|
|
10
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
11
|
-
|
|
12
10
|
var _snooplogg = _interopRequireDefault(require("snooplogg"));
|
|
13
11
|
|
|
14
|
-
var _basicPrompts = require("./basicPrompts");
|
|
15
|
-
|
|
16
12
|
var _CliConfigManager = require("./CliConfigManager");
|
|
17
13
|
|
|
18
14
|
var _types = require("./types");
|
|
@@ -23,85 +19,83 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
23
19
|
|
|
24
20
|
const {
|
|
25
21
|
log
|
|
26
|
-
} = (0, _snooplogg.default)('central: CoreConfigController');
|
|
22
|
+
} = (0, _snooplogg.default)('central: CoreConfigController'); // TODO: https://jira.axway.com/browse/APIGOV-20520
|
|
23
|
+
// interface AuthenticationError extends Error {
|
|
24
|
+
// errors?: Array<object>;
|
|
25
|
+
// }
|
|
27
26
|
|
|
28
27
|
class CoreConfigController {
|
|
29
28
|
/**
|
|
30
29
|
* Get authentication info
|
|
31
|
-
* @param clientId client id to use
|
|
30
|
+
* @param {String} clientId client id to use
|
|
31
|
+
* @param {String} [team] The team name or guid to use, otherwise fallsback to the default from
|
|
32
|
+
* the Axway CLI config.
|
|
32
33
|
* @returns object containing token and orgId. For service accounts orgId is undefined.
|
|
33
34
|
* @throws 401 if no authenticated account found.
|
|
34
35
|
*/
|
|
35
36
|
async getAuthInfo({
|
|
36
37
|
account,
|
|
37
|
-
clientId
|
|
38
|
+
clientId,
|
|
39
|
+
team
|
|
38
40
|
} = {}) {
|
|
39
|
-
var
|
|
41
|
+
var _devOpsAccount$org;
|
|
40
42
|
|
|
41
|
-
const configCtrl = new _CliConfigManager.CliConfigManager();
|
|
43
|
+
const configCtrl = new _CliConfigManager.CliConfigManager();
|
|
44
|
+
const config = (0, _amplifyCliUtils.loadConfig)(); // note: remove this validator after couple of versions
|
|
42
45
|
|
|
43
46
|
configCtrl.validateSavedConfigKeys();
|
|
44
|
-
log(`getAuthInfo, received clientId = ${clientId}, account = ${account}`);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
log(`getAuthInfo, received clientId = ${clientId}, account = ${account}, team = ${team}`);
|
|
48
|
+
const baseUrl = configCtrl.get(_CliConfigManager.CliConfigKeys.BASE_URL); // environment defined by using central cli "base-url" or axway "env" configs if set,
|
|
49
|
+
// otherwise its undefined (equals to prod)
|
|
50
|
+
|
|
51
|
+
const environment = !baseUrl || baseUrl === _types.ProdBaseUrls.US || baseUrl === _types.ProdBaseUrls.EU ? config.get('env') : 'preprod';
|
|
52
|
+
log(`getAuthInfo, baseUrl = ${baseUrl}, environment = ${environment}`);
|
|
53
|
+
const {
|
|
54
|
+
sdk
|
|
55
|
+
} = (0, _amplifyCliUtils.initSDK)({
|
|
56
|
+
env: environment
|
|
57
|
+
}, config);
|
|
58
|
+
let {
|
|
59
|
+
devOpsAccount
|
|
60
|
+
} = CoreConfigController;
|
|
61
|
+
|
|
62
|
+
if (!devOpsAccount || account && devOpsAccount.name !== account) {
|
|
47
63
|
log(`getAuthInfo, no cached devOpsAccount found, or account name does not match`);
|
|
48
|
-
const baseUrl = configCtrl.get(_CliConfigManager.CliConfigKeys.BASE_URL); // environment defined by using central cli "base-url" or axway "env" configs if set,
|
|
49
|
-
// otherwise its undefined (equals to prod)
|
|
50
|
-
|
|
51
|
-
const environment = !baseUrl || baseUrl === _types.ProdBaseUrls.US || baseUrl === _types.ProdBaseUrls.EU ? this.getConfig('env') : 'preprod';
|
|
52
|
-
log(`getAuthInfo, baseUrl = ${baseUrl}, environment = ${environment}`);
|
|
53
|
-
const {
|
|
54
|
-
config,
|
|
55
|
-
sdk
|
|
56
|
-
} = (0, _amplifyCliUtils.initSDK)({
|
|
57
|
-
env: environment
|
|
58
|
-
});
|
|
59
64
|
|
|
60
65
|
if (clientId) {
|
|
61
66
|
// TODO: client-id is a legacy option used only by proxies promote/create, should be removed
|
|
62
67
|
// https://jira.axway.com/browse/APIGOV-20818
|
|
63
68
|
log(`getAuthInfo, clientId value passed, trying to find a matching account`);
|
|
64
69
|
const list = await sdk.auth.list({
|
|
65
|
-
|
|
70
|
+
validate: true
|
|
66
71
|
});
|
|
67
72
|
const matchingAccount = list.find(a => a.auth.clientId === clientId);
|
|
68
|
-
|
|
73
|
+
|
|
74
|
+
if (matchingAccount) {
|
|
75
|
+
devOpsAccount = await sdk.auth.find(matchingAccount.name);
|
|
76
|
+
}
|
|
69
77
|
} else if (account) {
|
|
70
78
|
// ELSE IF: account name passed - ignoring defaultAccount and other accounts
|
|
71
79
|
log(`getAuthInfo, account value passed, trying to find a matching account`);
|
|
72
|
-
|
|
80
|
+
devOpsAccount = await sdk.auth.find(account);
|
|
73
81
|
} else {
|
|
74
82
|
// ELSE: trying to get any authenticated account
|
|
75
83
|
log(`getAuthInfo, account value not passed, trying to find default/any match`);
|
|
76
84
|
const list = await sdk.auth.list({
|
|
77
|
-
|
|
85
|
+
validate: true
|
|
78
86
|
});
|
|
79
87
|
log(`getAuthInfo, authenticated accounts found: ${list.length}`);
|
|
80
88
|
|
|
81
89
|
if (list.length === 1) {
|
|
82
90
|
log(`getAuthInfo, using a single account found with name: ${list[0].name}`);
|
|
83
|
-
|
|
91
|
+
devOpsAccount = list[0];
|
|
84
92
|
} else if (list.length > 1) {
|
|
85
93
|
// try to find the default account
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (defaultAccount) {
|
|
89
|
-
log(`getAuthInfo, match found for defaultAccount, refreshing its token`);
|
|
90
|
-
CoreConfigController.devOpsAccount = await sdk.auth.find(defaultAccount.name);
|
|
91
|
-
} else {
|
|
92
|
-
log(`getAuthInfo, no match found for defaultAccount`);
|
|
93
|
-
const selectedName = await (0, _basicPrompts.askList)({
|
|
94
|
-
msg: 'Multiple authenticated accounts found, please select which one you want to use',
|
|
95
|
-
choices: Array.from(new Set(list.map(a => a.name)))
|
|
96
|
-
});
|
|
97
|
-
console.log((0, _chalk.default)`{grey If you always want to use this account by default, run:\naxway config set auth.defaultAccount ${selectedName}}\n`);
|
|
98
|
-
log(`getAuthInfo, refreshing token for selected account: ${selectedName}`);
|
|
99
|
-
CoreConfigController.devOpsAccount = await sdk.auth.find(selectedName);
|
|
100
|
-
}
|
|
94
|
+
devOpsAccount = list.find(a => a.name === config.get('auth.defaultAccount')) || list.find(a => a.default) || list[0];
|
|
101
95
|
}
|
|
102
96
|
}
|
|
103
97
|
|
|
104
|
-
if (!
|
|
98
|
+
if (!devOpsAccount) {
|
|
105
99
|
// TODO: piece of old logic here, move throwing out of the method?
|
|
106
100
|
// temporary commenting out the new functionality and reverting back to the old one, will be fixed with:
|
|
107
101
|
// https://jira.axway.com/browse/APIGOV-20520
|
|
@@ -119,43 +113,48 @@ class CoreConfigController {
|
|
|
119
113
|
}]
|
|
120
114
|
};
|
|
121
115
|
}
|
|
116
|
+
|
|
117
|
+
CoreConfigController.devOpsAccount = devOpsAccount;
|
|
122
118
|
}
|
|
123
119
|
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
log(`getAuthInfo, returning orgId = ${orgId}`);
|
|
130
|
-
log(`getAuthInfo, returning orgRegion = ${orgRegion}`);
|
|
131
|
-
return {
|
|
132
|
-
orgId,
|
|
133
|
-
orgRegion,
|
|
134
|
-
token
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get all or specific config value from core cli.
|
|
139
|
-
* @returns entire object config or a specific value if key passed.
|
|
140
|
-
*/
|
|
120
|
+
const result = {
|
|
121
|
+
orgId: devOpsAccount.isPlatform ? `${devOpsAccount.org.id}` : undefined,
|
|
122
|
+
orgRegion: (_devOpsAccount$org = devOpsAccount.org) === null || _devOpsAccount$org === void 0 ? void 0 : _devOpsAccount$org.region,
|
|
123
|
+
token: devOpsAccount.auth.tokens.access_token
|
|
124
|
+
}; // now that we have resolved the account, we can validate the team
|
|
141
125
|
|
|
126
|
+
if (team) {
|
|
127
|
+
var _devOpsAccount$org$te;
|
|
128
|
+
|
|
129
|
+
const teamObj = (_devOpsAccount$org$te = devOpsAccount.org.teams) === null || _devOpsAccount$org$te === void 0 ? void 0 : _devOpsAccount$org$te.find(t => {
|
|
130
|
+
return t.guid.toLowerCase() === team.toLowerCase() || t.name.toLowerCase() === team.toLowerCase();
|
|
131
|
+
});
|
|
142
132
|
|
|
143
|
-
|
|
144
|
-
|
|
133
|
+
if (!teamObj) {
|
|
134
|
+
throw new Error(`Unable to find team "${team}" in the "${devOpsAccount.org.name}" organization`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
result.teamGuid = teamObj.guid;
|
|
138
|
+
}
|
|
145
139
|
|
|
146
|
-
|
|
140
|
+
log(`getAuthInfo, returning account = ${devOpsAccount.name}`);
|
|
141
|
+
log(`getAuthInfo, returning token = ${result.token.substring(0, 5)}*****${result.token.substring(result.token.length - 5)}`);
|
|
142
|
+
log(`getAuthInfo, returning orgId = ${result.orgId}`);
|
|
143
|
+
log(`getAuthInfo, returning orgRegion = ${result.orgRegion}`);
|
|
144
|
+
log(`getAuthInfo, returning teamGuid = ${result.teamGuid}`);
|
|
145
|
+
return result;
|
|
147
146
|
}
|
|
148
147
|
|
|
149
148
|
static getEnv() {
|
|
150
|
-
var
|
|
149
|
+
var _CoreConfigController, _CoreConfigController2;
|
|
151
150
|
|
|
152
|
-
return ((
|
|
151
|
+
return ((_CoreConfigController = CoreConfigController.devOpsAccount) === null || _CoreConfigController === void 0 ? void 0 : (_CoreConfigController2 = _CoreConfigController.auth) === null || _CoreConfigController2 === void 0 ? void 0 : _CoreConfigController2.env) || _types.Platforms.prod;
|
|
153
152
|
}
|
|
154
153
|
|
|
155
154
|
static getAuthUrl() {
|
|
156
|
-
var
|
|
155
|
+
var _CoreConfigController3, _CoreConfigController4;
|
|
157
156
|
|
|
158
|
-
return ((
|
|
157
|
+
return ((_CoreConfigController3 = CoreConfigController.devOpsAccount) === null || _CoreConfigController3 === void 0 ? void 0 : (_CoreConfigController4 = _CoreConfigController3.auth) === null || _CoreConfigController4 === void 0 ? void 0 : _CoreConfigController4.baseUrl) || _types.AuthUrls.Prod;
|
|
159
158
|
}
|
|
160
159
|
|
|
161
160
|
}
|
|
@@ -3,21 +3,72 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.PlatformClient = void 0;
|
|
6
|
+
exports.PlatformTeamMemberRole = exports.PlatformServiceAccountRole = exports.PlatformClient = exports.PlatformAuthMethod = void 0;
|
|
7
7
|
|
|
8
8
|
var _snooplogg = _interopRequireDefault(require("snooplogg"));
|
|
9
9
|
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _types = require("./types");
|
|
10
|
+
var _amplifyCliUtils = require("@axway/amplify-cli-utils");
|
|
13
11
|
|
|
14
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
13
|
|
|
16
|
-
function
|
|
14
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
15
|
+
|
|
16
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
17
|
+
|
|
18
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
|
19
|
+
|
|
20
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
|
21
|
+
|
|
22
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
|
23
|
+
|
|
24
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
|
25
|
+
|
|
26
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
|
17
27
|
|
|
18
28
|
const {
|
|
19
29
|
log
|
|
20
30
|
} = (0, _snooplogg.default)('central:class.PlatformClient');
|
|
31
|
+
let PlatformAuthMethod;
|
|
32
|
+
exports.PlatformAuthMethod = PlatformAuthMethod;
|
|
33
|
+
|
|
34
|
+
(function (PlatformAuthMethod) {
|
|
35
|
+
PlatformAuthMethod["Certificate"] = "certificate";
|
|
36
|
+
PlatformAuthMethod["Secret"] = "secret";
|
|
37
|
+
})(PlatformAuthMethod || (exports.PlatformAuthMethod = PlatformAuthMethod = {}));
|
|
38
|
+
|
|
39
|
+
let PlatformServiceAccountRole;
|
|
40
|
+
exports.PlatformServiceAccountRole = PlatformServiceAccountRole;
|
|
41
|
+
|
|
42
|
+
(function (PlatformServiceAccountRole) {
|
|
43
|
+
PlatformServiceAccountRole["ApiCentralAdmin"] = "api_central_admin";
|
|
44
|
+
PlatformServiceAccountRole["FlowCentralAccessManager"] = "fc_access_manager";
|
|
45
|
+
PlatformServiceAccountRole["FlowCentralIntegration"] = "fc_integration";
|
|
46
|
+
PlatformServiceAccountRole["FlowCentralITAdmin"] = "fc_it_admin";
|
|
47
|
+
PlatformServiceAccountRole["FlowCentralProductsAdmin"] = "fc_products_admin";
|
|
48
|
+
PlatformServiceAccountRole["FlowCentralSpecOps"] = "fc_spec_ops";
|
|
49
|
+
PlatformServiceAccountRole["FlowCentralSubscriptionApprover"] = "fc_subscriptionapprover";
|
|
50
|
+
PlatformServiceAccountRole["FlowCentralSubscriptionSpecialist"] = "fc_subscriptionspecialist";
|
|
51
|
+
PlatformServiceAccountRole["FlowCentralTemplatePublisher"] = "fc_templatepublisher";
|
|
52
|
+
PlatformServiceAccountRole["FlowCentralCftAdmin"] = "fc_cft_admin";
|
|
53
|
+
})(PlatformServiceAccountRole || (exports.PlatformServiceAccountRole = PlatformServiceAccountRole = {}));
|
|
54
|
+
|
|
55
|
+
let PlatformTeamMemberRole;
|
|
56
|
+
exports.PlatformTeamMemberRole = PlatformTeamMemberRole;
|
|
57
|
+
|
|
58
|
+
(function (PlatformTeamMemberRole) {
|
|
59
|
+
PlatformTeamMemberRole["Admin"] = "administrator";
|
|
60
|
+
PlatformTeamMemberRole["Developer"] = "developer";
|
|
61
|
+
PlatformTeamMemberRole["Consumer"] = "consumer";
|
|
62
|
+
PlatformTeamMemberRole["CatalogManager"] = "catalog_manager";
|
|
63
|
+
})(PlatformTeamMemberRole || (exports.PlatformTeamMemberRole = PlatformTeamMemberRole = {}));
|
|
64
|
+
|
|
65
|
+
var _baseUrl = /*#__PURE__*/new WeakMap();
|
|
66
|
+
|
|
67
|
+
var _accountName = /*#__PURE__*/new WeakMap();
|
|
68
|
+
|
|
69
|
+
var _amplifyConfig = /*#__PURE__*/new WeakMap();
|
|
70
|
+
|
|
71
|
+
var _amplifySdk = /*#__PURE__*/new WeakMap();
|
|
21
72
|
|
|
22
73
|
class PlatformClient {
|
|
23
74
|
constructor({
|
|
@@ -25,41 +76,99 @@ class PlatformClient {
|
|
|
25
76
|
region,
|
|
26
77
|
account
|
|
27
78
|
} = {}) {
|
|
28
|
-
|
|
79
|
+
_classPrivateFieldInitSpec(this, _baseUrl, {
|
|
80
|
+
writable: true,
|
|
81
|
+
value: void 0
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
_classPrivateFieldInitSpec(this, _accountName, {
|
|
85
|
+
writable: true,
|
|
86
|
+
value: void 0
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
_classPrivateFieldInitSpec(this, _amplifyConfig, {
|
|
90
|
+
writable: true,
|
|
91
|
+
value: void 0
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
_classPrivateFieldInitSpec(this, _amplifySdk, {
|
|
95
|
+
writable: true,
|
|
96
|
+
value: void 0
|
|
97
|
+
});
|
|
29
98
|
|
|
30
|
-
|
|
99
|
+
log(`initializing client with params: baseUrl = ${baseUrl}, region = ${region}, account = ${account}`);
|
|
31
100
|
|
|
32
|
-
|
|
101
|
+
_classPrivateFieldSet(this, _baseUrl, baseUrl);
|
|
33
102
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
103
|
+
_classPrivateFieldSet(this, _accountName, account);
|
|
104
|
+
|
|
105
|
+
const initResult = (0, _amplifyCliUtils.initSDK)({
|
|
106
|
+
baseUrl: _classPrivateFieldGet(this, _baseUrl),
|
|
107
|
+
username: _classPrivateFieldGet(this, _accountName)
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
_classPrivateFieldSet(this, _amplifyConfig, initResult.config);
|
|
111
|
+
|
|
112
|
+
_classPrivateFieldSet(this, _amplifySdk, initResult.sdk);
|
|
38
113
|
}
|
|
39
114
|
|
|
40
|
-
async
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
result.data = response;
|
|
56
|
-
} catch (e) {
|
|
57
|
-
if (e.errors && Array.isArray(e.errors)) {
|
|
58
|
-
result.error = e.errors;
|
|
59
|
-
} else throw e;
|
|
115
|
+
async getAccountInfo() {
|
|
116
|
+
var _classPrivateFieldGet2;
|
|
117
|
+
|
|
118
|
+
// Get default teams from config.
|
|
119
|
+
const defaultTeams = _classPrivateFieldGet(this, _amplifyConfig).get(`${(0, _amplifyCliUtils.getAuthConfigEnvSpecifier)((_classPrivateFieldGet2 = _classPrivateFieldGet(this, _amplifySdk).env) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.name)}.defaultTeam`); // Fetch specified account or default account currently logged in.
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
let accountInfo;
|
|
123
|
+
|
|
124
|
+
if (_classPrivateFieldGet(this, _accountName)) {
|
|
125
|
+
accountInfo = await _classPrivateFieldGet(this, _amplifySdk).auth.find(_classPrivateFieldGet(this, _accountName), defaultTeams);
|
|
126
|
+
|
|
127
|
+
if (!accountInfo) {
|
|
128
|
+
throw new Error(`Account "${_classPrivateFieldGet(this, _accountName)}" not found`);
|
|
129
|
+
}
|
|
60
130
|
}
|
|
61
131
|
|
|
62
|
-
|
|
132
|
+
if (!accountInfo) {
|
|
133
|
+
const accountArray = await _classPrivateFieldGet(this, _amplifySdk).auth.list({
|
|
134
|
+
defaultTeams,
|
|
135
|
+
validate: true
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
if (accountArray) {
|
|
139
|
+
accountInfo = accountArray.find(nextAccount => nextAccount.default) || accountArray[0];
|
|
140
|
+
}
|
|
141
|
+
} // Make sure "subscriptions" is defined since Amplify SDK requires it. (Will throw error if missing.)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
if (accountInfo && accountInfo.org && !accountInfo.org.subscriptions) {
|
|
145
|
+
accountInfo.org.subscriptions = [];
|
|
146
|
+
} // Return account info if found.
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
return accountInfo;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async createServiceAccount(options) {
|
|
153
|
+
const accountInfo = await this.getAccountInfo();
|
|
154
|
+
const result = await _classPrivateFieldGet(this, _amplifySdk).client.create(accountInfo, accountInfo === null || accountInfo === void 0 ? void 0 : accountInfo.org, options);
|
|
155
|
+
return result.client;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async getServiceAccounts() {
|
|
159
|
+
const result = await _classPrivateFieldGet(this, _amplifySdk).client.list(await this.getAccountInfo());
|
|
160
|
+
return result.clients || [];
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async getTeams() {
|
|
164
|
+
log(`getTeams`);
|
|
165
|
+
const account = await this.getAccountInfo();
|
|
166
|
+
const {
|
|
167
|
+
teams
|
|
168
|
+
} = await _classPrivateFieldGet(this, _amplifySdk).team.list(account);
|
|
169
|
+
return teams.map(team => ({ ...team,
|
|
170
|
+
default: team.guid === account.team.guid
|
|
171
|
+
}));
|
|
63
172
|
}
|
|
64
173
|
|
|
65
174
|
}
|
|
@@ -84,22 +84,63 @@ const handleResponse = response => {
|
|
|
84
84
|
return /application\/json/.test(response.headers['content-type']) ? JSON.parse(response.body) : response.body;
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
+
const updateRequestError = err => {
|
|
88
|
+
var _err$response;
|
|
89
|
+
|
|
90
|
+
// Do not change given object if it's a timeout error.
|
|
91
|
+
if (err instanceof _got.TimeoutError) {
|
|
92
|
+
return;
|
|
93
|
+
} // If we have a JSON HTTP body, then turn it into a dictionary.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
let jsonBody = null;
|
|
97
|
+
|
|
98
|
+
if (err instanceof _got.RequestError && (_err$response = err.response) !== null && _err$response !== void 0 && _err$response.body) {
|
|
99
|
+
jsonBody = handleResponse(err.response);
|
|
100
|
+
} // Turn given Error object into an "ApiServerError" or "ApiServerErrorResponse" object.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
if (!jsonBody) {
|
|
104
|
+
// No response message received. Could be any kind of exception error.
|
|
105
|
+
// Turn given error into an "ApiServerErrorResponse" object.
|
|
106
|
+
err.errors = [err];
|
|
107
|
+
} else if (typeof jsonBody.code === 'number' && typeof jsonBody.description === 'string') {
|
|
108
|
+
// We received a "Platform" server error response.
|
|
109
|
+
err.status = jsonBody.code;
|
|
110
|
+
err.detail = jsonBody.description;
|
|
111
|
+
} else {
|
|
112
|
+
// Assume we received a "Central" server error response which should already conform to "ApiServerError".
|
|
113
|
+
Object.assign(err, jsonBody);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Creates an object with various functions communicating with the API Server.
|
|
118
|
+
* @param {String} clientId Client id to use.
|
|
119
|
+
* @param {String} [team] The preferred team to use. This value overrides the default from the Axway CLI config.
|
|
120
|
+
* @param {String} [region] The preferred region to use.
|
|
121
|
+
* @returns Object containing data retrieval functions.
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
|
|
87
125
|
const dataService = async ({
|
|
88
126
|
account,
|
|
89
127
|
baseUrl,
|
|
90
128
|
basePath = _types.BasePaths.ApiServer,
|
|
91
129
|
clientId,
|
|
92
|
-
region
|
|
130
|
+
region,
|
|
131
|
+
team
|
|
93
132
|
}) => {
|
|
94
133
|
// see above
|
|
95
134
|
// await versionCheckWarning();
|
|
96
135
|
const {
|
|
97
136
|
orgId,
|
|
98
137
|
orgRegion,
|
|
138
|
+
teamGuid,
|
|
99
139
|
token
|
|
100
140
|
} = await new _CoreConfigController.CoreConfigController().getAuthInfo({
|
|
101
141
|
account,
|
|
102
|
-
clientId
|
|
142
|
+
clientId,
|
|
143
|
+
team
|
|
103
144
|
});
|
|
104
145
|
const url = await getBaseUrl(baseUrl, basePath, region, orgRegion);
|
|
105
146
|
const defaultHeaders = getDefaultHeaders({
|
|
@@ -110,6 +151,13 @@ const dataService = async ({
|
|
|
110
151
|
|
|
111
152
|
const fetch = async (method, url, params = {}) => {
|
|
112
153
|
try {
|
|
154
|
+
// add the team guid
|
|
155
|
+
if (teamGuid) {
|
|
156
|
+
const parsed = new _url.URL(url);
|
|
157
|
+
parsed.searchParams.set('query', `owner.id==${teamGuid}`);
|
|
158
|
+
url = parsed.toString();
|
|
159
|
+
}
|
|
160
|
+
|
|
113
161
|
const response = await got[method](url, {
|
|
114
162
|
followRedirect: false,
|
|
115
163
|
retry: 0,
|
|
@@ -124,14 +172,7 @@ const dataService = async ({
|
|
|
124
172
|
|
|
125
173
|
return response;
|
|
126
174
|
} catch (err) {
|
|
127
|
-
|
|
128
|
-
var _err$response;
|
|
129
|
-
|
|
130
|
-
Object.assign(err, ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.body) && handleResponse(err.response) || {
|
|
131
|
-
errors: [err]
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
|
|
175
|
+
updateRequestError(err);
|
|
135
176
|
throw err;
|
|
136
177
|
}
|
|
137
178
|
};
|
|
@@ -250,14 +291,7 @@ const dataService = async ({
|
|
|
250
291
|
stream.on('error', reject);
|
|
251
292
|
});
|
|
252
293
|
} catch (err) {
|
|
253
|
-
|
|
254
|
-
var _err$response2;
|
|
255
|
-
|
|
256
|
-
Object.assign(err, ((_err$response2 = err.response) === null || _err$response2 === void 0 ? void 0 : _err$response2.body) && handleResponse(err.response) || {
|
|
257
|
-
errors: [err]
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
|
|
294
|
+
updateRequestError(err);
|
|
261
295
|
throw err;
|
|
262
296
|
}
|
|
263
297
|
}
|
package/dist/common/types.js
CHANGED
|
@@ -149,9 +149,9 @@ const APICDeployments = {
|
|
|
149
149
|
};
|
|
150
150
|
exports.APICDeployments = APICDeployments;
|
|
151
151
|
const commonCmdArgsDescription = {
|
|
152
|
-
'--account [value]':
|
|
153
|
-
'--region [value]':
|
|
154
|
-
'--no-cache':
|
|
152
|
+
'--account [value]': 'Override your default account config',
|
|
153
|
+
'--region [value]': 'Override your region config',
|
|
154
|
+
'--no-cache': 'Do not use cache when communicating with the server',
|
|
155
155
|
'--base-url [value]': {
|
|
156
156
|
hidden: true
|
|
157
157
|
},
|
|
@@ -726,5 +726,7 @@ class IstioInstallValues {
|
|
|
726
726
|
}
|
|
727
727
|
|
|
728
728
|
}
|
|
729
|
+
/** Provides information for a platform team. */
|
|
730
|
+
|
|
729
731
|
|
|
730
732
|
exports.IstioInstallValues = IstioInstallValues;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axway/axway-central-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Manage APIs, services and publish to the Unified Catalog",
|
|
5
5
|
"homepage": "https://platform.axway.com",
|
|
6
6
|
"author": {
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"name": "central"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@axway/amplify-cli-utils": "^5.0.
|
|
44
|
+
"@axway/amplify-cli-utils": "^5.0.3",
|
|
45
45
|
"chalk": "^4.1.2",
|
|
46
|
-
"cli-kit": "^1.
|
|
46
|
+
"cli-kit": "^1.15.0",
|
|
47
47
|
"dayjs": "^1.10.7",
|
|
48
48
|
"easy-table": "^1.2.0",
|
|
49
49
|
"extract-zip": "^2.0.1",
|
|
@@ -60,42 +60,42 @@
|
|
|
60
60
|
"tmp": "^0.2.1"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@babel/cli": "^7.
|
|
64
|
-
"@babel/core": "^7.
|
|
65
|
-
"@babel/plugin-proposal-class-properties": "^7.
|
|
66
|
-
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.
|
|
67
|
-
"@babel/plugin-proposal-optional-chaining": "^7.
|
|
68
|
-
"@babel/preset-env": "^7.
|
|
69
|
-
"@babel/preset-typescript": "^7.
|
|
63
|
+
"@babel/cli": "^7.16.0",
|
|
64
|
+
"@babel/core": "^7.16.0",
|
|
65
|
+
"@babel/plugin-proposal-class-properties": "^7.16.0",
|
|
66
|
+
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
|
|
67
|
+
"@babel/plugin-proposal-optional-chaining": "^7.16.0",
|
|
68
|
+
"@babel/preset-env": "^7.16.4",
|
|
69
|
+
"@babel/preset-typescript": "^7.16.0",
|
|
70
70
|
"@types/chai": "^4.2.22",
|
|
71
71
|
"@types/chai-as-promised": "^7.1.4",
|
|
72
72
|
"@types/easy-table": "^0.0.33",
|
|
73
73
|
"@types/form-data": "^2.5.0",
|
|
74
74
|
"@types/fs-extra": "^9.0.13",
|
|
75
75
|
"@types/inquirer": "^8.1.3",
|
|
76
|
-
"@types/js-yaml": "^4.0.
|
|
77
|
-
"@types/lodash": "^4.14.
|
|
76
|
+
"@types/js-yaml": "^4.0.5",
|
|
77
|
+
"@types/lodash": "^4.14.177",
|
|
78
78
|
"@types/mocha": "^9.0.0",
|
|
79
|
-
"@types/node": "^16.11.
|
|
79
|
+
"@types/node": "^16.11.10",
|
|
80
80
|
"@types/rx": "^4.1.2",
|
|
81
81
|
"@types/semver": "^7.3.9",
|
|
82
|
-
"@types/sinon": "^10.0.
|
|
82
|
+
"@types/sinon": "^10.0.6",
|
|
83
83
|
"@types/tmp": "^0.2.2",
|
|
84
84
|
"@types/update-notifier": "^5.1.0",
|
|
85
|
-
"@types/uuid": "^8.3.
|
|
85
|
+
"@types/uuid": "^8.3.3",
|
|
86
86
|
"babel-plugin-lodash": "^3.3.4",
|
|
87
87
|
"chai": "^4.3.4",
|
|
88
88
|
"chai-as-promised": "^7.1.1",
|
|
89
|
-
"core-js": "^3.19.
|
|
89
|
+
"core-js": "^3.19.1",
|
|
90
90
|
"mocha": "^9.1.3",
|
|
91
|
-
"nock": "^13.1
|
|
92
|
-
"nodemon": "^2.0.
|
|
91
|
+
"nock": "^13.2.1",
|
|
92
|
+
"nodemon": "^2.0.15",
|
|
93
93
|
"nyc": "^15.1.0",
|
|
94
94
|
"prettier": "^2.4.1",
|
|
95
95
|
"sinon": "^11.1.2",
|
|
96
|
-
"source-map-support": "^0.5.
|
|
96
|
+
"source-map-support": "^0.5.21",
|
|
97
97
|
"ts-mocha": "^8.0.0",
|
|
98
|
-
"typescript": "^4.
|
|
98
|
+
"typescript": "^4.5.2"
|
|
99
99
|
},
|
|
100
100
|
"jest": {
|
|
101
101
|
"verbose": true,
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.ApiCentralClient = void 0;
|
|
7
|
-
|
|
8
|
-
var _snooplogg = _interopRequireDefault(require("snooplogg"));
|
|
9
|
-
|
|
10
|
-
var _dataService = require("./dataService");
|
|
11
|
-
|
|
12
|
-
var _types = require("./types");
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
-
|
|
18
|
-
const {
|
|
19
|
-
log
|
|
20
|
-
} = (0, _snooplogg.default)('central:class.ApiCentralClient');
|
|
21
|
-
|
|
22
|
-
class ApiCentralClient {
|
|
23
|
-
constructor({
|
|
24
|
-
baseUrl,
|
|
25
|
-
region,
|
|
26
|
-
account
|
|
27
|
-
}) {
|
|
28
|
-
_defineProperty(this, "baseUrl", void 0);
|
|
29
|
-
|
|
30
|
-
_defineProperty(this, "region", void 0);
|
|
31
|
-
|
|
32
|
-
_defineProperty(this, "account", void 0);
|
|
33
|
-
|
|
34
|
-
log(`initializing client with params: baseUrl = ${baseUrl}, region = ${region}, account = ${account}`);
|
|
35
|
-
this.baseUrl = baseUrl;
|
|
36
|
-
this.account = account;
|
|
37
|
-
this.region = region;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Create DOSA account.
|
|
41
|
-
* @param accountName name of dosa account (can be non-unique)
|
|
42
|
-
* @param publicKey public .pem file content
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
async createDOSAAccount(accountName, publicKey) {
|
|
47
|
-
log(`createDOSAAccount`);
|
|
48
|
-
const result = {
|
|
49
|
-
data: null,
|
|
50
|
-
error: null
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
const service = await (0, _dataService.dataService)({
|
|
55
|
-
baseUrl: this.baseUrl,
|
|
56
|
-
basePath: _types.BasePaths.ApiCentral,
|
|
57
|
-
account: this.account,
|
|
58
|
-
region: this.region
|
|
59
|
-
});
|
|
60
|
-
const payload = {
|
|
61
|
-
generateKeypair: false,
|
|
62
|
-
pemEncodedPublicKey: publicKey.replace(/(\r\n)/gm, '\n'),
|
|
63
|
-
serviceAccountName: accountName,
|
|
64
|
-
serviceAccountType: 'DOSA'
|
|
65
|
-
};
|
|
66
|
-
const response = await service.post('/serviceAccounts', payload);
|
|
67
|
-
result.data = response;
|
|
68
|
-
} catch (e) {
|
|
69
|
-
log('createDOSAAccount, error: ', e); // expecting only a valid ApiServer error response here
|
|
70
|
-
// re-throw if something different, so it should be handled by command's catch block.
|
|
71
|
-
|
|
72
|
-
if (e.errors && Array.isArray(e.errors)) {
|
|
73
|
-
result.error = e.errors;
|
|
74
|
-
} else throw e;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* List service accounts.
|
|
81
|
-
*/
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
async getServiceAccounts() {
|
|
85
|
-
log(`getServiceAccounts`);
|
|
86
|
-
const result = {
|
|
87
|
-
data: null,
|
|
88
|
-
error: null
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
try {
|
|
92
|
-
const service = await (0, _dataService.dataService)({
|
|
93
|
-
baseUrl: this.baseUrl,
|
|
94
|
-
basePath: _types.BasePaths.ApiCentral,
|
|
95
|
-
account: this.account,
|
|
96
|
-
region: this.region
|
|
97
|
-
});
|
|
98
|
-
const response = await service.getWithPagination(`/serviceAccounts`, 'type==SA&sort=modifyTime%2CDESC');
|
|
99
|
-
result.data = response;
|
|
100
|
-
} catch (e) {
|
|
101
|
-
log('getServiceAccounts, error: ', e); // expecting only a valid ApiServer error response here
|
|
102
|
-
// re-throw if something different, so it should be handled by command's catch block.
|
|
103
|
-
|
|
104
|
-
if (e.errors && Array.isArray(e.errors)) {
|
|
105
|
-
result.error = e.errors;
|
|
106
|
-
} else throw e;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
exports.ApiCentralClient = ApiCentralClient;
|