diff --git a/README.md b/README.md index 5d1ad13..f68abac 100644 --- a/README.md +++ b/README.md @@ -8,15 +8,7 @@ Open Horizon toolkit is a CLI built with Typescript for the NodeJS developers. ## Pre-release version of hzn-cli, howto? -For now, you can give it a test drive by cloning this repo - -```git clone git@github.com:playground/hzn-cli.git``` - -cd into hzn-cli then run the following command to install it on your device, this will install hzn-cli and the command will be available globally. - -NOTE: Node version 12 or higher is required to be installed before running the following command - -```npm run local``` +```npm i -g hzn-cli``` After installlation run @@ -25,86 +17,40 @@ After installlation run Deploy to Org Positionals: - action Available actions: test, buildServiceImage, pushServiceImage, - publishService, publishPatterrn, buildMMSImage, pushMMSImage, - publishMMSService, publishMMSPattern, agentRun, publishMMSObject, - unregisterAgent, registerAgent, showHznInfo, updateHznInfo, - listService, listPattern, listNode, listObject, listDeploymentPolicy, - listNodePattern, checkConfigState, getDeviceArch, createHznKey + action Available actions: allInOneMMS, buildMMSImage, buildServiceImage, + checkConfigState, createHznKey, dockerImageExists, getDeviceArch, + listDeploymentPolicy, listNode, listNodePattern, listObject, + listPattern, listService, publishMMSObject, publishMMSPattern, + publishMMSService, publishPatterrn, publishService, pullDockerImage, + pushMMSImage, pushServiceImage, registerAgent, setup, showHznInfo, + test, uninstallHorizon, unregisterAgent, updateHznInfo [string] [required] Options: - --version Show version number [boolean] - --org Organization to be deployed to [string] - --configpath Specify path to your configuration, default is ./config - [string] - --name Name of service, pattern, policy & etc. [string] - -h, --help Show help [boolean] + --version Show version number [boolean] + --org Organization to be deployed to [string] + --config_path Specify path to your configuration, default is + ./config [string] + --name Name of service, pattern, policy & etc. [string] + --object_type Type of object [string] + --object_id Id of object to be published [string] + --object Object file to be published [string] + --pattern MMS pattern [string] + --skip_config_update Do not prompt for config updates [string] + -h, --help Show help [boolean] ``` +## To setup your environment, you will need to run +```oh deploy setup``` -## To execute any of the "oh" actions, .env-hzn.json config file is required +This will prompt you for your credential, Docker Hub Id & other configuration parameters. +This will also install and setup hzn envirnoment for you if it hasn't been installled. -.env-hzn.json template -``` -{ - "biz": - { - "envVars": { - "HZN_ORG_ID": "", - "HZN_EXCHANGE_USER_AUTH": "", - "HZN_EXCHANGE_URL": "", - "HZN_FSS_CSSURL": "", - "SERVICE_NAME": "", - "SERVICE_VERSION": "", - "SERVICE_CONTAINER_NAME": "", - "SERVICE_CONTAINER_CREDS": "", - "YOUR_DOCKERHUB_ID": "", - "VOLUME_MOUNT": "", - "MMS_SHARED_VOLUME": "", - "MMS_CONTAINER_CREDS": "", - "MMS_CONTAINER_NAME": "", - "MMS_SERVICE_NAME": "", - "MMS_SERVICE_VERSION": "", - "MMS_OBJECT_TYPE": "", - "MMS_OBJECT_ID": "", - "MMS_OBJECT_FILE": "config/config.json", - "UPDATE_FILE_NAME": "" - }, - "metaVars": { - } - }, - "demo": - { - "envVars": { - "HZN_ORG_ID": "", - "HZN_EXCHANGE_USER_AUTH": "", - "HZN_EXCHANGE_URL": "", - "HZN_FSS_CSSURL": "", - "SERVICE_NAME": "", - "SERVICE_VERSION": "", - "SERVICE_CONTAINER_NAME": "", - "SERVICE_CONTAINER_CREDS": "", - "YOUR_DOCKERHUB_ID": "", - "VOLUME_MOUNT": "", - "MMS_SHARED_VOLUME": "", - "MMS_CONTAINER_CREDS": "", - "MMS_CONTAINER_NAME": "", - "MMS_SERVICE_NAME": "", - "MMS_SERVICE_VERSION": "", - "MMS_OBJECT_TYPE": "", - "MMS_OBJECT_ID": "", - "MMS_OBJECT_FILE": "config/config.json", - "UPDATE_FILE_NAME": "" - }, - "metaVars": { - } - } -} -``` +## To execute any of the "oh" actions +```oh deploy , for example: oh deploy registerAgent``` -## After installation, you can test out the cli by running +## After installation and initialization, you can test out the cli by running -```oh deploy test --configpath /home/pi/config``` +```oh deploy test``` ``` _ _ _ @@ -121,25 +67,25 @@ process completed. ## Here are a few examples of actions you can perform with "oh", default org is "biz" Build service docker image -```oh deploy buildServiceImage --config_path /home/pi/config``` +```oh deploy buildServiceImage``` Push service docker image -```oh deploy pushServiceImage --config_path /home/pi/config``` +```oh deploy pushServiceImage``` Publish service to management hub -```oh deploy publishService --config_path /home/pi/config``` +```oh deploy publishService``` Publish service pattern -```oh deploy publishPattern --config_path /home/pi/config``` +```oh deploy publishPattern``` Publish MMS service -```oh deploy publishMMSService --config_path /home/pi/config``` +```oh deploy publishMMSService``` -Publish MMS pattern +Publish MMS pattern and specify path to the policy.json ```oh deploy publishMMSPattern --config_path /home/pi/config``` Publish MMS Object file -```oh deploy publishMMSObject --object_type=object_detection --object_id=config.json --object=/Users/jeff/Downloads/demo-model/demo/version1/model.zip --pattern=pattern-pi-mms-service-arm --config_path=config``` +```oh deploy publishMMSObject --object_type=object_detection --object_id=config.json --object=/Users/jeff/Downloads/demo-model/demo/version1/model.zip --pattern=pattern-pi-mms-service-arm``` *Register agent (org=demo)- -```oh deploy registerAgent --configpath /home/pi/config --org demo``` \ No newline at end of file +```oh deploy registerAgent --org demo``` \ No newline at end of file diff --git a/build/commands/deploy.d.ts b/build/commands/deploy.d.ts index e4f9e8e..bdef4ac 100644 --- a/build/commands/deploy.d.ts +++ b/build/commands/deploy.d.ts @@ -8,6 +8,7 @@ declare type Options = { object_id: string | undefined; object: string | undefined; pattern: string | undefined; + skip_config_update: string | undefined; }; export declare const command: string; export declare const desc: string; diff --git a/build/commands/deploy.js b/build/commands/deploy.js index 4c26683..f188f4f 100755 --- a/build/commands/deploy.js +++ b/build/commands/deploy.js @@ -19,50 +19,94 @@ const builder = (yargs) => yargs object_type: { type: 'string', desc: 'Type of object' }, object_id: { type: 'string', desc: 'Id of object to be published' }, object: { type: 'string', desc: 'Object file to be published' }, - pattern: { type: 'string', desc: 'MMS pattern' } + pattern: { type: 'string', desc: 'MMS pattern' }, + skip_config_update: { type: 'string', desc: 'Do not prompt for config updates' } }) .positional('action', { type: 'string', demandOption: true, - desc: 'Available actions: test, buildServiceImage, pushServiceImage, publishService, publishPatterrn, buildMMSImage, pushMMSImage, publishMMSService, ' + - 'publishMMSPattern, registerAgent, publishMMSObject, unregisterAgent, allInOneMMS, showHznInfo, updateHznInfo, listService, listPattern, ' + - 'listNode, listObject, listDeploymentPolicy, listNodePattern, checkConfigState, getDeviceArch, createHznKey, uninstallHorizon' + desc: 'Available actions: ' + + 'allInOneMMS, buildMMSImage, buildServiceImage, checkConfigState, createHznKey, dockerImageExists, getDeviceArch, ' + + 'listDeploymentPolicy, listNode, listNodePattern, listObject, listPattern, listService, publishMMSObject, ' + + 'publishMMSPattern, publishMMSService, publishPatterrn, publishService, pullDockerImage, pushMMSImage, pushServiceImage, ' + + 'registerAgent, setup, showHznInfo, test, uninstallHorizon, unregisterAgent, updateHznInfo' }); exports.builder = builder; const handler = (argv) => { (0, clear_1.default)(); console.log(chalk_1.default.greenBright(figlet_1.default.textSync('hzn-cli', { horizontalLayout: 'full' }))); - const { action, org, config_path, name, object_type, object_id, object, pattern } = argv; + const { action, org, config_path, name, object_type, object_id, object, pattern, skip_config_update } = argv; const env = org || 'biz'; const n = name || ''; const objType = object_type || ''; const objId = object_id || ''; const obj = object || ''; const p = pattern || ''; - console.log('$$$ ', action, env, config_path, n); - const configPath = config_path || 'config'; - if ((0, fs_1.existsSync)(`${configPath}/.env-hzn.json`)) { - const hzn = new hzn_1.Hzn(env, configPath, n, objType, objId, obj, p); - hzn.setup() - .subscribe({ - complete: () => { - hzn[action]() + const configPath = config_path || hzn_1.utils.getHznConfig(); + const skipInitialize = ['uninstallHorizon']; + const promptForUpdate = ['setup', 'publishService', 'publishPatterrn', 'publishMMSService', 'publishMMSPattern', 'registerAgent', 'publishMMSObject', 'unregisterAgent']; + console.log('$$$ ', action, env, configPath, n); + const proceed = () => { + if ((0, fs_1.existsSync)(`${hzn_1.utils.getHznConfig()}/.env-hzn.json`)) { + const hzn = new hzn_1.Hzn(env, configPath, n, objType, objId, obj, p); + hzn.init() + .subscribe({ + complete: () => { + hzn[action]() + .subscribe({ + complete: () => { + console.log('process completed.'); + process.exit(0); + } + }); + }, + error: (err) => { + console.log('something went wrong. ', err); + process.exit(0); + } + }); + } + else { + console.log(`${configPath}/.env-hzn.json file not fouund.`); + } + }; + hzn_1.utils.checkDefaultConfig() + .subscribe({ + complete: () => { + if (promptForUpdate.indexOf(action) < 0 || skip_config_update) { + proceed(); + } + else { + hzn_1.utils.updateEnvFiles(env) + .subscribe({ + complete: () => { + proceed(); + }, error: (err) => { + console.log(err); + } + }); + } + }, error: (err) => { + if (skipInitialize.indexOf(action) < 0) { + console.log(err, 'Initialising...'); + hzn_1.utils.setupEnvFiles() + .subscribe({ + complete: () => { + proceed(); + }, error: () => process.exit(0) + }); + } + else { + hzn_1.utils.uninstallHorizon() .subscribe({ complete: () => { console.log('process completed.'); process.exit(0); } }); - }, - error: (err) => { - console.log('something went wrong. ', err); - process.exit(0); } - }); - } - else { - console.log('./config/.env-hzn.json file not fouund.'); - } + } + }); }; exports.handler = handler; //# sourceMappingURL=deploy.js.map \ No newline at end of file diff --git a/build/commands/deploy.js.map b/build/commands/deploy.js.map index 99ffaf4..c2a5b69 100644 --- a/build/commands/deploy.js.map +++ b/build/commands/deploy.js.map @@ -1 +1 @@ -{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":";;;;;;AACA,2CAA+C;AAC/C,kDAA0B;AAC1B,kDAA0B;AAC1B,oDAA4B;AAC5B,2BAAgC;AAanB,QAAA,OAAO,GAAW,iBAAiB,CAAC;AACpC,QAAA,IAAI,GAAW,8BAA8B,CAAC;AAEpD,MAAM,OAAO,GAAqC,CAAC,KAAK,EAAE,EAAE,CACjE,KAAK;KACF,OAAO,CAAC;IACP,GAAG,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gCAAgC,EAAC;IAC7D,WAAW,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,yDAAyD,EAAC;IAC9F,IAAI,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,yCAAyC,EAAC;IACvE,WAAW,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAC;IACrD,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAC;IACjE,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAC;IAC7D,OAAO,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAC;IAC9C,kBAAkB,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kCAAkC,EAAC;CAC/E,CAAC;KACD,UAAU,CAAC,QAAQ,EAAE;IACpB,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,IAAI;IAClB,IAAI,EAAE,qBAAqB;QACrB,mHAAmH;QACnH,2GAA2G;QAC3G,0HAA0H;QAC5H,2FAA2F;CAChG,CAAC,CAAC;AApBM,QAAA,OAAO,WAoBb;AAEA,MAAM,OAAO,GAAG,CAAC,IAAwB,EAAQ,EAAE;IACxD,IAAA,eAAK,GAAE,CAAC;IACR,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,WAAW,CACf,gBAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CACzD,CACF,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;IAC7G,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,WAAW,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,IAAI,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,WAAW,IAAI,WAAK,CAAC,YAAY,EAAE,CAAC;IACvD,MAAM,cAAc,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAA;IACxK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAG,IAAA,eAAU,EAAC,GAAG,WAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE;YACtD,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAEhE,GAAG,CAAC,IAAI,EAAE;iBACT,SAAS,CAAC;gBACT,QAAQ,EAAE,GAAG,EAAE;oBACb,GAAG,CAAC,MAAM,CAAC,EAAE;yBACZ,SAAS,CAAC;wBACT,QAAQ,EAAC,GAAG,EAAE;4BACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;4BAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBACjB,CAAC;qBACF,CAAC,CAAA;gBACJ,CAAC;gBACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;aACF,CAAC,CAAA;SACH;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,iCAAiC,CAAC,CAAA;SAC5D;IACH,CAAC,CAAA;IAED,WAAK,CAAC,kBAAkB,EAAE;SACzB,SAAS,CAAC;QACT,QAAQ,EAAE,GAAG,EAAE;YACb,IAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,kBAAkB,EAAE;gBAC5D,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,WAAK,CAAC,cAAc,CAAC,GAAG,CAAC;qBACxB,SAAS,CAAC;oBACT,QAAQ,EAAE,GAAG,EAAE;wBACb,OAAO,EAAE,CAAA;oBACX,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;wBAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAClB,CAAC;iBACF,CAAC,CAAA;aACH;QACH,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YAChB,IAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;gBACnC,WAAK,CAAC,aAAa,EAAE;qBACpB,SAAS,CAAC;oBACT,QAAQ,EAAE,GAAG,EAAE;wBACb,OAAO,EAAE,CAAC;oBACZ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;iBAChC,CAAC,CAAA;aACH;iBAAM;gBACL,WAAK,CAAC,gBAAgB,EAAE;qBACvB,SAAS,CAAC;oBACT,QAAQ,EAAC,GAAG,EAAE;wBACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACjB,CAAC;iBACF,CAAC,CAAA;aACH;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC;AA/EW,QAAA,OAAO,WA+ElB"} \ No newline at end of file diff --git a/build/common/src/config/mms/pattern.json b/build/common/src/config/mms/pattern.json new file mode 100644 index 0000000..98548b9 --- /dev/null +++ b/build/common/src/config/mms/pattern.json @@ -0,0 +1,18 @@ +{ + "name": "pattern-${MMS_SERVICE_NAME}-$ARCH", + "label": "Edge $MMS_SERVICE_NAME Service Pattern for $ARCH", + "description": "Pattern for $MMS_SERVICE_NAME for $ARCH", + "public": false, + "services": [ + { + "serviceUrl": "$MMS_SERVICE_NAME", + "serviceOrgid": "$HZN_ORG_ID", + "serviceArch": "$ARCH", + "serviceVersions": [ + { + "version": "$MMS_SERVICE_VERSION" + } + ] + } + ] +} diff --git a/build/common/src/config/mms/policy.json b/build/common/src/config/mms/policy.json new file mode 100644 index 0000000..fd19430 --- /dev/null +++ b/build/common/src/config/mms/policy.json @@ -0,0 +1,9 @@ +{ + "properties": [ + { + "name": "openhorizon.allowPrivileged", + "value": true + } + ], + "constraints": [ ] +} \ No newline at end of file diff --git a/build/common/src/config/mms/service.json b/build/common/src/config/mms/service.json new file mode 100644 index 0000000..a918627 --- /dev/null +++ b/build/common/src/config/mms/service.json @@ -0,0 +1,32 @@ +{ + "org": "$HZN_ORG_ID", + "label": "$MMS_SERVICE_NAME for $ARCH", + "description": "A MMS example running with node js", + "documentation": "https://github.com/playground/open-labs/master/edge/services/helloworld/README.md", + "url": "$MMS_SERVICE_NAME", + "version": "$MMS_SERVICE_VERSION", + "arch": "$ARCH", + "public": true, + "sharable": "singleton", + "requiredServices": [ + { + "org": "$HZN_ORG_ID", + "url": "$SERVICE_NAME", + "version": "$SERVICE_VERSION", + "arch": "$ARCH" + } + ], + "userInput": [ + { "name": "MMS_OBJECT_TYPE", "label": "", "type": "string", "defaultValue": "$MMS_OBJECT_TYPE" }, + { "name": "MMS_VOLUME_MOUNT", "label": "", "type": "string", "defaultValue": "$VOLUME_MOUNT" }, + { "name": "UPDATE_FILE_NAME", "label": "", "type": "string", "defaultValue": "$UPDATE_FILE_NAME" } + ], + "deployment": { + "services": { + "$MMS_SERVICE_NAME": { + "image": "$MMS_CONTAINER", + "binds": ["$MMS_SHARED_VOLUME:$VOLUME_MOUNT:rw"] + } + } + } +} \ No newline at end of file diff --git a/build/common/src/config/service/pattern.json b/build/common/src/config/service/pattern.json new file mode 100644 index 0000000..2e7a15e --- /dev/null +++ b/build/common/src/config/service/pattern.json @@ -0,0 +1,11 @@ +{ + "name": "$PATTERN_NAME", + "services": [ + { + "serviceUrl": "$SERVICE_NAME", + "serviceOrgid": "$HZN_ORG_ID", + "serviceArch": "$ARCH", + "serviceVersions": [ { "version": "$SERVICE_VERSION" } ] + } + ] +} \ No newline at end of file diff --git a/build/common/src/config/service/service.json b/build/common/src/config/service/service.json new file mode 100644 index 0000000..4b605dd --- /dev/null +++ b/build/common/src/config/service/service.json @@ -0,0 +1,23 @@ +{ + "org": "$HZN_ORG_ID", + "label": "$SERVICE_NAME for $ARCH", + "url": "$SERVICE_NAME", + "version": "$SERVICE_VERSION", + "arch": "$ARCH", + "public": true, + "sharable": "singleton", + "requiredServices": [], + "userInput": [], + "deployment": { + "services": { + "$SERVICE_NAME": { + "image": "$SERVICE_CONTAINER", + "binds": ["$MMS_SHARED_VOLUME:$VOLUME_MOUNT:rw"], + "ports": [ + { "HostIP": "0.0.0.0", "HostPort": "3000:3000/tcp" } + ], + "privileged": true + } + } + } +} \ No newline at end of file diff --git a/build/common/src/env-hzn.json b/build/common/src/env-hzn.json new file mode 100644 index 0000000..aca2359 --- /dev/null +++ b/build/common/src/env-hzn.json @@ -0,0 +1,66 @@ +{ + "biz": + { + "envVars": { + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + }, + "demo": + { + "envVars": { + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + }, + "myorg": + { + "envVars": { + "ANAX": "https://github.com/open-horizon/anax/releases/latest/download/agent-install.sh", + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + } +} \ No newline at end of file diff --git a/build/common/src/env-local b/build/common/src/env-local new file mode 100644 index 0000000..e578d30 --- /dev/null +++ b/build/common/src/env-local @@ -0,0 +1,5 @@ +YOUR_DOCKERHUB_ID= +HZN_EXCHANGE_USER_AUTH= +HZN_EXCHANGE_URL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-exchange/v1 +HZN_FSS_CSSURL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-css +HZN_CUSTOM_NODE_ID= \ No newline at end of file diff --git a/build/common/src/env.d.ts b/build/common/src/env.d.ts index c2ce35b..a2f0080 100644 --- a/build/common/src/env.d.ts +++ b/build/common/src/env.d.ts @@ -4,8 +4,8 @@ export declare class Env { envVars: any; hznJson: any; hznEnv: any; - configPath: string; - constructor(env: string, configPath: string); + hznConfig: string; + constructor(env: string, hznConfig: string); init(): Observable; setAdditionalEnv(): void; getEnv(): string; diff --git a/build/common/src/env.js b/build/common/src/env.js index 3792a4d..0518dbb 100644 --- a/build/common/src/env.js +++ b/build/common/src/env.js @@ -7,19 +7,20 @@ const cp = require('child_process'), exec = cp.exec; var dotenv = require('dotenv'); const pEnv = process.env; class Env { - constructor(env, configPath) { - if ((0, fs_1.existsSync)(`${configPath}/.env-local`)) { - const localEnv = dotenv.parse((0, fs_1.readFileSync)(`${configPath}/.env-local`)); + constructor(env, hznConfig) { + if ((0, fs_1.existsSync)(`${hznConfig}/.env-local`)) { + const localEnv = dotenv.parse((0, fs_1.readFileSync)(`${hznConfig}/.env-local`)); for (var i in localEnv) { pEnv[i] = localEnv[i]; } } this.env = env; - this.configPath = configPath; - this.hznEnv = `${configPath}/.env-hzn.json`; + this.hznConfig = hznConfig; + this.hznEnv = `${hznConfig}/.env-hzn.json`; } init() { return new rxjs_1.Observable((observer) => { + pEnv.HZN_ORG_ID = this.env; this.hznJson = JSON.parse((0, fs_1.readFileSync)(this.hznEnv).toString()); // console.log(process.cwd(), this.env, this.hznJson) this.envVars = this.hznJson[this.env]['envVars']; diff --git a/build/common/src/env.js.map b/build/common/src/env.js.map index 0e39c1e..ab584db 100644 --- a/build/common/src/env.js.map +++ b/build/common/src/env.js.map @@ -1 +1 @@ -{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/common/src/env.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/common/src/env.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/common/src/hzn.d.ts b/build/common/src/hzn.d.ts index 5e94887..9aeddca 100644 --- a/build/common/src/hzn.d.ts +++ b/build/common/src/hzn.d.ts @@ -1,5 +1,6 @@ import { Observable } from 'rxjs'; import { Utils } from './utils'; +export declare const utils: Utils; export declare class Hzn { objectType: any; objectId: any; @@ -15,26 +16,26 @@ export declare class Hzn { envVar: any; configPath: string; name: string; - utils: Utils; constructor(env: string, configPath: string, name: string, objectType: string, objectId: string, objectFile: string, mmsPattern: string); - setup(): Observable; + init(): Observable; test(): Observable; + setup(): Observable; buildServiceImage(): Observable; pushServiceImage(): Observable; buildMMSImage(): Observable; pushMMSImage(): Observable; + pullDockerImage(): Observable; + dockerImageExists(): Observable; + publishService(): Observable; + publishPattern(): Observable; publishMMSService(): Observable; publishMMSPattern(): Observable; unregisterAgent(): Observable; registerAgent(): Observable; publishMMSObject(): Observable; allInOneMMS(): Observable; - publishService(): Observable; - publishPattern(): Observable; showHznInfo(): Observable; - getHznInfo(): string[]; updateHznInfo(): Observable; - copyFile(arg: string): Promise; listService(): Observable; listPattern(): Observable; listNode(): Observable; diff --git a/build/common/src/hzn.js b/build/common/src/hzn.js index 187c633..4f5d4d9 100644 --- a/build/common/src/hzn.js +++ b/build/common/src/hzn.js @@ -1,17 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hzn = void 0; +exports.Hzn = exports.utils = void 0; const rxjs_1 = require("rxjs"); -const cp = require('child_process'), exec = cp.exec; -const fs_1 = require("fs"); const env_1 = require("./env"); const utils_1 = require("./utils"); -const prompt = require('prompt'); -const utils = new utils_1.Utils(); +exports.utils = new utils_1.Utils(); class Hzn { constructor(env, configPath, name, objectType, objectId, objectFile, mmsPattern) { - this.utils = new utils_1.Utils(); - this.envVar = new env_1.Env(env, configPath); + this.envVar = new env_1.Env(env, exports.utils.getHznConfig()); this.configPath = configPath; this.name = name; this.objectType = objectType; @@ -19,7 +15,7 @@ class Hzn { this.objectFile = objectFile; this.mmsPattern = mmsPattern; } - setup() { + init() { return new rxjs_1.Observable((observer) => { this.envVar.init() .subscribe({ @@ -64,148 +60,80 @@ class Hzn { observer.complete(); }); } - buildServiceImage() { + setup() { return new rxjs_1.Observable((observer) => { - let arg = `docker build -t ${this.envVar.getServiceContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done building service docker image`); - } - else { - console.log('failed to build service docker image', err); - } - observer.next(); - observer.complete(); - }); + console.log(`it works...${this.envVar.getArch()}, your environment is ready to go!`); + observer.complete(); }); } + buildServiceImage() { + let arg = `docker build -t ${this.envVar.getServiceContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); + return exports.utils.shell(arg, 'done building service docker image', 'failed to build service docker image'); + } pushServiceImage() { - return new rxjs_1.Observable((observer) => { - let arg = `docker push ${this.envVar.getServiceContainer()}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done pushing service docker image`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to push service docker image', err); - observer.error(err); - } - }); - }); + let arg = `docker push ${this.envVar.getServiceContainer()}`; + return exports.utils.shell(arg, 'done pushing service docker image', 'failed to push service docker image'); } buildMMSImage() { - return new rxjs_1.Observable((observer) => { - // let tag = `${this.envVar.getDockerImageBase()}_${this.envVar.getArch()}:${this.envVar.getMMSServiceVersion()}`; - let arg = `docker build -t ${this.envVar.getMMSContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done building mms docker image`); - } - else { - console.log('failed to build mms docker image', err); - } - observer.next(); - observer.complete(); - }); - }); + let arg = `docker build -t ${this.envVar.getMMSContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); + return exports.utils.shell(arg, 'done building mms docker image', 'failed to build mms docker image'); } pushMMSImage() { + let arg = `docker push ${this.envVar.getMMSContainer()}`; + return exports.utils.shell(arg, 'done pushing mms docker image', 'failed to push mms docker image'); + } + pullDockerImage() { + let image = this.name ? this.name : this.envVar.getServiceContainer(); + let arg = `docker pull ${image}`; + return exports.utils.shell(arg, 'done pulling docker image', 'failed to pull docker image'); + } + dockerImageExists() { + let image = this.name ? this.name : this.envVar.getMMSContainer(); + let arg = `docker images ${image}`; + // return utils.shell(arg, 'done checking docker image', 'failed to check docker image'); return new rxjs_1.Observable((observer) => { - let arg = `docker push ${this.envVar.getMMSContainer()}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done pushing mms docker image`); - observer.next(); + exports.utils.shell(arg, 'done checking docker image', 'failed to check docker image') + .subscribe({ + next: (res) => { + console.log(res); + const imageName = image.split(':'); + // @ts-ignore + let exist = res.indexOf(imageName[0]) > 0 && res.indexOf(imageName[1]) > 0; + observer.next(exist); observer.complete(); } - else { - console.log('failed to push mms docker image', err); - observer.error(err); - } }); }); } + publishService() { + let arg = `hzn exchange service publish -O ${this.envVar.getServiceContainerCreds()} -f ${this.serviceJson} --pull-image`; + return exports.utils.shell(arg, 'done publishing service', 'failed to publish service'); + } + publishPattern() { + let arg = `hzn exchange pattern publish -f ${this.patternJson}`; + return exports.utils.shell(arg, 'done publishing service pattern', 'failed to publish service pattern'); + } publishMMSService() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn exchange service publish -O ${this.envVar.getMMSContainerCreds()} -f ${this.mmsServiceJson}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done publishing mms service`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to publish mms service', err); - observer.error(err); - } - }); - }); + let arg = `hzn exchange service publish -O ${this.envVar.getMMSContainerCreds()} -f ${this.mmsServiceJson} --pull-image`; + return exports.utils.shell(arg, 'done publishing mms service', 'failed to publish mms service'); } publishMMSPattern() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn exchange pattern publish -f ${this.mmsPatternJson}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done publishing mss pattern`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to publish mms pattern', err); - observer.error(err); - } - }); - }); + let arg = `hzn exchange pattern publish -f ${this.mmsPatternJson}`; + return exports.utils.shell(arg, 'done publishing mss pattern', 'failed to publish mms pattern'); } unregisterAgent() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn unregister -f`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done unregistering agent`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to unregister agent', err); - observer.error(err); - } - }); - }); + let arg = `hzn unregister -f`; + return exports.utils.shell(arg, 'done unregistering agent', 'failed to unregister agent'); } registerAgent() { return new rxjs_1.Observable((observer) => { this.unregisterAgent().subscribe({ complete: () => { let arg = `hzn register --policy ${this.mmsPolicyJson} --pattern "${this.mmsPattern}"`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done registering mss agent`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to register mms agent', err); - observer.error(err); - } + exports.utils.shell(arg, 'done registering agent', 'failed to register agent') + .subscribe({ + complete: () => observer.complete(), + error: (err) => observer.error(err) }); }, error: (err) => { observer.error(err); @@ -214,22 +142,8 @@ class Hzn { }); } publishMMSObject() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn mms object publish --type=${this.objectType} --id=${this.objectId} --object=${this.objectFile} --pattern=${this.mmsPattern}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done publishing object`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to publish object', err); - observer.error(err); - } - }); - }); + let arg = `hzn mms object publish --type=${this.objectType} --id=${this.objectId} --object=${this.objectFile} --pattern=${this.mmsPattern}`; + return exports.utils.shell(arg, 'done publishing object', 'failed to publish object'); } allInOneMMS() { return new rxjs_1.Observable((observer) => { @@ -273,145 +187,50 @@ class Hzn { }); }); } - publishService() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn exchange service publish -O ${this.envVar.getServiceContainerCreds()} -f ${this.serviceJson} --pull-image`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done publishing ${this.envVar.getServiceName()} service`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to publish service', err); - observer.error(err); - } - }); - }); - } - publishPattern() { - return new rxjs_1.Observable((observer) => { - let arg = `hzn exchange pattern publish -f ${this.patternJson}`; - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(stdout); - console.log(`done publishing ${this.envVar.getPatternName()} pattern`); - observer.next(); - observer.complete(); - } - else { - console.log('failed to publish mms pattern', err); - observer.error(err); - } - }); - }); - } showHznInfo() { - return new rxjs_1.Observable((observer) => { - const file = this.getHznInfo(); - console.log(file); - observer.next(file); - observer.complete(); - }); - } - getHznInfo() { - return (0, fs_1.readFileSync)('/etc/default/horizon').toString().split('\n'); + return exports.utils.showHznInfo(); } updateHznInfo() { - return new rxjs_1.Observable((observer) => { - let data = this.getHznInfo(); - let props = []; - data.forEach((el, i) => { - if (el.length > 0) { - let prop = el.split('='); - if (prop && prop.length > 0) { - props[i] = { name: prop[0], default: prop[1], required: true }; - } - } - }); - console.log('\nKey in new value or press Enter to keep current value: '); - prompt.get(props, (err, result) => { - console.log(result); - console.log('\nWould like to update horizon: Y/n?'); - prompt.get({ name: 'answer', required: true }, (err, question) => { - if (question.answer === 'Y') { - let content = ''; - for (const [key, value] of Object.entries(result)) { - content += `${key}=${value}\n`; - } - this.copyFile('sudo cp /etc/default/horizon /etc/default/.horizon').then(() => { - (0, fs_1.writeFileSync)('.horizon', content); - this.copyFile(`sudo mv .horizon /etc/default/horizon`).then(() => { - observer.next(); - observer.complete(); - }); - }); - } - }); - }); - }); - } - copyFile(arg) { - return new Promise((resolve, reject) => { - try { - console.log(arg); - exec(arg, { maxBuffer: 1024 * 2000 }, (err, stdout, stderr) => { - if (!err) { - console.log(`done moving file`); - } - else { - console.log('failed to move file', err); - } - resolve(stdout); - }); - } - catch (e) { - console.log(e); - resolve(e); - } - }); + return exports.utils.updateHznInfo(); } listService() { - return utils.listService(this.name); + return exports.utils.listService(this.name); } listPattern() { - return utils.listPattern(this.name); + return exports.utils.listPattern(this.name); } listNode() { - return utils.listNode(this.name); + return exports.utils.listNode(this.name); } listObject() { - return utils.listObject(this.name); + return exports.utils.listObject(this.name); } listDeploymentPolicy() { - return utils.listDeploymentPolicy(this.name); + return exports.utils.listDeploymentPolicy(this.name); } checkConfigState() { - return utils.checkConfigState(); + return exports.utils.checkConfigState(); } listNodePattern() { - return utils.listNodePattern(); + return exports.utils.listNodePattern(); } getDeviceArch() { - return utils.getDeviceArch(); + return exports.utils.getDeviceArch(); } createHznKey() { - return utils.createHznKey(this.envVar.getOrgId(), this.envVar.getMyDockerHubId()); + return exports.utils.createHznKey(this.envVar.getOrgId(), this.envVar.getMyDockerHubId()); } aptUpdate() { - return utils.aptUpdate(); + return exports.utils.aptUpdate(); } installPrereq() { - return utils.installPrereq(); + return exports.utils.installPrereq(); } installHznCli() { - return utils.installHznCli(this.envVar.getAnax(), this.envVar.getHznNodeID()); + return exports.utils.installHznCli(this.envVar.getAnax(), this.envVar.getHznNodeID()); } uninstallHorizon() { - return utils.uninstallHorizon(); + return exports.utils.uninstallHorizon(); } preInstallHznCli() { return new rxjs_1.Observable((observer) => { @@ -444,11 +263,11 @@ class Hzn { } setupRedHat() { return new rxjs_1.Observable((observer) => { - utils.checkOS() + exports.utils.checkOS() .subscribe({ next: (stdout) => { if (stdout.toLowerCase().indexOf('redhat') >= 0) { - utils.shell(`sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc + exports.utils.shell(`sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc && sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y && sudo yum install docker-ce docker-ce-cli containerd.io`) .subscribe({ diff --git a/build/common/src/hzn.js.map b/build/common/src/hzn.js.map index 82db262..203be02 100644 --- a/build/common/src/hzn.js.map +++ b/build/common/src/hzn.js.map @@ -1 +1 @@ -{"version":3,"file":"hzn.js","sourceRoot":"","sources":["../../../src/common/src/hzn.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"hzn.js","sourceRoot":"","sources":["../../../src/common/src/hzn.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/common/src/utils.d.ts b/build/common/src/utils.d.ts index fb91140..ae59c99 100644 --- a/build/common/src/utils.d.ts +++ b/build/common/src/utils.d.ts @@ -1,7 +1,9 @@ import { Observable } from 'rxjs'; export declare class Utils { + hznConfig: string; constructor(); init(): void; + getHznConfig(): string; listService(name: string): Observable; listPattern(name: string): Observable; listNode(name: string): Observable; @@ -16,7 +18,16 @@ export declare class Utils { installPrereq(): Observable; installHznCli(anax: string, id: null): Observable; uninstallHorizon(): Observable; - shell(arg: string, options?: { + copyFile(arg: string): Promise; + updateEnvFiles(org: string): Observable; + setupEnvFiles(): Observable; + updateEnvHzn(org: string): Observable; + checkDefaultConfig(): Observable; + getHznInfo(): string[]; + showHznInfo(): Observable; + getPropsFromFile(file: string): any[]; + updateHznInfo(): Observable; + shell(arg: string, success?: string, error?: string, options?: { maxBuffer: number; }): Observable; } diff --git a/build/common/src/utils.js b/build/common/src/utils.js index 817d434..e8d9517 100644 --- a/build/common/src/utils.js +++ b/build/common/src/utils.js @@ -1,13 +1,26 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); exports.Utils = void 0; const rxjs_1 = require("rxjs"); const cp = require('child_process'), exec = cp.exec; +const fs_1 = require("fs"); +const os_1 = __importDefault(require("os")); +const prompt_1 = __importDefault(require("prompt")); +const jsonfile_1 = __importDefault(require("jsonfile")); const env = process.env.npm_config_env || 'biz'; +const notRequired = ['SERVICE_CONTAINER_CREDS', 'MMS_CONTAINER_CREDS', 'MMS_OBJECT_FILE', 'HZN_CUSTOM_NODE_ID', 'UPDATE_FILE_NAME']; class Utils { - constructor() { } + constructor() { + this.hznConfig = '/etc/default/config'; + } init() { } + getHznConfig() { + return this.hznConfig; + } listService(name) { const arg = name.length > 0 ? `hzn exchange service list ${name}` : 'hzn exchange service list'; return this.shell(arg); @@ -68,24 +81,203 @@ class Utils { return this.shell(`curl -sSL ${anax} | sudo -s -E bash -s -- -i anax: -k css: -c css: -p IBM/pattern-ibm.helloworld -w '*' -T 120`); } else { - let nodeId = id ? ` -d ${id}` : ''; - return this.shell(`curl -u "$HZN_ORG_ID/$HZN_EXCHANGE_USER_AUTH" -k -o agent-install.sh $HZN_FSS_CSSURL/api/v1/objects/IBM/agent_files/agent-install.sh/data && chmod +x agent-install.sh && sudo -s -E ./agent-install.sh -i 'css:' ${nodeId}`); + let nodeId = id ? `-d ${id}` : ''; + return this.shell(`curl -u "$HZN_ORG_ID/$HZN_EXCHANGE_USER_AUTH" -k -o agent-install.sh $HZN_FSS_CSSURL/api/v1/objects/IBM/agent_files/agent-install.sh/data && chmod +x agent-install.sh && sudo -s -E -b ./agent-install.sh -i 'css:' ${nodeId}`); } } uninstallHorizon() { return this.shell(`sudo apt purge -y bluehorizon horizon horizon-cli`); } - shell(arg, options = { maxBuffer: 1024 * 2000 }) { + copyFile(arg) { + return (0, rxjs_1.firstValueFrom)(this.shell(arg)); + } + updateEnvFiles(org) { + return new rxjs_1.Observable((observer) => { + let props = this.getPropsFromFile(`${this.hznConfig}/.env-local`); + console.log(props); + console.log(`\nWould you like to change any of the above properties: Y/n?`); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + if (question.answer === 'Y') { + console.log('\nKey in new value or press Enter to keep current value: '); + prompt_1.default.get(props, (err, result) => { + console.log(result); + console.log(`\nWould you like to update config files: Y/n?`); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + let content = ''; + for (const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + (0, fs_1.writeFileSync)('.env-local', content); + this.copyFile(`sudo mv .env-local ${this.hznConfig}/.env-local`).then(() => { + this.updateEnvHzn(org) + .subscribe({ + complete: () => observer.complete() + }); + }); + }); + }); + } + else { + this.updateEnvHzn(org) + .subscribe({ + complete: () => observer.complete() + }); + } + }); + }); + } + setupEnvFiles() { + return new rxjs_1.Observable((observer) => { + // console.log(process.cwd(), __dirname, __filename) + let props = this.getPropsFromFile(`${__dirname}/env-local`); + console.log('\nKey in new value or press Enter to keep current value: '); + prompt_1.default.get(props, (err, result) => { + console.log(result); + console.log(`\nWould you like to save config files: Y/n?`); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + if (question.answer === 'Y') { + this.copyFile(`sudo cp -rf ${__dirname}/config /etc/default`).then(() => { + let content = ''; + for (const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + (0, fs_1.writeFileSync)('.env-local', content); + this.copyFile(`sudo mv .env-local ${this.hznConfig}/.env-local`).then(() => { + this.copyFile(`sudo cp ${__dirname}/env-hzn.json ${this.hznConfig}/.env-hzn.json`).then(() => { + observer.next(); + observer.complete(); + }); + }); + }); + } + else { + console.log(`config files not saved`); + observer.error(); + } + }); + }); + }); + } + updateEnvHzn(org) { + return new rxjs_1.Observable((observer) => { + let props = []; + let hznJson = jsonfile_1.default.readFileSync(`${this.hznConfig}/.env-hzn.json`); + let envVars = hznJson[org]['envVars']; + let i = 0; + for (const [key, value] of Object.entries(envVars)) { + props[i] = { name: key, default: value, required: notRequired.indexOf(key) < 0 }; + i++; + } + console.log(props); + console.log(`\nWould you like to change any of the above properties for ${org}: Y/n?`); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + if (question.answer === 'Y') { + console.log('\nKey in new value or press Enter to keep current value: '); + prompt_1.default.get(props, (err, result) => { + console.log(result); + console.log(`\nWould you like to save these changes: Y/n?`); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + if (question.answer === 'Y') { + for (const [key, value] of Object.entries(result)) { + envVars[key] = value; + } + jsonfile_1.default.writeFileSync('.env-hzn.json', hznJson, { spaces: 2 }); + this.copyFile(`sudo mv .env-hzn.json ${this.hznConfig}/.env-hzn.json`).then(() => { + console.log(`config files updated for ${org}`); + observer.complete(); + }); + } + else { + console.log(`config files not updated for ${org}`); + observer.complete(); + } + }); + }); + } + else { + console.log(`config files not updated for ${org}`); + observer.complete(); + } + }); + }); + } + checkDefaultConfig() { + return new rxjs_1.Observable((observer) => { + if ((0, fs_1.existsSync)(`${this.hznConfig}/.env-local`) && (0, fs_1.existsSync)(`${this.hznConfig}/.env-hzn.json`)) { + observer.complete(); + } + else { + observer.error('No config files.'); + } + }); + } + getHznInfo() { + return (0, fs_1.readFileSync)('/etc/default/horizon').toString().split('\n'); + } + showHznInfo() { + return new rxjs_1.Observable((observer) => { + const file = this.getHznInfo(); + console.log(file); + observer.next(file); + observer.complete(); + }); + } + getPropsFromFile(file) { + let props = []; + let data = (0, fs_1.readFileSync)(file).toString().split('\n'); + data.forEach((el, i) => { + if (el.length > 0) { + let prop = el.split('='); + if (prop && prop.length > 0) { + if (prop[0] === 'HZN_CUSTOM_NODE_ID' && (!prop[1] || prop[1].length == 0)) { + prop[1] = os_1.default.hostname(); + } + props[i] = { name: prop[0], default: prop[1], required: notRequired.indexOf(prop[0]) < 0 }; + } + } + }); + return props; + } + updateHznInfo() { + return new rxjs_1.Observable((observer) => { + let props = this.getPropsFromFile('/etc/default/horizon'); + console.log('\nKey in new value or press Enter to keep current value: '); + prompt_1.default.get(props, (err, result) => { + console.log(result); + console.log('\nWould you like to update horizon: Y/n?'); + prompt_1.default.get({ name: 'answer', required: true }, (err, question) => { + if (question.answer === 'Y') { + let content = ''; + for (const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + this.copyFile('sudo cp /etc/default/horizon /etc/default/.horizon').then(() => { + (0, fs_1.writeFileSync)('.horizon', content); + this.copyFile(`sudo mv .horizon /etc/default/horizon`).then(() => { + observer.next(); + observer.complete(); + }); + }); + } + else { + observer.complete(); + } + }); + }); + }); + } + shell(arg, success = 'command executed successfully', error = 'command failed', options = { maxBuffer: 1024 * 2000 }) { return new rxjs_1.Observable((observer) => { console.log(arg); let child = exec(arg, options, (err, stdout, stderr) => { if (!err) { - console.log(stdout); + // console.log(stdout); + console.log(success); observer.next(stdout); observer.complete(); } else { - console.log(`shell command failed: ${err}`); + console.log(`${error}: ${err}`); observer.error(err); } }); diff --git a/build/common/src/utils.js.map b/build/common/src/utils.js.map index daf7ddc..fec0df4 100644 --- a/build/common/src/utils.js.map +++ b/build/common/src/utils.js.map @@ -1 +1 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/common/src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9732888..137e9d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "hzn-cli", - "version": "0.1.2", + "version": "0.1.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.1.2", + "version": "0.1.3", "license": "ISC", "dependencies": { "chalk": "^4.1.2", @@ -13,6 +13,7 @@ "commander": "^8.2.0", "dotenv": "^10.0.0", "figlet": "^1.5.2", + "jsonfile": "^6.1.0", "prompt": "^1.2.0", "rxjs": "^7.3.0", "yargs": "^17.1.1" @@ -1652,7 +1653,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true + "devOptional": true }, "node_modules/has-flag": { "version": "4.0.0", @@ -1914,6 +1915,17 @@ "dev": true, "peer": true }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -3026,6 +3038,14 @@ "node": ">=8" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-notifier": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", @@ -4583,7 +4603,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true + "devOptional": true }, "has-flag": { "version": "4.0.0", @@ -4791,6 +4811,15 @@ "dev": true, "peer": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -5611,6 +5640,11 @@ "crypto-random-string": "^2.0.0" } }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, "update-notifier": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", diff --git a/package.json b/package.json index 2fdd547..d9ca7c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hzn-cli", - "version": "0.1.3", + "version": "0.1.6", "description": "Open Horizon CLI toolkit helps streamline the process of preparing node agents and perform tasks between orgs environments", "main": "./build/index.js", "bin": { @@ -8,7 +8,7 @@ }, "scripts": { "start": "nodemon -e ts --watch 'src/**/*.ts' --exec 'npm run build'", - "build": "npx tsc && chmod +x build/*.js && chmod +x build/**/*.js", + "build": "npx tsc && chmod +x build/*.js && chmod +x build/**/*.js && cp src/env-* build/common/src && cp -r src/config build/common/src", "local": "npm run build && sudo npm i -g && oh", "refresh": "rm -rf ./node_modules ./package-lock.json && npm install" }, @@ -39,6 +39,7 @@ "commander": "^8.2.0", "dotenv": "^10.0.0", "figlet": "^1.5.2", + "jsonfile": "^6.1.0", "prompt": "^1.2.0", "rxjs": "^7.3.0", "yargs": "^17.1.1" diff --git a/setup/config/env-hzn.json b/setup/config/env-hzn.json index 9306a4c..03459e4 100644 --- a/setup/config/env-hzn.json +++ b/setup/config/env-hzn.json @@ -2,26 +2,19 @@ "biz": { "envVars": { - "HZN_ORG_ID": "", - "HZN_EXCHANGE_USER_AUTH": "", - "HZN_EXCHANGE_URL": "", - "HZN_FSS_CSSURL": "", - "HZN_CUSTOM_NODE_ID": "", /* defaults to hostname if leave blank */ - "SERVICE_NAME": "", - "SERVICE_VERSION": "", - "SERVICE_CONTAINER_NAME": "", + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", "SERVICE_CONTAINER_CREDS": "", - "YOUR_DOCKERHUB_ID": "", - "VOLUME_MOUNT": "", - "MMS_SHARED_VOLUME": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", "MMS_CONTAINER_CREDS": "", - "MMS_CONTAINER_NAME": "", - "MMS_SERVICE_NAME": "", - "MMS_SERVICE_VERSION": "", - "MMS_OBJECT_TYPE": "", - "MMS_OBJECT_ID": "", - "MMS_OBJECT_FILE": "config/config.json", - "UPDATE_FILE_NAME": "" + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "" }, "metaVars": { } @@ -29,26 +22,40 @@ "demo": { "envVars": { - "HZN_ORG_ID": "", - "HZN_EXCHANGE_USER_AUTH": "", - "HZN_EXCHANGE_URL": "", - "HZN_FSS_CSSURL": "", - "HZN_CUSTOM_NODE_ID": "", /* defaults to hostname if leave blank */ - "SERVICE_NAME": "", - "SERVICE_VERSION": "", - "SERVICE_CONTAINER_NAME": "", + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", "SERVICE_CONTAINER_CREDS": "", - "YOUR_DOCKERHUB_ID": "", - "VOLUME_MOUNT": "", - "MMS_SHARED_VOLUME": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", "MMS_CONTAINER_CREDS": "", - "MMS_CONTAINER_NAME": "", - "MMS_SERVICE_NAME": "", - "MMS_SERVICE_VERSION": "", - "MMS_OBJECT_TYPE": "", - "MMS_OBJECT_ID": "", - "MMS_OBJECT_FILE": "config/config.json", - "UPDATE_FILE_NAME": "" + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "path-to-file" + }, + "metaVars": { + } + }, + "myorg": + { + "envVars": { + "ANAX": "https://github.com/open-horizon/anax/releases/latest/download/agent-install.sh", + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "path-to-file" }, "metaVars": { } diff --git a/setup/config/env-local b/setup/config/env-local new file mode 100644 index 0000000..e578d30 --- /dev/null +++ b/setup/config/env-local @@ -0,0 +1,5 @@ +YOUR_DOCKERHUB_ID= +HZN_EXCHANGE_USER_AUTH= +HZN_EXCHANGE_URL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-exchange/v1 +HZN_FSS_CSSURL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-css +HZN_CUSTOM_NODE_ID= \ No newline at end of file diff --git a/src/commands/deploy.ts b/src/commands/deploy.ts index fb55901..d5dd1a4 100644 --- a/src/commands/deploy.ts +++ b/src/commands/deploy.ts @@ -1,5 +1,5 @@ import type { Arguments, CommandBuilder } from 'yargs'; -import { Hzn } from '../common/src/hzn'; +import { Hzn, utils } from '../common/src/hzn'; import chalk from 'chalk'; import clear from 'clear'; import figlet from 'figlet'; @@ -14,6 +14,7 @@ type Options = { object_id: string | undefined; object: string | undefined; pattern: string | undefined; + skip_config_update: string | undefined; }; export const command: string = 'deploy '; export const desc: string = 'Deploy to Org '; @@ -27,14 +28,17 @@ export const builder: CommandBuilder = (yargs) => object_type: {type: 'string', desc: 'Type of object'}, object_id: {type: 'string', desc: 'Id of object to be published'}, object: {type: 'string', desc: 'Object file to be published'}, - pattern: {type: 'string', desc: 'MMS pattern'} + pattern: {type: 'string', desc: 'MMS pattern'}, + skip_config_update: {type: 'string', desc: 'Do not prompt for config updates'} }) .positional('action', { type: 'string', demandOption: true, - desc: 'Available actions: test, buildServiceImage, pushServiceImage, publishService, publishPatterrn, buildMMSImage, pushMMSImage, publishMMSService, ' + - 'publishMMSPattern, registerAgent, publishMMSObject, unregisterAgent, allInOneMMS, showHznInfo, updateHznInfo, listService, listPattern, ' + - 'listNode, listObject, listDeploymentPolicy, listNodePattern, checkConfigState, getDeviceArch, createHznKey, uninstallHorizon' + desc: 'Available actions: ' + + 'allInOneMMS, buildMMSImage, buildServiceImage, checkConfigState, createHznKey, dockerImageExists, getDeviceArch, ' + + 'listDeploymentPolicy, listNode, listNodePattern, listObject, listPattern, listService, publishMMSObject, ' + + 'publishMMSPattern, publishMMSService, publishPatterrn, publishService, pullDockerImage, pushMMSImage, pushServiceImage, ' + + 'registerAgent, setup, showHznInfo, test, uninstallHorizon, unregisterAgent, updateHznInfo' }); export const handler = (argv: Arguments): void => { @@ -44,36 +48,77 @@ export const handler = (argv: Arguments): void => { figlet.textSync('hzn-cli', { horizontalLayout: 'full' }) ) ); - const { action, org, config_path, name, object_type, object_id, object, pattern } = argv; + const { action, org, config_path, name, object_type, object_id, object, pattern, skip_config_update } = argv; const env = org || 'biz'; const n = name || ''; const objType = object_type || ''; const objId = object_id || ''; const obj = object || ''; const p = pattern || ''; - console.log('$$$ ', action, env, config_path, n); - const configPath = config_path || 'config'; - if(existsSync(`${configPath}/.env-hzn.json`)) { - const hzn = new Hzn(env, configPath, n, objType, objId, obj, p); + const configPath = config_path || utils.getHznConfig(); + const skipInitialize = ['uninstallHorizon']; + const promptForUpdate = ['setup', 'publishService', 'publishPatterrn', 'publishMMSService', 'publishMMSPattern', 'registerAgent', 'publishMMSObject', 'unregisterAgent'] + console.log('$$$ ', action, env, configPath, n); - hzn.setup() - .subscribe({ - complete: () => { - hzn[action]() + const proceed = () => { + if(existsSync(`${utils.getHznConfig()}/.env-hzn.json`)) { + const hzn = new Hzn(env, configPath, n, objType, objId, obj, p); + + hzn.init() + .subscribe({ + complete: () => { + hzn[action]() + .subscribe({ + complete:() => { + console.log('process completed.'); + process.exit(0) + } + }) + }, + error: (err) => { + console.log('something went wrong. ', err); + process.exit(0); + } + }) + } else { + console.log(`${configPath}/.env-hzn.json file not fouund.`) + } + } + + utils.checkDefaultConfig() + .subscribe({ + complete: () => { + if(promptForUpdate.indexOf(action) < 0 || skip_config_update) { + proceed(); + } else { + utils.updateEnvFiles(env) + .subscribe({ + complete: () => { + proceed() + }, error: (err) => { + console.log(err) + } + }) + } + }, error: (err) => { + if(skipInitialize.indexOf(action) < 0) { + console.log(err, 'Initialising...') + utils.setupEnvFiles() + .subscribe({ + complete: () => { + proceed(); + }, error: () => process.exit(0) + }) + } else { + utils.uninstallHorizon() .subscribe({ complete:() => { console.log('process completed.'); process.exit(0) } }) - }, - error: (err) => { - console.log('something went wrong. ', err); - process.exit(0); } - }) - } else { - console.log('./config/.env-hzn.json file not fouund.') - } + } + }) }; diff --git a/src/common/src/env.ts b/src/common/src/env.ts index f8a9627..992e2b6 100644 --- a/src/common/src/env.ts +++ b/src/common/src/env.ts @@ -11,20 +11,21 @@ export class Env { envVars: any; hznJson: any; hznEnv: any; - configPath: string; - constructor(env: string, configPath: string) { - if(existsSync(`${configPath}/.env-local`)) { - const localEnv = dotenv.parse(readFileSync(`${configPath}/.env-local`)); + hznConfig: string; + constructor(env: string, hznConfig: string) { + if(existsSync(`${hznConfig}/.env-local`)) { + const localEnv = dotenv.parse(readFileSync(`${hznConfig}/.env-local`)); for(var i in localEnv) { pEnv[i] = localEnv[i]; } } this.env = env; - this.configPath = configPath; - this.hznEnv = `${configPath}/.env-hzn.json`; + this.hznConfig = hznConfig; + this.hznEnv = `${hznConfig}/.env-hzn.json`; } init() { return new Observable((observer) => { + pEnv.HZN_ORG_ID = this.env; this.hznJson = JSON.parse(readFileSync(this.hznEnv).toString()); // console.log(process.cwd(), this.env, this.hznJson) this.envVars = this.hznJson[this.env]['envVars']; diff --git a/src/common/src/hzn.ts b/src/common/src/hzn.ts index a55d9ac..e7d5126 100644 --- a/src/common/src/hzn.ts +++ b/src/common/src/hzn.ts @@ -1,12 +1,8 @@ -import { Observable, forkJoin } from 'rxjs'; -const cp = require('child_process'), -exec = cp.exec; -import { readFileSync, writeFileSync } from 'fs'; +import { Observable } from 'rxjs'; import { Env } from './env'; import { Utils } from './utils'; -const prompt = require('prompt'); -const utils = new Utils(); +export const utils = new Utils(); export class Hzn { objectType: any; @@ -23,9 +19,8 @@ export class Hzn { envVar: any; configPath: string; name: string; - utils = new Utils(); constructor(env: string, configPath: string, name: string, objectType: string, objectId: string, objectFile: string, mmsPattern: string) { - this.envVar = new Env(env, configPath); + this.envVar = new Env(env, utils.getHznConfig()); this.configPath = configPath; this.name = name; this.objectType = objectType; @@ -34,7 +29,7 @@ export class Hzn { this.mmsPattern = mmsPattern; } - setup() { + init() { return new Observable((observer) => { this.envVar.init() .subscribe({ @@ -78,140 +73,80 @@ export class Hzn { observer.complete(); }); } - buildServiceImage() { + setup() { return new Observable((observer) => { - let arg = `docker build -t ${this.envVar.getServiceContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done building service docker image`); - } else { - console.log('failed to build service docker image', err); - } - observer.next(); - observer.complete(); - }); - }); + console.log(`it works...${this.envVar.getArch()}, your environment is ready to go!`) + observer.complete(); + }); + } + buildServiceImage() { + let arg = `docker build -t ${this.envVar.getServiceContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); + return utils.shell(arg, 'done building service docker image', 'failed to build service docker image'); } pushServiceImage() { - return new Observable((observer) => { - let arg = `docker push ${this.envVar.getServiceContainer()}`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done pushing service docker image`); - observer.next(); - observer.complete(); - } else { - console.log('failed to push service docker image', err); - observer.error(err); - } - }); - }) + let arg = `docker push ${this.envVar.getServiceContainer()}`; + return utils.shell(arg, 'done pushing service docker image', 'failed to push service docker image'); } buildMMSImage() { - return new Observable((observer) => { - // let tag = `${this.envVar.getDockerImageBase()}_${this.envVar.getArch()}:${this.envVar.getMMSServiceVersion()}`; - let arg = `docker build -t ${this.envVar.getMMSContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done building mms docker image`); - } else { - console.log('failed to build mms docker image', err); - } - observer.next(); - observer.complete(); - }); - }) + let arg = `docker build -t ${this.envVar.getMMSContainer()} -f Dockerfile-${this.envVar.getArch()} .`.replace(/\r?\n|\r/g, ''); + return utils.shell(arg, 'done building mms docker image', 'failed to build mms docker image'); } pushMMSImage() { + let arg = `docker push ${this.envVar.getMMSContainer()}`; + return utils.shell(arg, 'done pushing mms docker image', 'failed to push mms docker image'); + } + pullDockerImage() { + let image = this.name ? this.name : this.envVar.getServiceContainer() + let arg = `docker pull ${image}`; + return utils.shell(arg, 'done pulling docker image', 'failed to pull docker image'); + } + dockerImageExists() { + let image = this.name ? this.name : this.envVar.getMMSContainer() + let arg = `docker images ${image}`; + // return utils.shell(arg, 'done checking docker image', 'failed to check docker image'); return new Observable((observer) => { - let arg = `docker push ${this.envVar.getMMSContainer()}`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done pushing mms docker image`); - observer.next(); - observer.complete(); - } else { - console.log('failed to push mms docker image', err); - observer.error(err); + utils.shell(arg, 'done checking docker image', 'failed to check docker image') + .subscribe({ + next: (res) => { + console.log(res) + const imageName = image.split(':') + // @ts-ignore + let exist = res.indexOf(imageName[0]) > 0 && res.indexOf(imageName[1]) > 0; + observer.next(exist) + observer.complete() } - }); - }) + }) + }) + } + publishService() { + let arg = `hzn exchange service publish -O ${this.envVar.getServiceContainerCreds()} -f ${this.serviceJson} --pull-image`; + return utils.shell(arg, 'done publishing service', 'failed to publish service'); + } + publishPattern() { + let arg = `hzn exchange pattern publish -f ${this.patternJson}`; + return utils.shell(arg, 'done publishing service pattern', 'failed to publish service pattern'); } publishMMSService() { - return new Observable((observer) => { - let arg = `hzn exchange service publish -O ${this.envVar.getMMSContainerCreds()} -f ${this.mmsServiceJson}`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done publishing mms service`); - observer.next(); - observer.complete(); - } else { - console.log('failed to publish mms service', err); - observer.error(err); - } - }); - }) + let arg = `hzn exchange service publish -O ${this.envVar.getMMSContainerCreds()} -f ${this.mmsServiceJson} --pull-image`; + return utils.shell(arg, 'done publishing mms service', 'failed to publish mms service'); } publishMMSPattern() { - return new Observable((observer) => { - let arg = `hzn exchange pattern publish -f ${this.mmsPatternJson}`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done publishing mss pattern`); - observer.next(); - observer.complete(); - } else { - console.log('failed to publish mms pattern', err); - observer.error(err); - } - }); - }) + let arg = `hzn exchange pattern publish -f ${this.mmsPatternJson}`; + return utils.shell(arg, 'done publishing mss pattern', 'failed to publish mms pattern'); } unregisterAgent() { - return new Observable((observer) => { - let arg = `hzn unregister -f`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done unregistering agent`); - observer.next(); - observer.complete(); - } else { - console.log('failed to unregister agent', err); - observer.error(err); - } - }); - }) + let arg = `hzn unregister -f`; + return utils.shell(arg, 'done unregistering agent', 'failed to unregister agent'); } registerAgent() { return new Observable((observer) => { this.unregisterAgent().subscribe({ complete: () => { let arg = `hzn register --policy ${this.mmsPolicyJson} --pattern "${this.mmsPattern}"`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done registering mss agent`); - observer.next(); - observer.complete(); - } else { - console.log('failed to register mms agent', err); - observer.error(err); - } + utils.shell(arg, 'done registering agent', 'failed to register agent') + .subscribe({ + complete: () => observer.complete(), + error: (err) => observer.error(err) }) }, error: (err) => { observer.error(err); @@ -220,21 +155,8 @@ export class Hzn { }) } publishMMSObject() { - return new Observable((observer) => { - let arg = `hzn mms object publish --type=${this.objectType} --id=${this.objectId} --object=${this.objectFile} --pattern=${this.mmsPattern}` - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(stdout) - console.log(`done publishing object`); - observer.next(); - observer.complete(); - } else { - console.log('failed to publish object', err); - observer.error(err); - } - }); - }) + let arg = `hzn mms object publish --type=${this.objectType} --id=${this.objectId} --object=${this.objectFile} --pattern=${this.mmsPattern}` + return utils.shell(arg, 'done publishing object', 'failed to publish object'); } allInOneMMS() { return new Observable((observer) => { @@ -278,103 +200,11 @@ export class Hzn { }) }); } - publishService() { - return new Observable((observer) => { - let arg = `hzn exchange service publish -O ${this.envVar.getServiceContainerCreds()} -f ${this.serviceJson} --pull-image`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err, stdout, stderr) => { - if(!err) { - console.log(stdout) - console.log(`done publishing ${this.envVar.getServiceName()} service`); - observer.next(); - observer.complete(); - } else { - console.log('failed to publish service', err); - observer.error(err); - } - }); - }) - } - publishPattern() { - return new Observable((observer) => { - let arg = `hzn exchange pattern publish -f ${this.patternJson}`; - console.log(arg) - exec(arg, {maxBuffer: 1024 * 2000}, (err, stdout, stderr) => { - if(!err) { - console.log(stdout) - console.log(`done publishing ${this.envVar.getPatternName()} pattern`); - observer.next(); - observer.complete(); - } else { - console.log('failed to publish mms pattern', err); - observer.error(err); - } - }); - }) - } showHznInfo() { - return new Observable((observer) => { - const file = this.getHznInfo(); - console.log(file) - observer.next(file); - observer.complete(); - }) - } - getHznInfo() { - return readFileSync('/etc/default/horizon').toString().split('\n'); + return utils.showHznInfo(); } updateHznInfo() { - return new Observable((observer) => { - let data = this.getHznInfo(); - let props: any[] = []; - data.forEach((el, i) => { - if(el.length > 0) { - let prop = el.split('='); - if(prop && prop.length > 0) { - props[i] = {name: prop[0], default: prop[1], required: true}; - } - } - }); - console.log('\nKey in new value or press Enter to keep current value: ') - prompt.get(props, (err: any, result: any) => { - console.log(result) - - console.log('\nWould like to update horizon: Y/n?') - prompt.get({name: 'answer', required: true}, (err: any, question: any) => { - if(question.answer === 'Y') { - let content = ''; - for(const [key, value] of Object.entries(result)) { - content += `${key}=${value}\n`; - } - this.copyFile('sudo cp /etc/default/horizon /etc/default/.horizon').then(() => { - writeFileSync('.horizon', content); - this.copyFile(`sudo mv .horizon /etc/default/horizon`).then(() => { - observer.next(); - observer.complete(); - }) - }) - } - }) - }) - }) - } - copyFile(arg: string) { - return new Promise((resolve, reject) => { - try { - console.log(arg); - exec(arg, {maxBuffer: 1024 * 2000}, (err: any, stdout: any, stderr: any) => { - if(!err) { - console.log(`done moving file`); - } else { - console.log('failed to move file', err); - } - resolve(stdout); - }); - } catch(e) { - console.log(e) - resolve(e); - } - }); + return utils.updateHznInfo(); } listService() { return utils.listService(this.name); diff --git a/src/common/src/utils.ts b/src/common/src/utils.ts index e0486d7..20593ee 100644 --- a/src/common/src/utils.ts +++ b/src/common/src/utils.ts @@ -1,13 +1,23 @@ -import { Observable, of } from 'rxjs'; +import { Observable, of, firstValueFrom } from 'rxjs'; const cp = require('child_process'), exec = cp.exec; +import { readFileSync, writeFileSync, copyFileSync , existsSync } from 'fs'; +import os from 'os'; +import prompt from 'prompt'; +import jsonfile from 'jsonfile'; + const env = process.env.npm_config_env || 'biz'; +const notRequired = ['SERVICE_CONTAINER_CREDS', 'MMS_CONTAINER_CREDS', 'MMS_OBJECT_FILE', 'HZN_CUSTOM_NODE_ID', 'UPDATE_FILE_NAME']; export class Utils { + hznConfig = '/etc/default/config'; constructor() {} init() { } + getHznConfig() { + return this.hznConfig + } listService(name: string) { const arg = name.length > 0 ? `hzn exchange service list ${name}` : 'hzn exchange service list'; return this.shell(arg); @@ -66,23 +76,197 @@ export class Utils { if(anax && anax.length > 0) { return this.shell(`curl -sSL ${anax} | sudo -s -E bash -s -- -i anax: -k css: -c css: -p IBM/pattern-ibm.helloworld -w '*' -T 120`) } else { - let nodeId = id ? ` -d ${id}` : ''; - return this.shell(`curl -u "$HZN_ORG_ID/$HZN_EXCHANGE_USER_AUTH" -k -o agent-install.sh $HZN_FSS_CSSURL/api/v1/objects/IBM/agent_files/agent-install.sh/data && chmod +x agent-install.sh && sudo -s -E ./agent-install.sh -i 'css:' ${nodeId}`) + let nodeId = id ? `-d ${id}` : ''; + return this.shell(`curl -u "$HZN_ORG_ID/$HZN_EXCHANGE_USER_AUTH" -k -o agent-install.sh $HZN_FSS_CSSURL/api/v1/objects/IBM/agent_files/agent-install.sh/data && chmod +x agent-install.sh && sudo -s -E -b ./agent-install.sh -i 'css:' ${nodeId}`) } } uninstallHorizon() { return this.shell(`sudo apt purge -y bluehorizon horizon horizon-cli`); } - shell(arg: string, options={maxBuffer: 1024 * 2000}) { + copyFile(arg: string) { + return firstValueFrom(this.shell(arg)); + } + updateEnvFiles(org: string) { + return new Observable((observer) => { + let props = this.getPropsFromFile(`${this.hznConfig}/.env-local`); + console.log(props) + console.log(`\nWould you like to change any of the above properties: Y/n?`) + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + if(question.answer === 'Y') { + console.log('\nKey in new value or press Enter to keep current value: ') + prompt.get(props, (err: any, result: any) => { + console.log(result) + console.log(`\nWould you like to update config files: Y/n?`) + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + let content = ''; + for(const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + writeFileSync('.env-local', content); + this.copyFile(`sudo mv .env-local ${this.hznConfig}/.env-local`).then(() => { + this.updateEnvHzn(org) + .subscribe({ + complete: () => observer.complete() + }) + }) + }) + }) + } else { + this.updateEnvHzn(org) + .subscribe({ + complete: () => observer.complete() + }) + } + }) + }); + } + setupEnvFiles() { + return new Observable((observer) => { + // console.log(process.cwd(), __dirname, __filename) + let props = this.getPropsFromFile(`${__dirname}/env-local`); + console.log('\nKey in new value or press Enter to keep current value: ') + prompt.get(props, (err: any, result: any) => { + console.log(result) + console.log(`\nWould you like to save config files: Y/n?`) + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + if(question.answer === 'Y') { + this.copyFile(`sudo cp -rf ${__dirname}/config /etc/default`).then(() => { + let content = ''; + for(const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + writeFileSync('.env-local', content); + this.copyFile(`sudo mv .env-local ${this.hznConfig}/.env-local`).then(() => { + this.copyFile(`sudo cp ${__dirname}/env-hzn.json ${this.hznConfig}/.env-hzn.json`).then(() => { + observer.next(); + observer.complete(); + }) + }) + }) + } else { + console.log(`config files not saved`) + observer.error(); + } + }) + }) + }) + } + updateEnvHzn(org: string) { + return new Observable((observer) => { + let props: any[] = []; + let hznJson = jsonfile.readFileSync(`${this.hznConfig}/.env-hzn.json`); + let envVars = hznJson[org]['envVars']; + let i = 0; + for(const [key, value] of Object.entries(envVars)) { + props[i] = {name: key, default: value, required: notRequired.indexOf(key) < 0}; + i++; + } + console.log(props) + console.log(`\nWould you like to change any of the above properties for ${org}: Y/n?`) + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + if(question.answer === 'Y') { + console.log('\nKey in new value or press Enter to keep current value: ') + prompt.get(props, (err: any, result: any) => { + console.log(result) + console.log(`\nWould you like to save these changes: Y/n?`) + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + if(question.answer === 'Y') { + for(const [key, value] of Object.entries(result)) { + envVars[key] = value; + } + jsonfile.writeFileSync('.env-hzn.json', hznJson, {spaces: 2}); + this.copyFile(`sudo mv .env-hzn.json ${this.hznConfig}/.env-hzn.json`).then(() => { + console.log(`config files updated for ${org}`) + observer.complete(); + }) + } else { + console.log(`config files not updated for ${org}`) + observer.complete() + } + }) + }) + } else { + console.log(`config files not updated for ${org}`) + observer.complete(); + } + }) + }) + } + checkDefaultConfig() { + return new Observable((observer) => { + if(existsSync(`${this.hznConfig}/.env-local`) && existsSync(`${this.hznConfig}/.env-hzn.json`)) { + observer.complete() + } else { + observer.error('No config files.') + } + }) + } + getHznInfo() { + return readFileSync('/etc/default/horizon').toString().split('\n'); + } + showHznInfo() { + return new Observable((observer) => { + const file = this.getHznInfo(); + console.log(file) + observer.next(file); + observer.complete(); + }) + } + getPropsFromFile(file: string) { + let props: any[] = []; + let data = readFileSync(file).toString().split('\n'); + data.forEach((el, i) => { + if(el.length > 0) { + let prop = el.split('='); + if(prop && prop.length > 0) { + if(prop[0] === 'HZN_CUSTOM_NODE_ID' && (!prop[1] || prop[1].length == 0)) { + prop[1] = os.hostname(); + } + props[i] = {name: prop[0], default: prop[1], required: notRequired.indexOf(prop[0]) < 0}; + } + } + }); + return props; + } + updateHznInfo() { + return new Observable((observer) => { + let props = this.getPropsFromFile('/etc/default/horizon'); + console.log('\nKey in new value or press Enter to keep current value: ') + prompt.get(props, (err: any, result: any) => { + console.log(result) + + console.log('\nWould you like to update horizon: Y/n?') + prompt.get({name: 'answer', required: true}, (err: any, question: any) => { + if(question.answer === 'Y') { + let content = ''; + for(const [key, value] of Object.entries(result)) { + content += `${key}=${value}\n`; + } + this.copyFile('sudo cp /etc/default/horizon /etc/default/.horizon').then(() => { + writeFileSync('.horizon', content); + this.copyFile(`sudo mv .horizon /etc/default/horizon`).then(() => { + observer.next(); + observer.complete(); + }) + }) + } else { + observer.complete(); + } + }) + }) + }) + } + shell(arg: string, success='command executed successfully', error='command failed', options={maxBuffer: 1024 * 2000}) { return new Observable((observer) => { console.log(arg); let child = exec(arg, options, (err: any, stdout: any, stderr: any) => { if(!err) { - console.log(stdout); + // console.log(stdout); + console.log(success); observer.next(stdout); observer.complete(); } else { - console.log(`shell command failed: ${err}`); + console.log(`${error}: ${err}`); observer.error(err); } }); diff --git a/src/config/mms/pattern.json b/src/config/mms/pattern.json new file mode 100644 index 0000000..98548b9 --- /dev/null +++ b/src/config/mms/pattern.json @@ -0,0 +1,18 @@ +{ + "name": "pattern-${MMS_SERVICE_NAME}-$ARCH", + "label": "Edge $MMS_SERVICE_NAME Service Pattern for $ARCH", + "description": "Pattern for $MMS_SERVICE_NAME for $ARCH", + "public": false, + "services": [ + { + "serviceUrl": "$MMS_SERVICE_NAME", + "serviceOrgid": "$HZN_ORG_ID", + "serviceArch": "$ARCH", + "serviceVersions": [ + { + "version": "$MMS_SERVICE_VERSION" + } + ] + } + ] +} diff --git a/src/config/mms/policy.json b/src/config/mms/policy.json new file mode 100644 index 0000000..fd19430 --- /dev/null +++ b/src/config/mms/policy.json @@ -0,0 +1,9 @@ +{ + "properties": [ + { + "name": "openhorizon.allowPrivileged", + "value": true + } + ], + "constraints": [ ] +} \ No newline at end of file diff --git a/src/config/mms/service.json b/src/config/mms/service.json new file mode 100644 index 0000000..a918627 --- /dev/null +++ b/src/config/mms/service.json @@ -0,0 +1,32 @@ +{ + "org": "$HZN_ORG_ID", + "label": "$MMS_SERVICE_NAME for $ARCH", + "description": "A MMS example running with node js", + "documentation": "https://github.com/playground/open-labs/master/edge/services/helloworld/README.md", + "url": "$MMS_SERVICE_NAME", + "version": "$MMS_SERVICE_VERSION", + "arch": "$ARCH", + "public": true, + "sharable": "singleton", + "requiredServices": [ + { + "org": "$HZN_ORG_ID", + "url": "$SERVICE_NAME", + "version": "$SERVICE_VERSION", + "arch": "$ARCH" + } + ], + "userInput": [ + { "name": "MMS_OBJECT_TYPE", "label": "", "type": "string", "defaultValue": "$MMS_OBJECT_TYPE" }, + { "name": "MMS_VOLUME_MOUNT", "label": "", "type": "string", "defaultValue": "$VOLUME_MOUNT" }, + { "name": "UPDATE_FILE_NAME", "label": "", "type": "string", "defaultValue": "$UPDATE_FILE_NAME" } + ], + "deployment": { + "services": { + "$MMS_SERVICE_NAME": { + "image": "$MMS_CONTAINER", + "binds": ["$MMS_SHARED_VOLUME:$VOLUME_MOUNT:rw"] + } + } + } +} \ No newline at end of file diff --git a/src/config/service/pattern.json b/src/config/service/pattern.json new file mode 100644 index 0000000..2e7a15e --- /dev/null +++ b/src/config/service/pattern.json @@ -0,0 +1,11 @@ +{ + "name": "$PATTERN_NAME", + "services": [ + { + "serviceUrl": "$SERVICE_NAME", + "serviceOrgid": "$HZN_ORG_ID", + "serviceArch": "$ARCH", + "serviceVersions": [ { "version": "$SERVICE_VERSION" } ] + } + ] +} \ No newline at end of file diff --git a/src/config/service/service.json b/src/config/service/service.json new file mode 100644 index 0000000..4b605dd --- /dev/null +++ b/src/config/service/service.json @@ -0,0 +1,23 @@ +{ + "org": "$HZN_ORG_ID", + "label": "$SERVICE_NAME for $ARCH", + "url": "$SERVICE_NAME", + "version": "$SERVICE_VERSION", + "arch": "$ARCH", + "public": true, + "sharable": "singleton", + "requiredServices": [], + "userInput": [], + "deployment": { + "services": { + "$SERVICE_NAME": { + "image": "$SERVICE_CONTAINER", + "binds": ["$MMS_SHARED_VOLUME:$VOLUME_MOUNT:rw"], + "ports": [ + { "HostIP": "0.0.0.0", "HostPort": "3000:3000/tcp" } + ], + "privileged": true + } + } + } +} \ No newline at end of file diff --git a/src/env-hzn.json b/src/env-hzn.json new file mode 100644 index 0000000..aca2359 --- /dev/null +++ b/src/env-hzn.json @@ -0,0 +1,66 @@ +{ + "biz": + { + "envVars": { + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + }, + "demo": + { + "envVars": { + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + }, + "myorg": + { + "envVars": { + "ANAX": "https://github.com/open-horizon/anax/releases/latest/download/agent-install.sh", + "SERVICE_NAME": "saved-model-service", + "SERVICE_CONTAINER_NAME": "saved-model-service", + "SERVICE_VERSION": "1.0.0", + "SERVICE_CONTAINER_CREDS": "", + "VOLUME_MOUNT": "/mms-shared", + "MMS_SHARED_VOLUME": "demo_model_mms_helper_shared_volume", + "MMS_CONTAINER_CREDS": "", + "MMS_CONTAINER_NAME": "mms-service", + "MMS_SERVICE_NAME": "mms-service", + "MMS_SERVICE_VERSION": "1.0.0", + "MMS_OBJECT_TYPE": "object_detection", + "MMS_OBJECT_ID": "config.json", + "MMS_OBJECT_FILE": "config/config.json", + "UPDATE_FILE_NAME": "model.zip" + }, + "metaVars": { + } + } +} \ No newline at end of file diff --git a/src/env-local b/src/env-local new file mode 100644 index 0000000..e578d30 --- /dev/null +++ b/src/env-local @@ -0,0 +1,5 @@ +YOUR_DOCKERHUB_ID= +HZN_EXCHANGE_USER_AUTH= +HZN_EXCHANGE_URL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-exchange/v1 +HZN_FSS_CSSURL=https://cp-console.ieam42-edge-8e873dd4c685acf6fd2f13f4cdfb05bb-0000.us-south.containers.appdomain.cloud/edge-css +HZN_CUSTOM_NODE_ID= \ No newline at end of file