@contrail/cli 3.5.3-alpha.818a5c0 → 3.5.3-alpha.82946f6

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 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.818a5c0 linux-x64 node-v24.19.0
20
+ @contrail/cli/3.5.3-alpha.82946f6 linux-x64 node-v24.20.0
21
21
  $ contrail --help [COMMAND]
22
22
  USAGE
23
23
  $ contrail COMMAND
@@ -62,7 +62,7 @@ To get instructions on how to set up autocomplete for your shell, run `contrail
62
62
  * [`contrail load line-sheet DATAFILE CONFIGFILE`](#contrail-load-line-sheet-datafile-configfile)
63
63
  * [`contrail load upload-and-load INCOMINGFILE CONFIGFILENAME`](#contrail-load-upload-and-load-incomingfile-configfilename)
64
64
  * [`contrail org-config export`](#contrail-org-config-export)
65
- * [`contrail org-config import ORGCONFIGFILE`](#contrail-org-config-import-orgconfigfile)
65
+ * [`contrail org-config import`](#contrail-org-config-import)
66
66
  * [`contrail projects export PROJECTNAME`](#contrail-projects-export-projectname)
67
67
  * [`contrail projects list`](#contrail-projects-list)
68
68
  * [`contrail projects load TEMPLATEFILELOCATION`](#contrail-projects-load-templatefilelocation)
@@ -781,49 +781,49 @@ EXAMPLES
781
781
 
782
782
  ## `contrail org-config export`
783
783
 
784
- Export the org config (branding, sorting, and other org-level settings).
784
+ Export the org config for your Org
785
785
 
786
786
  ```
787
787
  USAGE
788
- $ contrail org-config export [-l error|warn|info|debug] [-e true|false] [-f <value>] [--overwrite]
788
+ $ contrail org-config export [-l error|warn|info|debug] [-e true|false] [-d <value>] [-f]
789
789
 
790
790
  FLAGS
791
+ -d, --outDir=<value> [default: .] The directory to which to export the org config data. Defaults to the
792
+ current directory
791
793
  -e, --alwaysConfirmEnv=<option> [default: true] The Environment variables
792
794
  <options: true|false>
793
- -f, --outFile=<value> [default: org-config.yml] The location for the file to be saved
795
+ -f, --overwrite Replaces any existing export files in outDir
794
796
  -l, --logLevel=<option> The Log Level
795
797
  <options: error|warn|info|debug>
796
- --overwrite Replaces existing files if they exist
797
798
 
798
799
  DESCRIPTION
799
- Export the org config (branding, sorting, and other org-level settings).
800
+ Export the org config for your Org
800
801
 
801
802
  EXAMPLES
802
803
  $ contrail org-config export
803
804
  ```
804
805
 
805
- ## `contrail org-config import ORGCONFIGFILE`
806
+ ## `contrail org-config import`
806
807
 
807
- Import the org config from an org-config.yml file
808
+ Upload an extracted org config
808
809
 
809
810
  ```
810
811
  USAGE
811
- $ contrail org-config import ORGCONFIGFILE [-l error|warn|info|debug] [-e true|false]
812
-
813
- ARGUMENTS
814
- ORGCONFIGFILE The .yml file containing the org config
812
+ $ contrail org-config import [-l error|warn|info|debug] [-e true|false] [-d <value>]
815
813
 
816
814
  FLAGS
815
+ -d, --dir=<value> [default: .] The directory from which to import the org config data. Defaults to the
816
+ current directory. The org config data will be loaded from $dir/org-config.yml
817
817
  -e, --alwaysConfirmEnv=<option> [default: true] The Environment variables
818
818
  <options: true|false>
819
819
  -l, --logLevel=<option> The Log Level
820
820
  <options: error|warn|info|debug>
821
821
 
822
822
  DESCRIPTION
823
- Import the org config from an org-config.yml file
823
+ Upload an extracted org config
824
824
 
825
825
  EXAMPLES
826
- $ contrail org-config import <ORG_CONFIG_FILE>
826
+ $ contrail org-config import
827
827
  ```
828
828
 
829
829
  ## `contrail projects export PROJECTNAME`
@@ -968,7 +968,7 @@ loads all the type data that has been exported by getAll
968
968
 
969
969
  ```
970
970
  USAGE
971
- $ contrail types loadAll [-l error|warn|info|debug] [-e true|false] [-d <value>]
971
+ $ contrail types loadAll [-l error|warn|info|debug] [-e true|false] [-d <value>] [--orgConfig]
972
972
 
973
973
  FLAGS
974
974
  -d, --dir=<value> [default: .] The directory from which to load the types data. Defaults to the current
@@ -977,6 +977,8 @@ FLAGS
977
977
  <options: true|false>
978
978
  -l, --logLevel=<option> The Log Level
979
979
  <options: error|warn|info|debug>
980
+ --[no-]orgConfig Also load org config data from this directory. If not specified, you will be
981
+ prompted.
980
982
 
981
983
  DESCRIPTION
982
984
  loads all the type data that has been exported by getAll
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createOrgConfig = exports.updateOrgConfig = exports.getOrgConfigs = void 0;
4
4
  const sdk_1 = require("@contrail/sdk");
5
+ // every org has exactly one org-config record (created at provisioning),
6
+ // so callers can safely use the first element of the returned list
5
7
  async function getOrgConfigs(options) {
6
8
  return new sdk_1.Entities().get({
7
9
  entityName: 'org-config',
@@ -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 = getGroupsFile(fileLocation);
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 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
- const export_3 = require("../org-config/export");
10
9
  const basecommand_1 = require("../../basecommand");
11
10
  class ExportInstance extends basecommand_1.BaseCommand {
12
11
  static description = 'Exports an data of an instance including types and users';
@@ -33,7 +32,6 @@ class ExportInstance extends basecommand_1.BaseCommand {
33
32
  await (0, getAll_1.getAll)(this.flags.outDir, this.flags.overwrite);
34
33
  await (0, export_1.exportUsers)(path.join(this.flags.outDir, 'users.yml'), this.flags.overwrite);
35
34
  await (0, export_2.exportGroups)(path.join(this.flags.outDir, 'groups.yml'), this.flags.overwrite);
36
- await (0, export_3.exportOrgConfig)(path.join(this.flags.outDir, 'org-config.yml'), this.flags.overwrite);
37
35
  }
38
36
  }
39
37
  exports.default = ExportInstance;
@@ -26,12 +26,12 @@ class ImportInstance extends basecommand_1.BaseCommand {
26
26
  }),
27
27
  };
28
28
  async run() {
29
- await (0, loadAll_1.loadAll)(this.flags.dir, true);
29
+ await (0, loadAll_1.loadAll)(this.flags.dir, true, false);
30
30
  await (0, import_1.uploadUsers)(path.join(this.flags.dir, 'users.yml'));
31
31
  await (0, import_2.uploadGroups)(path.join(this.flags.dir, 'groups.yml'));
32
32
  await (0, uploadTypePropertyPolicies_1.uploadTypePropertyPolicies)(this.flags.dir);
33
33
  await (0, uploadTypePolicies_1.uploadTypePolicies)(this.flags.dir);
34
- await (0, import_3.uploadOrgConfig)(path.join(this.flags.dir, 'org-config.yml'));
34
+ await (0, import_3.uploadOrgConfig)(this.flags.dir);
35
35
  }
36
36
  }
37
37
  exports.default = ImportInstance;
@@ -1,14 +1,13 @@
1
1
  import { BaseCommand } from '../../basecommand';
2
- export declare const DEFAULT_FILE_LOCATION = "org-config.yml";
3
2
  export default class ExportOrgConfig extends BaseCommand {
4
3
  static description: string;
5
4
  static examples: string[];
6
5
  static flags: {
7
- outFile: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
6
+ outDir: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
8
7
  overwrite: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
8
  alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
9
  logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
10
  };
12
11
  run(): Promise<void>;
13
12
  }
14
- export declare function exportOrgConfig(fileLocation: string, overwrite: boolean): Promise<void>;
13
+ export declare function exportOrgConfig(outDir: string, overwrite: boolean): Promise<void>;
@@ -1,17 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exportOrgConfig = exports.DEFAULT_FILE_LOCATION = void 0;
3
+ exports.exportOrgConfig = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  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");
13
12
  const basecommand_1 = require("../../basecommand");
14
- exports.DEFAULT_FILE_LOCATION = 'org-config.yml';
13
+ const logger_1 = tslib_1.__importDefault(require("../../logger"));
15
14
  const ORG_SPECIFIC_FIELDS = [
16
15
  'id',
17
16
  'orgId',
@@ -23,21 +22,22 @@ const ORG_SPECIFIC_FIELDS = [
23
22
  'updatedBy',
24
23
  ];
25
24
  class ExportOrgConfig extends basecommand_1.BaseCommand {
26
- static description = 'Export the org config (branding, sorting, and other org-level settings).';
25
+ static description = 'Export the org config for your Org';
27
26
  static examples = [
28
27
  `$ contrail org-config export
29
28
  `,
30
29
  ];
31
30
  static flags = {
32
31
  ...basecommand_1.BaseCommand.baseFlags,
33
- outFile: core_1.Flags.string({
34
- char: 'f',
35
- description: 'The location for the file to be saved',
32
+ outDir: core_1.Flags.string({
33
+ char: 'd',
34
+ description: 'The directory to which to export the org config data. Defaults to the current directory',
36
35
  required: false,
37
- default: exports.DEFAULT_FILE_LOCATION,
36
+ default: '.',
38
37
  }),
39
38
  overwrite: core_1.Flags.boolean({
40
- description: 'Replaces existing files if they exist',
39
+ char: 'f',
40
+ description: 'Replaces any existing export files in outDir',
41
41
  required: false,
42
42
  default: false,
43
43
  }),
@@ -46,35 +46,29 @@ class ExportOrgConfig extends basecommand_1.BaseCommand {
46
46
  try {
47
47
  await (0, login_1.authUser)();
48
48
  this.log(`${chalk_1.default.blue.bold('START')} Getting Org Config.`);
49
- await exportOrgConfig(this.flags.outFile ?? exports.DEFAULT_FILE_LOCATION, this.flags.overwrite);
50
- this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Done`);
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`);
51
52
  }
52
53
  catch (e) {
53
- this.log(`${chalk_1.default.red.bold('FAIL')} Org Config download Failed. ${e}`);
54
+ this.log(`${chalk_1.default.red.bold('FAIL')} Org Config Export Failed. ${e}`);
54
55
  return;
55
56
  }
56
- this.log(`${chalk_1.default.green.bold('COMPLETE')} Org Config download Complete.`);
57
+ this.log(`${chalk_1.default.green.bold('COMPLETE')} Org Config Export Complete.`);
57
58
  }
58
59
  }
59
60
  exports.default = ExportOrgConfig;
60
- async function exportOrgConfig(fileLocation, overwrite) {
61
+ async function exportOrgConfig(outDir, overwrite) {
61
62
  const orgConfigs = await (0, org_config_1.getOrgConfigs)();
62
- if (!Array.isArray(orgConfigs) || orgConfigs.length === 0) {
63
+ if (!orgConfigs?.length) {
64
+ logger_1.default.info(`${chalk_1.default.yellow.bold('ORG CONFIG')} No org config found. Skipping.`);
63
65
  return;
64
66
  }
65
67
  const orgConfig = { ...orgConfigs[0] };
66
68
  for (const field of ORG_SPECIFIC_FIELDS) {
67
69
  delete orgConfig[field];
68
70
  }
69
- await saveData(orgConfig, fileLocation, overwrite);
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);
70
73
  }
71
74
  exports.exportOrgConfig = exportOrgConfig;
72
- async function saveData(data, fileLocation, overwrite) {
73
- const yamlStr = js_yaml_1.default.dump(data);
74
- const CURRENT_DIR = process.cwd();
75
- const pathToWrite = path.resolve(path.join(CURRENT_DIR, fileLocation));
76
- if (fs_1.default.existsSync(pathToWrite)) {
77
- await (0, file_helpers_1.safeFileOverwrite)(pathToWrite, overwrite);
78
- }
79
- fs_1.default.writeFileSync(pathToWrite, yamlStr, 'utf8');
80
- }
@@ -3,12 +3,10 @@ export default class ImportOrgConfig extends BaseCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
+ dir: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
6
7
  alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
7
8
  logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
8
9
  };
9
- static args: {
10
- orgConfigFile: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
11
- };
12
10
  run(): Promise<void>;
13
11
  }
14
- export declare function uploadOrgConfig(fileLocation: string): Promise<void>;
12
+ export declare function uploadOrgConfig(dir: string): Promise<void>;
@@ -6,23 +6,24 @@ 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
+ const logger_1 = tslib_1.__importDefault(require("../../logger"));
13
14
  class ImportOrgConfig extends basecommand_1.BaseCommand {
14
- static description = 'Import the org config from an org-config.yml file';
15
+ static description = 'Upload an extracted org config';
15
16
  static examples = [
16
- `$ contrail org-config import <ORG_CONFIG_FILE>
17
+ `$ contrail org-config import
17
18
  `,
18
19
  ];
19
20
  static flags = {
20
21
  ...basecommand_1.BaseCommand.baseFlags,
21
- };
22
- static args = {
23
- orgConfigFile: core_1.Args.string({
24
- description: 'The .yml file containing the org config',
25
- required: true,
22
+ dir: core_1.Flags.string({
23
+ char: 'd',
24
+ description: 'The directory from which to import the org config data. Defaults to the current directory. The org config data will be loaded from $dir/org-config.yml',
25
+ required: false,
26
+ default: '.',
26
27
  }),
27
28
  };
28
29
  async run() {
@@ -30,7 +31,7 @@ class ImportOrgConfig extends basecommand_1.BaseCommand {
30
31
  await (0, login_1.authUser)();
31
32
  this.log(`${chalk_1.default.blue.bold('START')} Uploading Org Config.`);
32
33
  this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Uploading`);
33
- await uploadOrgConfig(this.args.orgConfigFile);
34
+ await uploadOrgConfig(this.flags.dir);
34
35
  this.log(`${chalk_1.default.yellow.bold('ORG CONFIG')} Uploaded`);
35
36
  }
36
37
  catch (e) {
@@ -41,29 +42,18 @@ class ImportOrgConfig extends basecommand_1.BaseCommand {
41
42
  }
42
43
  }
43
44
  exports.default = ImportOrgConfig;
44
- function getOrgConfigFile(fileLocation) {
45
- const CURRENT_DIR = process.cwd();
46
- try {
47
- const fullPath = path.join(CURRENT_DIR, fileLocation);
48
- const doc = js_yaml_1.default.load(fs_1.default.readFileSync(fullPath, 'utf8'));
49
- return doc;
50
- }
51
- catch (e) {
52
- throw new Error(`ERROR PARSING YAML: ${e}`);
53
- }
54
- }
55
- async function uploadOrgConfig(fileLocation) {
56
- const CURRENT_DIR = process.cwd();
57
- if (!fs_1.default.existsSync(path.join(CURRENT_DIR, fileLocation))) {
58
- console.log(`No org config file found at ${fileLocation}. Skipping.`);
45
+ async function uploadOrgConfig(dir) {
46
+ const filePath = path.join(dir, 'org-config.yml');
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.`);
59
49
  return;
60
50
  }
61
- const orgConfig = getOrgConfigFile(fileLocation);
62
- if (!orgConfig || typeof orgConfig !== 'object') {
63
- return;
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`);
64
54
  }
65
55
  const existingOrgConfigs = await (0, org_config_1.getOrgConfigs)();
66
- if (Array.isArray(existingOrgConfigs) && existingOrgConfigs.length > 0) {
56
+ if (existingOrgConfigs?.length) {
67
57
  await (0, org_config_1.updateOrgConfig)(existingOrgConfigs[0].id, orgConfig);
68
58
  }
69
59
  else {
@@ -11,6 +11,7 @@ const type_extractor_1 = require("../../helpers/types/type-extractor");
11
11
  const types_1 = require("../../api/types");
12
12
  const types_2 = require("@contrail/org-config-migration/lib/types");
13
13
  const file_helpers_1 = require("../../helpers/file-helpers");
14
+ const export_1 = require("../org-config/export");
14
15
  const basecommand_1 = require("../../basecommand");
15
16
  const logger_1 = tslib_1.__importDefault(require("../../logger"));
16
17
  const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
@@ -64,6 +65,7 @@ async function getAll(outDir, overwrite) {
64
65
  };
65
66
  const reducedData = await (0, types_2.getAllReducedTypes)(data);
66
67
  await saveData(reducedData, outDir, overwrite);
68
+ await (0, export_1.exportOrgConfig)(outDir, overwrite);
67
69
  logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES')} Retrieved`);
68
70
  }
69
71
  catch (e) {
@@ -4,9 +4,10 @@ export default class LoadAllTypes extends BaseCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  dir: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
7
+ orgConfig: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
7
8
  alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
8
9
  logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
10
  };
10
11
  run(): Promise<void>;
11
12
  }
12
- export declare function loadAll(dir: string, skipPolicies?: boolean): Promise<void>;
13
+ export declare function loadAll(dir: string, skipPolicies?: boolean, loadOrgConfig?: boolean): Promise<void>;
@@ -4,6 +4,7 @@ exports.loadAll = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const core_1 = require("@oclif/core");
6
6
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
7
8
  const login_1 = require("../../auth/login");
8
9
  const uploadOptionSets_1 = require("./uploadOptionSets");
9
10
  const uploadOptionSetHierarchies_1 = require("./uploadOptionSetHierarchies");
@@ -12,6 +13,7 @@ const uploadTypePropertyPolicies_1 = require("./uploadTypePropertyPolicies");
12
13
  const type_uploader_1 = require("../../helpers/types/type-uploader");
13
14
  const uploadTypeOverrides_1 = require("./uploadTypeOverrides");
14
15
  const uploadTypePolicies_1 = require("./uploadTypePolicies");
16
+ const import_1 = require("../org-config/import");
15
17
  const basecommand_1 = require("../../basecommand");
16
18
  const logger_1 = tslib_1.__importDefault(require("../../logger"));
17
19
  class LoadAllTypes extends basecommand_1.BaseCommand {
@@ -28,13 +30,19 @@ class LoadAllTypes extends basecommand_1.BaseCommand {
28
30
  required: false,
29
31
  default: '.',
30
32
  }),
33
+ orgConfig: core_1.Flags.boolean({
34
+ description: 'Also load org config data from this directory. If not specified, you will be prompted.',
35
+ required: false,
36
+ default: undefined,
37
+ allowNo: true,
38
+ }),
31
39
  };
32
40
  async run() {
33
- await loadAll(this.flags.dir);
41
+ await loadAll(this.flags.dir, false, this.flags.orgConfig);
34
42
  }
35
43
  }
36
44
  exports.default = LoadAllTypes;
37
- async function loadAll(dir, skipPolicies = false) {
45
+ async function loadAll(dir, skipPolicies = false, loadOrgConfig) {
38
46
  try {
39
47
  await (0, login_1.authUser)();
40
48
  await (0, uploadOptionSets_1.uploadOptionSets)(dir);
@@ -46,6 +54,21 @@ async function loadAll(dir, skipPolicies = false) {
46
54
  await (0, uploadTypePolicies_1.uploadTypePolicies)(dir);
47
55
  }
48
56
  await (0, uploadTypeOverrides_1.uploadTypeOverrides)(dir);
57
+ let shouldLoadOrgConfig = loadOrgConfig;
58
+ if (shouldLoadOrgConfig === undefined) {
59
+ const answers = await inquirer_1.default.prompt([
60
+ {
61
+ type: 'confirm',
62
+ name: 'loadOrgConfig',
63
+ message: 'Also load org config details from this directory?',
64
+ default: false,
65
+ },
66
+ ]);
67
+ shouldLoadOrgConfig = answers.loadOrgConfig;
68
+ }
69
+ if (shouldLoadOrgConfig) {
70
+ await (0, import_1.uploadOrgConfig)(dir);
71
+ }
49
72
  }
50
73
  catch (e) {
51
74
  logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Types Upload Failed. ${e}`);
@@ -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 = getUsersFile(fileLocation);
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 js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
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
- }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.5.3-alpha.818a5c0",
2
+ "version": "3.5.3-alpha.82946f6",
3
3
  "commands": {
4
4
  "app:create": {
5
5
  "id": "app:create",
@@ -1241,7 +1241,7 @@
1241
1241
  },
1242
1242
  "org-config:export": {
1243
1243
  "id": "org-config:export",
1244
- "description": "Export the org config (branding, sorting, and other org-level settings).",
1244
+ "description": "Export the org config for your Org",
1245
1245
  "strict": true,
1246
1246
  "pluginName": "@contrail/cli",
1247
1247
  "pluginAlias": "@contrail/cli",
@@ -1278,19 +1278,20 @@
1278
1278
  ],
1279
1279
  "default": "true"
1280
1280
  },
1281
- "outFile": {
1282
- "name": "outFile",
1281
+ "outDir": {
1282
+ "name": "outDir",
1283
1283
  "type": "option",
1284
- "char": "f",
1285
- "description": "The location for the file to be saved",
1284
+ "char": "d",
1285
+ "description": "The directory to which to export the org config data. Defaults to the current directory",
1286
1286
  "required": false,
1287
1287
  "multiple": false,
1288
- "default": "org-config.yml"
1288
+ "default": "."
1289
1289
  },
1290
1290
  "overwrite": {
1291
1291
  "name": "overwrite",
1292
1292
  "type": "boolean",
1293
- "description": "Replaces existing files if they exist",
1293
+ "char": "f",
1294
+ "description": "Replaces any existing export files in outDir",
1294
1295
  "required": false,
1295
1296
  "allowNo": false
1296
1297
  }
@@ -1299,14 +1300,14 @@
1299
1300
  },
1300
1301
  "org-config:import": {
1301
1302
  "id": "org-config:import",
1302
- "description": "Import the org config from an org-config.yml file",
1303
+ "description": "Upload an extracted org config",
1303
1304
  "strict": true,
1304
1305
  "pluginName": "@contrail/cli",
1305
1306
  "pluginAlias": "@contrail/cli",
1306
1307
  "pluginType": "core",
1307
1308
  "aliases": [],
1308
1309
  "examples": [
1309
- "$ contrail org-config import <ORG_CONFIG_FILE>\n"
1310
+ "$ contrail org-config import\n"
1310
1311
  ],
1311
1312
  "flags": {
1312
1313
  "logLevel": {
@@ -1335,15 +1336,18 @@
1335
1336
  "false"
1336
1337
  ],
1337
1338
  "default": "true"
1339
+ },
1340
+ "dir": {
1341
+ "name": "dir",
1342
+ "type": "option",
1343
+ "char": "d",
1344
+ "description": "The directory from which to import the org config data. Defaults to the current directory. The org config data will be loaded from $dir/org-config.yml",
1345
+ "required": false,
1346
+ "multiple": false,
1347
+ "default": "."
1338
1348
  }
1339
1349
  },
1340
- "args": {
1341
- "orgConfigFile": {
1342
- "name": "orgConfigFile",
1343
- "description": "The .yml file containing the org config",
1344
- "required": true
1345
- }
1346
- }
1350
+ "args": {}
1347
1351
  },
1348
1352
  "projects:export": {
1349
1353
  "id": "projects:export",
@@ -1699,6 +1703,13 @@
1699
1703
  "required": false,
1700
1704
  "multiple": false,
1701
1705
  "default": "."
1706
+ },
1707
+ "orgConfig": {
1708
+ "name": "orgConfig",
1709
+ "type": "boolean",
1710
+ "description": "Also load org config data from this directory. If not specified, you will be prompted.",
1711
+ "required": false,
1712
+ "allowNo": true
1702
1713
  }
1703
1714
  },
1704
1715
  "args": {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contrail/cli",
3
- "version": "3.5.3-alpha.818a5c0",
3
+ "version": "3.5.3-alpha.82946f6",
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
  },