@contrail/cli 2.1.20 → 2.1.21
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/README.md +311 -105
- package/dist/api/apps.js +15 -15
- package/dist/api/event-workflow-action-definition.d.ts +1 -1
- package/dist/api/event-workflow-action-definition.js +1 -1
- package/dist/api/event-workflow-template-definition.d.ts +4 -3
- package/dist/api/event-workflow-templates.d.ts +5 -4
- package/dist/api/event-workflow-templates.js +2 -2
- package/dist/api/types.d.ts +10 -10
- package/dist/api/users.js +4 -2
- package/dist/auth/login.js +12 -14
- package/dist/commands/app/create.d.ts +2 -2
- package/dist/commands/app/create.js +15 -10
- package/dist/commands/app/delete.d.ts +2 -2
- package/dist/commands/app/delete.js +4 -2
- package/dist/commands/app/getApiKey.d.ts +2 -2
- package/dist/commands/app/getApiKey.js +17 -11
- package/dist/commands/app/install.d.ts +2 -2
- package/dist/commands/app/install.js +42 -25
- package/dist/commands/app/publish.d.ts +2 -2
- package/dist/commands/app/publish.js +26 -11
- package/dist/commands/app/uninstall.d.ts +2 -2
- package/dist/commands/app/uninstall.js +20 -11
- package/dist/commands/app/upgrade.d.ts +2 -2
- package/dist/commands/app/upgrade.js +46 -23
- package/dist/commands/basecommand.d.ts +7 -0
- package/dist/commands/basecommand.js +29 -0
- package/dist/commands/colors/deleteAll.d.ts +2 -2
- package/dist/commands/colors/deleteAll.js +8 -5
- package/dist/commands/colors/load.d.ts +2 -2
- package/dist/commands/colors/load.js +10 -7
- package/dist/commands/config/list.d.ts +2 -2
- package/dist/commands/config/list.js +4 -2
- package/dist/commands/config/remove.d.ts +2 -2
- package/dist/commands/config/remove.js +4 -2
- package/dist/commands/config/set.d.ts +3 -2
- package/dist/commands/config/set.js +21 -7
- package/dist/commands/groups/export.d.ts +2 -2
- package/dist/commands/groups/export.js +20 -8
- package/dist/commands/groups/upload.d.ts +3 -3
- package/dist/commands/groups/upload.js +44 -32
- package/dist/commands/instance/export.d.ts +2 -2
- package/dist/commands/instance/export.js +15 -3
- package/dist/commands/instance/import.d.ts +2 -2
- package/dist/commands/instance/import.js +9 -2
- package/dist/commands/loader-process/load.d.ts +2 -2
- package/dist/commands/loader-process/load.js +13 -6
- package/dist/commands/loader-process/upload-and-load.d.ts +2 -2
- package/dist/commands/loader-process/upload-and-load.js +18 -7
- package/dist/commands/projects/export.d.ts +2 -2
- package/dist/commands/projects/export.js +4 -2
- package/dist/commands/projects/list.d.ts +2 -2
- package/dist/commands/projects/list.js +6 -4
- package/dist/commands/projects/load.d.ts +2 -2
- package/dist/commands/projects/load.js +16 -8
- package/dist/commands/types/exportOptionSetHierarchies.d.ts +2 -2
- package/dist/commands/types/exportOptionSetHierarchies.js +15 -12
- package/dist/commands/types/getAll.d.ts +2 -2
- package/dist/commands/types/getAll.js +107 -76
- package/dist/commands/types/loadAll.d.ts +2 -2
- package/dist/commands/types/loadAll.js +12 -4
- package/dist/commands/types/mergeOptionSets.d.ts +2 -2
- package/dist/commands/types/mergeOptionSets.js +13 -10
- package/dist/commands/types/mergeTypeProperties.d.ts +2 -2
- package/dist/commands/types/mergeTypeProperties.js +12 -9
- package/dist/commands/types/parseOptionSetsHierarchyLocalFile.d.ts +2 -2
- package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +19 -15
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.d.ts +10 -0
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +102 -0
- package/dist/commands/types/parseOptionSetsLocalFiles.d.ts +2 -2
- package/dist/commands/types/parseOptionSetsLocalFiles.js +21 -21
- package/dist/commands/types/parseOptionSetsToFolderStructure.d.ts +2 -2
- package/dist/commands/types/parseOptionSetsToFolderStructure.js +17 -18
- package/dist/commands/types/parseTypesFromFiles.d.ts +2 -2
- package/dist/commands/types/parseTypesFromFiles.js +14 -8
- package/dist/commands/types/parseTypesFromLocalFiles.d.ts +2 -2
- package/dist/commands/types/parseTypesFromLocalFiles.js +10 -7
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.d.ts +2 -2
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +11 -8
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.d.ts +2 -2
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +11 -8
- package/dist/commands/types/uploadOptionSetHierarchies.d.ts +2 -2
- package/dist/commands/types/uploadOptionSetHierarchies.js +44 -32
- package/dist/commands/types/uploadOptionSets.d.ts +2 -2
- package/dist/commands/types/uploadOptionSets.js +21 -13
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.d.ts +2 -2
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +26 -19
- package/dist/commands/types/uploadRuleSets.d.ts +2 -2
- package/dist/commands/types/uploadRuleSets.js +34 -26
- package/dist/commands/types/uploadTypePolicies.d.ts +2 -2
- package/dist/commands/types/uploadTypePolicies.js +37 -29
- package/dist/commands/types/uploadTypePropertyPolicies.d.ts +2 -2
- package/dist/commands/types/uploadTypePropertyPolicies.js +38 -30
- package/dist/commands/types/uploadTypes.d.ts +2 -2
- package/dist/commands/types/uploadTypes.js +10 -4
- package/dist/commands/types/uploadUsageInfo.d.ts +2 -2
- package/dist/commands/types/uploadUsageInfo.js +32 -24
- package/dist/commands/users/export.d.ts +2 -2
- package/dist/commands/users/export.js +15 -4
- package/dist/commands/users/upload.d.ts +2 -2
- package/dist/commands/users/upload.js +6 -4
- package/dist/commands/webhooks/create.d.ts +2 -2
- package/dist/commands/webhooks/create.js +8 -6
- package/dist/commands/webhooks/delete.d.ts +2 -2
- package/dist/commands/webhooks/delete.js +8 -5
- package/dist/commands/webhooks/getWebhookTrigger.d.ts +2 -2
- package/dist/commands/webhooks/getWebhookTrigger.js +10 -9
- package/dist/commands/webhooks/list.d.ts +2 -2
- package/dist/commands/webhooks/list.js +8 -6
- package/dist/commands/workflow-template-definitions/install.d.ts +2 -2
- package/dist/commands/workflow-template-definitions/install.js +4 -2
- package/dist/commands/workflow-template-definitions/list.d.ts +2 -2
- package/dist/commands/workflow-template-definitions/list.js +4 -2
- package/dist/commands/workflow-templates/delete.d.ts +2 -2
- package/dist/commands/workflow-templates/delete.js +4 -2
- package/dist/commands/workflow-templates/export.d.ts +2 -2
- package/dist/commands/workflow-templates/export.js +19 -17
- package/dist/commands/workflow-templates/list.d.ts +2 -2
- package/dist/commands/workflow-templates/list.js +4 -2
- package/dist/commands/workflow-templates/load.d.ts +2 -2
- package/dist/commands/workflow-templates/load.js +8 -3
- package/dist/common.d.ts +4 -1
- package/dist/common.js +10 -1
- package/dist/helpers/app/actions-deployer.d.ts +2 -2
- package/dist/helpers/app/actions-deployer.js +12 -7
- package/dist/helpers/app/app-deployer.d.ts +1 -1
- package/dist/helpers/app/app-deployer.js +70 -52
- package/dist/helpers/app/app-template-parsers.js +3 -1
- package/dist/helpers/app/load-app-config.d.ts +2 -1
- package/dist/helpers/app/load-app-config.js +2 -2
- package/dist/helpers/app/setup-template.js +4 -3
- package/dist/helpers/colors/helpers.d.ts +10 -2
- package/dist/helpers/colors/helpers.js +11 -10
- package/dist/helpers/config/config.js +15 -10
- package/dist/helpers/file-helpers.js +7 -4
- package/dist/helpers/loader-process/helpers.js +14 -13
- package/dist/helpers/projects/helpers.d.ts +2 -1
- package/dist/helpers/projects/helpers.js +16 -15
- package/dist/helpers/types/csv-parser.js +17 -14
- package/dist/helpers/types/type-extractor.d.ts +1 -1
- package/dist/helpers/types/type-extractor.js +3 -2
- package/dist/helpers/types/type-parser.js +22 -21
- package/dist/helpers/types/type-uploader.js +19 -15
- package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.d.ts +1 -1
- package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +46 -28
- package/dist/helpers/workflow-templates/helper.d.ts +3 -3
- package/dist/helpers/workflow-templates/helper.js +33 -23
- package/dist/interface-converters.spec.js +15 -15
- package/dist/interfaces.d.ts +6 -0
- package/dist/logger.d.ts +3 -0
- package/dist/logger.js +32 -0
- package/dist/templates/typescript/src/actions/logItem.ts +9 -4
- package/dist/templates/typescript/src/main.ts +13 -8
- package/oclif.manifest.json +861 -31
- package/package.json +10 -7
|
@@ -9,9 +9,12 @@ const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
|
9
9
|
const login_1 = require("../../auth/login");
|
|
10
10
|
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
11
11
|
const core_1 = require("@oclif/core");
|
|
12
|
-
|
|
12
|
+
const basecommand_1 = require("../basecommand");
|
|
13
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
14
|
+
class ImportGroups extends basecommand_1.BaseCommand {
|
|
13
15
|
async run() {
|
|
14
|
-
const { args } = await this.parse(ImportGroups);
|
|
16
|
+
const { args, flags } = await this.parse(ImportGroups);
|
|
17
|
+
await super.setLogLevel(flags.logLevel);
|
|
15
18
|
try {
|
|
16
19
|
await (0, login_1.authUser)();
|
|
17
20
|
this.log('%s Uploading Groups.', chalk_1.default.blue.bold('START'));
|
|
@@ -48,28 +51,30 @@ function getGroupsFile(fileLocation) {
|
|
|
48
51
|
}
|
|
49
52
|
async function uploadGroups(fileLocation) {
|
|
50
53
|
const existingGroups = await new sdk_1.Entities().get({
|
|
51
|
-
entityName: 'group',
|
|
54
|
+
entityName: 'group',
|
|
55
|
+
relations: ['groupPrincipals'],
|
|
52
56
|
});
|
|
53
57
|
const groupsToImport = getGroupsFile(fileLocation);
|
|
54
58
|
const orgUsers = await new sdk_1.Entities().get({
|
|
55
59
|
entityName: 'user-org',
|
|
56
60
|
});
|
|
57
|
-
const toDelete = existingGroups.filter(x => !groupsToImport.map(y => y.name).includes(x.name));
|
|
58
|
-
const toCreate = groupsToImport.filter(x => !existingGroups.map(y => y.name).includes(x.name));
|
|
59
|
-
const toUpdate = groupsToImport.filter(x => existingGroups.map(y => y.name).includes(x.name));
|
|
61
|
+
const toDelete = existingGroups.filter((x) => !groupsToImport.map((y) => y.name).includes(x.name));
|
|
62
|
+
const toCreate = groupsToImport.filter((x) => !existingGroups.map((y) => y.name).includes(x.name));
|
|
63
|
+
const toUpdate = groupsToImport.filter((x) => existingGroups.map((y) => y.name).includes(x.name));
|
|
60
64
|
const createdGroups = [];
|
|
61
65
|
// it's important to create all the groups first, to resolve any downstream principal dependencies
|
|
62
66
|
for (const group of toCreate) {
|
|
63
67
|
if (!group.groupPrincipals || !group.name) {
|
|
64
|
-
|
|
68
|
+
logger_1.default.info('skipping create of invalid group');
|
|
65
69
|
}
|
|
66
70
|
createdGroups.push(await new sdk_1.Entities().create({
|
|
67
|
-
entityName: 'group',
|
|
71
|
+
entityName: 'group',
|
|
72
|
+
object: { name: group.name },
|
|
68
73
|
}));
|
|
69
74
|
}
|
|
70
75
|
const allGroupsAfterCreate = existingGroups.concat(createdGroups);
|
|
71
76
|
for (const group of toCreate) {
|
|
72
|
-
const createdGroup = createdGroups.find(x => x.name === group.name);
|
|
77
|
+
const createdGroup = createdGroups.find((x) => x.name === group.name);
|
|
73
78
|
if (!createdGroup) {
|
|
74
79
|
continue;
|
|
75
80
|
}
|
|
@@ -77,14 +82,14 @@ async function uploadGroups(fileLocation) {
|
|
|
77
82
|
}
|
|
78
83
|
for (const group of toUpdate) {
|
|
79
84
|
if (!group.groupPrincipals || !group.name) {
|
|
80
|
-
|
|
85
|
+
logger_1.default.info('skipping update invalid group');
|
|
81
86
|
}
|
|
82
|
-
const existingGroup = existingGroups.find(x => x.name === group.name);
|
|
87
|
+
const existingGroup = existingGroups.find((x) => x.name === group.name);
|
|
83
88
|
await updateGroup(group.groupPrincipals, orgUsers, existingGroup, allGroupsAfterCreate);
|
|
84
89
|
}
|
|
85
90
|
for (const group of toDelete) {
|
|
86
91
|
if (!group.groupPrincipals || !group.name) {
|
|
87
|
-
|
|
92
|
+
logger_1.default.info('skipping delete of invalid group');
|
|
88
93
|
}
|
|
89
94
|
await new sdk_1.Entities().delete({ entityName: 'group', id: group.id });
|
|
90
95
|
}
|
|
@@ -93,49 +98,56 @@ exports.uploadGroups = uploadGroups;
|
|
|
93
98
|
async function updateGroup(principals, orgUsers, existingGroup, allGroupsAfterCreate) {
|
|
94
99
|
var _a;
|
|
95
100
|
const principalsToUpdate = principals
|
|
96
|
-
.map(x => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
97
|
-
.filter(x => !!x)
|
|
98
|
-
.map(x => {
|
|
101
|
+
.map((x) => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
102
|
+
.filter((x) => !!x)
|
|
103
|
+
.map((x) => {
|
|
104
|
+
return { principalReference: `${x.type}:${x.identifier}`, groupId: existingGroup.id };
|
|
105
|
+
});
|
|
99
106
|
await new sdk_1.Entities().batchCreate({
|
|
100
|
-
entityName: 'group-principal',
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
107
|
+
entityName: 'group-principal',
|
|
108
|
+
objects: {
|
|
109
|
+
principalReferences: principalsToUpdate.map((x) => x.principalReference),
|
|
110
|
+
groupIds: [existingGroup.id],
|
|
111
|
+
},
|
|
104
112
|
});
|
|
105
113
|
// remove principals
|
|
106
|
-
const principalsToKeep = principalsToUpdate.map(principal => `${principal.type}:${principal.identifier}`);
|
|
114
|
+
const principalsToKeep = principalsToUpdate.map((principal) => `${principal.type}:${principal.identifier}`);
|
|
107
115
|
const principalsToDelete = ((_a = existingGroup === null || existingGroup === void 0 ? void 0 : existingGroup.groupPrincipals) !== null && _a !== void 0 ? _a : [])
|
|
108
|
-
.map(x => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
109
|
-
.filter(x => !!x)
|
|
110
|
-
.filter(x => !principalsToKeep.includes(`${x.type}:${x.identifier}`));
|
|
116
|
+
.map((x) => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
117
|
+
.filter((x) => !!x)
|
|
118
|
+
.filter((x) => !principalsToKeep.includes(`${x.type}:${x.identifier}`));
|
|
111
119
|
await principalsToDelete.forEach(async (principal) => {
|
|
112
120
|
await new sdk_1.Entities().delete({
|
|
113
|
-
entityName: 'group-principal',
|
|
121
|
+
entityName: 'group-principal',
|
|
122
|
+
id: principal.cloudId,
|
|
114
123
|
});
|
|
115
124
|
});
|
|
116
125
|
}
|
|
117
126
|
async function createGroupPrincipals(group, principals, orgUsers, allGroupsAfterCreate) {
|
|
118
127
|
const principalsToCreate = principals
|
|
119
|
-
.map(x => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
120
|
-
.filter(x => !!x)
|
|
121
|
-
.map(x => {
|
|
128
|
+
.map((x) => groupPrincipalNameToId(x, allGroupsAfterCreate, orgUsers))
|
|
129
|
+
.filter((x) => !!x)
|
|
130
|
+
.map((x) => {
|
|
131
|
+
return { principalReference: `${x.type}:${x.identifier}`, groupId: group.id };
|
|
132
|
+
});
|
|
122
133
|
await new sdk_1.Entities().batchCreate({
|
|
123
|
-
entityName: 'group-principal',
|
|
134
|
+
entityName: 'group-principal',
|
|
135
|
+
objects: principalsToCreate,
|
|
124
136
|
});
|
|
125
137
|
}
|
|
126
138
|
function groupPrincipalNameToId(principal, groups, orgUsers) {
|
|
127
139
|
if (principal.type === 'user') {
|
|
128
|
-
const user = orgUsers.map(x => x.user).find(x => x.email === (principal === null || principal === void 0 ? void 0 : principal.email));
|
|
140
|
+
const user = orgUsers.map((x) => x.user).find((x) => x.email === (principal === null || principal === void 0 ? void 0 : principal.email));
|
|
129
141
|
if (!user) {
|
|
130
|
-
|
|
142
|
+
logger_1.default.info(`user ${principal.email} is not in this org's user list`);
|
|
131
143
|
return undefined;
|
|
132
144
|
}
|
|
133
145
|
return { type: 'user', identifier: user.id, cloudId: principal.id };
|
|
134
146
|
}
|
|
135
147
|
else if (principal.type === 'group') {
|
|
136
|
-
const group = groups.find(x => x.name === principal.name);
|
|
148
|
+
const group = groups.find((x) => x.name === principal.name);
|
|
137
149
|
if (!group) {
|
|
138
|
-
|
|
150
|
+
logger_1.default.info(`group ${principal.name} is not in this org's group list`);
|
|
139
151
|
return undefined;
|
|
140
152
|
}
|
|
141
153
|
return { type: 'group', identifier: group.id, cloudId: principal.id };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class ExportInstance extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class ExportInstance extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
@@ -6,9 +6,11 @@ const core_1 = require("@oclif/core");
|
|
|
6
6
|
const getAll_1 = require("../types/getAll");
|
|
7
7
|
const export_1 = require("../users/export");
|
|
8
8
|
const export_2 = require("../groups/export");
|
|
9
|
-
|
|
9
|
+
const basecommand_1 = require("../basecommand");
|
|
10
|
+
class ExportInstance extends basecommand_1.BaseCommand {
|
|
10
11
|
async run() {
|
|
11
12
|
const { flags } = await this.parse(ExportInstance);
|
|
13
|
+
await super.setLogLevel(flags.logLevel);
|
|
12
14
|
await (0, getAll_1.getAll)(flags.outDir, flags.overwrite);
|
|
13
15
|
await (0, export_1.exportUsers)(path.join(flags.outDir, 'users.yml'), flags.overwrite);
|
|
14
16
|
await (0, export_2.exportGroups)(path.join(flags.outDir, 'groups.yml'), flags.overwrite);
|
|
@@ -21,6 +23,16 @@ ExportInstance.examples = [
|
|
|
21
23
|
`,
|
|
22
24
|
];
|
|
23
25
|
ExportInstance.flags = {
|
|
24
|
-
outDir: core_1.Flags.string({
|
|
25
|
-
|
|
26
|
+
outDir: core_1.Flags.string({
|
|
27
|
+
char: 'd',
|
|
28
|
+
description: 'The directory to which to export the instance data. Defaults to the current directory',
|
|
29
|
+
required: false,
|
|
30
|
+
default: '.',
|
|
31
|
+
}),
|
|
32
|
+
overwrite: core_1.Flags.boolean({
|
|
33
|
+
char: 'f',
|
|
34
|
+
description: 'Replaces any existing export files in outDir',
|
|
35
|
+
required: false,
|
|
36
|
+
default: false,
|
|
37
|
+
}),
|
|
26
38
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class ImportInstance extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class ImportInstance extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
@@ -8,9 +8,11 @@ const upload_1 = require("../users/upload");
|
|
|
8
8
|
const upload_2 = require("../groups/upload");
|
|
9
9
|
const uploadTypePropertyPolicies_1 = require("../types/uploadTypePropertyPolicies");
|
|
10
10
|
const uploadTypePolicies_1 = require("../types/uploadTypePolicies");
|
|
11
|
-
|
|
11
|
+
const basecommand_1 = require("../basecommand");
|
|
12
|
+
class ImportInstance extends basecommand_1.BaseCommand {
|
|
12
13
|
async run() {
|
|
13
14
|
const { flags } = await this.parse(ImportInstance);
|
|
15
|
+
await super.setLogLevel(flags.logLevel);
|
|
14
16
|
await (0, loadAll_1.loadAll)(flags.dir, true);
|
|
15
17
|
await (0, upload_1.uploadUsers)(path.join(flags.dir, 'users.yml'));
|
|
16
18
|
await (0, upload_2.uploadGroups)(path.join(flags.dir, 'groups.yml'));
|
|
@@ -25,5 +27,10 @@ ImportInstance.examples = [
|
|
|
25
27
|
`,
|
|
26
28
|
];
|
|
27
29
|
ImportInstance.flags = {
|
|
28
|
-
dir: core_1.Flags.string({
|
|
30
|
+
dir: core_1.Flags.string({
|
|
31
|
+
char: 'd',
|
|
32
|
+
description: 'The directory from which to export the instance data. Defaults to the current directory',
|
|
33
|
+
required: false,
|
|
34
|
+
default: '.',
|
|
35
|
+
}),
|
|
29
36
|
};
|
|
@@ -5,21 +5,24 @@ const core_1 = require("@oclif/core");
|
|
|
5
5
|
const login_1 = require("../../auth/login");
|
|
6
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
7
|
const helpers_1 = require("../../helpers/loader-process/helpers");
|
|
8
|
-
|
|
8
|
+
const basecommand_1 = require("../basecommand");
|
|
9
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
10
|
+
class LoadPS extends basecommand_1.BaseCommand {
|
|
9
11
|
async run() {
|
|
10
12
|
const { args, flags } = await this.parse(LoadPS);
|
|
13
|
+
await super.setLogLevel(flags.logLevel);
|
|
11
14
|
try {
|
|
12
15
|
await (0, login_1.authUser)();
|
|
13
|
-
|
|
16
|
+
logger_1.default.info('%s Uploading file', chalk_1.default.yellow.bold('LOADER'));
|
|
14
17
|
const configFileName = args.configFileName;
|
|
15
18
|
await (0, helpers_1.loadLocalFile)(configFileName);
|
|
16
|
-
|
|
19
|
+
logger_1.default.info('%s Uploaded', chalk_1.default.yellow.bold('LOADER'));
|
|
17
20
|
}
|
|
18
21
|
catch (e) {
|
|
19
|
-
|
|
22
|
+
logger_1.default.info(`%s Starting Load Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
22
|
-
|
|
25
|
+
logger_1.default.info('%s Starting Load Complete.', chalk_1.default.green.bold('COMPLETE'));
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
exports.default = LoadPS;
|
|
@@ -29,5 +32,9 @@ LoadPS.examples = [
|
|
|
29
32
|
`,
|
|
30
33
|
];
|
|
31
34
|
LoadPS.args = {
|
|
32
|
-
configFileName: core_1.Args.string({
|
|
35
|
+
configFileName: core_1.Args.string({
|
|
36
|
+
char: 'c',
|
|
37
|
+
description: 'The configuration file location',
|
|
38
|
+
required: true,
|
|
39
|
+
}),
|
|
33
40
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class UploadAndLoadPS extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class UploadAndLoadPS extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static args: {
|
|
@@ -5,22 +5,25 @@ const core_1 = require("@oclif/core");
|
|
|
5
5
|
const login_1 = require("../../auth/login");
|
|
6
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
7
|
const helpers_1 = require("../../helpers/loader-process/helpers");
|
|
8
|
-
|
|
8
|
+
const basecommand_1 = require("../basecommand");
|
|
9
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
10
|
+
class UploadAndLoadPS extends basecommand_1.BaseCommand {
|
|
9
11
|
async run() {
|
|
10
12
|
const { args, flags } = await this.parse(UploadAndLoadPS);
|
|
13
|
+
await super.setLogLevel(flags.logLevel);
|
|
11
14
|
try {
|
|
12
15
|
await (0, login_1.authUser)();
|
|
13
|
-
|
|
16
|
+
logger_1.default.info('%s Uploading file', chalk_1.default.yellow.bold('LOADER'));
|
|
14
17
|
const incomingFileName = args.incomingFile;
|
|
15
18
|
const configFileName = args.configFileName;
|
|
16
19
|
await (0, helpers_1.uploadAndLoadLocalFile)(incomingFileName, configFileName);
|
|
17
|
-
|
|
20
|
+
logger_1.default.info('%s Uploaded', chalk_1.default.yellow.bold('LOADER'));
|
|
18
21
|
}
|
|
19
22
|
catch (e) {
|
|
20
|
-
|
|
23
|
+
logger_1.default.info(`%s Starting Load Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
|
|
21
24
|
return;
|
|
22
25
|
}
|
|
23
|
-
|
|
26
|
+
logger_1.default.info('%s Starting Load Complete.', chalk_1.default.green.bold('COMPLETE'));
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
exports.default = UploadAndLoadPS;
|
|
@@ -30,6 +33,14 @@ UploadAndLoadPS.examples = [
|
|
|
30
33
|
`,
|
|
31
34
|
];
|
|
32
35
|
UploadAndLoadPS.args = {
|
|
33
|
-
incomingFile: core_1.Args.string({
|
|
34
|
-
|
|
36
|
+
incomingFile: core_1.Args.string({
|
|
37
|
+
char: 'f',
|
|
38
|
+
description: 'The incoming file location',
|
|
39
|
+
required: true,
|
|
40
|
+
}),
|
|
41
|
+
configFileName: core_1.Args.string({
|
|
42
|
+
char: 'c',
|
|
43
|
+
description: 'The configuration file location',
|
|
44
|
+
required: true,
|
|
45
|
+
}),
|
|
35
46
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class ExportProjects extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class ExportProjects extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {};
|
|
@@ -5,9 +5,11 @@ const core_1 = require("@oclif/core");
|
|
|
5
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
6
|
const login_1 = require("../../auth/login");
|
|
7
7
|
const helpers_1 = require("../../helpers/projects/helpers");
|
|
8
|
-
|
|
8
|
+
const basecommand_1 = require("../basecommand");
|
|
9
|
+
class ExportProjects extends basecommand_1.BaseCommand {
|
|
9
10
|
async run() {
|
|
10
|
-
const { args } = await this.parse(ExportProjects);
|
|
11
|
+
const { args, flags } = await this.parse(ExportProjects);
|
|
12
|
+
await super.setLogLevel(flags.logLevel);
|
|
11
13
|
try {
|
|
12
14
|
await (0, login_1.authUser)();
|
|
13
15
|
this.log('%s Exporting Project.', chalk_1.default.blue.bold('START'));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class ListProjects extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class ListProjects extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
run(): Promise<void>;
|
|
@@ -2,21 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const sdk_1 = require("@contrail/sdk");
|
|
5
|
-
const core_1 = require("@oclif/core");
|
|
6
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
6
|
const login_1 = require("../../auth/login");
|
|
8
|
-
|
|
7
|
+
const basecommand_1 = require("../basecommand");
|
|
8
|
+
class ListProjects extends basecommand_1.BaseCommand {
|
|
9
9
|
async run() {
|
|
10
|
+
const { flags } = await this.parse(ListProjects);
|
|
11
|
+
await super.setLogLevel(flags.logLevel);
|
|
10
12
|
try {
|
|
11
13
|
await (0, login_1.authUser)();
|
|
12
14
|
this.log('%s Getting Projects.', chalk_1.default.blue.bold('START'));
|
|
13
15
|
const allWorkspaces = await new sdk_1.Entities().get({
|
|
14
16
|
entityName: 'workspace',
|
|
15
|
-
criteria: { isArchived: false }
|
|
17
|
+
criteria: { isArchived: false },
|
|
16
18
|
});
|
|
17
19
|
this.log('%s', chalk_1.default.green.bold('PROJECTS:'));
|
|
18
20
|
//this.log(allWorkspaces.map(w => Object.assign({}, {name: w.name, id: w.id}))); // if we want ids
|
|
19
|
-
this.log(allWorkspaces.map(w => w.name));
|
|
21
|
+
this.log(allWorkspaces.map((w) => w.name));
|
|
20
22
|
this.log('%s Done', chalk_1.default.yellow.bold('PROJECTS'));
|
|
21
23
|
}
|
|
22
24
|
catch (e) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class LoadProject extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class LoadProject extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static args: {
|
|
@@ -6,9 +6,12 @@ const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
|
6
6
|
const login_1 = require("../../auth/login");
|
|
7
7
|
const helpers_1 = require("../../helpers/projects/helpers");
|
|
8
8
|
const core_1 = require("@oclif/core");
|
|
9
|
-
|
|
9
|
+
const basecommand_1 = require("../basecommand");
|
|
10
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
11
|
+
class LoadProject extends basecommand_1.BaseCommand {
|
|
10
12
|
async run() {
|
|
11
|
-
const { args } = await this.parse(LoadProject);
|
|
13
|
+
const { args, flags } = await this.parse(LoadProject);
|
|
14
|
+
await super.setLogLevel(flags.logLevel);
|
|
12
15
|
try {
|
|
13
16
|
await (0, login_1.authUser)();
|
|
14
17
|
this.log('%s Parsing Template.', chalk_1.default.blue.bold('START'));
|
|
@@ -32,12 +35,15 @@ LoadProject.examples = [
|
|
|
32
35
|
`,
|
|
33
36
|
];
|
|
34
37
|
LoadProject.args = {
|
|
35
|
-
templateFileLocation: core_1.Args.string({
|
|
38
|
+
templateFileLocation: core_1.Args.string({
|
|
39
|
+
description: 'The location to the template file',
|
|
40
|
+
required: true,
|
|
41
|
+
}),
|
|
36
42
|
};
|
|
37
43
|
async function uploadProject(templateFileLocation) {
|
|
38
44
|
const projectConfigurationFromFile = (0, helpers_1.getProjectFile)(templateFileLocation);
|
|
39
45
|
const projectConfiguration = getProjectConfiguration(projectConfigurationFromFile);
|
|
40
|
-
|
|
46
|
+
logger_1.default.info('Configuring Project.');
|
|
41
47
|
await sdk_1.Request.request('/project-configurator', {
|
|
42
48
|
method: 'POST',
|
|
43
49
|
body: JSON.stringify(projectConfiguration),
|
|
@@ -48,7 +54,9 @@ async function uploadProject(templateFileLocation) {
|
|
|
48
54
|
});
|
|
49
55
|
}
|
|
50
56
|
function getProjectConfiguration(projectConfigurationFromFile) {
|
|
51
|
-
if (!projectConfigurationFromFile.allFolders &&
|
|
57
|
+
if (!projectConfigurationFromFile.allFolders &&
|
|
58
|
+
!projectConfigurationFromFile.allAssortments &&
|
|
59
|
+
!projectConfigurationFromFile.allAssortmentRelationships) {
|
|
52
60
|
return projectConfigurationFromFile;
|
|
53
61
|
}
|
|
54
62
|
const parsed = parseToProjectConfiguration(projectConfigurationFromFile);
|
|
@@ -74,7 +82,7 @@ function parseToProjectConfiguration(projectConfigurationFromFile) {
|
|
|
74
82
|
for (const assortmentRelationships of projectConfigurationFromFile.allAssortmentRelationships) {
|
|
75
83
|
const assortment = assortmentsByIdentifier[assortmentRelationships.identifier];
|
|
76
84
|
if (!assortment) {
|
|
77
|
-
|
|
85
|
+
logger_1.default.warn('Relationship defined for assortment that is not defined.', assortmentRelationships);
|
|
78
86
|
}
|
|
79
87
|
else {
|
|
80
88
|
Object.assign(assortment, assortmentRelationships);
|
|
@@ -83,7 +91,7 @@ function parseToProjectConfiguration(projectConfigurationFromFile) {
|
|
|
83
91
|
for (const assortment of projectConfigurationFromFile.allAssortments) {
|
|
84
92
|
const folder = foldersByIdentifier[assortment.folderIdentifier];
|
|
85
93
|
if (!folder) {
|
|
86
|
-
|
|
94
|
+
logger_1.default.warn('Assortment defined for folder that is not defined.', assortment);
|
|
87
95
|
}
|
|
88
96
|
if (!folder.assortments) {
|
|
89
97
|
folder.assortments = [];
|
|
@@ -94,7 +102,7 @@ function parseToProjectConfiguration(projectConfigurationFromFile) {
|
|
|
94
102
|
for (const folderSlim of projectConfigurationFromFile.allFolders) {
|
|
95
103
|
const folder = foldersByIdentifier[folderSlim.folderIdentifier];
|
|
96
104
|
if (!folder) {
|
|
97
|
-
|
|
105
|
+
logger_1.default.warn('Folder defined for folder that is not defined.', folderSlim);
|
|
98
106
|
}
|
|
99
107
|
if (!folder.subFolders) {
|
|
100
108
|
folder.subFolders = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class ExportOptionSetsHierarchies extends
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
|
+
export default class ExportOptionSetsHierarchies extends BaseCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
run(): Promise<void>;
|
|
@@ -8,10 +8,13 @@ const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
|
8
8
|
const sdk_1 = require("@contrail/sdk");
|
|
9
9
|
const login_1 = require("../../auth/login");
|
|
10
10
|
const util_1 = require("@contrail/util");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
11
|
+
const basecommand_1 = require("../basecommand");
|
|
12
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
13
|
+
const json2csv_1 = require("json2csv");
|
|
14
|
+
class ExportOptionSetsHierarchies extends basecommand_1.BaseCommand {
|
|
14
15
|
async run() {
|
|
16
|
+
const { flags } = await this.parse(ExportOptionSetsHierarchies);
|
|
17
|
+
await super.setLogLevel(flags.logLevel);
|
|
15
18
|
await exportOptionSetsHierarchies();
|
|
16
19
|
}
|
|
17
20
|
}
|
|
@@ -24,15 +27,15 @@ ExportOptionSetsHierarchies.examples = [
|
|
|
24
27
|
async function exportOptionSetsHierarchies() {
|
|
25
28
|
try {
|
|
26
29
|
await (0, login_1.authUser)();
|
|
27
|
-
|
|
30
|
+
logger_1.default.info('%s Exporting local file', chalk_1.default.yellow.bold('OPTION SET HIERARCHY EXPORT'));
|
|
28
31
|
await exportOptionSetHierarchies();
|
|
29
|
-
|
|
32
|
+
logger_1.default.info('%s Exported', chalk_1.default.yellow.bold('OPTION SET HIERARCHY EXPORT'));
|
|
30
33
|
}
|
|
31
34
|
catch (e) {
|
|
32
|
-
|
|
35
|
+
logger_1.default.info(`%s EXPORT Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
|
|
33
36
|
return;
|
|
34
37
|
}
|
|
35
|
-
|
|
38
|
+
logger_1.default.info('%s EXPORT Complete.', chalk_1.default.green.bold('COMPLETE'));
|
|
36
39
|
}
|
|
37
40
|
exports.exportOptionSetsHierarchies = exportOptionSetsHierarchies;
|
|
38
41
|
async function exportOptionSetHierarchies() {
|
|
@@ -45,7 +48,7 @@ async function exportOptionSetHierarchies() {
|
|
|
45
48
|
for (const optionSetHierarchy of allOptionSetHierarchies) {
|
|
46
49
|
const levelNameInOrder = [];
|
|
47
50
|
for (const optionSetId of optionSetHierarchy.hierarchy) {
|
|
48
|
-
const os = currentOptionSets.find(os => os.id === optionSetId);
|
|
51
|
+
const os = currentOptionSets.find((os) => os.id === optionSetId);
|
|
49
52
|
levelNameInOrder.push(util_1.StringUtil.convertToCamelCase(os.name));
|
|
50
53
|
}
|
|
51
54
|
transformAndSave(optionSetHierarchy, levelNameInOrder);
|
|
@@ -117,14 +120,14 @@ function saveData(name, data, fieldNames) {
|
|
|
117
120
|
const separator = (0, common_1.getSeparatorByPlatform)();
|
|
118
121
|
const opts = { fieldNames };
|
|
119
122
|
try {
|
|
120
|
-
const parser = new Parser(opts);
|
|
123
|
+
const parser = new json2csv_1.Parser(opts);
|
|
121
124
|
const csv = parser.parse(data);
|
|
122
|
-
fs_1.default.mkdirSync(CURRENT_DIR + separator
|
|
123
|
-
fs_1.default.writeFileSync(CURRENT_DIR + separator
|
|
125
|
+
fs_1.default.mkdirSync(`${CURRENT_DIR + separator}option-set-hierarchies`, { recursive: true });
|
|
126
|
+
fs_1.default.writeFileSync(`${CURRENT_DIR + separator}option-set-hierarchies${separator}${name}.csv`, csv, {
|
|
124
127
|
flag: 'w',
|
|
125
128
|
});
|
|
126
129
|
}
|
|
127
130
|
catch (err) {
|
|
128
|
-
|
|
131
|
+
logger_1.default.error(err);
|
|
129
132
|
}
|
|
130
133
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseCommand } from '../basecommand';
|
|
2
2
|
export interface DataHolder {
|
|
3
3
|
types: any[];
|
|
4
4
|
optionSets: any[];
|
|
@@ -25,7 +25,7 @@ export interface ReducedDataHolder {
|
|
|
25
25
|
reducedTypePolicies: any[];
|
|
26
26
|
reducedTypePolicyLinks: any[];
|
|
27
27
|
}
|
|
28
|
-
export default class GetAllTypes extends
|
|
28
|
+
export default class GetAllTypes extends BaseCommand {
|
|
29
29
|
static description: string;
|
|
30
30
|
static examples: string[];
|
|
31
31
|
static flags: {
|