@contrail/cli 3.5.3-alpha.d978e28 → 3.5.3-alpha.e7995dc
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 +1 -1
- package/dist/commands/groups/export.js +1 -13
- package/dist/commands/groups/import.js +2 -15
- package/dist/commands/org-config/export.js +21 -29
- package/dist/commands/org-config/import.js +25 -32
- package/dist/commands/types/mergeOptionSets.js +2 -9
- package/dist/commands/types/mergeTypeProperties.js +2 -6
- package/dist/commands/types/parseOptionSetsLocalFiles.js +3 -7
- package/dist/commands/users/export.js +1 -13
- package/dist/commands/users/import.js +2 -15
- package/dist/commands/workflow-templates/export.js +1 -13
- package/dist/helpers/file-helpers.d.ts +2 -0
- package/dist/helpers/file-helpers.js +25 -1
- package/dist/helpers/projects/helpers.js +2 -6
- package/dist/helpers/types/type-parser.js +9 -15
- package/oclif.manifest.json +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ $ npm install -g @contrail/cli
|
|
|
17
17
|
$ contrail COMMAND
|
|
18
18
|
running command...
|
|
19
19
|
$ contrail (--version)
|
|
20
|
-
@contrail/cli/3.5.3-alpha.
|
|
20
|
+
@contrail/cli/3.5.3-alpha.e7995dc linux-x64 node-v24.19.0
|
|
21
21
|
$ contrail --help [COMMAND]
|
|
22
22
|
USAGE
|
|
23
23
|
$ contrail COMMAND
|
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.exportGroups = exports.DEFAULT_FILE_LOCATION = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
6
|
const login_1 = require("../../auth/login");
|
|
9
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
10
7
|
const core_1 = require("@oclif/core");
|
|
11
8
|
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
12
9
|
const users_1 = require("../../api/users");
|
|
@@ -61,18 +58,9 @@ async function exportGroups(fileLocation, overwrite) {
|
|
|
61
58
|
});
|
|
62
59
|
}
|
|
63
60
|
groups = groups.sort((one, two) => (one.name < two.name ? -1 : 1));
|
|
64
|
-
await saveData(groups, fileLocation, overwrite);
|
|
61
|
+
await (0, file_helpers_1.saveData)(groups, fileLocation, overwrite);
|
|
65
62
|
}
|
|
66
63
|
exports.exportGroups = exportGroups;
|
|
67
|
-
async function saveData(data, fileLocation, overwrite) {
|
|
68
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
69
|
-
const CURRENT_DIR = process.cwd();
|
|
70
|
-
const pathToWrite = path.join(CURRENT_DIR, fileLocation);
|
|
71
|
-
if (fs_1.default.existsSync(pathToWrite)) {
|
|
72
|
-
await (0, file_helpers_1.safeFileOverwrite)(pathToWrite, overwrite);
|
|
73
|
-
}
|
|
74
|
-
fs_1.default.writeFileSync(pathToWrite, yamlStr, 'utf8');
|
|
75
|
-
}
|
|
76
64
|
function getGroupPrincipals(group, allGroups, orgUsers) {
|
|
77
65
|
if (!group?.groupPrincipals) {
|
|
78
66
|
return [];
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.uploadGroups = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const sdk_1 = require("@contrail/sdk");
|
|
7
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
8
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
9
7
|
const login_1 = require("../../auth/login");
|
|
10
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
11
8
|
const core_1 = require("@oclif/core");
|
|
9
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
12
10
|
const basecommand_1 = require("../../basecommand");
|
|
13
11
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
14
12
|
class ImportGroups extends basecommand_1.BaseCommand {
|
|
@@ -39,23 +37,12 @@ class ImportGroups extends basecommand_1.BaseCommand {
|
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
exports.default = ImportGroups;
|
|
42
|
-
function getGroupsFile(fileLocation) {
|
|
43
|
-
const CURRENT_DIR = process.cwd();
|
|
44
|
-
try {
|
|
45
|
-
const fullPath = path.join(CURRENT_DIR, fileLocation);
|
|
46
|
-
const doc = js_yaml_1.default.load(fs_1.default.readFileSync(fullPath, 'utf8'));
|
|
47
|
-
return doc;
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
throw new Error(`ERROR PARSING YAML: ${e}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
40
|
async function uploadGroups(fileLocation) {
|
|
54
41
|
const existingGroups = await new sdk_1.Entities().get({
|
|
55
42
|
entityName: 'group',
|
|
56
43
|
relations: ['groupPrincipals'],
|
|
57
44
|
});
|
|
58
|
-
const groupsToImport =
|
|
45
|
+
const groupsToImport = (0, file_helpers_1.loadData)(fileLocation);
|
|
59
46
|
const orgUsers = await new sdk_1.Entities().get({
|
|
60
47
|
entityName: 'user-org',
|
|
61
48
|
});
|
|
@@ -6,7 +6,6 @@ const path = tslib_1.__importStar(require("path"));
|
|
|
6
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
7
|
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
8
|
const login_1 = require("../../auth/login");
|
|
9
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
10
9
|
const core_1 = require("@oclif/core");
|
|
11
10
|
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
12
11
|
const org_config_1 = require("../../api/org-config");
|
|
@@ -44,39 +43,32 @@ class ExportOrgConfig extends basecommand_1.BaseCommand {
|
|
|
44
43
|
}),
|
|
45
44
|
};
|
|
46
45
|
async run() {
|
|
47
|
-
|
|
46
|
+
try {
|
|
47
|
+
await (0, login_1.authUser)();
|
|
48
|
+
this.log(`${chalk_1.default.blue.bold('START')} Getting Org Config.`);
|
|
49
|
+
this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Exporting`);
|
|
50
|
+
await exportOrgConfig(this.flags.outDir, this.flags.overwrite);
|
|
51
|
+
this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Exported`);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Org Config Export Failed. ${e}`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Org Config Export Complete.`);
|
|
48
58
|
}
|
|
49
59
|
}
|
|
50
60
|
exports.default = ExportOrgConfig;
|
|
51
61
|
async function exportOrgConfig(outDir, overwrite) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')}
|
|
55
|
-
const orgConfigs = await (0, org_config_1.getOrgConfigs)();
|
|
56
|
-
if (!Array.isArray(orgConfigs) || orgConfigs.length === 0) {
|
|
57
|
-
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} No org config found. Skipping.`);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
const orgConfig = { ...orgConfigs[0] };
|
|
61
|
-
for (const field of ORG_SPECIFIC_FIELDS) {
|
|
62
|
-
delete orgConfig[field];
|
|
63
|
-
}
|
|
64
|
-
await saveData(orgConfig, outDir, overwrite);
|
|
65
|
-
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} Exported`);
|
|
66
|
-
}
|
|
67
|
-
catch (e) {
|
|
68
|
-
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Org Config Export Failed. ${e}`);
|
|
62
|
+
const orgConfigs = await (0, org_config_1.getOrgConfigs)();
|
|
63
|
+
if (!orgConfigs?.length) {
|
|
64
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} No org config found. Skipping.`);
|
|
69
65
|
return;
|
|
70
66
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
async function saveData(data, dir, overwrite) {
|
|
75
|
-
const CURRENT_DIR = process.cwd();
|
|
76
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
77
|
-
const pathToWrite = path.join(CURRENT_DIR, dir, 'org-config.yml');
|
|
78
|
-
if (fs_1.default.existsSync(pathToWrite)) {
|
|
79
|
-
await (0, file_helpers_1.safeFileOverwrite)(pathToWrite, overwrite);
|
|
67
|
+
const orgConfig = { ...orgConfigs[0] };
|
|
68
|
+
for (const field of ORG_SPECIFIC_FIELDS) {
|
|
69
|
+
delete orgConfig[field];
|
|
80
70
|
}
|
|
81
|
-
fs_1.default.
|
|
71
|
+
fs_1.default.mkdirSync(path.resolve(outDir), { recursive: true });
|
|
72
|
+
await (0, file_helpers_1.saveData)(orgConfig, path.join(outDir, 'org-config.yml'), overwrite);
|
|
82
73
|
}
|
|
74
|
+
exports.exportOrgConfig = exportOrgConfig;
|
|
@@ -6,8 +6,8 @@ const path = tslib_1.__importStar(require("path"));
|
|
|
6
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
7
|
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
8
|
const login_1 = require("../../auth/login");
|
|
9
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
10
9
|
const core_1 = require("@oclif/core");
|
|
10
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
11
11
|
const org_config_1 = require("../../api/org-config");
|
|
12
12
|
const basecommand_1 = require("../../basecommand");
|
|
13
13
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
@@ -27,44 +27,37 @@ class ImportOrgConfig extends basecommand_1.BaseCommand {
|
|
|
27
27
|
}),
|
|
28
28
|
};
|
|
29
29
|
async run() {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
await (0, login_1.authUser)();
|
|
37
|
-
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} Uploading`);
|
|
38
|
-
const orgConfig = loadOrgConfig(dir);
|
|
39
|
-
if (!orgConfig || typeof orgConfig !== 'object') {
|
|
40
|
-
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} No org config found in ${dir}. Skipping.`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const existingOrgConfigs = await (0, org_config_1.getOrgConfigs)();
|
|
44
|
-
if (Array.isArray(existingOrgConfigs) && existingOrgConfigs.length > 0) {
|
|
45
|
-
await (0, org_config_1.updateOrgConfig)(existingOrgConfigs[0].id, orgConfig);
|
|
30
|
+
try {
|
|
31
|
+
await (0, login_1.authUser)();
|
|
32
|
+
this.log(`${chalk_1.default.blue.bold('START')} Uploading Org Config.`);
|
|
33
|
+
this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Uploading`);
|
|
34
|
+
await uploadOrgConfig(this.flags.dir);
|
|
35
|
+
this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Uploaded`);
|
|
46
36
|
}
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
catch (e) {
|
|
38
|
+
this.log(`${chalk_1.default.red.bold('FAIL')} Org Config Upload Failed. ${e}`);
|
|
39
|
+
return;
|
|
49
40
|
}
|
|
50
|
-
|
|
41
|
+
this.log(`${chalk_1.default.green.bold('COMPLETE')} Org Config Upload Complete.`);
|
|
51
42
|
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Org Config Upload Failed. ${e}`);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Org Config Upload Complete.`);
|
|
57
43
|
}
|
|
58
|
-
exports.
|
|
59
|
-
function
|
|
60
|
-
const filePath = path.join(
|
|
44
|
+
exports.default = ImportOrgConfig;
|
|
45
|
+
async function uploadOrgConfig(dir) {
|
|
46
|
+
const filePath = path.join(dir, 'org-config.yml');
|
|
61
47
|
if (!fs_1.default.existsSync(filePath)) {
|
|
48
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} No org config found in ${dir}. Skipping.`);
|
|
62
49
|
return;
|
|
63
50
|
}
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
const orgConfig = (0, file_helpers_1.loadData)(filePath);
|
|
52
|
+
if (!orgConfig || typeof orgConfig !== 'object' || Array.isArray(orgConfig)) {
|
|
53
|
+
throw new Error(`${filePath} must contain a single YAML object`);
|
|
54
|
+
}
|
|
55
|
+
const existingOrgConfigs = await (0, org_config_1.getOrgConfigs)();
|
|
56
|
+
if (existingOrgConfigs?.length) {
|
|
57
|
+
await (0, org_config_1.updateOrgConfig)(existingOrgConfigs[0].id, orgConfig);
|
|
66
58
|
}
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
else {
|
|
60
|
+
await (0, org_config_1.createOrgConfig)(orgConfig);
|
|
69
61
|
}
|
|
70
62
|
}
|
|
63
|
+
exports.uploadOrgConfig = uploadOrgConfig;
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
const path = tslib_1.__importStar(require("path"));
|
|
5
4
|
const sdk_1 = require("@contrail/sdk");
|
|
6
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
7
5
|
const login_1 = require("../../auth/login");
|
|
8
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
9
7
|
const core_1 = require("@oclif/core");
|
|
10
8
|
const basecommand_1 = require("../../basecommand");
|
|
11
9
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
12
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
13
10
|
const option_set_helper_1 = require("../../helpers/types/option-set-helper");
|
|
11
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
14
12
|
class MergeOptionSets extends basecommand_1.BaseCommand {
|
|
15
13
|
static description = 'Merge the OptionSets from an existing org and the OptionSets passed in. OptionSets File must be .yml or a directory with yml files. The files can contain a single option set or an array of option sets.';
|
|
16
14
|
static examples = [
|
|
@@ -88,7 +86,7 @@ async function mergeOptionSets(fileLocation) {
|
|
|
88
86
|
mergedOptionSets.push(currentOptionSet);
|
|
89
87
|
}
|
|
90
88
|
}
|
|
91
|
-
saveData(mergedOptionSets);
|
|
89
|
+
await (0, file_helpers_1.saveData)(mergedOptionSets, 'merged_optionSets.yml', true);
|
|
92
90
|
}
|
|
93
91
|
function mergeOptionSet(existingOptionSet, uploadedOptionSet) {
|
|
94
92
|
const merged = {
|
|
@@ -110,8 +108,3 @@ function mergeOptionSet(existingOptionSet, uploadedOptionSet) {
|
|
|
110
108
|
}
|
|
111
109
|
return merged;
|
|
112
110
|
}
|
|
113
|
-
function saveData(data) {
|
|
114
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
115
|
-
const CURRENT_DIR = process.cwd();
|
|
116
|
-
fs_1.default.writeFileSync(path.resolve(path.join(CURRENT_DIR, 'merged_optionSets.yml')), yamlStr, 'utf8');
|
|
117
|
-
}
|
|
@@ -11,6 +11,7 @@ const types_1 = require("@contrail/org-config-migration/lib/types");
|
|
|
11
11
|
const types_2 = require("../../api/types");
|
|
12
12
|
const basecommand_1 = require("../../basecommand");
|
|
13
13
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
14
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
14
15
|
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
15
16
|
class MergeTypeProperties extends basecommand_1.BaseCommand {
|
|
16
17
|
static description = 'Merge the TypeProperties from an existing org and the TypeProperties passed in. Add to Types via TypePath File must be .yml';
|
|
@@ -74,7 +75,7 @@ async function mergeTypeProperties(fileLocation, typePaths) {
|
|
|
74
75
|
}
|
|
75
76
|
mergeType(foundType, uploadedTypeProperties);
|
|
76
77
|
}
|
|
77
|
-
saveData({ types: reducedData.reducedTypes });
|
|
78
|
+
await (0, file_helpers_1.saveData)({ types: reducedData.reducedTypes }, 'merged_types.yml', true);
|
|
78
79
|
}
|
|
79
80
|
function mergeType(reducedType, typePropertiesToAdd) {
|
|
80
81
|
for (const typeProperty of typePropertiesToAdd) {
|
|
@@ -84,8 +85,3 @@ function mergeType(reducedType, typePropertiesToAdd) {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
|
-
function saveData(data) {
|
|
88
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
89
|
-
const CURRENT_DIR = process.cwd();
|
|
90
|
-
fs_1.default.writeFileSync(path.resolve(path.join(CURRENT_DIR, 'merged_types.yml')), yamlStr, 'utf8');
|
|
91
|
-
}
|
|
@@ -12,6 +12,7 @@ const core_1 = require("@oclif/core");
|
|
|
12
12
|
const basecommand_1 = require("../../basecommand");
|
|
13
13
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
14
14
|
const common_1 = require("../../common");
|
|
15
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
15
16
|
class ParseOptionSetsLocalFiles extends basecommand_1.BaseCommand {
|
|
16
17
|
static description = 'Parse CSV files into OptionSets. Style denotes the format the csv is in. If the csv file has a column for option set' +
|
|
17
18
|
'name, option key, and option label, use "NameAndLabelAndKey". If the file has one column for each option set with ' +
|
|
@@ -109,22 +110,17 @@ async function parseOptionSetsLocalFiles(fileLocation, csvStyle) {
|
|
|
109
110
|
const uploadedOptionData = await loadOptionSetCSV(fileLocation);
|
|
110
111
|
if (csvStyle === 'NameAndLabelAndKey') {
|
|
111
112
|
const parsedOptionSets = parseNameAndLabelAndKey(uploadedOptionData);
|
|
112
|
-
saveData(parsedOptionSets);
|
|
113
|
+
await (0, file_helpers_1.saveData)(parsedOptionSets, 'parsed_local_optionSets.yml', true);
|
|
113
114
|
}
|
|
114
115
|
if (csvStyle === 'LabelsInColumn') {
|
|
115
116
|
const parsedOptionSets = parseLabelsInColumn(uploadedOptionData);
|
|
116
|
-
saveData(parsedOptionSets);
|
|
117
|
+
await (0, file_helpers_1.saveData)(parsedOptionSets, 'parsed_local_optionSets.yml', true);
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
async function parseOptionSetsToFolderStructure(fileLocation) {
|
|
120
121
|
const uploadedOptionData = await loadOptionSets(fileLocation);
|
|
121
122
|
saveDataInFolders(uploadedOptionData);
|
|
122
123
|
}
|
|
123
|
-
function saveData(data) {
|
|
124
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
125
|
-
const CURRENT_DIR = process.cwd();
|
|
126
|
-
fs_1.default.writeFileSync(path.resolve(path.join(CURRENT_DIR, 'parsed_local_optionSets.yml')), yamlStr, 'utf8');
|
|
127
|
-
}
|
|
128
124
|
function saveDataInFolders(data) {
|
|
129
125
|
const folder = { filename: 'option-sets', split: true, fileLabel: 'name' };
|
|
130
126
|
const dir = 'merged_option_sets';
|
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.exportUsers = exports.DEFAULT_FILE_LOCATION = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
6
|
const login_1 = require("../../auth/login");
|
|
9
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
10
7
|
const core_1 = require("@oclif/core");
|
|
11
8
|
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
12
9
|
const users_1 = require("../../api/users");
|
|
@@ -63,15 +60,6 @@ async function exportUsers(fileLocation, overwrite) {
|
|
|
63
60
|
});
|
|
64
61
|
}
|
|
65
62
|
users = users.sort((one, two) => (one.email < two.email ? -1 : 1));
|
|
66
|
-
await saveData(users, fileLocation, overwrite);
|
|
63
|
+
await (0, file_helpers_1.saveData)(users, fileLocation, overwrite);
|
|
67
64
|
}
|
|
68
65
|
exports.exportUsers = exportUsers;
|
|
69
|
-
async function saveData(data, fileLocation, overwrite) {
|
|
70
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
71
|
-
const CURRENT_DIR = process.cwd();
|
|
72
|
-
const pathToWrite = path.resolve(path.join(CURRENT_DIR, fileLocation));
|
|
73
|
-
if (fs_1.default.existsSync(pathToWrite)) {
|
|
74
|
-
await (0, file_helpers_1.safeFileOverwrite)(pathToWrite, overwrite);
|
|
75
|
-
}
|
|
76
|
-
fs_1.default.writeFileSync(pathToWrite, yamlStr, 'utf8');
|
|
77
|
-
}
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.uploadUsers = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const sdk_1 = require("@contrail/sdk");
|
|
7
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
8
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
9
7
|
const login_1 = require("../../auth/login");
|
|
10
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
11
8
|
const core_1 = require("@oclif/core");
|
|
9
|
+
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
12
10
|
const basecommand_1 = require("../../basecommand");
|
|
13
11
|
class ImportUsers extends basecommand_1.BaseCommand {
|
|
14
12
|
static description = 'Import all users in the users.yml file';
|
|
@@ -38,19 +36,8 @@ class ImportUsers extends basecommand_1.BaseCommand {
|
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
38
|
exports.default = ImportUsers;
|
|
41
|
-
function getUsersFile(fileLocation) {
|
|
42
|
-
const CURRENT_DIR = process.cwd();
|
|
43
|
-
try {
|
|
44
|
-
const fullPath = path.join(CURRENT_DIR, fileLocation);
|
|
45
|
-
const doc = js_yaml_1.default.load(fs_1.default.readFileSync(fullPath, 'utf8'));
|
|
46
|
-
return doc;
|
|
47
|
-
}
|
|
48
|
-
catch (e) {
|
|
49
|
-
throw new Error(`ERROR PARSING YAML: ${e}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
39
|
async function uploadUsers(fileLocation) {
|
|
53
|
-
const users =
|
|
40
|
+
const users = (0, file_helpers_1.loadData)(fileLocation);
|
|
54
41
|
for (const user of users) {
|
|
55
42
|
const role = user.role;
|
|
56
43
|
const email = user.email;
|
|
@@ -2,12 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.exportWorkflows = exports.DEFAULT_FILE_LOCATION = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const path = tslib_1.__importStar(require("path"));
|
|
6
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
6
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
9
7
|
const login_1 = require("../../auth/login");
|
|
10
|
-
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
11
8
|
const core_1 = require("@oclif/core");
|
|
12
9
|
const file_helpers_1 = require("../../helpers/file-helpers");
|
|
13
10
|
const event_workflow_templates_1 = require("../../api/event-workflow-templates");
|
|
@@ -65,15 +62,6 @@ async function exportWorkflows(fileLocation, overwrite) {
|
|
|
65
62
|
await (0, helper_1.populateActionIdentifiers)(exportWorkflow);
|
|
66
63
|
workflowsObj.workflows.push(exportWorkflow);
|
|
67
64
|
}
|
|
68
|
-
await saveData(workflowsObj, fileLocation, overwrite);
|
|
65
|
+
await (0, file_helpers_1.saveData)(workflowsObj, fileLocation, overwrite);
|
|
69
66
|
}
|
|
70
67
|
exports.exportWorkflows = exportWorkflows;
|
|
71
|
-
async function saveData(data, fileLocation, overwrite) {
|
|
72
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
73
|
-
const CURRENT_DIR = process.cwd();
|
|
74
|
-
const pathToWrite = path.resolve(path.join(CURRENT_DIR, fileLocation));
|
|
75
|
-
if (fs_1.default.existsSync(pathToWrite)) {
|
|
76
|
-
await (0, file_helpers_1.safeFileOverwrite)(pathToWrite, overwrite);
|
|
77
|
-
}
|
|
78
|
-
fs_1.default.writeFileSync(pathToWrite, yamlStr, 'utf8');
|
|
79
|
-
}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export declare function safeFileOverwrite(fileLocation: string, overwrite: boolean): Promise<boolean>;
|
|
2
2
|
export declare function parseCSVData(data: string): any;
|
|
3
|
+
export declare function saveData(data: any, fileLocation: string, overwrite: boolean): Promise<void>;
|
|
4
|
+
export declare function loadData(fileLocation: string): any;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseCSVData = exports.safeFileOverwrite = void 0;
|
|
3
|
+
exports.loadData = exports.saveData = exports.parseCSVData = exports.safeFileOverwrite = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const path = tslib_1.__importStar(require("path"));
|
|
6
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
5
7
|
const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
|
|
8
|
+
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
6
9
|
const logger_1 = tslib_1.__importDefault(require("../logger"));
|
|
7
10
|
const sync_1 = require("csv-parse/sync");
|
|
8
11
|
const PASS_FORCE_TO_OVERWRITE = 'Pass --overwrite to overwrite without prompting';
|
|
@@ -34,3 +37,24 @@ function parseCSVData(data) {
|
|
|
34
37
|
});
|
|
35
38
|
}
|
|
36
39
|
exports.parseCSVData = parseCSVData;
|
|
40
|
+
//saves data as yaml to fileLocation (resolved against the current directory), prompting before overwriting unless overwrite is passed
|
|
41
|
+
async function saveData(data, fileLocation, overwrite) {
|
|
42
|
+
const yamlStr = js_yaml_1.default.dump(data);
|
|
43
|
+
const pathToWrite = path.resolve(fileLocation);
|
|
44
|
+
if (fs_1.default.existsSync(pathToWrite)) {
|
|
45
|
+
await safeFileOverwrite(pathToWrite, overwrite);
|
|
46
|
+
}
|
|
47
|
+
fs_1.default.writeFileSync(pathToWrite, yamlStr, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
exports.saveData = saveData;
|
|
50
|
+
//loads yaml data from fileLocation (resolved against the current directory)
|
|
51
|
+
function loadData(fileLocation) {
|
|
52
|
+
const pathToRead = path.resolve(fileLocation);
|
|
53
|
+
try {
|
|
54
|
+
return js_yaml_1.default.load(fs_1.default.readFileSync(pathToRead, 'utf8'));
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
throw new Error(`ERROR PARSING YAML: ${e}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.loadData = loadData;
|
|
@@ -8,6 +8,7 @@ const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
|
8
8
|
const sdk_1 = require("@contrail/sdk");
|
|
9
9
|
const util_1 = require("@contrail/util");
|
|
10
10
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
11
|
+
const file_helpers_1 = require("../file-helpers");
|
|
11
12
|
function getProjectFile(fileName) {
|
|
12
13
|
const CURRENT_DIR = process.cwd();
|
|
13
14
|
try {
|
|
@@ -42,7 +43,7 @@ async function exportProject(name) {
|
|
|
42
43
|
const allAssortments = [];
|
|
43
44
|
await getAssortmentsAndSubFolders(workspace.id, projectConfiguration.assortments, projectConfiguration.subFolders, allAssortments);
|
|
44
45
|
await convertRelationshipsInFolders(projectConfiguration, allAssortments);
|
|
45
|
-
saveData({ projectConfiguration: projectConfiguration }, name);
|
|
46
|
+
await (0, file_helpers_1.saveData)({ projectConfiguration: projectConfiguration }, `${name}-export.yml`, true);
|
|
46
47
|
}
|
|
47
48
|
exports.exportProject = exportProject;
|
|
48
49
|
async function getAssortmentsAndSubFolders(parentId, assortments, subFolders, allAssortments) {
|
|
@@ -160,8 +161,3 @@ function deleteNonUserKeys(assortment) {
|
|
|
160
161
|
delete assortment.updatedOn;
|
|
161
162
|
delete assortment.workspaceId;
|
|
162
163
|
}
|
|
163
|
-
function saveData(data, name) {
|
|
164
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
165
|
-
const CURRENT_DIR = process.cwd();
|
|
166
|
-
fs_1.default.writeFileSync(path.join(CURRENT_DIR, `${name}-export.yml`), yamlStr, 'utf8');
|
|
167
|
-
}
|
|
@@ -4,12 +4,11 @@ exports.parseTypesFromFiles = exports.parseTypesFromTemplateAndDataFromLocalFile
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const path = tslib_1.__importStar(require("path"));
|
|
6
6
|
const types_1 = require("@contrail/types");
|
|
7
|
-
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
7
|
const csvToJson = tslib_1.__importStar(require("csvtojson"));
|
|
9
8
|
const login_1 = require("../../auth/login");
|
|
10
9
|
const csv_parser_1 = require("../../helpers/types/csv-parser");
|
|
11
10
|
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
12
|
-
const
|
|
11
|
+
const file_helpers_1 = require("../file-helpers");
|
|
13
12
|
async function loadDataFromLocalCSV(fileName) {
|
|
14
13
|
const CURRENT_DIR = process.cwd();
|
|
15
14
|
try {
|
|
@@ -37,8 +36,8 @@ async function parseTypesFromLocalFiles(fileLocations) {
|
|
|
37
36
|
}
|
|
38
37
|
logger_1.default.info(`CSV imports were successful. ${csvJSONData?.length} total rows found.`);
|
|
39
38
|
const suggestions = (0, types_1.GetSuggestedTypes)(csvJSONData);
|
|
40
|
-
saveData(suggestions.OptionSets, 'parsed_optionSets.yml');
|
|
41
|
-
saveData({ typeProperties: suggestions.TypeProperties }, 'parsed_typeProperties.yml');
|
|
39
|
+
await (0, file_helpers_1.saveData)(suggestions.OptionSets, 'parsed_optionSets.yml', true);
|
|
40
|
+
await (0, file_helpers_1.saveData)({ typeProperties: suggestions.TypeProperties }, 'parsed_typeProperties.yml', true);
|
|
42
41
|
}
|
|
43
42
|
exports.parseTypesFromLocalFiles = parseTypesFromLocalFiles;
|
|
44
43
|
async function parseTypesFromTemplateFromLocalFiles(templateFileLocation, dataFileLocation) {
|
|
@@ -57,8 +56,8 @@ async function parseTypesFromTemplateFromLocalFiles(templateFileLocation, dataFi
|
|
|
57
56
|
throw e;
|
|
58
57
|
}
|
|
59
58
|
const types = (0, types_1.GetTypesFromTemplate)(templateCSVData, dataCSVData);
|
|
60
|
-
saveData(types.OptionSets, 'parsed_optionSets.yml');
|
|
61
|
-
saveData({ TypePropertiesByEntity: types.TypePropertiesByEntity }, 'parsed_TypePropertiesByEntity.yml');
|
|
59
|
+
await (0, file_helpers_1.saveData)(types.OptionSets, 'parsed_optionSets.yml', true);
|
|
60
|
+
await (0, file_helpers_1.saveData)({ TypePropertiesByEntity: types.TypePropertiesByEntity }, 'parsed_TypePropertiesByEntity.yml', true);
|
|
62
61
|
}
|
|
63
62
|
exports.parseTypesFromTemplateFromLocalFiles = parseTypesFromTemplateFromLocalFiles;
|
|
64
63
|
async function parseTypesFromTemplateAndDataFromLocalFiles(templateFileLocation, dataFileLocations) {
|
|
@@ -86,8 +85,8 @@ async function parseTypesFromTemplateAndDataFromLocalFiles(templateFileLocation,
|
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
87
|
const types = (0, types_1.GetTypesFromTemplateWithOptionSetsFromData)(templateCSVData, dataCSVData);
|
|
89
|
-
saveData(types.OptionSets, 'parsed_optionSets.yml');
|
|
90
|
-
saveData({ TypePropertiesByEntity: types.TypePropertiesByEntity }, 'parsed_TypePropertiesByEntity.yml');
|
|
88
|
+
await (0, file_helpers_1.saveData)(types.OptionSets, 'parsed_optionSets.yml', true);
|
|
89
|
+
await (0, file_helpers_1.saveData)({ TypePropertiesByEntity: types.TypePropertiesByEntity }, 'parsed_TypePropertiesByEntity.yml', true);
|
|
91
90
|
}
|
|
92
91
|
exports.parseTypesFromTemplateAndDataFromLocalFiles = parseTypesFromTemplateAndDataFromLocalFiles;
|
|
93
92
|
async function parseTypesFromFiles(fileIds) {
|
|
@@ -108,12 +107,7 @@ async function parseTypesFromFiles(fileIds) {
|
|
|
108
107
|
}
|
|
109
108
|
logger_1.default.info(`CSV downloads were successful. ${csvJSONData?.length} total rows found.`);
|
|
110
109
|
const suggestions = (0, types_1.GetSuggestedTypes)(csvJSONData);
|
|
111
|
-
saveData(suggestions.OptionSets, 'parsed_optionSets.yml');
|
|
112
|
-
saveData({ typeProperties: suggestions.TypeProperties }, 'parsed_typeProperties.yml');
|
|
110
|
+
await (0, file_helpers_1.saveData)(suggestions.OptionSets, 'parsed_optionSets.yml', true);
|
|
111
|
+
await (0, file_helpers_1.saveData)({ typeProperties: suggestions.TypeProperties }, 'parsed_typeProperties.yml', true);
|
|
113
112
|
}
|
|
114
113
|
exports.parseTypesFromFiles = parseTypesFromFiles;
|
|
115
|
-
function saveData(data, name) {
|
|
116
|
-
const yamlStr = js_yaml_1.default.dump(data);
|
|
117
|
-
const CURRENT_DIR = process.cwd();
|
|
118
|
-
fs_1.default.writeFileSync(path.resolve(path.join(CURRENT_DIR, name, yamlStr)), 'utf8');
|
|
119
|
-
}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contrail/cli",
|
|
3
|
-
"version": "3.5.3-alpha.
|
|
3
|
+
"version": "3.5.3-alpha.e7995dc",
|
|
4
4
|
"description": "VibeIQ's Contrail Platform CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"contrail-cli": "./bin/run",
|
|
@@ -113,6 +113,9 @@
|
|
|
113
113
|
"groups": {
|
|
114
114
|
"description": "Export and import user groups"
|
|
115
115
|
},
|
|
116
|
+
"org-config": {
|
|
117
|
+
"description": "Export and import org-level configuration"
|
|
118
|
+
},
|
|
116
119
|
"webhooks": {
|
|
117
120
|
"description": "Manage VibeIQ webhooks"
|
|
118
121
|
},
|