@contrail/cli 1.0.67 → 1.0.69

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.
Files changed (170) hide show
  1. package/.eslintrc.js +53 -53
  2. package/.vscode/settings.json +5 -5
  3. package/README.md +5 -5
  4. package/bin/init +3 -3
  5. package/lib/api/apps.d.ts +13 -13
  6. package/lib/api/apps.js +85 -85
  7. package/lib/api/event-workflow-action-definition.d.ts +1 -1
  8. package/lib/api/event-workflow-action-definition.js +7 -7
  9. package/lib/api/event-workflow-template-definition.d.ts +6 -6
  10. package/lib/api/event-workflow-template-definition.js +20 -20
  11. package/lib/api/event-workflow-templates.d.ts +7 -7
  12. package/lib/api/event-workflow-templates.js +25 -25
  13. package/lib/apps/create-app/create.d.ts +1 -1
  14. package/lib/apps/create-app/create.js +60 -59
  15. package/lib/apps/create-app/setup-template.d.ts +1 -1
  16. package/lib/apps/create-app/setup-template.js +34 -34
  17. package/lib/apps/deploy-app/actions-deployer.d.ts +11 -11
  18. package/lib/apps/deploy-app/actions-deployer.js +114 -114
  19. package/lib/apps/deploy-app/app-deployer.d.ts +8 -8
  20. package/lib/apps/deploy-app/app-deployer.js +93 -93
  21. package/lib/apps/deploy-app/app-template-parsers.d.ts +7 -7
  22. package/lib/apps/deploy-app/app-template-parsers.js +38 -38
  23. package/lib/apps/deploy-app/deploy.d.ts +2 -2
  24. package/lib/apps/deploy-app/deploy.js +58 -58
  25. package/lib/apps/install-app/app-installer.d.ts +2 -2
  26. package/lib/apps/install-app/app-installer.js +120 -120
  27. package/lib/apps/upgrade-app/app-upgrader.d.ts +3 -3
  28. package/lib/apps/upgrade-app/app-upgrader.js +126 -126
  29. package/lib/auth/auth.d.ts +9 -9
  30. package/lib/auth/auth.js +2 -2
  31. package/lib/auth/login.d.ts +2 -2
  32. package/lib/auth/login.js +141 -141
  33. package/lib/cli.d.ts +5 -5
  34. package/lib/cli.js +524 -481
  35. package/lib/colors/color-loader.d.ts +2 -2
  36. package/lib/colors/color-loader.js +96 -96
  37. package/lib/common.d.ts +1 -1
  38. package/lib/common.js +5 -5
  39. package/lib/config/config.d.ts +6 -6
  40. package/lib/config/config.js +70 -70
  41. package/lib/config/configCommands.d.ts +3 -3
  42. package/lib/config/configCommands.js +34 -34
  43. package/lib/interfaces.d.ts +191 -191
  44. package/lib/interfaces.js +25 -25
  45. package/lib/loader-process/loader-process.d.ts +2 -2
  46. package/lib/loader-process/loader-process.js +120 -120
  47. package/lib/projects/interfaces.d.ts +77 -77
  48. package/lib/projects/interfaces.js +23 -23
  49. package/lib/projects/project-exporter.d.ts +2 -2
  50. package/lib/projects/project-exporter.js +187 -187
  51. package/lib/projects/project-uploader.d.ts +1 -1
  52. package/lib/projects/project-uploader.js +105 -105
  53. package/lib/types/allUploader.d.ts +1 -1
  54. package/lib/types/allUploader.js +24 -24
  55. package/lib/types/csv-parser.d.ts +1 -1
  56. package/lib/types/csv-parser.js +51 -51
  57. package/lib/types/interfaces.d.ts +55 -55
  58. package/lib/types/interfaces.js +1 -1
  59. package/lib/types/option-set-hierarchy-exporter.d.ts +1 -1
  60. package/lib/types/option-set-hierarchy-exporter.js +113 -113
  61. package/lib/types/option-set-hierarchy-parser.d.ts +2 -2
  62. package/lib/types/option-set-hierarchy-parser.js +140 -140
  63. package/lib/types/option-set-hierarchy-uploader.d.ts +1 -1
  64. package/lib/types/option-set-hierarchy-uploader.js +113 -113
  65. package/lib/types/option-set-merger.d.ts +1 -1
  66. package/lib/types/option-set-merger.js +105 -102
  67. package/lib/types/option-set-parser.d.ts +3 -1
  68. package/lib/types/option-set-parser.js +140 -50
  69. package/lib/types/option-set-uploader.d.ts +1 -1
  70. package/lib/types/option-set-uploader.js +98 -98
  71. package/lib/types/parse-types.d.ts +4 -4
  72. package/lib/types/parse-types.js +189 -189
  73. package/lib/types/rule-set-uploader.d.ts +1 -1
  74. package/lib/types/rule-set-uploader.js +172 -172
  75. package/lib/types/type-property-policy-uploader.d.ts +1 -1
  76. package/lib/types/type-property-policy-uploader.js +178 -178
  77. package/lib/types/types-extractor.d.ts +27 -27
  78. package/lib/types/types-extractor.js +318 -318
  79. package/lib/types/types-properties-merger.d.ts +1 -1
  80. package/lib/types/types-properties-merger.js +75 -75
  81. package/lib/types/types-uploader.d.ts +1 -1
  82. package/lib/types/types-uploader.js +239 -239
  83. package/lib/types/usage-info-uploader.d.ts +1 -1
  84. package/lib/types/usage-info-uploader.js +132 -132
  85. package/lib/users/user-exporter.d.ts +1 -0
  86. package/lib/users/user-exporter.js +41 -0
  87. package/lib/users/user-uploader.d.ts +1 -0
  88. package/lib/users/user-uploader.js +45 -0
  89. package/lib/workflow-template-definitions/workflow-template-definition-commands.d.ts +2 -2
  90. package/lib/workflow-template-definitions/workflow-template-definition-commands.js +10 -10
  91. package/lib/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
  92. package/lib/workflow-template-definitions/workflow-template-definition-deployer.js +151 -151
  93. package/lib/workflow-templates/local-workflow-template-deployer.d.ts +11 -11
  94. package/lib/workflow-templates/local-workflow-template-deployer.js +102 -102
  95. package/lib/workflow-templates/workflow-template-commands.d.ts +4 -4
  96. package/lib/workflow-templates/workflow-template-commands.js +51 -51
  97. package/lib/workflow-templates/workflow-template-deployer.d.ts +4 -4
  98. package/lib/workflow-templates/workflow-template-deployer.js +26 -26
  99. package/package.json +72 -72
  100. package/publish.bat +5 -0
  101. package/publish.sh +4 -4
  102. package/src/api/apps.ts +96 -96
  103. package/src/api/event-workflow-action-definition.ts +7 -7
  104. package/src/api/event-workflow-template-definition.ts +22 -22
  105. package/src/api/event-workflow-templates.ts +28 -28
  106. package/src/apps/create-app/create.ts +74 -73
  107. package/src/apps/create-app/setup-template.ts +37 -37
  108. package/src/apps/deploy-app/actions-deployer.ts +140 -140
  109. package/src/apps/deploy-app/app-deployer.ts +105 -105
  110. package/src/apps/deploy-app/app-template-parsers.ts +43 -43
  111. package/src/apps/deploy-app/deploy.ts +65 -65
  112. package/src/apps/install-app/app-installer.ts +125 -125
  113. package/src/apps/upgrade-app/app-upgrader.ts +131 -131
  114. package/src/auth/auth.ts +9 -9
  115. package/src/auth/login.ts +155 -155
  116. package/src/cli.ts +540 -496
  117. package/src/colors/color-loader.ts +112 -112
  118. package/src/colors/colors.csv +866 -866
  119. package/src/common.ts +4 -4
  120. package/src/config/config.ts +74 -74
  121. package/src/config/configCommands.ts +37 -37
  122. package/src/interfaces.ts +200 -200
  123. package/src/loader-process/loader-process.ts +151 -151
  124. package/src/projects/interfaces.ts +72 -72
  125. package/src/projects/project-exporter.ts +224 -224
  126. package/src/projects/project-uploader.ts +130 -130
  127. package/src/types/allUploader.ts +28 -28
  128. package/src/types/csv-parser.ts +58 -58
  129. package/src/types/interfaces.ts +58 -58
  130. package/src/types/option-set-hierarchy-exporter.ts +124 -124
  131. package/src/types/option-set-hierarchy-parser.ts +168 -168
  132. package/src/types/option-set-hierarchy-uploader.ts +121 -121
  133. package/src/types/option-set-merger.ts +123 -122
  134. package/src/types/option-set-parser.ts +165 -59
  135. package/src/types/option-set-uploader.ts +107 -107
  136. package/src/types/parse-types.ts +226 -226
  137. package/src/types/rule-set-uploader.ts +186 -186
  138. package/src/types/type-property-policy-uploader.ts +191 -191
  139. package/src/types/types-extractor.ts +368 -368
  140. package/src/types/types-properties-merger.ts +89 -89
  141. package/src/types/types-uploader.ts +271 -271
  142. package/src/types/usage-info-uploader.ts +138 -138
  143. package/src/users/user-exporter.ts +52 -0
  144. package/src/users/user-uploader.ts +58 -0
  145. package/src/workflow-template-definitions/workflow-template-definition-commands.ts +12 -12
  146. package/src/workflow-template-definitions/workflow-template-definition-deployer.ts +184 -184
  147. package/src/workflow-templates/local-workflow-template-deployer.ts +125 -125
  148. package/src/workflow-templates/workflow-template-commands.ts +59 -59
  149. package/src/workflow-templates/workflow-template-deployer.ts +29 -29
  150. package/templates/docker_deploy.bat +1 -0
  151. package/templates/javascript/actions/example/action.js +37 -37
  152. package/templates/javascript/app.yml +52 -52
  153. package/templates/javascript/package.json +23 -23
  154. package/templates/typescript/Dockerfile +15 -14
  155. package/templates/typescript/README.md +10 -10
  156. package/templates/typescript/app.yml +50 -54
  157. package/templates/typescript/package-lock.json +14 -14
  158. package/templates/typescript/package.json +54 -52
  159. package/templates/typescript/src/actions/logItem.ts +26 -0
  160. package/templates/typescript/src/framework/action-dispatcher.ts +86 -0
  161. package/templates/typescript/src/framework/app-config.ts +27 -0
  162. package/templates/typescript/src/framework/handler.ts +11 -0
  163. package/templates/typescript/src/framework/index.ts +3 -0
  164. package/templates/typescript/src/framework/interfaces.ts +32 -0
  165. package/templates/typescript/src/framework/logger.ts +21 -0
  166. package/templates/typescript/{actions → src/framework}/mock-server.ts +7 -0
  167. package/templates/typescript/tsconfig.json +28 -27
  168. package/tsconfig.json +31 -30
  169. package/templates/typescript/actions/handler.ts +0 -62
  170. package/templates/typescript/actions/utils/logger.ts +0 -15
@@ -1,58 +1,58 @@
1
- import chalk from 'chalk';
2
- import fs from 'fs';
3
- import { authUser } from '../../auth/login';
4
- import { AppDeployer } from './app-deployer';
5
- import { getSeparatorByPlatform } from '../../common';
6
- const yaml = require('js-yaml');
7
- function loadAppConfig() {
8
- const TARGET_DIR = process.cwd();
9
- try {
10
- const separator = getSeparatorByPlatform();
11
- const doc = yaml.load(fs.readFileSync(TARGET_DIR + separator + 'app.yml', 'utf8'));
12
- console.log(doc);
13
- return doc;
14
- }
15
- catch (e) {
16
- throw new Error(`ERROR PARSING YAML: ${e}`);
17
- }
18
- }
19
- export async function deployApp(args) {
20
- let appDeclaration;
21
- try {
22
- appDeclaration = loadAppConfig();
23
- }
24
- catch (e) {
25
- console.log(`%s Application Deployment Failed. ${e}`, chalk.red.bold('FAIL'));
26
- return;
27
- }
28
- console.log(`%s Deploying Application. ${appDeclaration.appIdentifier}`, chalk.blue.bold('START'));
29
- try {
30
- await authUser();
31
- await new AppDeployer().deploy(appDeclaration);
32
- }
33
- catch (e) {
34
- console.log(`%s Application Deployment Failed. ${e}`, chalk.red.bold('FAIL'));
35
- return;
36
- }
37
- console.log('%s Deployment Complete.', chalk.green.bold('COMPLETE'));
38
- }
39
- export async function removeApp(args) {
40
- let appDeclaration;
41
- try {
42
- appDeclaration = loadAppConfig();
43
- }
44
- catch (e) {
45
- console.log(`%s Application Removal Failed. ${e}`, chalk.red.bold('FAIL'));
46
- return;
47
- }
48
- console.log(`%s Removing Application. ${appDeclaration.appIdentifier}`, chalk.blue.bold('START'));
49
- try {
50
- await authUser();
51
- await new AppDeployer().remove(appDeclaration);
52
- }
53
- catch (e) {
54
- console.log(`%s Application Removal Failed. ${e}`, chalk.red.bold('FAIL'));
55
- return;
56
- }
57
- console.log('%s Application Removal Complete.', chalk.green.bold('COMPLETE'));
58
- }
1
+ import chalk from 'chalk';
2
+ import fs from 'fs';
3
+ import { authUser } from '../../auth/login';
4
+ import { AppDeployer } from './app-deployer';
5
+ import { getSeparatorByPlatform } from '../../common';
6
+ const yaml = require('js-yaml');
7
+ function loadAppConfig() {
8
+ const TARGET_DIR = process.cwd();
9
+ try {
10
+ const separator = getSeparatorByPlatform();
11
+ const doc = yaml.load(fs.readFileSync(TARGET_DIR + separator + 'app.yml', 'utf8'));
12
+ console.log(doc);
13
+ return doc;
14
+ }
15
+ catch (e) {
16
+ throw new Error(`ERROR PARSING YAML: ${e}`);
17
+ }
18
+ }
19
+ export async function deployApp(args) {
20
+ let appDeclaration;
21
+ try {
22
+ appDeclaration = loadAppConfig();
23
+ }
24
+ catch (e) {
25
+ console.log(`%s Application Deployment Failed. ${e}`, chalk.red.bold('FAIL'));
26
+ return;
27
+ }
28
+ console.log(`%s Deploying Application. ${appDeclaration.appIdentifier}`, chalk.blue.bold('START'));
29
+ try {
30
+ await authUser();
31
+ await new AppDeployer().deploy(appDeclaration);
32
+ }
33
+ catch (e) {
34
+ console.log(`%s Application Deployment Failed. ${e}`, chalk.red.bold('FAIL'));
35
+ return;
36
+ }
37
+ console.log('%s Deployment Complete.', chalk.green.bold('COMPLETE'));
38
+ }
39
+ export async function removeApp(args) {
40
+ let appDeclaration;
41
+ try {
42
+ appDeclaration = loadAppConfig();
43
+ }
44
+ catch (e) {
45
+ console.log(`%s Application Removal Failed. ${e}`, chalk.red.bold('FAIL'));
46
+ return;
47
+ }
48
+ console.log(`%s Removing Application. ${appDeclaration.appIdentifier}`, chalk.blue.bold('START'));
49
+ try {
50
+ await authUser();
51
+ await new AppDeployer().remove(appDeclaration);
52
+ }
53
+ catch (e) {
54
+ console.log(`%s Application Removal Failed. ${e}`, chalk.red.bold('FAIL'));
55
+ return;
56
+ }
57
+ console.log('%s Application Removal Complete.', chalk.green.bold('COMPLETE'));
58
+ }
@@ -1,2 +1,2 @@
1
- export declare function uninstallApp(): Promise<void>;
2
- export declare function installApp(): Promise<void>;
1
+ export declare function uninstallApp(): Promise<void>;
2
+ export declare function installApp(): Promise<void>;
@@ -1,120 +1,120 @@
1
- import inquirer from 'inquirer';
2
- import chalk from 'chalk';
3
- import { Entities } from '@contrail/sdk';
4
- import { authUser } from '../../auth/login';
5
- import { deleteAppOrg, getAvailableApps, getInstalledApps, getWorkflowTemplateDefinitionsForApp, installAppToOrg } from '../../api/apps';
6
- import { WorkflowTemplateDefinitionDeployer } from '../../workflow-template-definitions/workflow-template-definition-deployer';
7
- async function getConfigProperties(app) {
8
- const config = {};
9
- for (const key of Object.keys(app.configProperties)) {
10
- const slug = app.configProperties[key]['slug'];
11
- const name = app.configProperties[key]['label'];
12
- const type = app.configProperties[key]['propertyType'];
13
- const questions = [];
14
- questions.push({
15
- type: 'input',
16
- name: 'configAnswer',
17
- message: `[App config] ${name} (${type}):`,
18
- });
19
- const answers = await inquirer.prompt(questions);
20
- config[slug] = answers.configAnswer;
21
- }
22
- return config;
23
- }
24
- export async function uninstallApp() {
25
- await authUser();
26
- const installedApps = await getInstalledApps();
27
- const answers = await inquirer.prompt([{
28
- type: 'list',
29
- name: 'appIdentifier',
30
- message: 'Which app would you like to uninstall?',
31
- choices: installedApps.map(x => x.app.identifier)
32
- }]);
33
- const appToDelete = installedApps.find(x => x.app.identifier === answers.appIdentifier);
34
- console.log('%s Uninstalling app', chalk.green.bold('APP INSTALLATION'));
35
- await deleteAppOrg(appToDelete.id);
36
- // eslint-disable-next-line no-constant-condition
37
- while (true) {
38
- await delay(1000);
39
- try {
40
- const appStillDeleting = await new Entities().get({ entityName: 'app-org', id: appToDelete.id });
41
- if (!appStillDeleting) {
42
- break;
43
- }
44
- process.stdout.write('.');
45
- }
46
- catch (e) {
47
- console.log('Error is:', e);
48
- break;
49
- }
50
- }
51
- console.log('%s App Uninstalled', chalk.green.bold('APP INSTALLATION'));
52
- }
53
- export async function installApp() {
54
- await authUser();
55
- const apps = await getAvailableApps();
56
- if (!apps.length) {
57
- throw new Error('No apps are available to install...');
58
- }
59
- const installedApps = await getInstalledApps();
60
- const installedAppsIds = installedApps.map(x => x.app.id);
61
- const installableApps = apps.filter(x => !installedAppsIds.includes(x.id));
62
- console.log(chalk.yellow.bold('Installed Apps:'));
63
- for (const appOrg of installedApps) {
64
- console.log(chalk.yellow.bold(`${appOrg.app.name}: ${appOrg.app.identifier}`));
65
- }
66
- const questions = [];
67
- questions.push({
68
- type: 'list',
69
- name: 'appIdentifier',
70
- message: 'Which app would you like to install?',
71
- choices: installableApps.map(x => x.identifier)
72
- });
73
- let answers = await inquirer.prompt(questions);
74
- const app = installableApps.find(x => x.identifier === answers.appIdentifier);
75
- let configProperties;
76
- if (app.configProperties) {
77
- configProperties = await getConfigProperties(app);
78
- }
79
- console.log('%s Installing apps', chalk.green.bold('APP INSTALLATION'));
80
- const appOrg = await installAppToOrg(app, configProperties);
81
- // eslint-disable-next-line no-constant-condition
82
- while (true) {
83
- await delay(1000);
84
- try {
85
- const installingApp = await new Entities().get({ entityName: 'app-org', id: appOrg.id });
86
- if (installingApp.status === 'READY') {
87
- console.log('%s App installed', chalk.green.bold('APP INSTALLATION'));
88
- break;
89
- }
90
- if (installingApp.status === 'FAILED_INSTALLING') {
91
- console.log('%s App installation failed', chalk.red.bold('APP INSTALLATION'));
92
- return;
93
- }
94
- process.stdout.write('.');
95
- }
96
- catch (e) {
97
- console.log('%s App installation failed', chalk.red.bold('APP INSTALLATION'));
98
- console.log('Error is:', e);
99
- return;
100
- }
101
- }
102
- const workflowTemplateDefinitions = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
103
- if (!workflowTemplateDefinitions.length) {
104
- return;
105
- }
106
- answers = await inquirer.prompt([{
107
- type: 'confirm',
108
- name: 'shouldInstallWorkflows',
109
- message: 'Would you like to install the Workflows associated with this app?',
110
- default: false
111
- }]);
112
- if (!answers.shouldInstallWorkflows) {
113
- console.log('%s Not installing associated app workflows', chalk.yellow.bold('APP INSTALLATION'));
114
- return;
115
- }
116
- new WorkflowTemplateDefinitionDeployer().installWorkflowTemplateDefinitions(workflowTemplateDefinitions);
117
- }
118
- function delay(ms) {
119
- return new Promise(resolve => setTimeout(resolve, ms));
120
- }
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import { Entities } from '@contrail/sdk';
4
+ import { authUser } from '../../auth/login';
5
+ import { deleteAppOrg, getAvailableApps, getInstalledApps, getWorkflowTemplateDefinitionsForApp, installAppToOrg } from '../../api/apps';
6
+ import { WorkflowTemplateDefinitionDeployer } from '../../workflow-template-definitions/workflow-template-definition-deployer';
7
+ async function getConfigProperties(app) {
8
+ const config = {};
9
+ for (const key of Object.keys(app.configProperties)) {
10
+ const slug = app.configProperties[key]['slug'];
11
+ const name = app.configProperties[key]['label'];
12
+ const type = app.configProperties[key]['propertyType'];
13
+ const questions = [];
14
+ questions.push({
15
+ type: 'input',
16
+ name: 'configAnswer',
17
+ message: `[App config] ${name} (${type}):`,
18
+ });
19
+ const answers = await inquirer.prompt(questions);
20
+ config[slug] = answers.configAnswer;
21
+ }
22
+ return config;
23
+ }
24
+ export async function uninstallApp() {
25
+ await authUser();
26
+ const installedApps = await getInstalledApps();
27
+ const answers = await inquirer.prompt([{
28
+ type: 'list',
29
+ name: 'appIdentifier',
30
+ message: 'Which app would you like to uninstall?',
31
+ choices: installedApps.map(x => x.app.identifier)
32
+ }]);
33
+ const appToDelete = installedApps.find(x => x.app.identifier === answers.appIdentifier);
34
+ console.log('%s Uninstalling app', chalk.green.bold('APP INSTALLATION'));
35
+ await deleteAppOrg(appToDelete.id);
36
+ // eslint-disable-next-line no-constant-condition
37
+ while (true) {
38
+ await delay(1000);
39
+ try {
40
+ const appStillDeleting = await new Entities().get({ entityName: 'app-org', id: appToDelete.id });
41
+ if (!appStillDeleting) {
42
+ break;
43
+ }
44
+ process.stdout.write('.');
45
+ }
46
+ catch (e) {
47
+ console.log('Error is:', e);
48
+ break;
49
+ }
50
+ }
51
+ console.log('%s App Uninstalled', chalk.green.bold('APP INSTALLATION'));
52
+ }
53
+ export async function installApp() {
54
+ await authUser();
55
+ const apps = await getAvailableApps();
56
+ if (!apps.length) {
57
+ throw new Error('No apps are available to install...');
58
+ }
59
+ const installedApps = await getInstalledApps();
60
+ const installedAppsIds = installedApps.map(x => x.app.id);
61
+ const installableApps = apps.filter(x => !installedAppsIds.includes(x.id));
62
+ console.log(chalk.yellow.bold('Installed Apps:'));
63
+ for (const appOrg of installedApps) {
64
+ console.log(chalk.yellow.bold(`${appOrg.app.name}: ${appOrg.app.identifier}`));
65
+ }
66
+ const questions = [];
67
+ questions.push({
68
+ type: 'list',
69
+ name: 'appIdentifier',
70
+ message: 'Which app would you like to install?',
71
+ choices: installableApps.map(x => x.identifier)
72
+ });
73
+ let answers = await inquirer.prompt(questions);
74
+ const app = installableApps.find(x => x.identifier === answers.appIdentifier);
75
+ let configProperties;
76
+ if (app.configProperties) {
77
+ configProperties = await getConfigProperties(app);
78
+ }
79
+ console.log('%s Installing apps', chalk.green.bold('APP INSTALLATION'));
80
+ const appOrg = await installAppToOrg(app, configProperties);
81
+ // eslint-disable-next-line no-constant-condition
82
+ while (true) {
83
+ await delay(1000);
84
+ try {
85
+ const installingApp = await new Entities().get({ entityName: 'app-org', id: appOrg.id });
86
+ if (installingApp.status === 'READY') {
87
+ console.log('%s App installed', chalk.green.bold('APP INSTALLATION'));
88
+ break;
89
+ }
90
+ if (installingApp.status === 'FAILED_INSTALLING') {
91
+ console.log('%s App installation failed', chalk.red.bold('APP INSTALLATION'));
92
+ return;
93
+ }
94
+ process.stdout.write('.');
95
+ }
96
+ catch (e) {
97
+ console.log('%s App installation failed', chalk.red.bold('APP INSTALLATION'));
98
+ console.log('Error is:', e);
99
+ return;
100
+ }
101
+ }
102
+ const workflowTemplateDefinitions = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
103
+ if (!workflowTemplateDefinitions.length) {
104
+ return;
105
+ }
106
+ answers = await inquirer.prompt([{
107
+ type: 'confirm',
108
+ name: 'shouldInstallWorkflows',
109
+ message: 'Would you like to install the Workflows associated with this app?',
110
+ default: false
111
+ }]);
112
+ if (!answers.shouldInstallWorkflows) {
113
+ console.log('%s Not installing associated app workflows', chalk.yellow.bold('APP INSTALLATION'));
114
+ return;
115
+ }
116
+ new WorkflowTemplateDefinitionDeployer().installWorkflowTemplateDefinitions(workflowTemplateDefinitions);
117
+ }
118
+ function delay(ms) {
119
+ return new Promise(resolve => setTimeout(resolve, ms));
120
+ }
@@ -1,3 +1,3 @@
1
- export declare function uninstallApp(): Promise<void>;
2
- export declare function upgradeApp(): Promise<void>;
3
- export declare function installApp(): Promise<void>;
1
+ export declare function uninstallApp(): Promise<void>;
2
+ export declare function upgradeApp(): Promise<void>;
3
+ export declare function installApp(): Promise<void>;
@@ -1,126 +1,126 @@
1
- import inquirer from 'inquirer';
2
- import chalk from 'chalk';
3
- import { Entities } from '@contrail/sdk';
4
- import { authUser } from '../../auth/login';
5
- import { deleteAppOrg, getAppVersions, getAvailableApps, getInstalledApps, installAppToOrg, upgradeAppVersion } from '../../api/apps';
6
- async function getConfigProperties(app) {
7
- const config = {};
8
- for (const key of Object.keys(app.configProperties)) {
9
- const slug = app.configProperties[key]['slug'];
10
- const name = app.configProperties[key]['label'];
11
- const type = app.configProperties[key]['propertyType'];
12
- const questions = [];
13
- questions.push({
14
- type: 'input',
15
- name: 'configAnswer',
16
- message: `[App config] ${name} (${type}):`,
17
- });
18
- const answers = await inquirer.prompt(questions);
19
- config[slug] = answers.configAnswer;
20
- }
21
- return config;
22
- }
23
- export async function uninstallApp() {
24
- await authUser();
25
- const installedApps = await getInstalledApps();
26
- const answers = await inquirer.prompt([{
27
- type: 'list',
28
- name: 'appIdentifier',
29
- message: 'Which app would you like to uninstall?',
30
- choices: installedApps.map(x => x.app.identifier)
31
- }]);
32
- const appToDelete = installedApps.find(x => x.app.identifier === answers.appIdentifier);
33
- console.log('%s Uninstalling app', chalk.green.bold('APP INSTALLATION'));
34
- await deleteAppOrg(appToDelete.id);
35
- // eslint-disable-next-line no-constant-condition
36
- while (true) {
37
- await delay(1000);
38
- try {
39
- const appStillDeleting = await new Entities().get({ entityName: 'app-org', id: appToDelete.id });
40
- if (!appStillDeleting) {
41
- break;
42
- }
43
- process.stdout.write('.');
44
- }
45
- catch (e) {
46
- console.log('Error is:', e);
47
- break;
48
- }
49
- }
50
- console.log('%s App Uninstalled', chalk.green.bold('APP INSTALLATION'));
51
- }
52
- export async function upgradeApp() {
53
- await authUser();
54
- const allApps = await getAvailableApps();
55
- const installedApps = await getInstalledApps();
56
- let answers = await inquirer.prompt([{
57
- type: 'list',
58
- name: 'appIdentifier',
59
- message: 'Which app would you like to upgrade?',
60
- choices: installedApps.map(x => x.app.identifier)
61
- }]);
62
- const appOrgToUpgrade = installedApps.find(x => x.app.identifier === answers.appIdentifier);
63
- const appToUpgrade = allApps.find(x => x.identifier === answers.appIdentifier);
64
- const versions = await getAppVersions(appToUpgrade);
65
- answers = await inquirer.prompt([{
66
- type: 'list',
67
- name: 'appVersion',
68
- message: 'Which app version would you like to upgrade to?',
69
- choices: versions.map(x => {
70
- const number = x.versionNumber.toString().padStart(4, '0');
71
- const name = x.id === appOrgToUpgrade.appVersionId ? `${number} (${x.createdOn}) (current)` : `${number} (${x.createdOn})`;
72
- return {
73
- value: x.id, name
74
- };
75
- }).sort((x, y) => { return x.name > y.name ? -1 : 1; })
76
- }]);
77
- console.log(`%s Upgrading app to version ${answers.appVersion}`, chalk.green.bold('APP INSTALLATION'));
78
- await upgradeAppVersion(appOrgToUpgrade, answers.appVersion);
79
- // eslint-disable-next-line no-constant-condition
80
- while (true) {
81
- await delay(1000);
82
- const appStillUpgrading = await new Entities().get({ entityName: 'app-org', id: appOrgToUpgrade.id });
83
- if (appStillUpgrading.status === 'READY') {
84
- console.log('%s App Upgraded', chalk.green.bold('APP INSTALLATION'));
85
- return;
86
- }
87
- if (appStillUpgrading.status === 'FAILED_INSTALLING') {
88
- console.log('%s App Upgrade FAILED!', chalk.red.bold('APP INSTALLATION'));
89
- return;
90
- }
91
- console.log('checking app status...');
92
- }
93
- }
94
- export async function installApp() {
95
- await authUser();
96
- const apps = await getAvailableApps();
97
- if (!apps.length) {
98
- throw new Error('No apps are available to install...');
99
- }
100
- const installedApps = await getInstalledApps();
101
- const installedAppsIds = installedApps.map(x => x.app.id);
102
- const installableApps = apps.filter(x => !installedAppsIds.includes(x.id));
103
- console.log(chalk.yellow.bold('Installed Apps:'));
104
- for (const appOrg of installedApps) {
105
- console.log(chalk.yellow.bold(`${appOrg.app.name}: ${appOrg.app.identifier}`));
106
- }
107
- const questions = [];
108
- questions.push({
109
- type: 'list',
110
- name: 'appIdentifier',
111
- message: 'Which app would you like to install?',
112
- choices: installableApps.map(x => x.identifier)
113
- });
114
- const answers = await inquirer.prompt(questions);
115
- const app = installableApps.find(x => x.identifier === answers.appIdentifier);
116
- let configProperties;
117
- if (app.configProperties) {
118
- configProperties = await getConfigProperties(app);
119
- }
120
- console.log('%s Installing apps', chalk.green.bold('APP INSTALLATION'));
121
- await installAppToOrg(app, configProperties);
122
- console.log('%s App installed', chalk.green.bold('APP INSTALLATION'));
123
- }
124
- function delay(ms) {
125
- return new Promise(resolve => setTimeout(resolve, ms));
126
- }
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import { Entities } from '@contrail/sdk';
4
+ import { authUser } from '../../auth/login';
5
+ import { deleteAppOrg, getAppVersions, getAvailableApps, getInstalledApps, installAppToOrg, upgradeAppVersion } from '../../api/apps';
6
+ async function getConfigProperties(app) {
7
+ const config = {};
8
+ for (const key of Object.keys(app.configProperties)) {
9
+ const slug = app.configProperties[key]['slug'];
10
+ const name = app.configProperties[key]['label'];
11
+ const type = app.configProperties[key]['propertyType'];
12
+ const questions = [];
13
+ questions.push({
14
+ type: 'input',
15
+ name: 'configAnswer',
16
+ message: `[App config] ${name} (${type}):`,
17
+ });
18
+ const answers = await inquirer.prompt(questions);
19
+ config[slug] = answers.configAnswer;
20
+ }
21
+ return config;
22
+ }
23
+ export async function uninstallApp() {
24
+ await authUser();
25
+ const installedApps = await getInstalledApps();
26
+ const answers = await inquirer.prompt([{
27
+ type: 'list',
28
+ name: 'appIdentifier',
29
+ message: 'Which app would you like to uninstall?',
30
+ choices: installedApps.map(x => x.app.identifier)
31
+ }]);
32
+ const appToDelete = installedApps.find(x => x.app.identifier === answers.appIdentifier);
33
+ console.log('%s Uninstalling app', chalk.green.bold('APP INSTALLATION'));
34
+ await deleteAppOrg(appToDelete.id);
35
+ // eslint-disable-next-line no-constant-condition
36
+ while (true) {
37
+ await delay(1000);
38
+ try {
39
+ const appStillDeleting = await new Entities().get({ entityName: 'app-org', id: appToDelete.id });
40
+ if (!appStillDeleting) {
41
+ break;
42
+ }
43
+ process.stdout.write('.');
44
+ }
45
+ catch (e) {
46
+ console.log('Error is:', e);
47
+ break;
48
+ }
49
+ }
50
+ console.log('%s App Uninstalled', chalk.green.bold('APP INSTALLATION'));
51
+ }
52
+ export async function upgradeApp() {
53
+ await authUser();
54
+ const allApps = await getAvailableApps();
55
+ const installedApps = await getInstalledApps();
56
+ let answers = await inquirer.prompt([{
57
+ type: 'list',
58
+ name: 'appIdentifier',
59
+ message: 'Which app would you like to upgrade?',
60
+ choices: installedApps.map(x => x.app.identifier)
61
+ }]);
62
+ const appOrgToUpgrade = installedApps.find(x => x.app.identifier === answers.appIdentifier);
63
+ const appToUpgrade = allApps.find(x => x.identifier === answers.appIdentifier);
64
+ const versions = await getAppVersions(appToUpgrade);
65
+ answers = await inquirer.prompt([{
66
+ type: 'list',
67
+ name: 'appVersion',
68
+ message: 'Which app version would you like to upgrade to?',
69
+ choices: versions.map(x => {
70
+ const number = x.versionNumber.toString().padStart(4, '0');
71
+ const name = x.id === appOrgToUpgrade.appVersionId ? `${number} (${x.createdOn}) (current)` : `${number} (${x.createdOn})`;
72
+ return {
73
+ value: x.id, name
74
+ };
75
+ }).sort((x, y) => { return x.name > y.name ? -1 : 1; })
76
+ }]);
77
+ console.log(`%s Upgrading app to version ${answers.appVersion}`, chalk.green.bold('APP INSTALLATION'));
78
+ await upgradeAppVersion(appOrgToUpgrade, answers.appVersion);
79
+ // eslint-disable-next-line no-constant-condition
80
+ while (true) {
81
+ await delay(1000);
82
+ const appStillUpgrading = await new Entities().get({ entityName: 'app-org', id: appOrgToUpgrade.id });
83
+ if (appStillUpgrading.status === 'READY') {
84
+ console.log('%s App Upgraded', chalk.green.bold('APP INSTALLATION'));
85
+ return;
86
+ }
87
+ if (appStillUpgrading.status === 'FAILED_INSTALLING') {
88
+ console.log('%s App Upgrade FAILED!', chalk.red.bold('APP INSTALLATION'));
89
+ return;
90
+ }
91
+ console.log('checking app status...');
92
+ }
93
+ }
94
+ export async function installApp() {
95
+ await authUser();
96
+ const apps = await getAvailableApps();
97
+ if (!apps.length) {
98
+ throw new Error('No apps are available to install...');
99
+ }
100
+ const installedApps = await getInstalledApps();
101
+ const installedAppsIds = installedApps.map(x => x.app.id);
102
+ const installableApps = apps.filter(x => !installedAppsIds.includes(x.id));
103
+ console.log(chalk.yellow.bold('Installed Apps:'));
104
+ for (const appOrg of installedApps) {
105
+ console.log(chalk.yellow.bold(`${appOrg.app.name}: ${appOrg.app.identifier}`));
106
+ }
107
+ const questions = [];
108
+ questions.push({
109
+ type: 'list',
110
+ name: 'appIdentifier',
111
+ message: 'Which app would you like to install?',
112
+ choices: installableApps.map(x => x.identifier)
113
+ });
114
+ const answers = await inquirer.prompt(questions);
115
+ const app = installableApps.find(x => x.identifier === answers.appIdentifier);
116
+ let configProperties;
117
+ if (app.configProperties) {
118
+ configProperties = await getConfigProperties(app);
119
+ }
120
+ console.log('%s Installing apps', chalk.green.bold('APP INSTALLATION'));
121
+ await installAppToOrg(app, configProperties);
122
+ console.log('%s App installed', chalk.green.bold('APP INSTALLATION'));
123
+ }
124
+ function delay(ms) {
125
+ return new Promise(resolve => setTimeout(resolve, ms));
126
+ }
@@ -1,9 +1,9 @@
1
- export interface AuthContext {
2
- apiUserToken: string;
3
- apiGateway?: string;
4
- orgSlug?: string;
5
- orgId?: string;
6
- }
7
- export declare class Auth {
8
- static config: AuthContext;
9
- }
1
+ export interface AuthContext {
2
+ apiUserToken: string;
3
+ apiGateway?: string;
4
+ orgSlug?: string;
5
+ orgId?: string;
6
+ }
7
+ export declare class Auth {
8
+ static config: AuthContext;
9
+ }
package/lib/auth/auth.js CHANGED
@@ -1,2 +1,2 @@
1
- export class Auth {
2
- }
1
+ export class Auth {
2
+ }
@@ -1,2 +1,2 @@
1
- import { AuthContext } from './auth';
2
- export declare function authUser(): Promise<AuthContext>;
1
+ import { AuthContext } from './auth';
2
+ export declare function authUser(): Promise<AuthContext>;