From 8014fed9c0b4e8e58ad5d23ba390bd7c54c61a07 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Fri, 6 May 2022 09:21:55 -0600 Subject: [PATCH] make controller-client more portable (support for windows) Signed-off-by: Travis Glenn Hansen --- ci/configs/synlogy/dsm6/iscsi.yaml | 4 +- ci/configs/synlogy/dsm7/iscsi.yaml | 4 +- ci/configs/truenas/core/12.0/core-iscsi.yaml | 2 +- ci/configs/truenas/core/12.0/core-smb.yaml | 4 +- ci/configs/truenas/core/13.0/core-iscsi.yaml | 2 +- ci/configs/truenas/core/13.0/core-smb.yaml | 4 +- .../truenas/scale/22.02/scale-iscsi.yaml | 2 +- ci/configs/truenas/scale/22.02/scale-smb.yaml | 4 +- ci/configs/zfs-generic/iscsi.yaml | 2 +- package-lock.json | 336 +++++++++++------- package.json | 3 +- src/driver/controller-client-common/index.js | 127 +++++-- 12 files changed, 320 insertions(+), 174 deletions(-) diff --git a/ci/configs/synlogy/dsm6/iscsi.yaml b/ci/configs/synlogy/dsm6/iscsi.yaml index 8b58913..7c0ca87 100644 --- a/ci/configs/synlogy/dsm6/iscsi.yaml +++ b/ci/configs/synlogy/dsm6/iscsi.yaml @@ -16,8 +16,8 @@ iscsi: targetPortal: ${SYNOLOGY_HOST} targetPortals: [] baseiqn: "iqn.2000-01.com.synology:XpenoDsm62x." - namePrefix: "csi-${CI_BUILD_KEY}-" - nameSuffix: "-ci" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" + nameSuffix: "" lunTemplate: # btrfs thin provisioning diff --git a/ci/configs/synlogy/dsm7/iscsi.yaml b/ci/configs/synlogy/dsm7/iscsi.yaml index 8b58913..7c0ca87 100644 --- a/ci/configs/synlogy/dsm7/iscsi.yaml +++ b/ci/configs/synlogy/dsm7/iscsi.yaml @@ -16,8 +16,8 @@ iscsi: targetPortal: ${SYNOLOGY_HOST} targetPortals: [] baseiqn: "iqn.2000-01.com.synology:XpenoDsm62x." - namePrefix: "csi-${CI_BUILD_KEY}-" - nameSuffix: "-ci" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" + nameSuffix: "" lunTemplate: # btrfs thin provisioning diff --git a/ci/configs/truenas/core/12.0/core-iscsi.yaml b/ci/configs/truenas/core/12.0/core-iscsi.yaml index 7d65a5a..aa32a78 100644 --- a/ci/configs/truenas/core/12.0/core-iscsi.yaml +++ b/ci/configs/truenas/core/12.0/core-iscsi.yaml @@ -26,7 +26,7 @@ zfs: iscsi: targetPortal: ${TRUENAS_HOST} interface: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" targetGroups: - targetGroupPortalGroup: 1 diff --git a/ci/configs/truenas/core/12.0/core-smb.yaml b/ci/configs/truenas/core/12.0/core-smb.yaml index f5efbf3..fe6856e 100644 --- a/ci/configs/truenas/core/12.0/core-smb.yaml +++ b/ci/configs/truenas/core/12.0/core-smb.yaml @@ -39,7 +39,7 @@ zfs: smb: shareHost: ${TRUENAS_HOST} #nameTemplate: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" shareAuxiliaryConfigurationTemplate: | #guest ok = yes @@ -51,7 +51,7 @@ smb: shareGuestOk: false #shareGuestOnly: true #shareShowHiddenFiles: true - shareRecycleBin: true + shareRecycleBin: false shareBrowsable: false shareAccessBasedEnumeration: true shareTimeMachine: false diff --git a/ci/configs/truenas/core/13.0/core-iscsi.yaml b/ci/configs/truenas/core/13.0/core-iscsi.yaml index 2cf1d84..3a8619b 100644 --- a/ci/configs/truenas/core/13.0/core-iscsi.yaml +++ b/ci/configs/truenas/core/13.0/core-iscsi.yaml @@ -26,7 +26,7 @@ zfs: iscsi: targetPortal: ${TRUENAS_HOST} interface: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" targetGroups: - targetGroupPortalGroup: 1 diff --git a/ci/configs/truenas/core/13.0/core-smb.yaml b/ci/configs/truenas/core/13.0/core-smb.yaml index f5efbf3..fe6856e 100644 --- a/ci/configs/truenas/core/13.0/core-smb.yaml +++ b/ci/configs/truenas/core/13.0/core-smb.yaml @@ -39,7 +39,7 @@ zfs: smb: shareHost: ${TRUENAS_HOST} #nameTemplate: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" shareAuxiliaryConfigurationTemplate: | #guest ok = yes @@ -51,7 +51,7 @@ smb: shareGuestOk: false #shareGuestOnly: true #shareShowHiddenFiles: true - shareRecycleBin: true + shareRecycleBin: false shareBrowsable: false shareAccessBasedEnumeration: true shareTimeMachine: false diff --git a/ci/configs/truenas/scale/22.02/scale-iscsi.yaml b/ci/configs/truenas/scale/22.02/scale-iscsi.yaml index 05d0359..b6b6f43 100644 --- a/ci/configs/truenas/scale/22.02/scale-iscsi.yaml +++ b/ci/configs/truenas/scale/22.02/scale-iscsi.yaml @@ -20,7 +20,7 @@ zfs: iscsi: targetPortal: ${TRUENAS_HOST} interface: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" targetGroups: - targetGroupPortalGroup: 1 diff --git a/ci/configs/truenas/scale/22.02/scale-smb.yaml b/ci/configs/truenas/scale/22.02/scale-smb.yaml index 95b0b9a..2a8861e 100644 --- a/ci/configs/truenas/scale/22.02/scale-smb.yaml +++ b/ci/configs/truenas/scale/22.02/scale-smb.yaml @@ -21,7 +21,7 @@ zfs: smb: shareHost: ${TRUENAS_HOST} #nameTemplate: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" shareAuxiliaryConfigurationTemplate: | #guest ok = yes @@ -33,7 +33,7 @@ smb: shareGuestOk: false #shareGuestOnly: true #shareShowHiddenFiles: true - shareRecycleBin: true + shareRecycleBin: false shareBrowsable: false shareAccessBasedEnumeration: true shareTimeMachine: false diff --git a/ci/configs/zfs-generic/iscsi.yaml b/ci/configs/zfs-generic/iscsi.yaml index 38dc594..e5bc3e2 100644 --- a/ci/configs/zfs-generic/iscsi.yaml +++ b/ci/configs/zfs-generic/iscsi.yaml @@ -18,7 +18,7 @@ zfs: iscsi: targetPortal: ${SERVER_HOST} interface: "" - namePrefix: "csi-ci-${CI_BUILD_KEY}" + namePrefix: "csi-ci-${CI_BUILD_KEY}-" nameSuffix: "" shareStrategy: "targetCli" shareStrategyTargetCli: diff --git a/package-lock.json b/package-lock.json index cb81a02..d252a35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,9 @@ "@grpc/proto-loader": "^0.6.0", "@kubernetes/client-node": "^0.16.3", "async-mutex": "^0.3.1", - "axios": "^0.26.1", + "axios": "^0.27.2", "bunyan": "^1.8.15", + "fs-extra": "^10.1.0", "handlebars": "^4.7.7", "js-yaml": "^4.0.0", "lodash": "^4.17.21", @@ -50,9 +51,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -70,9 +71,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.5.tgz", - "integrity": "sha512-h0KSwgLiF5rmSAU6qnzK1aoD1MNqOw9HJK96N8VW3dR5FHMpq+0JNdLQFP//NcaIWVB7I7vkHl4JmU9hUw82Aw==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "dependencies": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -82,9 +83,9 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.12.tgz", + "integrity": "sha512-filTVbETFnxb9CyRX98zN18ilChTuf/C5scZ2xyaOTp0EHGq0/ufX8rjqXUcSb1Gpv7eZq4M2jDvbh9BogKnrg==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -302,9 +303,9 @@ } }, "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/minipass": { "version": "3.1.2", @@ -315,9 +316,9 @@ } }, "node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==" + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" }, "node_modules/@types/request": { "version": "2.48.8", @@ -374,9 +375,9 @@ } }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -478,9 +479,9 @@ } }, "node_modules/async-mutex/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/asynckit": { "version": "0.4.0", @@ -501,11 +502,25 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "dependencies": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/balanced-match": { @@ -693,9 +708,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -743,9 +758,9 @@ } }, "node_modules/compress-brotli": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.6.tgz", - "integrity": "sha512-au99/GqZtUtiCBliqLFbWlhnCxn+XSYjwZ77q6mKN4La4qOXDoLVPZ50iXr0WmAyMxl8yqoq3Yq4OeQNPPkyeQ==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", "dependencies": { "@types/json-buffer": "~3.0.0", "json-buffer": "~3.0.1" @@ -947,12 +962,12 @@ } }, "node_modules/eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1204,9 +1219,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==", "funding": [ { "type": "individual", @@ -1243,6 +1258,19 @@ "node": ">= 0.12" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -1367,6 +1395,11 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -1537,9 +1570,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dependencies": { "has": "^1.0.3" }, @@ -1666,6 +1699,17 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "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/jsonpath-plus": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", @@ -1757,9 +1801,9 @@ } }, "node_modules/lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.9.0.tgz", + "integrity": "sha512-lkcNMUKqdJk96TuIXUidxaPuEg5sJo/+ZyVE2BDFnuZGzwXem7d8582eG8vbu4todLfT14snP6iHriCHXXi5Rw==", "engines": { "node": ">=12" } @@ -1861,9 +1905,9 @@ } }, "node_modules/moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "optional": true, "engines": { "node": "*" @@ -2142,11 +2186,11 @@ } }, "node_modules/prompt/node_modules/winston": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", - "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", + "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", "dependencies": { - "async": "~1.0.0", + "async": "^3.2.3", "colors": "1.0.x", "cycle": "1.0.x", "eyes": "0.1.x", @@ -2157,11 +2201,6 @@ "node": ">= 0.10.0" } }, - "node_modules/prompt/node_modules/winston/node_modules/async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, "node_modules/protobufjs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", @@ -2521,9 +2560,9 @@ } }, "node_modules/ssh2": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.9.0.tgz", - "integrity": "sha512-rhhIZT0eMPvCBSOG8CpqZZ7gre2vgXaIqmb3Jb83t88rjsxIsFzDanqBJM9Ns8BmP1835A5IbQ199io4EUZwOA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.10.0.tgz", + "integrity": "sha512-OnKAAmf4j8wCRrXXZv3Tp5lCZkLJZtgZbn45ELiShCg27djDQ3XFGvIzuGsIsf4hdHslP+VdhA9BhUQdTdfd9w==", "hasInstallScript": true, "dependencies": { "asn1": "^0.2.4", @@ -2784,9 +2823,17 @@ } }, "node_modules/underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", + "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" + }, + "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/uri-js": { "version": "4.4.1", @@ -2986,9 +3033,9 @@ } }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -3003,18 +3050,18 @@ } }, "@grpc/grpc-js": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.5.tgz", - "integrity": "sha512-h0KSwgLiF5rmSAU6qnzK1aoD1MNqOw9HJK96N8VW3dR5FHMpq+0JNdLQFP//NcaIWVB7I7vkHl4JmU9hUw82Aw==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" } }, "@grpc/proto-loader": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.9.tgz", - "integrity": "sha512-UlcCS8VbsU9d3XTXGiEVFonN7hXk+oMXZtoHHG2oSA1/GcDP1q6OUgs20PzHDGizzyi8ufGSUDlk3O2NyY7leg==", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.12.tgz", + "integrity": "sha512-filTVbETFnxb9CyRX98zN18ilChTuf/C5scZ2xyaOTp0EHGq0/ufX8rjqXUcSb1Gpv7eZq4M2jDvbh9BogKnrg==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -3209,9 +3256,9 @@ } }, "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/minipass": { "version": "3.1.2", @@ -3222,9 +3269,9 @@ } }, "@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==" + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" }, "@types/request": { "version": "2.48.8", @@ -3281,9 +3328,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-jsx": { @@ -3358,9 +3405,9 @@ }, "dependencies": { "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" } } }, @@ -3380,11 +3427,24 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "requires": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "balanced-match": { @@ -3547,9 +3607,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3578,9 +3638,9 @@ } }, "compress-brotli": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.6.tgz", - "integrity": "sha512-au99/GqZtUtiCBliqLFbWlhnCxn+XSYjwZ77q6mKN4La4qOXDoLVPZ50iXr0WmAyMxl8yqoq3Yq4OeQNPPkyeQ==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", "requires": { "@types/json-buffer": "~3.0.0", "json-buffer": "~3.0.1" @@ -3726,12 +3786,12 @@ "dev": true }, "eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3925,9 +3985,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", + "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" }, "forever-agent": { "version": "0.6.1", @@ -3944,6 +4004,16 @@ "mime-types": "^2.1.12" } }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -4035,6 +4105,11 @@ "responselike": "^2.0.0" } }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -4156,9 +4231,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "requires": { "has": "^1.0.3" } @@ -4256,6 +4331,15 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "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" + } + }, "jsonpath-plus": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", @@ -4335,9 +4419,9 @@ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "lru-cache": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz", - "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==" + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.9.0.tgz", + "integrity": "sha512-lkcNMUKqdJk96TuIXUidxaPuEg5sJo/+ZyVE2BDFnuZGzwXem7d8582eG8vbu4todLfT14snP6iHriCHXXi5Rw==" }, "make-error": { "version": "1.3.6", @@ -4412,9 +4496,9 @@ } }, "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "optional": true }, "ms": { @@ -4628,23 +4712,16 @@ }, "dependencies": { "winston": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", - "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", + "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", "requires": { - "async": "~1.0.0", + "async": "^3.2.3", "colors": "1.0.x", "cycle": "1.0.x", "eyes": "0.1.x", "isstream": "0.1.x", "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - } } } } @@ -4907,9 +4984,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "ssh2": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.9.0.tgz", - "integrity": "sha512-rhhIZT0eMPvCBSOG8CpqZZ7gre2vgXaIqmb3Jb83t88rjsxIsFzDanqBJM9Ns8BmP1835A5IbQ199io4EUZwOA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.10.0.tgz", + "integrity": "sha512-OnKAAmf4j8wCRrXXZv3Tp5lCZkLJZtgZbn45ELiShCg27djDQ3XFGvIzuGsIsf4hdHslP+VdhA9BhUQdTdfd9w==", "requires": { "asn1": "^0.2.4", "bcrypt-pbkdf": "^1.0.2", @@ -5095,9 +5172,14 @@ "optional": true }, "underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", + "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "uri-js": { "version": "4.4.1", diff --git a/package.json b/package.json index 8459eeb..4d16cb0 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,9 @@ "@grpc/proto-loader": "^0.6.0", "@kubernetes/client-node": "^0.16.3", "async-mutex": "^0.3.1", - "axios": "^0.26.1", + "axios": "^0.27.2", "bunyan": "^1.8.15", + "fs-extra": "^10.1.0", "handlebars": "^4.7.7", "js-yaml": "^4.0.0", "lodash": "^4.17.21", diff --git a/src/driver/controller-client-common/index.js b/src/driver/controller-client-common/index.js index 1297b8f..cfe3df9 100644 --- a/src/driver/controller-client-common/index.js +++ b/src/driver/controller-client-common/index.js @@ -3,6 +3,8 @@ const { CsiBaseDriver } = require("../index"); const { GrpcError, grpc } = require("../../utils/grpc"); const cp = require("child_process"); const fs = require("fs"); +const fse = require("fs-extra"); +const path = require("path"); const semver = require("semver"); /** @@ -230,9 +232,14 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } async getDirectoryUsage(path) { - let result = await this.exec("du", ["-s", "--block-size=1", path]); - let size = result.stdout.split("\t", 1)[0]; - return size; + if (this.getNodeIsWindows()) { + this.ctx.logger.warn("du not implemented on windows"); + return 0; + } else { + let result = await this.exec("du", ["-s", "--block-size=1", path]); + let size = result.stdout.split("\t", 1)[0]; + return size; + } } exec(command, args, options = {}) { @@ -297,20 +304,39 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } async cloneDir(source_path, target_path) { - await this.exec("mkdir", ["-p", target_path]); + if (this.getNodeIsWindows()) { + fse.copySync( + this.stripTrailingSlash(source_path), + this.stripTrailingSlash(target_path), + { + overwrite: true, + dereference: true, + preserveTimestamps: true, + //errorOnExist: true, + } + ); + } else { + await this.createDir(target_path); - /** - * trailing / is important - * rsync -a /mnt/storage/s/foo/ /mnt/storage/v/PVC-111/ - */ - await this.exec("rsync", [ - "-a", - this.stripTrailingSlash(source_path) + "/", - this.stripTrailingSlash(target_path) + "/", - ]); + /** + * trailing / is important + * rsync -a /mnt/storage/s/foo/ /mnt/storage/v/PVC-111/ + */ + await this.exec("rsync", [ + "-a", + this.stripTrailingSlash(source_path) + "/", + this.stripTrailingSlash(target_path) + "/", + ]); + } } async getAvailableSpaceAtPath(path) { + // https://www.npmjs.com/package/diskusage + // https://www.npmjs.com/package/check-disk-space + if (this.getNodeIsWindows()) { + this.ctx.logger.warn("df not implemented on windows"); + return 0; + } //df --block-size=1 --output=avail /mnt/storage/ // Avail //1481334328 @@ -325,11 +351,14 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } async createDir(path) { - await this.exec("mkdir", ["-p", path]); + fs.mkdirSync(path, { + recursive: true, + mode: "755", + }); } async deleteDir(path) { - await this.exec("rm", ["-rf", path]); + fs.rmSync(path, { recursive: true, force: true }); return; @@ -346,7 +375,40 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } async directoryExists(path) { - return fs.existsSync(path); + let r; + r = fs.existsSync(path); + if (!r) { + return r; + } + + if (!fs.statSync(path).isDirectory()) { + throw new Error(`path [${path}] exists but is not a directory`); + } + + return true; + } + + /** + * Have to be careful with the logic here as the controller could be running + * on win32 for *-client vs local-hostpath + * + * @param {*} path + * @returns + */ + async normalizePath(path) { + if (process.platform == "win32") { + return await this.noramlizePathWin32(path); + } else { + return await this.normalizePathPosix(path); + } + } + + async normalizePathPosix(p) { + return p.replaceAll(path.win32.sep, path.posix.sep); + } + + async noramlizePathWin32(p) { + return p.replaceAll(path.posix.sep, path.win32.sep); } /** @@ -441,7 +503,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { //let volume_content_source_volume_id; // create target dir - response = await driver.exec("mkdir", ["-p", volume_path]); + await driver.createDir(target_path); // create dataset if (volume_content_source) { @@ -476,7 +538,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { } driver.ctx.logger.debug("controller source path: %s", source_path); - response = await driver.cloneDir(source_path, volume_path); + await driver.cloneDir(source_path, volume_path); } // set mode @@ -486,10 +548,7 @@ class ControllerClientCommonDriver extends CsiBaseDriver { this.options[config_key].dirPermissionsMode, volume_path ); - response = await driver.exec("chmod", [ - this.options[config_key].dirPermissionsMode, - volume_path, - ]); + fs.chmodSync(volume_path, this.options[config_key].dirPermissionsMode); } // set ownership @@ -503,16 +562,20 @@ class ControllerClientCommonDriver extends CsiBaseDriver { this.options[config_key].dirPermissionsGroup, volume_path ); - response = await driver.exec("chown", [ - (this.options[config_key].dirPermissionsUser - ? this.options[config_key].dirPermissionsUser - : "") + - ":" + - (this.options[config_key].dirPermissionsGroup - ? this.options[config_key].dirPermissionsGroup - : ""), - volume_path, - ]); + if (this.getNodeIsWindows()) { + driver.ctx.logger.warn("chown not implemented on windows"); + } else { + await driver.exec("chown", [ + (this.options[config_key].dirPermissionsUser + ? this.options[config_key].dirPermissionsUser + : "") + + ":" + + (this.options[config_key].dirPermissionsGroup + ? this.options[config_key].dirPermissionsGroup + : ""), + volume_path, + ]); + } } let volume_context = driver.getVolumeContext(name);