@axway/axway-central-cli 2.5.2 → 2.5.3
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/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 +6 -6
- package/dist/common/PlatformClient.js +132 -11
- package/dist/common/dataService.js +32 -16
- package/package.json +1 -1
- package/dist/common/ApiCentralClient.js +0 -114
|
@@ -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);
|
|
@@ -37,7 +37,7 @@ const askTeamName = async client => {
|
|
|
37
37
|
if (!res.data) throw Error('Get teams error.');
|
|
38
38
|
return (0, _basicPrompts.askList)({
|
|
39
39
|
msg: helpers.envMessages.selectTeam,
|
|
40
|
-
choices: res.data.result.map(t => t.name),
|
|
40
|
+
choices: res.data.result.map(t => t.name).sort((name1, name2) => name1.localeCompare(name2)),
|
|
41
41
|
default: (_res$data$result$find = res.data.result.find(t => t.default)) === null || _res$data$result$find === void 0 ? void 0 : _res$data$result$find.name
|
|
42
42
|
});
|
|
43
43
|
};
|
|
@@ -82,12 +82,12 @@ const getTraceabilityConfig = async installConfig => {
|
|
|
82
82
|
|
|
83
83
|
exports.getTraceabilityConfig = getTraceabilityConfig;
|
|
84
84
|
|
|
85
|
-
const getCentralConfig = async (
|
|
85
|
+
const getCentralConfig = async (apiServerClient, platformClient, defsManager, apicDeployment, installConfig) => {
|
|
86
86
|
// initiate CentralAgentConfig
|
|
87
87
|
let centralConfig = installConfig.centralConfig;
|
|
88
88
|
await centralConfig.setBaseHost();
|
|
89
89
|
centralConfig.authUrl = `${_CoreConfigController.CoreConfigController.getAuthUrl()}/auth`;
|
|
90
|
-
centralConfig.region = String(
|
|
90
|
+
centralConfig.region = String(apiServerClient.region || (await (0, _utils.getConfig)())[_types.ConfigTypes.REGION] || _types.Regions.US).toUpperCase();
|
|
91
91
|
centralConfig.deployment = apicDeployment || getApicDeployment(centralConfig.region, _CoreConfigController.CoreConfigController.getEnv()); // apic config
|
|
92
92
|
|
|
93
93
|
console.log('\nCONNECTION TO AMPLIFY PLATFORM:');
|
|
@@ -104,7 +104,7 @@ const getCentralConfig = async (apiCentralClient, apiServerClient, platformClien
|
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
if (installConfig.bundleType !== _types.BundleType.TRACEABILITY_OFFLINE) {
|
|
107
|
-
centralConfig.ampcDosaInfo = await helpers.askDosaClientId(
|
|
107
|
+
centralConfig.ampcDosaInfo = await helpers.askDosaClientId(platformClient);
|
|
108
108
|
} // Get the DA Agent name
|
|
109
109
|
|
|
110
110
|
|
|
@@ -126,14 +126,14 @@ const getCentralConfig = async (apiCentralClient, apiServerClient, platformClien
|
|
|
126
126
|
|
|
127
127
|
exports.getCentralConfig = getCentralConfig;
|
|
128
128
|
|
|
129
|
-
const finalizeCentralInstall = async (
|
|
129
|
+
const finalizeCentralInstall = async (apiServerClient, platformClient, defsManager, installConfig) => {
|
|
130
130
|
/**
|
|
131
131
|
* Create agent resources
|
|
132
132
|
*/
|
|
133
133
|
console.log('Creating agent resources');
|
|
134
134
|
|
|
135
135
|
if (installConfig.centralConfig.ampcDosaInfo.isNew) {
|
|
136
|
-
installConfig.centralConfig.dosaAccount = await helpers.createDosaAndCerts(
|
|
136
|
+
installConfig.centralConfig.dosaAccount = await helpers.createDosaAndCerts(platformClient, installConfig.centralConfig.ampcDosaInfo.name);
|
|
137
137
|
} else {
|
|
138
138
|
installConfig.centralConfig.dosaAccount.clientId = installConfig.centralConfig.ampcDosaInfo.clientId;
|
|
139
139
|
}
|
|
@@ -3,21 +3,76 @@
|
|
|
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 _amplifyCliUtils = require("@axway/amplify-cli-utils");
|
|
11
|
+
|
|
10
12
|
var _dataService = require("./dataService");
|
|
11
13
|
|
|
12
14
|
var _types = require("./types");
|
|
13
15
|
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
|
|
16
|
-
function
|
|
18
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
19
|
+
|
|
20
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
21
|
+
|
|
22
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
|
23
|
+
|
|
24
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
|
25
|
+
|
|
26
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
|
27
|
+
|
|
28
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
|
29
|
+
|
|
30
|
+
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
31
|
|
|
18
32
|
const {
|
|
19
33
|
log
|
|
20
34
|
} = (0, _snooplogg.default)('central:class.PlatformClient');
|
|
35
|
+
let PlatformAuthMethod;
|
|
36
|
+
exports.PlatformAuthMethod = PlatformAuthMethod;
|
|
37
|
+
|
|
38
|
+
(function (PlatformAuthMethod) {
|
|
39
|
+
PlatformAuthMethod["Certificate"] = "certificate";
|
|
40
|
+
PlatformAuthMethod["Secret"] = "secret";
|
|
41
|
+
})(PlatformAuthMethod || (exports.PlatformAuthMethod = PlatformAuthMethod = {}));
|
|
42
|
+
|
|
43
|
+
let PlatformServiceAccountRole;
|
|
44
|
+
exports.PlatformServiceAccountRole = PlatformServiceAccountRole;
|
|
45
|
+
|
|
46
|
+
(function (PlatformServiceAccountRole) {
|
|
47
|
+
PlatformServiceAccountRole["ApiCentralAdmin"] = "api_central_admin";
|
|
48
|
+
PlatformServiceAccountRole["FlowCentralAccessManager"] = "fc_access_manager";
|
|
49
|
+
PlatformServiceAccountRole["FlowCentralIntegration"] = "fc_integration";
|
|
50
|
+
PlatformServiceAccountRole["FlowCentralITAdmin"] = "fc_it_admin";
|
|
51
|
+
PlatformServiceAccountRole["FlowCentralProductsAdmin"] = "fc_products_admin";
|
|
52
|
+
PlatformServiceAccountRole["FlowCentralSpecOps"] = "fc_spec_ops";
|
|
53
|
+
PlatformServiceAccountRole["FlowCentralSubscriptionApprover"] = "fc_subscriptionapprover";
|
|
54
|
+
PlatformServiceAccountRole["FlowCentralSubscriptionSpecialist"] = "fc_subscriptionspecialist";
|
|
55
|
+
PlatformServiceAccountRole["FlowCentralTemplatePublisher"] = "fc_templatepublisher";
|
|
56
|
+
PlatformServiceAccountRole["FlowCentralCftAdmin"] = "fc_cft_admin";
|
|
57
|
+
})(PlatformServiceAccountRole || (exports.PlatformServiceAccountRole = PlatformServiceAccountRole = {}));
|
|
58
|
+
|
|
59
|
+
let PlatformTeamMemberRole;
|
|
60
|
+
exports.PlatformTeamMemberRole = PlatformTeamMemberRole;
|
|
61
|
+
|
|
62
|
+
(function (PlatformTeamMemberRole) {
|
|
63
|
+
PlatformTeamMemberRole["Admin"] = "administrator";
|
|
64
|
+
PlatformTeamMemberRole["Developer"] = "developer";
|
|
65
|
+
PlatformTeamMemberRole["Consumer"] = "consumer";
|
|
66
|
+
PlatformTeamMemberRole["CatalogManager"] = "catalog_manager";
|
|
67
|
+
})(PlatformTeamMemberRole || (exports.PlatformTeamMemberRole = PlatformTeamMemberRole = {}));
|
|
68
|
+
|
|
69
|
+
var _baseUrl = /*#__PURE__*/new WeakMap();
|
|
70
|
+
|
|
71
|
+
var _accountName = /*#__PURE__*/new WeakMap();
|
|
72
|
+
|
|
73
|
+
var _amplifyConfig = /*#__PURE__*/new WeakMap();
|
|
74
|
+
|
|
75
|
+
var _amplifySdk = /*#__PURE__*/new WeakMap();
|
|
21
76
|
|
|
22
77
|
class PlatformClient {
|
|
23
78
|
constructor({
|
|
@@ -25,16 +80,82 @@ class PlatformClient {
|
|
|
25
80
|
region,
|
|
26
81
|
account
|
|
27
82
|
} = {}) {
|
|
28
|
-
|
|
83
|
+
_classPrivateFieldInitSpec(this, _baseUrl, {
|
|
84
|
+
writable: true,
|
|
85
|
+
value: void 0
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
_classPrivateFieldInitSpec(this, _accountName, {
|
|
89
|
+
writable: true,
|
|
90
|
+
value: void 0
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
_classPrivateFieldInitSpec(this, _amplifyConfig, {
|
|
94
|
+
writable: true,
|
|
95
|
+
value: void 0
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
_classPrivateFieldInitSpec(this, _amplifySdk, {
|
|
99
|
+
writable: true,
|
|
100
|
+
value: void 0
|
|
101
|
+
});
|
|
29
102
|
|
|
30
|
-
|
|
103
|
+
log(`initializing client with params: baseUrl = ${baseUrl}, region = ${region}, account = ${account}`);
|
|
31
104
|
|
|
32
|
-
|
|
105
|
+
_classPrivateFieldSet(this, _baseUrl, baseUrl);
|
|
33
106
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
107
|
+
_classPrivateFieldSet(this, _accountName, account);
|
|
108
|
+
|
|
109
|
+
const initResult = (0, _amplifyCliUtils.initSDK)({
|
|
110
|
+
baseUrl: _classPrivateFieldGet(this, _baseUrl),
|
|
111
|
+
username: _classPrivateFieldGet(this, _accountName)
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
_classPrivateFieldSet(this, _amplifyConfig, initResult.config);
|
|
115
|
+
|
|
116
|
+
_classPrivateFieldSet(this, _amplifySdk, initResult.sdk);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async getAccountInfo() {
|
|
120
|
+
var _classPrivateFieldGet2;
|
|
121
|
+
|
|
122
|
+
// Get default teams from config.
|
|
123
|
+
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.
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
let accountInfo;
|
|
127
|
+
|
|
128
|
+
if (_classPrivateFieldGet(this, _accountName)) {
|
|
129
|
+
accountInfo = await _classPrivateFieldGet(this, _amplifySdk).auth.find(_classPrivateFieldGet(this, _accountName), defaultTeams);
|
|
130
|
+
} else {
|
|
131
|
+
const accountArray = await _classPrivateFieldGet(this, _amplifySdk).auth.list({
|
|
132
|
+
defaultTeams,
|
|
133
|
+
validate: true
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (accountArray && accountArray.length > 0) {
|
|
137
|
+
accountInfo = accountArray.find(nextAccount => nextAccount.default) || accountArray[0];
|
|
138
|
+
}
|
|
139
|
+
} // Make sure "subscriptions" is defined since Amplify SDK requires it. (Will throw error if missing.)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
if (accountInfo && accountInfo.org && !accountInfo.org.subscriptions) {
|
|
143
|
+
accountInfo.org.subscriptions = [];
|
|
144
|
+
} // Return account info if found.
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
return accountInfo;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async createServiceAccount(options) {
|
|
151
|
+
const accountInfo = await this.getAccountInfo();
|
|
152
|
+
const result = await _classPrivateFieldGet(this, _amplifySdk).client.create(accountInfo, accountInfo === null || accountInfo === void 0 ? void 0 : accountInfo.org, options);
|
|
153
|
+
return result.client;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
async getServiceAccounts() {
|
|
157
|
+
const result = await _classPrivateFieldGet(this, _amplifySdk).client.list(await this.getAccountInfo());
|
|
158
|
+
return result.clients || [];
|
|
38
159
|
}
|
|
39
160
|
|
|
40
161
|
async getTeams() {
|
|
@@ -46,9 +167,9 @@ class PlatformClient {
|
|
|
46
167
|
|
|
47
168
|
try {
|
|
48
169
|
const service = await (0, _dataService.dataService)({
|
|
49
|
-
baseUrl: this
|
|
170
|
+
baseUrl: _classPrivateFieldGet(this, _baseUrl),
|
|
50
171
|
basePath: _types.BasePaths.Platform,
|
|
51
|
-
account: this
|
|
172
|
+
account: _classPrivateFieldGet(this, _accountName)
|
|
52
173
|
}); // Not using "getWithPagination" method here because /teams API does not support pagination
|
|
53
174
|
|
|
54
175
|
const response = await service.get('/team');
|
|
@@ -84,6 +84,36 @@ 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
|
+
|
|
87
117
|
const dataService = async ({
|
|
88
118
|
account,
|
|
89
119
|
baseUrl,
|
|
@@ -124,14 +154,7 @@ const dataService = async ({
|
|
|
124
154
|
|
|
125
155
|
return response;
|
|
126
156
|
} 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
|
-
|
|
157
|
+
updateRequestError(err);
|
|
135
158
|
throw err;
|
|
136
159
|
}
|
|
137
160
|
};
|
|
@@ -250,14 +273,7 @@ const dataService = async ({
|
|
|
250
273
|
stream.on('error', reject);
|
|
251
274
|
});
|
|
252
275
|
} 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
|
-
|
|
276
|
+
updateRequestError(err);
|
|
261
277
|
throw err;
|
|
262
278
|
}
|
|
263
279
|
}
|
package/package.json
CHANGED
|
@@ -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;
|