From 64c7acfd8ee468474572d72de65ba87380fb911d Mon Sep 17 00:00:00 2001 From: "Dmitrii Bobreshev (Akvelon INC)" Date: Mon, 11 Sep 2023 14:22:42 +0200 Subject: [PATCH] [KubernetesManifestV0] - Merged generated task to source task - Removed generated task - Updated task.json - Updated task.loc.json - Updated make-options.json --- .../FilesOverriddenForConfigGoHereREADME.txt | 1 - .../_buildConfigs/Node16/make.json | 13 - .../_buildConfigs/Node16/package-lock.json | 903 --------- .../_buildConfigs/Node16/package.json | 23 - Tasks/KubernetesManifestV0/make.json | 3 +- Tasks/KubernetesManifestV0/package-lock.json | 90 +- Tasks/KubernetesManifestV0/package.json | 7 +- Tasks/KubernetesManifestV0/task.json | 8 +- Tasks/KubernetesManifestV0/task.loc.json | 8 +- .../KubernetesManifestV0.versionmap.txt | 2 - .../resources.resjson/de-DE/resources.resjson | 95 - .../resources.resjson/en-US/resources.resjson | 95 - .../resources.resjson/es-ES/resources.resjson | 95 - .../resources.resjson/fr-FR/resources.resjson | 95 - .../resources.resjson/it-IT/resources.resjson | 95 - .../resources.resjson/ja-JP/resources.resjson | 95 - .../resources.resjson/ko-KR/resources.resjson | 95 - .../resources.resjson/ru-RU/resources.resjson | 95 - .../resources.resjson/zh-CN/resources.resjson | 95 - .../resources.resjson/zh-TW/resources.resjson | 95 - _generated/KubernetesManifestV0/Tests/L0.ts | 549 ------ .../KubernetesManifestV0/Tests/TestSetup.ts | 386 ---- .../KubernetesManifestV0/Tests/TestShared.ts | 90 - .../Tests/manifests/cronjob.yaml | 15 - .../Tests/manifests/deployment-baseline.yaml | 21 - .../Tests/manifests/deployment-canary.yaml | 21 - .../deployment-image-substitution.yaml | 44 - .../Tests/manifests/deployment.yaml | 43 - .../Tests/manifests/job.yaml | 18 - .../ThirdPartyNotices.txt | 1668 ----------------- _generated/KubernetesManifestV0/icon.png | Bin 1304 -> 0 bytes _generated/KubernetesManifestV0/icon.svg | 4 - _generated/KubernetesManifestV0/make.json | 12 - .../KubernetesManifestV0/package-lock.json | 835 --------- _generated/KubernetesManifestV0/package.json | 22 - .../KubernetesManifestV0/src/actions/bake.ts | 154 -- .../src/actions/createSecret.ts | 28 - .../src/actions/delete.ts | 18 - .../src/actions/deploy.ts | 15 - .../KubernetesManifestV0/src/actions/patch.ts | 33 - .../src/actions/promote.ts | 45 - .../src/actions/reject.ts | 26 - .../KubernetesManifestV0/src/actions/scale.ts | 22 - .../src/models/TaskInputParameters.ts | 54 - _generated/KubernetesManifestV0/src/run.ts | 60 - .../src/utils/CanaryDeploymentHelper.ts | 225 --- .../src/utils/DeploymentHelper.ts | 217 --- .../src/utils/FileHelper.ts | 81 - .../src/utils/KubernetesObjectUtility.ts | 391 ---- .../src/utils/PodCanaryDeploymentHelper.ts | 62 - .../src/utils/SMICanaryDeploymentHelper.ts | 234 --- .../src/utils/StringComparison.ts | 25 - .../src/utils/installers.ts | 59 - .../src/utils/utilities.ts | 158 -- _generated/KubernetesManifestV0/task.json | 391 ---- _generated/KubernetesManifestV0/task.loc.json | 391 ---- _generated/KubernetesManifestV0/tsconfig.json | 9 - .../resources.resjson/de-DE/resources.resjson | 95 - .../resources.resjson/en-US/resources.resjson | 95 - .../resources.resjson/es-ES/resources.resjson | 95 - .../resources.resjson/fr-FR/resources.resjson | 95 - .../resources.resjson/it-IT/resources.resjson | 95 - .../resources.resjson/ja-JP/resources.resjson | 95 - .../resources.resjson/ko-KR/resources.resjson | 95 - .../resources.resjson/ru-RU/resources.resjson | 95 - .../resources.resjson/zh-CN/resources.resjson | 95 - .../resources.resjson/zh-TW/resources.resjson | 95 - .../KubernetesManifestV0_Node16/Tests/L0.ts | 549 ------ .../Tests/TestSetup.ts | 386 ---- .../Tests/TestShared.ts | 90 - .../Tests/manifests/cronjob.yaml | 15 - .../Tests/manifests/deployment-baseline.yaml | 21 - .../Tests/manifests/deployment-canary.yaml | 21 - .../deployment-image-substitution.yaml | 44 - .../Tests/manifests/deployment.yaml | 43 - .../Tests/manifests/job.yaml | 18 - .../ThirdPartyNotices.txt | 1668 ----------------- .../KubernetesManifestV0_Node16/icon.png | Bin 1304 -> 0 bytes .../KubernetesManifestV0_Node16/icon.svg | 4 - .../KubernetesManifestV0_Node16/make.json | 13 - .../package-lock.json | 903 --------- .../KubernetesManifestV0_Node16/package.json | 23 - .../src/actions/bake.ts | 154 -- .../src/actions/createSecret.ts | 28 - .../src/actions/delete.ts | 18 - .../src/actions/deploy.ts | 15 - .../src/actions/patch.ts | 33 - .../src/actions/promote.ts | 45 - .../src/actions/reject.ts | 26 - .../src/actions/scale.ts | 22 - .../src/models/TaskInputParameters.ts | 54 - .../KubernetesManifestV0_Node16/src/run.ts | 60 - .../src/utils/CanaryDeploymentHelper.ts | 225 --- .../src/utils/DeploymentHelper.ts | 217 --- .../src/utils/FileHelper.ts | 81 - .../src/utils/KubernetesObjectUtility.ts | 391 ---- .../src/utils/PodCanaryDeploymentHelper.ts | 62 - .../src/utils/SMICanaryDeploymentHelper.ts | 234 --- .../src/utils/StringComparison.ts | 25 - .../src/utils/installers.ts | 59 - .../src/utils/utilities.ts | 158 -- .../KubernetesManifestV0_Node16/task.json | 395 ---- .../KubernetesManifestV0_Node16/task.loc.json | 395 ---- .../KubernetesManifestV0_Node16/tsconfig.json | 9 - make-options.json | 1 - 105 files changed, 97 insertions(+), 15792 deletions(-) delete mode 100644 Tasks/KubernetesManifestV0/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt delete mode 100644 Tasks/KubernetesManifestV0/_buildConfigs/Node16/make.json delete mode 100644 Tasks/KubernetesManifestV0/_buildConfigs/Node16/package-lock.json delete mode 100644 Tasks/KubernetesManifestV0/_buildConfigs/Node16/package.json delete mode 100644 _generated/KubernetesManifestV0.versionmap.txt delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/de-DE/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/en-US/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/es-ES/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/fr-FR/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/it-IT/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/ja-JP/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/ko-KR/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/ru-RU/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/zh-CN/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Strings/resources.resjson/zh-TW/resources.resjson delete mode 100644 _generated/KubernetesManifestV0/Tests/L0.ts delete mode 100644 _generated/KubernetesManifestV0/Tests/TestSetup.ts delete mode 100644 _generated/KubernetesManifestV0/Tests/TestShared.ts delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/cronjob.yaml delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/deployment-baseline.yaml delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/deployment-canary.yaml delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/deployment-image-substitution.yaml delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/deployment.yaml delete mode 100644 _generated/KubernetesManifestV0/Tests/manifests/job.yaml delete mode 100644 _generated/KubernetesManifestV0/ThirdPartyNotices.txt delete mode 100644 _generated/KubernetesManifestV0/icon.png delete mode 100644 _generated/KubernetesManifestV0/icon.svg delete mode 100644 _generated/KubernetesManifestV0/make.json delete mode 100644 _generated/KubernetesManifestV0/package-lock.json delete mode 100644 _generated/KubernetesManifestV0/package.json delete mode 100644 _generated/KubernetesManifestV0/src/actions/bake.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/createSecret.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/delete.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/deploy.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/patch.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/promote.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/reject.ts delete mode 100644 _generated/KubernetesManifestV0/src/actions/scale.ts delete mode 100644 _generated/KubernetesManifestV0/src/models/TaskInputParameters.ts delete mode 100644 _generated/KubernetesManifestV0/src/run.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/CanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/DeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/FileHelper.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/KubernetesObjectUtility.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/PodCanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/SMICanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/StringComparison.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/installers.ts delete mode 100644 _generated/KubernetesManifestV0/src/utils/utilities.ts delete mode 100644 _generated/KubernetesManifestV0/task.json delete mode 100644 _generated/KubernetesManifestV0/task.loc.json delete mode 100644 _generated/KubernetesManifestV0/tsconfig.json delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/de-DE/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/en-US/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/es-ES/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/fr-FR/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/it-IT/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ja-JP/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ko-KR/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ru-RU/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-CN/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-TW/resources.resjson delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/L0.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/TestSetup.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/TestShared.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/cronjob.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-baseline.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-canary.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-image-substitution.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/deployment.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/Tests/manifests/job.yaml delete mode 100644 _generated/KubernetesManifestV0_Node16/ThirdPartyNotices.txt delete mode 100644 _generated/KubernetesManifestV0_Node16/icon.png delete mode 100644 _generated/KubernetesManifestV0_Node16/icon.svg delete mode 100644 _generated/KubernetesManifestV0_Node16/make.json delete mode 100644 _generated/KubernetesManifestV0_Node16/package-lock.json delete mode 100644 _generated/KubernetesManifestV0_Node16/package.json delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/bake.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/createSecret.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/delete.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/deploy.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/patch.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/promote.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/reject.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/actions/scale.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/models/TaskInputParameters.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/run.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/CanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/DeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/FileHelper.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/KubernetesObjectUtility.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/PodCanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/SMICanaryDeploymentHelper.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/StringComparison.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/installers.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/src/utils/utilities.ts delete mode 100644 _generated/KubernetesManifestV0_Node16/task.json delete mode 100644 _generated/KubernetesManifestV0_Node16/task.loc.json delete mode 100644 _generated/KubernetesManifestV0_Node16/tsconfig.json diff --git a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt b/Tasks/KubernetesManifestV0/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt deleted file mode 100644 index b338e624afcd..000000000000 --- a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt +++ /dev/null @@ -1 +0,0 @@ -Place files overridden for this config in this directory \ No newline at end of file diff --git a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/make.json b/Tasks/KubernetesManifestV0/_buildConfigs/Node16/make.json deleted file mode 100644 index 6dd0abf95c98..000000000000 --- a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/make.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "rm": [ - { - "items": [ - "node_modules/azure-pipelines-tasks-kubernetes-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib", - "node_modules/https-proxy-agent/node_modules/agent-base" - ], - "options": "-Rf" - } - ] -} \ No newline at end of file diff --git a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package-lock.json b/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package-lock.json deleted file mode 100644 index 2b49a1811a7a..000000000000 --- a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package-lock.json +++ /dev/null @@ -1,903 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "requires": { - "@types/node": "*" - } - }, - "@types/del": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@types/del/-/del-2.2.33.tgz", - "integrity": "sha512-bXwiHz4Ljz7FXGybdEtCHrsgJE+zIvxmGWgBLMwReMJi6yMenQs1ls3Q/s9rieuja9S/clDKVoXDS7BhEU2lYQ==", - "requires": { - "@types/glob": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "5.0.38", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.38.tgz", - "integrity": "sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "azure-pipelines-task-lib": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", - "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tasks-docker-common": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.0.6.tgz", - "integrity": "sha512-Zm8cTQecdvcgFbMTP8ZqKoU9XvM1Ck3CF59BkeaS5C7G0gNZWA4MkJTiC1qESMn8ptK5I33cqcMl7Ja4JtwaJA==", - "requires": { - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "del": "2.2.0", - "q": "1.4.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - } - } - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==" - } - } - }, - "azure-pipelines-tasks-kubernetes-common": { - "version": "2.220.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-kubernetes-common/-/azure-pipelines-tasks-kubernetes-common-2.220.0.tgz", - "integrity": "sha512-20BEQl8Pu9MZQSSQ/7ITLRGW7tR3UoK5yx252iffBJpf8tjC63kRWhFHWGehvPFLZU+bSENDKsYBigvKRFSobA==", - "requires": { - "@types/mocha": "5.2.7", - "@types/node": "10.17.0", - "@types/uuid": "8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "azure-pipelines-tool-lib": "^1.0.2", - "js-yaml": "3.13.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==" - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" - }, - "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz", - "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.1.10", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - } - } - }, - "azure-pipelines-tasks-utility-common": { - "version": "3.219.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.219.1.tgz", - "integrity": "sha512-VyssHbJQ40aRBq1m0oSG4XCesbRPzsH3Ao8lohmsQZl+GN17TeCnKmr/OoVYsqgtG9TEw59pG4WYW++lsLeeew==", - "requires": { - "@types/node": "^16.11.39", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", - "js-yaml": "3.13.1", - "semver": "^5.4.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz", - "integrity": "sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==" - }, - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - }, - "azure-pipelines-task-lib": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", - "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", - "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - } - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", - "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "del": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", - "integrity": "sha512-AZDiRb78EEGYCsAZTG3v+CM5q8J0BIs+wI7QeUtyosm+zIMm4XSmp6aI/K7cU9l+YaKpDKN9dYP1xTrNjLQ+LA==", - "requires": { - "globby": "^4.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "requires": { - "@types/node": "^10.0.3" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - } - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - } - }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "requires": { - "get-port": "^3.1.0" - } - }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package.json b/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package.json deleted file mode 100644 index 8549ea3d9c9d..000000000000 --- a/Tasks/KubernetesManifestV0/_buildConfigs/Node16/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "dependencies": { - "@types/del": "^2.2.0", - "@types/glob": "^5.0.10", - "@types/mocha": "^5.2.7", - "@types/node": "^16.11.39", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^4.4.0", - "azure-pipelines-tasks-docker-common": "2.0.6", - "azure-pipelines-tasks-kubernetes-common": "^2.212.0", - "azure-pipelines-tasks-utility-common": "^3.210.0", - "azure-pipelines-tool-lib": "^2.0.4", - "del": "2.2.0", - "js-yaml": "3.13.1", - "moment": "^2.29.4", - "agent-base": "^6.0.2", - "typed-rest-client": "^1.8.9" - }, - "devDependencies": { - "typescript": "4.0.2" - } -} diff --git a/Tasks/KubernetesManifestV0/make.json b/Tasks/KubernetesManifestV0/make.json index b88c7e76ec27..6dd0abf95c98 100644 --- a/Tasks/KubernetesManifestV0/make.json +++ b/Tasks/KubernetesManifestV0/make.json @@ -4,7 +4,8 @@ "items": [ "node_modules/azure-pipelines-tasks-kubernetes-common/node_modules/azure-pipelines-task-lib", "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib" + "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" ], "options": "-Rf" } diff --git a/Tasks/KubernetesManifestV0/package-lock.json b/Tasks/KubernetesManifestV0/package-lock.json index efe18cf45501..2b49a1811a7a 100644 --- a/Tasks/KubernetesManifestV0/package-lock.json +++ b/Tasks/KubernetesManifestV0/package-lock.json @@ -46,9 +46,9 @@ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" }, "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "version": "16.18.38", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", + "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" }, "@types/q": { "version": "1.5.5", @@ -70,6 +70,14 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -107,9 +115,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", + "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", "requires": { "minimatch": "3.0.5", "mockery": "^2.1.0", @@ -134,11 +142,37 @@ "q": "1.4.1" }, "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, "@types/q": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", @@ -169,6 +203,20 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + } + }, "azure-pipelines-tool-lib": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz", @@ -245,16 +293,16 @@ } }, "azure-pipelines-tool-lib": { - "version": "1.0.0-preview.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.0.0-preview.0.tgz", - "integrity": "sha512-Ao4A/r7q6qTTeDqa40U9/58kw5uC6r29cTJ7386uMSl7RgNu19ja+nN0Tnvl6dQTCjajMjqiT+UADuDi5zhucw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", + "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", "requires": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.0.6-preview.0", + "azure-pipelines-task-lib": "^4.1.0", "semver": "^5.7.0", "semver-compare": "^1.0.0", - "typed-rest-client": "^1.7.3", + "typed-rest-client": "^1.8.6", "uuid": "^3.3.2" }, "dependencies": { @@ -327,6 +375,14 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, "del": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", @@ -472,6 +528,13 @@ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "requires": { "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + } } }, "inflight": { @@ -567,6 +630,11 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", diff --git a/Tasks/KubernetesManifestV0/package.json b/Tasks/KubernetesManifestV0/package.json index 4e6a8e502039..8549ea3d9c9d 100644 --- a/Tasks/KubernetesManifestV0/package.json +++ b/Tasks/KubernetesManifestV0/package.json @@ -3,17 +3,18 @@ "@types/del": "^2.2.0", "@types/glob": "^5.0.10", "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", + "@types/node": "^16.11.39", "@types/q": "^1.5.0", "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^3.3.1", + "azure-pipelines-task-lib": "^4.4.0", "azure-pipelines-tasks-docker-common": "2.0.6", "azure-pipelines-tasks-kubernetes-common": "^2.212.0", "azure-pipelines-tasks-utility-common": "^3.210.0", - "azure-pipelines-tool-lib": "1.0.0-preview.0", + "azure-pipelines-tool-lib": "^2.0.4", "del": "2.2.0", "js-yaml": "3.13.1", "moment": "^2.29.4", + "agent-base": "^6.0.2", "typed-rest-client": "^1.8.9" }, "devDependencies": { diff --git a/Tasks/KubernetesManifestV0/task.json b/Tasks/KubernetesManifestV0/task.json index 509c19949d87..35780e4e32f4 100644 --- a/Tasks/KubernetesManifestV0/task.json +++ b/Tasks/KubernetesManifestV0/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 226, - "Patch": 1 + "Minor": 228, + "Patch": 0 }, "demands": [], "groups": [], @@ -351,6 +351,10 @@ "execution": { "Node10": { "target": "src//run.js" + }, + "Node16": { + "target": "src//run.js", + "argumentFormat": "" } }, "messages": { diff --git a/Tasks/KubernetesManifestV0/task.loc.json b/Tasks/KubernetesManifestV0/task.loc.json index f7a9e1e9d981..3bf0d6318c25 100644 --- a/Tasks/KubernetesManifestV0/task.loc.json +++ b/Tasks/KubernetesManifestV0/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 226, - "Patch": 1 + "Minor": 228, + "Patch": 0 }, "demands": [], "groups": [], @@ -351,6 +351,10 @@ "execution": { "Node10": { "target": "src//run.js" + }, + "Node16": { + "target": "src//run.js", + "argumentFormat": "" } }, "messages": { diff --git a/_generated/KubernetesManifestV0.versionmap.txt b/_generated/KubernetesManifestV0.versionmap.txt deleted file mode 100644 index c351518ddfe4..000000000000 --- a/_generated/KubernetesManifestV0.versionmap.txt +++ /dev/null @@ -1,2 +0,0 @@ -Default|0.226.1 -Node16-225|0.226.0 diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/de-DE/resources.resjson deleted file mode 100644 index fb0cf98d7d61..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/de-DE/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Für Kubernetes bereitstellen", - "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=851275) oder [Kubernetes-Dokumentation anzeigen](https://kubernetes.io/docs/home/)", - "loc.description": "Verwenden Sie Kubernetes-Manifestdateien für die Bereitstellung in Clustern, oder erstellen Sie mit \"bake\" sogar die Manifestdateien für Bereitstellungen unter Verwendung von Helm-Charts.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Aktion", - "loc.input.help.action": "Wählen Sie die Aktion aus, die ausgeführt werden soll.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes-Dienstverbindung", - "loc.input.help.kubernetesServiceConnection": "Wählen Sie eine Kubernetes-Dienstverbindung aus.", - "loc.input.label.namespace": "Namespace", - "loc.input.help.namespace": "Legen Sie den Namespace für die Befehle fest, indem Sie das Flag \"–namespace\" verwenden. Wenn kein Namespace angegeben wird, werden die Befehle im Standardnamespace ausgeführt.", - "loc.input.label.strategy": "Strategie", - "loc.input.help.strategy": "Zu verwendende Bereitstellungsstrategie", - "loc.input.label.trafficSplitMethod": "Methode zum Trennen des Datenverkehrs", - "loc.input.help.trafficSplitMethod": "Methode, die zum Trennen des Datenverkehrs verwendet werden soll", - "loc.input.label.percentage": "Prozentsatz", - "loc.input.help.percentage": "Prozentsatz des Datenverkehrs, der an die Canary-Bereitstellung umgeleitet wird", - "loc.input.label.baselineAndCanaryReplicas": "Baseline- und Canary-Replikate", - "loc.input.help.baselineAndCanaryReplicas": "Anzahl von Baseline- und Canary-Replikaten", - "loc.input.label.manifests": "Manifeste", - "loc.input.help.manifests": "Bereitzustellende Manifeste", - "loc.input.label.containers": "Container", - "loc.input.help.containers": "Container", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret zum Abrufen des Images aus der privaten Registrierung", - "loc.input.label.renderType": "Render-Engine", - "loc.input.help.renderType": "Tool, das zum Generieren von Manifestdateien verwendet werden soll.", - "loc.input.label.dockerComposeFile": "Pfad zur Docker Compose-Datei", - "loc.input.help.dockerComposeFile": "Docker Compose-Dateipfad", - "loc.input.label.helmChart": "Helm-Chart", - "loc.input.help.helmChart": "Helm-Chart-Pfad für \"bake\"", - "loc.input.label.releaseName": "Name des Helm-Releases", - "loc.input.help.releaseName": "Name des Helm-Releases, das verwendet werden soll", - "loc.input.label.overrideFiles": "Außerkraftsetzungsdateien", - "loc.input.help.overrideFiles": "Außerkraftsetzungsdateien, die festgelegt werden sollen", - "loc.input.label.overrides": "Außerkraftsetzungen", - "loc.input.help.overrides": "Außerkraftsetzungswerte, die festgelegt werden sollen", - "loc.input.label.kustomizationPath": "Kustomization-Pfad", - "loc.input.help.kustomizationPath": "Das Argument muss der Pfad zum Verzeichnis sein, das die Datei enthält, oder eine Git-Repository-URL mit einem Pfadsuffix, das denselben Wert in Bezug auf den Repositorystamm angibt.", - "loc.input.label.resourceToPatch": "Ressource für Patch", - "loc.input.help.resourceToPatch": "zum Identifizieren der Ressource", - "loc.input.label.resourceFileToPatch": "Dateipfad", - "loc.input.help.resourceFileToPatch": "Pfad zur Datei, die als Patch verwendet wird", - "loc.input.label.kind": "Art", - "loc.input.help.kind": "Art des K8s-Objekts, Bereitstellung, replicaSet usw.", - "loc.input.label.name": "Name", - "loc.input.help.name": "Name des k8s-Objekts", - "loc.input.label.replicas": "Replikatanzahl", - "loc.input.help.replicas": "Anzahl von Replikaten, auf die skaliert werden soll", - "loc.input.label.mergeStrategy": "Mergestrategie", - "loc.input.help.mergeStrategy": "Der Typ des bereitgestellten Patches (einer aus [json merge strategic])", - "loc.input.label.arguments": "Argumente", - "loc.input.help.arguments": "Argumente für den Befehl \"kubectl delete\"", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Patchinhalte", - "loc.input.label.secretType": "Typ des Geheimnisses", - "loc.input.help.secretType": "Ein generisches oder Docker-imagepullsecret erstellen/aktualisieren. Wählen Sie \"dockerRegistry\" aus, um \"imagepullsecret\" für die ausgewählte Registrierung zu erstellen/zu aktualisieren. \"imagePullSecret\" ermöglicht es, ein Geheimnis mit einem Kennwort für die Containerregistrierung an das Kubelet zu übergeben, sodass im Namen Ihres Pods ein privates Image abgerufen werden kann.", - "loc.input.label.secretName": "Geheimnisname", - "loc.input.help.secretName": "Name des Geheimnisses. Sie können diesen Geheimnisnamen in der Kubernetes-YAML-Konfigurationsdatei verwenden.", - "loc.input.label.secretArguments": "Argumente", - "loc.input.help.secretArguments": "Geben Sie Schlüssel- und Literalwerte zum Einfügen in \"secret\" an. Beispiel: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Dienstverbindung für Docker-Registrierung", - "loc.input.help.dockerRegistryEndpoint": "Wählen Sie eine Dienstverbindung für die Docker-Registrierung aus. Erforderlich für Befehle, die eine Authentifizierung bei einer Registrierung erfordern.", - "loc.input.label.rolloutStatusTimeout": "Timeout für Rolloutstatus", - "loc.input.help.rolloutStatusTimeout": "Die Wartezeit (in Sekunden) bis zum Beenden der Überwachung des Rolloutstatus.", - "loc.messages.DownloadPathForStableTxt": "Downloadpfad für \"stable.txt\": %s", - "loc.messages.DownloadKubeCtlFailed": "Der Kubernetes-Client von Version \"%s\" kann nicht heruntergeladen werden. Überprüfen Sie, ob die Version korrekt ist: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Die stabile Kubernetes-Version kann nicht aus \"%s\" heruntergeladen werden. Es wird ein Fallback auf \"%s\" durchgeführt.", - "loc.messages.DockerComposeFilePathNotSupplied": "Der Docker Compose-Dateipfad wurde nicht angegeben.", - "loc.messages.UsingLatestStableVersion": "Ungültige Version 1.7 in der Eingabe für den Versionsbezeichner angegeben. Verwenden Sie stattdessen die letzte stabile Version. Informationen zu korrekten Versionen finden Sie unter https://github.com/kubernetes/kubernetes/releases.", - "loc.messages.NotAValidSemverVersion": "Version nicht im richtigen Format angegeben. Beispiel: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Es wurden keine Manifestdateien gefunden, die \"%s\" entsprechen.", - "loc.messages.KubernetesServiceConnectionNotFound": "Die Details zur Kubernetes-Dienstverbindung wurden nicht gefunden.", - "loc.messages.UnknownRenderType": "Unbekannte Render-Engine", - "loc.messages.ResourceKindNotDefined": "Die Ressourcenart ist NULL.", - "loc.messages.NullInputObject": "Das Eingabeobjekt ist NULL.", - "loc.messages.ArgumentsInputNotSupplied": "Es wurden keine Argumente angegeben.", - "loc.messages.NullInputObjectMetadata": "Die Metadaten des Eingabeobjekts sind NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Ablehnungsaktion funktioniert nur mit Strategie: Canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Aktion zum Höherstufen funktioniert nur mit Strategie: Canary", - "loc.messages.AllContainersNotInReadyState": "Keiner der Container befindet sich im Zustand \"Bereit\".", - "loc.messages.CouldNotDeterminePodStatus": "Der Podstatus konnte aufgrund des folgenden Fehlers nicht bestimmt werden: %s", - "loc.messages.KubectlShouldBeUpgraded": "Für die Verwendung von kustomize-Features wird die kubectl-Clientversion v1.14 oder höher benötigt.", - "loc.messages.CouldNotDetermineServiceStatus": "Der Status des Diensts \"%s\" konnte aufgrund des folgenden Fehlers nicht bestimmt werden: %s", - "loc.messages.waitForServiceIpAssignment": "Es wird auf die Zuweisung einer externen IP-Adresse für den Dienst \"%s\" gewartet.", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Timeout beim Warten auf die Zuweisung einer externen IP-Adresse für den Dienst \"%s\".", - "loc.messages.ServiceExternalIP": "Die externe IP-Adresse für den Dienst \"%s\" lautet %s.", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Die TrafficSplit-Manifestdatei kann nicht erstellt werden. %s", - "loc.messages.StableSpecSelectorNotExist": "Die Ressource \"%s\" wurde nicht mithilfe der SMI-Canary-Bereitstellung bereitgestellt.", - "loc.messages.InvalidPercentage": "Ungültiger Wert für Prozentsatz.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Ungültiger Wert für Replikatanzahl.", - "loc.messages.InvalidTimeoutValue": "Ungültiger Wert für Timeout. Geben Sie eine gültige Zahl ein.", - "loc.messages.RolloutStatusTimedout": "Fehler beim Überprüfen des Rolloutstatus.", - "loc.messages.EnvironmentLink": "Weitere Informationen finden Sie hier: %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index 8bb3d73fda55..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Deploy to Kubernetes", - "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=851275) or [see the Kubernetes documentation](https://kubernetes.io/docs/home/)", - "loc.description": "Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Action", - "loc.input.help.action": "Choose the action to be performed.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes service connection", - "loc.input.help.kubernetesServiceConnection": "Select a Kubernetes service connection.", - "loc.input.label.namespace": "Namespace", - "loc.input.help.namespace": "Sets the namespace for the commands by using the –namespace flag. If the namespace is not provided, the commands will run in the default namespace.", - "loc.input.label.strategy": "Strategy", - "loc.input.help.strategy": "Deployment strategy to be used", - "loc.input.label.trafficSplitMethod": "Traffic split method", - "loc.input.help.trafficSplitMethod": "Traffic split method to be used", - "loc.input.label.percentage": "Percentage", - "loc.input.help.percentage": "Percentage of traffic redirect to canary deployment", - "loc.input.label.baselineAndCanaryReplicas": "Baseline and canary replicas", - "loc.input.help.baselineAndCanaryReplicas": "Baseline and canary replicas count", - "loc.input.label.manifests": "Manifests", - "loc.input.help.manifests": "Manifests to deploy", - "loc.input.label.containers": "Containers", - "loc.input.help.containers": "Containers", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret to pull image from private registry", - "loc.input.label.renderType": "Render Engine", - "loc.input.help.renderType": "Tool to use for generating manifest files.", - "loc.input.label.dockerComposeFile": "Path to docker compose file", - "loc.input.help.dockerComposeFile": "docker-compose file path", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "Helm chart path to bake", - "loc.input.label.releaseName": "Helm Release Name", - "loc.input.help.releaseName": "Helm release name to use", - "loc.input.label.overrideFiles": "Override Files", - "loc.input.help.overrideFiles": "Override files to set", - "loc.input.label.overrides": "Overrides", - "loc.input.help.overrides": "Override values to set", - "loc.input.label.kustomizationPath": "Kustomization Path", - "loc.input.help.kustomizationPath": "The argument must be the path to the directory containing the file, or a git repository URL with a path suffix specifying same with respect to the repository root.", - "loc.input.label.resourceToPatch": "Resource to patch", - "loc.input.help.resourceToPatch": "to identify the resource", - "loc.input.label.resourceFileToPatch": "File path", - "loc.input.help.resourceFileToPatch": "Path to the file used for patch", - "loc.input.label.kind": "Kind", - "loc.input.help.kind": "Kind of K8s object; deployment, replicaSet etc.", - "loc.input.label.name": "Name", - "loc.input.help.name": "Name of the k8s object", - "loc.input.label.replicas": "Replica count", - "loc.input.help.replicas": "Number of replicas to scale to", - "loc.input.label.mergeStrategy": "Merge Strategy", - "loc.input.help.mergeStrategy": "The type of patch being provided; one of [json merge strategic]", - "loc.input.label.arguments": "Arguments", - "loc.input.help.arguments": "Arguments for `kubectl delete` command", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contents of patch", - "loc.input.label.secretType": "Type of secret", - "loc.input.help.secretType": "Create/update a generic or docker imagepullsecret. Select dockerRegistry to create/update the imagepullsecret of the selected registry. An imagePullSecret is a way to pass a secret that contains a container registry password to the Kubelet so it can pull a private image on behalf of your Pod.", - "loc.input.label.secretName": "Secret name", - "loc.input.help.secretName": "Name of the secret. You can use this secret name in the Kubernetes YAML configuration file.", - "loc.input.label.secretArguments": "Arguments", - "loc.input.help.secretArguments": "Specify keys and literal values to insert in secret.For example, --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Docker registry service connection", - "loc.input.help.dockerRegistryEndpoint": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", - "loc.input.label.rolloutStatusTimeout": "Timeout for rollout status", - "loc.input.help.rolloutStatusTimeout": "The length of time (in seconds) to wait before ending watch on rollout status", - "loc.messages.DownloadPathForStableTxt": "Download path for stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Can not download the kubectl client of version %s. Check if the version is correct https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Can not download kubernetes stable version file from %s. Falling back to %s", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose file path not supplied", - "loc.messages.UsingLatestStableVersion": "Invalid version 1.7 specified in Version Spec input. Using latest stable version instead. Check for correct versions https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Version not specified in correct format. E.g: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "No manifest file(s) matching %s was found.", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes service connection details not found.", - "loc.messages.UnknownRenderType": "Unknown render engine", - "loc.messages.ResourceKindNotDefined": "Resource kind is null", - "loc.messages.NullInputObject": "Input object is null.", - "loc.messages.ArgumentsInputNotSupplied": "Arguments are not supplied.", - "loc.messages.NullInputObjectMetadata": "Input object metadata is null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Reject action works only with strategy: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Promote action works only with strategy: canary", - "loc.messages.AllContainersNotInReadyState": "All the containers are not in a ready state.", - "loc.messages.CouldNotDeterminePodStatus": "Could not determine the pod's status due to the error: %s", - "loc.messages.KubectlShouldBeUpgraded": "kubectl client version equal to v1.14 or higher is required to use kustomize features.", - "loc.messages.CouldNotDetermineServiceStatus": "Could not determine the service %s status due to the error: %s", - "loc.messages.waitForServiceIpAssignment": "Waiting for service %s external IP assignment", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Wait for service %s external IP assignment timed out", - "loc.messages.ServiceExternalIP": "service %s external IP is %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Unable to create TrafficSplit manifest file. %s", - "loc.messages.StableSpecSelectorNotExist": "Resource %s not deployed using SMI canary deployment.", - "loc.messages.InvalidPercentage": "Invalid value for percentage.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Invalid value for replica count.", - "loc.messages.InvalidTimeoutValue": "Invalid value for timeout. Enter a valid number.", - "loc.messages.RolloutStatusTimedout": "Rollout status check failed.", - "loc.messages.EnvironmentLink": "For more information, go to %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/es-ES/resources.resjson deleted file mode 100644 index 223c590dfd3c..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/es-ES/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Implementar en Kubernetes", - "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=851275) o [consultar la documentación de Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Use archivos de manifiesto de Kubernetes para implementar en los clústeres o incluso simule mediante \"bake\" los archivos de manifiesto que se usarán para las implementaciones con gráficos de Helm.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Acción", - "loc.input.help.action": "Elija la acción que se va a realizar.", - "loc.input.label.kubernetesServiceConnection": "Conexión de servicio de Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Seleccione una conexión del servicio de Kubernetes.", - "loc.input.label.namespace": "Espacio de nombres", - "loc.input.help.namespace": "Establece el espacio de nombres para los comandos con la marca –namespace. Si no se proporciona el espacio de nombres, los comandos se ejecutan en el predeterminado.", - "loc.input.label.strategy": "Estrategia", - "loc.input.help.strategy": "Estrategia de implementación que se va a usar", - "loc.input.label.trafficSplitMethod": "Método de división del tráfico", - "loc.input.help.trafficSplitMethod": "Método de división del tráfico que se va a usar.", - "loc.input.label.percentage": "Porcentaje", - "loc.input.help.percentage": "Porcentaje de redireccionamiento del tráfico a la implementación de valores controlados", - "loc.input.label.baselineAndCanaryReplicas": "Réplicas de valores controlados y de línea de base", - "loc.input.help.baselineAndCanaryReplicas": "Recuento de réplicas de valores controlados y de línea de base", - "loc.input.label.manifests": "Manifiestos", - "loc.input.help.manifests": "Manifiestos para implementar", - "loc.input.label.containers": "Contenedores", - "loc.input.help.containers": "Contenedores", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "Se usa ImagePullSecret para extraer la imagen mediante \"pull\" del registro privado", - "loc.input.label.renderType": "Motor de representación", - "loc.input.help.renderType": "Herramienta que se va a usar para generar archivos de manifiesto.", - "loc.input.label.dockerComposeFile": "Ruta de acceso al archivo de Docker Compose", - "loc.input.help.dockerComposeFile": "Ruta de acceso del archivo docker-compose", - "loc.input.label.helmChart": "Gráfico de Helm", - "loc.input.help.helmChart": "Ruta del gráfico de Helm para aplicar simulación mediante \"bake\"", - "loc.input.label.releaseName": "Nombre de versión de Helm", - "loc.input.help.releaseName": "Nombre de la versión de Helm que se va a usar", - "loc.input.label.overrideFiles": "Reemplazar archivos", - "loc.input.help.overrideFiles": "Reemplazar archivos para establecer", - "loc.input.label.overrides": "Invalidaciones", - "loc.input.help.overrides": "Reemplazar valores para establecer", - "loc.input.label.kustomizationPath": "Ruta de acceso de Kustomization", - "loc.input.help.kustomizationPath": "El argumento debe ser la ruta de acceso al directorio que contiene el archivo o una dirección URL del repositorio de GIT con un sufijo de ruta de acceso que especifique lo mismo respecto a la raíz del repositorio.", - "loc.input.label.resourceToPatch": "Recurso para la revisión", - "loc.input.help.resourceToPatch": "para identificar el recurso", - "loc.input.label.resourceFileToPatch": "Ruta de acceso del archivo", - "loc.input.help.resourceFileToPatch": "Ruta de acceso al archivo que se usa para la revisión", - "loc.input.label.kind": "Variante", - "loc.input.help.kind": "Tipo de objeto K8s; implementación, replicaSet, etc.", - "loc.input.label.name": "Nombre", - "loc.input.help.name": "Nombre del objeto k8s", - "loc.input.label.replicas": "Recuento de réplicas", - "loc.input.help.replicas": "Número de réplicas para escalar", - "loc.input.label.mergeStrategy": "Estrategia de \"merge\"", - "loc.input.help.mergeStrategy": "Tipo de revisión que se proporciona; una de las opciones de [json merge strategic]", - "loc.input.label.arguments": "Argumentos", - "loc.input.help.arguments": "Argumentos para el comando \"kubectl delete\".", - "loc.input.label.patch": "Revisión", - "loc.input.help.patch": "Contenido de la revisión", - "loc.input.label.secretType": "Tipo de secreto", - "loc.input.help.secretType": "Cree o actualice un elemento imagepullsecret genérico o de Docker. Seleccione dockerRegistry para crear o actualizar el elemento imagepullsecret del registro seleccionado. El objeto imagePullSecret es una forma de pasar un secreto que contiene una contraseña de Container Registry a Kubelet, de forma que puede extraer una imagen privada en nombre de su pod.", - "loc.input.label.secretName": "Nombre del secreto", - "loc.input.help.secretName": "Nombre del secreto que puede usar en el archivo de configuración de YAML de Kubernetes.", - "loc.input.label.secretArguments": "Argumentos", - "loc.input.help.secretArguments": "Especifique las claves y los valores literales que se van a insertar en el secreto. Por ejemplo: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Conexión de servicio del registro de Docker", - "loc.input.help.dockerRegistryEndpoint": "Seleccione una conexión de servicio de registro de Docker. Obligatorio para los comandos que deben autenticarse en un registro.", - "loc.input.label.rolloutStatusTimeout": "Tiempo de expiración del estado de lanzamiento", - "loc.input.help.rolloutStatusTimeout": "Intervalo de tiempo (en segundos) que debe esperarse antes de finalizar la inspección del estado de lanzamiento.", - "loc.messages.DownloadPathForStableTxt": "Ruta de acceso de descarga para stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "No se puede descargar el cliente kubectl de la versión %s. Compruebe si la versión es correcta: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "No se puede descargar el archivo de versión estable de kubernetes de %s. Revirtiendo a %s", - "loc.messages.DockerComposeFilePathNotSupplied": "La ruta de acceso del archivo docker-compose no se ha proporcionado", - "loc.messages.UsingLatestStableVersion": "Se ha especificado una versión 1.7, que no es válida, en la entrada de Especificación de versión. En su lugar, se va a usar la última versión estable. Compruebe las versiones correctas en https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "La versión no se ha especificado en el formato correcto. Por ejemplo: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "No se encontró ningún archivo de manifiesto que coincida con %s.", - "loc.messages.KubernetesServiceConnectionNotFound": "No se encontraron los detalles de la conexión de servicio de Kubernetes.", - "loc.messages.UnknownRenderType": "Motor de representación desconocido", - "loc.messages.ResourceKindNotDefined": "El tipo de recurso es NULL.", - "loc.messages.NullInputObject": "El objeto de entrada es NULL.", - "loc.messages.ArgumentsInputNotSupplied": "No se proporcionan argumentos.", - "loc.messages.NullInputObjectMetadata": "Los metadatos del objeto de entrada son NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "La acción de rechazar solo funciona con una estrategia: valor controlado", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "La acción de promover solo funciona con una estrategia: valor controlado", - "loc.messages.AllContainersNotInReadyState": "Ninguno de los contenedores está listo.", - "loc.messages.CouldNotDeterminePodStatus": "No se pudo determinar el estado del pod debido al error siguiente: %s", - "loc.messages.KubectlShouldBeUpgraded": "Para usar las características de kustomize, se requiere la versión del cliente kubectl v1.14 o posterior.", - "loc.messages.CouldNotDetermineServiceStatus": "No se pudo determinar el estado del servicio %s debido al error siguiente: %s", - "loc.messages.waitForServiceIpAssignment": "Esperando a la asignación de dirección IP externa del servicio %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Se agotó el tiempo de expiración de la asignación de dirección IP externa del servicio %s", - "loc.messages.ServiceExternalIP": "La dirección IP externa del servicio %s es %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "No se puede crear el archivo de manifiesto TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "El recurso %s no se ha implementado con el método de valores controlados de SMI.", - "loc.messages.InvalidPercentage": "Valor de porcentaje no válido.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Valor de número de réplicas no válido.", - "loc.messages.InvalidTimeoutValue": "Valor de tiempo de expiración no válido. Escriba un número válido.", - "loc.messages.RolloutStatusTimedout": "Error al comprobar el estado de lanzamiento.", - "loc.messages.EnvironmentLink": "Para obtener más información, vaya a %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/fr-FR/resources.resjson deleted file mode 100644 index 20153a50c187..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/fr-FR/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Déployer sur Kubernetes", - "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=851275) ou [consulter la documentation de Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Utiliser les fichiers manifeste Kubernetes pour effectuer un déploiement sur des clusters, ou préparer les fichiers manifeste aux déploiements à l'aide de charts Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Action", - "loc.input.help.action": "Choisissez l'action à effectuer.", - "loc.input.label.kubernetesServiceConnection": "Connexion de service Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Sélectionnez une connexion de service Kubernetes.", - "loc.input.label.namespace": "Espace de noms", - "loc.input.help.namespace": "Définit l'espace de noms des commandes à l'aide de l'indicateur –namespace. Si vous n'indiquez pas l'espace de noms, les commandes sont exécutées dans l'espace de noms par défaut.", - "loc.input.label.strategy": "Stratégie", - "loc.input.help.strategy": "Stratégie de déploiement à utiliser", - "loc.input.label.trafficSplitMethod": "Méthode de division du trafic", - "loc.input.help.trafficSplitMethod": "Méthode de division du trafic à utiliser", - "loc.input.label.percentage": "Pourcentage", - "loc.input.help.percentage": "Pourcentage de redirection du trafic vers le déploiement de contrôle de validité", - "loc.input.label.baselineAndCanaryReplicas": "Réplicas de base de référence et de contrôle de validité", - "loc.input.help.baselineAndCanaryReplicas": "Nombre de réplicas de base de référence et de contrôle de validité", - "loc.input.label.manifests": "Manifestes", - "loc.input.help.manifests": "Manifestes à déployer", - "loc.input.label.containers": "Conteneurs", - "loc.input.help.containers": "Conteneurs", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret pour effectuer le tirage (pull) d'une image à partir d'un registre privé", - "loc.input.label.renderType": "Moteur de rendu", - "loc.input.help.renderType": "Outil à utiliser pour générer les fichiers manifeste.", - "loc.input.label.dockerComposeFile": "Chemin du fichier Docker Compose", - "loc.input.help.dockerComposeFile": "chemin du fichier docker-compose", - "loc.input.label.helmChart": "Chart Helm", - "loc.input.help.helmChart": "Chemin du chart Helm à préparer", - "loc.input.label.releaseName": "Nom de version release Helm", - "loc.input.help.releaseName": "Nom de version release Helm à utiliser", - "loc.input.label.overrideFiles": "Fichiers de remplacement", - "loc.input.help.overrideFiles": "Fichiers de remplacement à définir", - "loc.input.label.overrides": "Remplacements", - "loc.input.help.overrides": "Valeurs de remplacement à définir", - "loc.input.label.kustomizationPath": "Chemin de Kustomization", - "loc.input.help.kustomizationPath": "L'argument doit être le chemin du répertoire contenant le fichier, ou une URL de dépôt GIT avec un suffixe de chemin spécifiant la même chose par rapport à la racine du dépôt.", - "loc.input.label.resourceToPatch": "Ressource à corriger", - "loc.input.help.resourceToPatch": "pour identifier la ressource", - "loc.input.label.resourceFileToPatch": "Chemin du fichier", - "loc.input.help.resourceFileToPatch": "Chemin du fichier utilisé pour le correctif", - "loc.input.label.kind": "Genre", - "loc.input.help.kind": "Genre d'objet K8s : deployment, replicaSet etc.", - "loc.input.label.name": "Nom", - "loc.input.help.name": "Nom de l'objet k8s", - "loc.input.label.replicas": "Nombre de réplicas", - "loc.input.help.replicas": "Nombre de réplicas scalables", - "loc.input.label.mergeStrategy": "Stratégie de fusion", - "loc.input.help.mergeStrategy": "Type de correctif fourni : parmi [json merge strategic]", - "loc.input.label.arguments": "Arguments", - "loc.input.help.arguments": "Arguments de la commande 'kubectl delete'", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contenu du correctif", - "loc.input.label.secretType": "Type de secret", - "loc.input.help.secretType": "Créez/mettez à jour un imagepullsecret générique ou Docker. Sélectionnez dockerRegistry pour créer/mettre à jour le imagepullsecret du registre sélectionné. Un imagePullSecret permet de passer un secret qui contient un mot de passe de registre de conteneurs au Kubelet afin qu'il puisse tirer (pull) une image privée pour le compte de votre pod.", - "loc.input.label.secretName": "Nom du secret", - "loc.input.help.secretName": "Nom du secret. Vous pouvez utiliser le nom de ce secret dans le fichier config YAML de Kubernetes.", - "loc.input.label.secretArguments": "Arguments", - "loc.input.help.secretArguments": "Spécifiez les clés et les valeurs littérales à insérer dans le secret. Par exemple, --from-literal=clé1=valeur1 --from-literal=clé2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Connexion de service de registre Docker", - "loc.input.help.dockerRegistryEndpoint": "Sélectionnez une connexion de service de registre Docker. Obligatoire pour les commandes qui doivent s'authentifier après d'un registre.", - "loc.input.label.rolloutStatusTimeout": "Délai d'expiration de l'état de lancement", - "loc.input.help.rolloutStatusTimeout": "Délai (en secondes) d'attente avant la fin de la surveillance de l'état de lancement", - "loc.messages.DownloadPathForStableTxt": "Chemin de téléchargement de stable.txt : %s", - "loc.messages.DownloadKubeCtlFailed": "Impossible de télécharger le client kubectl de la version %s. Vérifiez si la version est correcte : https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Impossible de télécharger le fichier de la version stable de kubernetes à partir de %s. Retour à %s", - "loc.messages.DockerComposeFilePathNotSupplied": "chemin du fichier docker-compose non fourni", - "loc.messages.UsingLatestStableVersion": "Une version 1.7 non valide a été spécifiée dans l'entrée de spécification de version. Utilisation de la dernière version stable à la place. Recherchez les versions appropriées https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Version non spécifiée au format approprié. Exemple : 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Le ou les fichiers manifeste correspondant à %s sont introuvables.", - "loc.messages.KubernetesServiceConnectionNotFound": "Les détails de la connexion de service Kubernetes sont introuvables.", - "loc.messages.UnknownRenderType": "Moteur de rendu inconnu", - "loc.messages.ResourceKindNotDefined": "Le genre de la ressource a une valeur null", - "loc.messages.NullInputObject": "L'objet d'entrée a une valeur null.", - "loc.messages.ArgumentsInputNotSupplied": "Les arguments ne sont pas fournis.", - "loc.messages.NullInputObjectMetadata": "Les métadonnées d'objet d'entrée ont une valeur null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "L'action de rejet fonctionne uniquement avec la stratégie suivante : contrôle de validité", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "L'action de promotion fonctionne uniquement avec la stratégie suivante : contrôle de validité", - "loc.messages.AllContainersNotInReadyState": "Tous les conteneurs ne sont pas prêts.", - "loc.messages.CouldNotDeterminePodStatus": "Impossible de déterminer l'état du pod en raison de l'erreur %s", - "loc.messages.KubectlShouldBeUpgraded": "une version du client kubectl égale ou postérieure à la version 1.14 est nécessaire pour utiliser les fonctionnalités de kustomize.", - "loc.messages.CouldNotDetermineServiceStatus": "Impossible de déterminer l'état du service %s en raison de l'erreur %s", - "loc.messages.waitForServiceIpAssignment": "En attente d'affectation d'adresse IP externe du service %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Expiration du délai d'attente pour l'affectation d'adresse IP externe du service %s", - "loc.messages.ServiceExternalIP": "l'adresse IP externe du service %s est %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Impossible de créer le fichier manifeste TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "La ressource %s n'est pas déployée à l'aide du déploiement de contrôle de validité SMI.", - "loc.messages.InvalidPercentage": "Valeur non valide pour le pourcentage.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Valeur non valide pour le nombre de réplicas.", - "loc.messages.InvalidTimeoutValue": "Valeur non valide pour le délai d'expiration. Entrez un nombre valide.", - "loc.messages.RolloutStatusTimedout": "Échec de la vérification de l'état de lancement.", - "loc.messages.EnvironmentLink": "Pour plus d'informations, accédez à %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/it-IT/resources.resjson deleted file mode 100644 index 6773a66c49b0..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/it-IT/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Distribuisci in Kubernetes", - "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=851275). In alternativa, [vedere la documentazione di Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Consente di usare i file manifesto di Kubernetes per la distribuzione nei cluster o persino di effettuare il bake dei file manifesto da usare per le distribuzioni con grafici Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Azione", - "loc.input.help.action": "Scegliere l'azione da eseguire.", - "loc.input.label.kubernetesServiceConnection": "Connessione al servizio Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Selezionare una connessione al servizio Kubernetes.", - "loc.input.label.namespace": "Spazio dei nomi", - "loc.input.help.namespace": "Consente di impostare lo spazio dei nomi per i comandi usando il flag –namespace. Se lo spazio dei nomi non viene specificato, i comandi verranno eseguiti nello spazio dei nomi predefinito.", - "loc.input.label.strategy": "Strategia", - "loc.input.help.strategy": "Strategia di distribuzione da usare", - "loc.input.label.trafficSplitMethod": "Metodo di divisione del traffico", - "loc.input.help.trafficSplitMethod": "Metodo di divisione del traffico da usare", - "loc.input.label.percentage": "Percentuale", - "loc.input.help.percentage": "Percentuale di reindirizzamento del traffico alla distribuzione canary", - "loc.input.label.baselineAndCanaryReplicas": "Repliche baseline e canary", - "loc.input.help.baselineAndCanaryReplicas": "Conteggio delle repliche baseline e canary", - "loc.input.label.manifests": "Manifesti", - "loc.input.help.manifests": "Manifesti da distribuire", - "loc.input.label.containers": "Contenitori", - "loc.input.help.containers": "Contenitori", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret per estrarre l'immagine dal registro privato", - "loc.input.label.renderType": "Motore di rendering", - "loc.input.help.renderType": "Strumento da usare per la generazione di file manifesto.", - "loc.input.label.dockerComposeFile": "Percorso file Docker Compose", - "loc.input.help.dockerComposeFile": "Percorso del file di Docker Compose", - "loc.input.label.helmChart": "Grafico Helm", - "loc.input.help.helmChart": "Percorso del grafico Helm di cui effettuare il bake", - "loc.input.label.releaseName": "Nome della versione di Helm", - "loc.input.help.releaseName": "Nome della versione di Helm da usare", - "loc.input.label.overrideFiles": "File di override", - "loc.input.help.overrideFiles": "File di override da impostare", - "loc.input.label.overrides": "Sostituzioni", - "loc.input.help.overrides": "Valori di override da impostare", - "loc.input.label.kustomizationPath": "Percorso Kustomization", - "loc.input.help.kustomizationPath": "L'argomento deve essere il percorso della directory contenente il file o un URL di repository GIT con un suffisso di percorso che specifica lo stesso rispetto alla radice del repository.", - "loc.input.label.resourceToPatch": "Risorsa a cui applicare la patch", - "loc.input.help.resourceToPatch": "per identificare la risorsa", - "loc.input.label.resourceFileToPatch": "Percorso file", - "loc.input.help.resourceFileToPatch": "Percorso del file usato per la patch", - "loc.input.label.kind": "Tipo", - "loc.input.help.kind": "Tipo di oggetto k8s: distribuzione, set di repliche e così via.", - "loc.input.label.name": "Nome", - "loc.input.help.name": "Nome dell'oggetto k8s", - "loc.input.label.replicas": "Numero di repliche", - "loc.input.help.replicas": "Numero di repliche da ridimensionare", - "loc.input.label.mergeStrategy": "Strategia di merge", - "loc.input.help.mergeStrategy": "Tipo di patch specificato, tra [json merge strategic]", - "loc.input.label.arguments": "Argomenti", - "loc.input.help.arguments": "Argomenti per il comando `kubectl delete`", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contenuto della patch", - "loc.input.label.secretType": "Tipo di segreto", - "loc.input.help.secretType": "Consente di creare/aggiornare un elemento imagepullsecret generico o Docker. Selezionare dockerRegistry per creare/aggiornare l'elemento imagepullsecret del registro selezionato. L'elemento imagePullSecret viene usato per passare al kubelet un segreto che contiene una password di registro contenitori in modo che possa eseguire il pull di un'immagine privata per conto del pod.", - "loc.input.label.secretName": "Nome segreto", - "loc.input.help.secretName": "Nome del segreto. È possibile usare questo nome di segreto nel file di configurazione YAML di Kubernetes.", - "loc.input.label.secretArguments": "Argomenti", - "loc.input.help.secretArguments": "Consente di specificare chiavi e valori letterali da inserire nell'elemento secret, ad esempio --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Connessione al servizio Registro Docker", - "loc.input.help.dockerRegistryEndpoint": "Consente di selezionare una connessione al servizio Registro Docker. È obbligatorio per i comandi che devono eseguire l'autenticazione con un registro.", - "loc.input.label.rolloutStatusTimeout": "Timeout per stato di implementazione", - "loc.input.help.rolloutStatusTimeout": "Intervallo di tempo (in secondi) da attendere prima di terminare il controllo sullo stato di implementazione", - "loc.messages.DownloadPathForStableTxt": "Percorso di download per stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Non è possibile scaricare il client kubectl della versione %s. Verificare se la versione è corretta: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Non è possibile scaricare il file della versione stabile di kubernetes da %s. Verrà eseguito il fallback a %s", - "loc.messages.DockerComposeFilePathNotSupplied": "il percorso del file Docker Compose non è stato specificato", - "loc.messages.UsingLatestStableVersion": "La versione 1.7 specificata come valore di input dell'identificatore di versione non è valida. Verrà usata l'ultima versione stabile. Controllare la disponibilità di versioni corrette in https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Il formato usato per la specifica della versione non è corretto, ad esempio 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Non è stato trovato alcun file manifesto a %s.", - "loc.messages.KubernetesServiceConnectionNotFound": "I dettagli della connessione al servizio Kubernetes non sono stati trovati.", - "loc.messages.UnknownRenderType": "Motore di rendering sconosciuto", - "loc.messages.ResourceKindNotDefined": "Il tipo di risorsa è Null", - "loc.messages.NullInputObject": "L'oggetto di input è Null.", - "loc.messages.ArgumentsInputNotSupplied": "Gli argomenti non sono stati specificati.", - "loc.messages.NullInputObjectMetadata": "I metadati dell'oggetto di input sono Null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "L'azione di rifiuto funziona solo con strategy: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "L'azione di promozione funziona solo con strategy: canary", - "loc.messages.AllContainersNotInReadyState": "Tutti i contenitori non si trovano in uno stato pronto.", - "loc.messages.CouldNotDeterminePodStatus": "Non è stato possibile determinare lo stato del pod a causa dell'errore: %s", - "loc.messages.KubectlShouldBeUpgraded": "Per usare le funzionalità di Kustomize, è necessario il client kubectl versione 1.14 o successiva.", - "loc.messages.CouldNotDetermineServiceStatus": "Non è stato possibile determinare lo stato del servizio %s a causa dell'errore: %s", - "loc.messages.waitForServiceIpAssignment": "In attesa dell'assegnazione dell'IP esterno del servizio %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Si è verificato un timeout durante l'attesa dell'assegnazione dell'IP esterno del servizio %s", - "loc.messages.ServiceExternalIP": "l'IP esterno del servizio %s è %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Non è possibile creare il file manifesto di TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "La risorsa %s non è stata distribuita tramite la distribuzione canary SMI.", - "loc.messages.InvalidPercentage": "Il valore della percentuale non è valido.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Il valore del numero di repliche non è valido.", - "loc.messages.InvalidTimeoutValue": "Il valore del timeout non è valido. Immettere un numero valido.", - "loc.messages.RolloutStatusTimedout": "Il controllo dello stato di implementazione non è riuscito.", - "loc.messages.EnvironmentLink": "Per altre informazioni, vedere %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/ja-JP/resources.resjson deleted file mode 100644 index 5f2f3d914ec8..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/ja-JP/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Kubernetes に展開する", - "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=851275)、または [Kubernetes のドキュメントを参照](https://kubernetes.io/docs/home/)", - "loc.description": "Kubernetes マニフェスト ファイルを使用してクラスターに配置するか、または Helm Chart を使用して配置に使用するマニフェスト ファイルを作成します", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "アクション", - "loc.input.help.action": "実行する操作を選択します。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes サービス接続", - "loc.input.help.kubernetesServiceConnection": "Kubernetes サービス接続を選択します。", - "loc.input.label.namespace": "名前空間", - "loc.input.help.namespace": "コマンドの名前空間を設定するには、–namespace フラグを使用します。名前空間が指定されていない場合、コマンドは既定の名前空間で実行されます。", - "loc.input.label.strategy": "戦略", - "loc.input.help.strategy": "使用される配置方法", - "loc.input.label.trafficSplitMethod": "トラフィックの分割方法", - "loc.input.help.trafficSplitMethod": "使用するトラフィックの分割方法", - "loc.input.label.percentage": "割合", - "loc.input.help.percentage": "カナリア デプロイにリダイレクトされるトラフィックの割合", - "loc.input.label.baselineAndCanaryReplicas": "ベースラインとカナリアのレプリカ", - "loc.input.help.baselineAndCanaryReplicas": "ベースラインおよびカナリア レプリカの数", - "loc.input.label.manifests": "マニフェスト", - "loc.input.help.manifests": "配置するマニフェスト", - "loc.input.label.containers": "コンテナー", - "loc.input.help.containers": "コンテナー", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "プライベート レジストリからイメージをプルするための ImagePullSecret", - "loc.input.label.renderType": "レンダー エンジン", - "loc.input.help.renderType": "マニフェスト ファイルを生成するために使用するツール。", - "loc.input.label.dockerComposeFile": "Docker Compose ファイルへのパス", - "loc.input.help.dockerComposeFile": "docker-compose ファイルのパス", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "作成する Helm Chart パス", - "loc.input.label.releaseName": "Helm のリリース名", - "loc.input.help.releaseName": "使用する Helm のリリース名", - "loc.input.label.overrideFiles": "オーバーライド ファイル", - "loc.input.help.overrideFiles": "設定するオーバーライド ファイル", - "loc.input.label.overrides": "オーバーライド", - "loc.input.help.overrides": "設定するオーバーライド値", - "loc.input.label.kustomizationPath": "Kustomization のパス", - "loc.input.help.kustomizationPath": "引数には、ファイルが保存されているディレクトリへのパス、または同じファイルへのリポジトリのルートからのパスのサフィックスを含む Git リポジトリの URL を指定する必要があります。", - "loc.input.label.resourceToPatch": "修正するリソース", - "loc.input.help.resourceToPatch": "リソースを識別するため", - "loc.input.label.resourceFileToPatch": "ファイル パス", - "loc.input.help.resourceFileToPatch": "パッチに使用するファイルへのパス", - "loc.input.label.kind": "種類", - "loc.input.help.kind": "K8s オブジェクトの種類; 配置、replicaSet など。", - "loc.input.label.name": "名前", - "loc.input.help.name": "k8s オブジェクトの名前", - "loc.input.label.replicas": "レプリカ数", - "loc.input.help.replicas": "スケーリングするレプリカの数", - "loc.input.label.mergeStrategy": "マージ戦略", - "loc.input.help.mergeStrategy": "指定されるパッチの種類; [json マージ戦略] の 1 つ", - "loc.input.label.arguments": "引数", - "loc.input.help.arguments": "`kubectl delete` コマンドの引数", - "loc.input.label.patch": "パッチ", - "loc.input.help.patch": "パッチの内容", - "loc.input.label.secretType": "シークレットの種類", - "loc.input.help.secretType": "ジェネリックまたは docker imagepullsecret を作成/更新します。dockerRegistry を選択して、選択したレジストリの imagepullsecret を作成/更新してください。imagePullSecret は、Pod の代わりにコンテナー レジストリ パスワードを含むシークレットを Kubelet に渡して、プライベート イメージをプルできるようにする方法です。", - "loc.input.label.secretName": "シークレット名", - "loc.input.help.secretName": "シークレットの名前。この名前は Kubernetes YAML 構成ファイルに使用できます。", - "loc.input.label.secretArguments": "引数", - "loc.input.help.secretArguments": "シークレットに挿入するキーとリテラル値を指定します。たとえば、--from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker レジストリ サービス接続", - "loc.input.help.dockerRegistryEndpoint": "Docker レジストリ サービス接続を選択します。レジストリを使って認証する必要のあるコマンドの場合に必要です。", - "loc.input.label.rolloutStatusTimeout": "ロールアウトの状態のタイムアウト", - "loc.input.help.rolloutStatusTimeout": "ロールアウトの状態の監視を終了するまでの待機時間 (秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt のダウンロード パス: %s", - "loc.messages.DownloadKubeCtlFailed": "kubectl クライアント バージョン %s をダウンロードすることができません。適切なバージョンかどうか、https://github.com/kubernetes/kubernetes/releases で確認します", - "loc.messages.DownloadStableVersionFailed": "%s から安定バージョンの Kubernetes ファイルをダウンロードすることができません。%s にフォールバックしています", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose ファイルのパスが指定されていません", - "loc.messages.UsingLatestStableVersion": "バージョンの仕様の入力に無効なバージョン 1.7 が指定されました。代わりに最新の安定したバージョンが使用されます。正しいバージョンを https://github.com/kubernetes/kubernetes/releases でご確認ください", - "loc.messages.NotAValidSemverVersion": "バージョンが正しい形式で指定されていません。例: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "%s と一致するマニフェスト ファイルが見つかりませんでした。", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes サービス接続の詳細が見つかりませんでした。", - "loc.messages.UnknownRenderType": "不明なレンダリング エンジン", - "loc.messages.ResourceKindNotDefined": "リソースの種類が null です", - "loc.messages.NullInputObject": "入力オブジェクトが null です。", - "loc.messages.ArgumentsInputNotSupplied": "引数が指定されていません。", - "loc.messages.NullInputObjectMetadata": "入力オブジェクト メタデータが null です。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒否アクションは、次のストラテジーでのみ動作します: カナリア", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "昇格アクションは、次のストラテジーでのみ動作します: カナリア", - "loc.messages.AllContainersNotInReadyState": "一部のコンテナーが準備完了の状態ではありません。", - "loc.messages.CouldNotDeterminePodStatus": "ポッドの状態を特定できませんでした。原因のエラー: %s", - "loc.messages.KubectlShouldBeUpgraded": "kustomize 機能を使用するには、kubectl クライアント バージョン v1.14 またはそれ以降が必要です。", - "loc.messages.CouldNotDetermineServiceStatus": "サービス %s の状態を特定できませんでした。原因のエラー: %s", - "loc.messages.waitForServiceIpAssignment": "サービス %s の外部 IP 割り当てを待機しています", - "loc.messages.waitForServiceIpAssignmentTimedOut": "サービス %s の外部 IP 割り当てがタイムアウトになるのを待機しています", - "loc.messages.ServiceExternalIP": "サービス %s の外部 IP は %s です", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "TrafficSplit マニフェスト ファイルを作成できません。%s", - "loc.messages.StableSpecSelectorNotExist": "リソース %s は SMI カナリア デプロイを使用してデプロイされていません。", - "loc.messages.InvalidPercentage": "パーセンテージの値が無効です。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "レプリカ数の値が無効です。", - "loc.messages.InvalidTimeoutValue": "タイムアウトの値が無効です。有効な数値を入力してください。", - "loc.messages.RolloutStatusTimedout": "ロールアウトの状態を確認できませんでした。", - "loc.messages.EnvironmentLink": "詳細については、%s を参照してください" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/ko-KR/resources.resjson deleted file mode 100644 index 27c8e7428291..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/ko-KR/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Kubernetes에 배포", - "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=851275) 또는 [Kubernetes 설명서 참조](https://kubernetes.io/docs/home/)", - "loc.description": "Kubernetes 매니페스트 파일을 사용하여 클러스터에 배포하거나, Helm 차트를 사용하여 배포에 사용할 매니페스트 파일을 굽습니다.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "작업", - "loc.input.help.action": "수행할 작업을 선택합니다.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 서비스 연결", - "loc.input.help.kubernetesServiceConnection": "Kubernetes 서비스 연결을 선택합니다.", - "loc.input.label.namespace": "네임스페이스", - "loc.input.help.namespace": "–namespace 플래그를 사용하여 명령의 네임스페이스를 설정합니다. 네임스페이스를 지정하지 않으면 기본 네임스페이스에서 명령이 실행됩니다.", - "loc.input.label.strategy": "전략", - "loc.input.help.strategy": "사용할 배포 전략입니다.", - "loc.input.label.trafficSplitMethod": "트래픽 분할 방법", - "loc.input.help.trafficSplitMethod": "사용할 트래픽 분할 방법", - "loc.input.label.percentage": "백분율", - "loc.input.help.percentage": "카나리아 배포로의 트래픽 리디렉션 비율", - "loc.input.label.baselineAndCanaryReplicas": "기준 및 카나리아 복제본", - "loc.input.help.baselineAndCanaryReplicas": "기준 및 카나리아 복제본 수", - "loc.input.label.manifests": "매니페스트", - "loc.input.help.manifests": "배포할 매니페스트입니다.", - "loc.input.label.containers": "컨테이너", - "loc.input.help.containers": "컨테이너", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "프라이빗 레지스트리에서 이미지를 풀하기 위한 ImagePullSecret입니다.", - "loc.input.label.renderType": "렌더링 엔진", - "loc.input.help.renderType": "매니페스트 파일을 생성하는 데 사용하는 도구입니다.", - "loc.input.label.dockerComposeFile": "docker compose 파일의 경로", - "loc.input.help.dockerComposeFile": "docker-compose 파일 경로", - "loc.input.label.helmChart": "Helm 차트", - "loc.input.help.helmChart": "구울 Helm 차트 경로입니다.", - "loc.input.label.releaseName": "Helm 릴리스 이름", - "loc.input.help.releaseName": "사용할 Helm 릴리스 이름", - "loc.input.label.overrideFiles": "재정의 파일", - "loc.input.help.overrideFiles": "설정할 재정의 파일입니다.", - "loc.input.label.overrides": "재정의", - "loc.input.help.overrides": "설정할 재정의 값입니다.", - "loc.input.label.kustomizationPath": "Kustomization 경로", - "loc.input.help.kustomizationPath": "인수는 파일을 포함하는 디렉터리의 경로이거나, 리포지토리 루트에 대해 동일한 경로를 지정하는 경로 접미사를 포함하는 git 리포지토리 URL이어야 합니다.", - "loc.input.label.resourceToPatch": "패치할 리소스", - "loc.input.help.resourceToPatch": "리소스를 식별합니다.", - "loc.input.label.resourceFileToPatch": "파일 경로", - "loc.input.help.resourceFileToPatch": "패치에 사용되는 파일의 경로입니다.", - "loc.input.label.kind": "종류", - "loc.input.help.kind": "K8 개체 종류(deployment, replicaSet)입니다.", - "loc.input.label.name": "이름", - "loc.input.help.name": "K8 개체의 이름입니다.", - "loc.input.label.replicas": "복제본 수", - "loc.input.help.replicas": "크기를 조정할 복제본 수입니다.", - "loc.input.label.mergeStrategy": "병합 전략", - "loc.input.help.mergeStrategy": "제공되는 패치 유형으로, [json merge strategic] 중 하나입니다.", - "loc.input.label.arguments": "인수", - "loc.input.help.arguments": "'kubectl delete' 명령의 인수입니다.", - "loc.input.label.patch": "패치", - "loc.input.help.patch": "패치 내용입니다.", - "loc.input.label.secretType": "비밀 유형", - "loc.input.help.secretType": "제네릭 또는 docker imagepullsecret을 생성/업데이트합니다. 선택한 레지스트리의 imagepullsecret을 생성/업데이트하려면 dockerRegistry를 선택하세요. imagePullSecret을 사용하면 컨테이너 레지스트리 암호가 포함된 비밀을 Kubelet에 전달하여 Pod를 대신해서 프라이빗 이미지를 풀하도록 할 수 있습니다.", - "loc.input.label.secretName": "비밀 이름", - "loc.input.help.secretName": "비밀의 이름입니다. 이 비밀 이름을 Kubernetes YAML 구성 파일에 사용할 수 있습니다.", - "loc.input.label.secretArguments": "인수", - "loc.input.help.secretArguments": "비밀에 삽입할 키와 리터럴 값을 지정합니다(예: --from-literal=key1=value1 --from-literal=key2=\"top secret\").", - "loc.input.label.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결", - "loc.input.help.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결을 선택합니다. 레지스트리를 사용하여 인증해야 하는 명령에 필요합니다.", - "loc.input.label.rolloutStatusTimeout": "롤아웃 상태의 시간 제한", - "loc.input.help.rolloutStatusTimeout": "롤아웃 상태에 대한 조사를 끝내기 전까지 대기하는 시간(초)", - "loc.messages.DownloadPathForStableTxt": "stable.txt의 다운로드 경로: %s", - "loc.messages.DownloadKubeCtlFailed": "%s 버전의 Kubectl 클라이언트를 다운로드할 수 없습니다. https://github.com/kubernetes/kubernetes/releases에서 버전이 올바른지 확인하세요.", - "loc.messages.DownloadStableVersionFailed": "%s에서 안정적인 버전의 Kubernetes 파일을 다운로드할 수 없습니다. %s(으)로 대체합니다.", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose 파일 경로가 제공되지 않았습니다.", - "loc.messages.UsingLatestStableVersion": "잘못된 버전 1.7이 버전 사양 입력에 지정되었습니다. 안정적인 최신 버전을 대신 사용합니다. https://github.com/kubernetes/kubernetes/releases에서 올바른 버전을 확인하세요.", - "loc.messages.NotAValidSemverVersion": "버전이 올바른 형식으로 지정되지 않았습니다(예: 1.8.2, v1.8.2, 2.8.2, v2.8.2).", - "loc.messages.ManifestFileNotFound": "%s과(와) 일치하는 매니페스트 파일이 없습니다.", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes 서비스 연결 정보를 찾을 수 없습니다.", - "loc.messages.UnknownRenderType": "알 수 없는 렌더링 엔진입니다.", - "loc.messages.ResourceKindNotDefined": "리소스 종류가 Null입니다.", - "loc.messages.NullInputObject": "입력 개체가 Null입니다.", - "loc.messages.ArgumentsInputNotSupplied": "인수를 지정하지 않았습니다.", - "loc.messages.NullInputObjectMetadata": "입력 개체 메타데이터가 Null입니다.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "거부 작업은 카나리아 전략에서만 실행됩니다.", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "수준 올리기 작업은 카나리아 전략에서만 실행됩니다.", - "loc.messages.AllContainersNotInReadyState": "일부 컨테이너만 준비 상태입니다.", - "loc.messages.CouldNotDeterminePodStatus": "오류로 인해 Pod의 상태를 확인할 수 없음: %s", - "loc.messages.KubectlShouldBeUpgraded": "kustomize 기능을 사용하려면 kubectl 클라이언트 버전이 v1.14 이상이어야 합니다.", - "loc.messages.CouldNotDetermineServiceStatus": "오류로 인해 서비스 %s 상태를 확인할 수 없음: %s", - "loc.messages.waitForServiceIpAssignment": "서비스 %s 외부 IP 할당을 기다리는 중", - "loc.messages.waitForServiceIpAssignmentTimedOut": "서비스 %s 외부 IP 할당 대기 시간이 초과되었습니다.", - "loc.messages.ServiceExternalIP": "서비스 %s 외부 IP가 %s입니다.", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "TrafficSplit 매니페스트 파일 %s을(를) 만들 수 없습니다.", - "loc.messages.StableSpecSelectorNotExist": "리소스 %s이(가) SMI 카나리아 배포를 사용하여 배포되지 않았습니다.", - "loc.messages.InvalidPercentage": "백분율 값이 잘못되었습니다.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "복제본 개수 값이 잘못되었습니다.", - "loc.messages.InvalidTimeoutValue": "시간 제한 값이 잘못되었습니다. 유효한 수를 입력하세요.", - "loc.messages.RolloutStatusTimedout": "롤아웃 상태를 확인하지 못했습니다.", - "loc.messages.EnvironmentLink": "자세한 내용을 보려면 %s(으)로 이동하세요." -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/ru-RU/resources.resjson deleted file mode 100644 index 0ff96c8cd265..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/ru-RU/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Развертывание в Kubernetes", - "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=851275) или [документацию по Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Используйте файлы манифеста Kubernetes для развертывания в кластерах или даже подготовки файлов манифеста, которые будут использоваться для развертываний с помощью чартов Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Действие", - "loc.input.help.action": "Выберите действие для выполнения.", - "loc.input.label.kubernetesServiceConnection": "Подключение к службе Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Выберите подключение службы Kubernetes.", - "loc.input.label.namespace": "Пространство имен", - "loc.input.help.namespace": "Задает пространство имен для команд с помощью флага –namespace. Если пространство имен не указано, команды будут выполняться в пространстве имен по умолчанию.", - "loc.input.label.strategy": "Стратегия", - "loc.input.help.strategy": "Используемая стратегия развертывания", - "loc.input.label.trafficSplitMethod": "Метод разделения трафика", - "loc.input.help.trafficSplitMethod": "Используемый метод разделения трафика", - "loc.input.label.percentage": "Процент", - "loc.input.help.percentage": "Процент перенаправления трафика в развертывание Canary", - "loc.input.label.baselineAndCanaryReplicas": "Базовые реплики и реплики Canary", - "loc.input.help.baselineAndCanaryReplicas": "Счетчик базовых реплик и реплик Canary", - "loc.input.label.manifests": "Манифесты", - "loc.input.help.manifests": "Развертываемые манифесты", - "loc.input.label.containers": "Контейнеры", - "loc.input.help.containers": "Контейнеры", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret для извлечения образа из закрытого реестра", - "loc.input.label.renderType": "Модуль отрисовки", - "loc.input.help.renderType": "Инструмент, используемый для создания файлов манифеста.", - "loc.input.label.dockerComposeFile": "Путь к файлу Docker Compose", - "loc.input.help.dockerComposeFile": "Путь к файлу docker-compose", - "loc.input.label.helmChart": "Чарт Helm", - "loc.input.help.helmChart": "Путь к подготавливаемому чарту Helm", - "loc.input.label.releaseName": "Имя выпуска Helm", - "loc.input.help.releaseName": "Используемое имя выпуска Helm", - "loc.input.label.overrideFiles": "Переопределение файлов", - "loc.input.help.overrideFiles": "Переопределение задаваемых файлов", - "loc.input.label.overrides": "Переопределения", - "loc.input.help.overrides": "Переопределение задаваемых значений", - "loc.input.label.kustomizationPath": "Путь Kustomization", - "loc.input.help.kustomizationPath": "Аргумент должен быть путем к каталогу, содержащему файл, или URL-адресом репозитория Git с суффиксом path, указывающим тот же путь относительно корня репозитория.", - "loc.input.label.resourceToPatch": "Ресурс для исправления", - "loc.input.help.resourceToPatch": "чтобы идентифицировать ресурс", - "loc.input.label.resourceFileToPatch": "Путь к файлу", - "loc.input.help.resourceFileToPatch": "Путь к файлу, используемому для исправления", - "loc.input.label.kind": "Тип", - "loc.input.help.kind": "Тип объекта K8s; развертывание, replicaSet и т. д.", - "loc.input.label.name": "Имя", - "loc.input.help.name": "Имя объекта k8s", - "loc.input.label.replicas": "Число реплик", - "loc.input.help.replicas": "Число реплик для масштабирования", - "loc.input.label.mergeStrategy": "Стратегия слияния", - "loc.input.help.mergeStrategy": "Тип предоставляемого исправления; одна из [стратегий слияния JSON]", - "loc.input.label.arguments": "Аргументы", - "loc.input.help.arguments": "Аргументы для команды \"kubectl delete\"", - "loc.input.label.patch": "Исправление", - "loc.input.help.patch": "Содержимое исправления", - "loc.input.label.secretType": "Тип секрета", - "loc.input.help.secretType": "Создайте или обновите универсальный объект imagepullsecret или объект imagepullsecret для docker. Выберите реестр dockerRegistry, чтобы создать или обновить объект imagepullsecret для него. imagePullSecret — это способ передачи секрета, содержащего пароль к реестру контейнеров, в Kubelet для извлечения частного образа от имени вашего Pod.", - "loc.input.label.secretName": "Имя секрета", - "loc.input.help.secretName": "Имя секрета. Вы можете использовать это имя в YAML-файле конфигурации Kubernetes.", - "loc.input.label.secretArguments": "Аргументы", - "loc.input.help.secretArguments": "Укажите ключи и литеральные значения для вставки в секрет. Пример: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Подключение к службе реестра Docker", - "loc.input.help.dockerRegistryEndpoint": "Выберите подключение к службе реестра Docker. Это требуется для команд, для выполнения которых необходимо пройти проверку подлинности в реестре.", - "loc.input.label.rolloutStatusTimeout": "Время ожидания для состояния выпуска", - "loc.input.help.rolloutStatusTimeout": "Интервал времени (в секундах), по истечении которого будет завершено отслеживание состояния выпуска", - "loc.messages.DownloadPathForStableTxt": "Путь для скачивания stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Не удается скачать клиент kubectl версии %s. Проверьте, верна ли версия: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Не удается скачать файл стабильной версии kubernetes с %s. Возврат к %s", - "loc.messages.DockerComposeFilePathNotSupplied": "Путь к файлу docker-compose не указан", - "loc.messages.UsingLatestStableVersion": "В спецификации версии указана недопустимая версия 1.7. Вместо нее будет использована последняя стабильная версия. Проверьте правильность версий на странице https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Версия указана в неправильном формате. Примеры: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Файлы манифеста, соответствующие %s, не найдены.", - "loc.messages.KubernetesServiceConnectionNotFound": "Сведения о подключении к службе Kubernetes не найдены.", - "loc.messages.UnknownRenderType": "Неизвестный модуль отрисовки", - "loc.messages.ResourceKindNotDefined": "Тип ресурса равен NULL", - "loc.messages.NullInputObject": "Входной объект имеет значение NULL.", - "loc.messages.ArgumentsInputNotSupplied": "Аргументы не указаны.", - "loc.messages.NullInputObjectMetadata": "Метаданные входного объекта имеют значение NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Действие отклонения работает только со стратегией: предохранитель", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Действие повышения уровня работает только со стратегией: предохранитель", - "loc.messages.AllContainersNotInReadyState": "Все контейнеры находятся в состоянии готовности.", - "loc.messages.CouldNotDeterminePodStatus": "Не удалось определить состояние объекта pod из-за ошибки: %s", - "loc.messages.KubectlShouldBeUpgraded": "Для использования функций kustomize требуется версия клиента kubectl 1.14 или выше.", - "loc.messages.CouldNotDetermineServiceStatus": "Не удалось определить состояние службы %s из-за ошибки: %s", - "loc.messages.waitForServiceIpAssignment": "Ожидание назначения внешнего IP-адреса службы %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Истекло время ожидания назначения внешнего IP-адреса службы %s", - "loc.messages.ServiceExternalIP": "служба %s имеет внешний IP-адрес %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Не удалось создать файл манифеста TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "Ресурс %s не развернут с помощью развертывания Canary SMI.", - "loc.messages.InvalidPercentage": "Недопустимое значение для процента.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Недопустимое значение для количества реплик.", - "loc.messages.InvalidTimeoutValue": "Недопустимое значение времени ожидания. Введите допустимое число.", - "loc.messages.RolloutStatusTimedout": "Сбой проверки состояния выпуска.", - "loc.messages.EnvironmentLink": "Дополнительные сведения см. на странице %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-CN/resources.resjson deleted file mode 100644 index 02cf99a50e39..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-CN/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "部署到 Kubernetes", - "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=851275)或[参阅 Kubernetes 文档](https://kubernetes.io/docs/home/)", - "loc.description": "使用 Kubernetes 清单文件部署到群集,甚至生成要用于使用 Helm 图表进行部署的清单文件", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "操作", - "loc.input.help.action": "选择要执行的操作。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 服务连接", - "loc.input.help.kubernetesServiceConnection": "选择 Kubernetes 服务连接。", - "loc.input.label.namespace": "命名空间", - "loc.input.help.namespace": "使用 -namespace 标志设置命令的命名空间。如果未提供命名空间,则命令将在默认命名空间中运行。", - "loc.input.label.strategy": "策略", - "loc.input.help.strategy": "要使用的部署策略", - "loc.input.label.trafficSplitMethod": "流量拆分方法", - "loc.input.help.trafficSplitMethod": "要使用的流量拆分方法", - "loc.input.label.percentage": "百分比", - "loc.input.help.percentage": "重定向到 Canary 部署的流量的百分比", - "loc.input.label.baselineAndCanaryReplicas": "基线和 Canary 副本", - "loc.input.help.baselineAndCanaryReplicas": "基线和 Canary 副本计数", - "loc.input.label.manifests": "清单", - "loc.input.help.manifests": "要部署的清单", - "loc.input.label.containers": "容器", - "loc.input.help.containers": "容器", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "从专用注册表拉取映像的 ImagePullSecret", - "loc.input.label.renderType": "呈现引擎", - "loc.input.help.renderType": "用于生成清单文件的工具。", - "loc.input.label.dockerComposeFile": "docker compose 文件的路径", - "loc.input.help.dockerComposeFile": "docker-compose 文件路径", - "loc.input.label.helmChart": "Helm 图表", - "loc.input.help.helmChart": "要生成的 Helm 图表路径", - "loc.input.label.releaseName": "Helm 发布名称", - "loc.input.help.releaseName": "要使用的 Helm 发布名称", - "loc.input.label.overrideFiles": "替代文件", - "loc.input.help.overrideFiles": "替代要设置的文件", - "loc.input.label.overrides": "替代", - "loc.input.help.overrides": "替代要设置的值", - "loc.input.label.kustomizationPath": "Kustomization 路径", - "loc.input.help.kustomizationPath": "该参数必须是包含该文件的目录的路径,或带有路径后缀的 git 存储库 URL,该路径后缀指定与存储库根目录相同的路径。", - "loc.input.label.resourceToPatch": "要修补的资源", - "loc.input.help.resourceToPatch": "识别资源", - "loc.input.label.resourceFileToPatch": "文件路径", - "loc.input.help.resourceFileToPatch": "用于修补程序的文件的路径", - "loc.input.label.kind": "种类", - "loc.input.help.kind": "K8s 对象的类型;部署、replicaSet 等。", - "loc.input.label.name": "名称", - "loc.input.help.name": "k8s 对象的名称", - "loc.input.label.replicas": "副本计数", - "loc.input.help.replicas": "要缩放到的副本数", - "loc.input.label.mergeStrategy": "合并策略", - "loc.input.help.mergeStrategy": "所提供的修补程序的类型;[json 合并策略]之一", - "loc.input.label.arguments": "参数", - "loc.input.help.arguments": "`kubectl delete` 命令的参数", - "loc.input.label.patch": "修补程序", - "loc.input.help.patch": "修补程序的内容", - "loc.input.label.secretType": "机密类型", - "loc.input.help.secretType": "创建/更新泛型或 docker imagepullsecret。选择 dockerRegistry,用于创建/更新所选注册表的 imagepullsecret。imagePullSecret 是一种将包含容器注册表密码的机密传递到 Kubelet 的方法,可便于其代表 Pod 拉取专用映像。", - "loc.input.label.secretName": "机密名称", - "loc.input.help.secretName": "机密名称。可以在 Kubernetes YAML 配置文件中使用此机密名称。", - "loc.input.label.secretArguments": "参数", - "loc.input.help.secretArguments": "指定要插入机密的密钥和文本值。例如,--from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker 注册表服务连接", - "loc.input.help.dockerRegistryEndpoint": "选择 Docker 注册表服务连接。这对于需要执行注册表身份验证的命令是必需的。", - "loc.input.label.rolloutStatusTimeout": "推出状态超时", - "loc.input.help.rolloutStatusTimeout": "在结束监视推出状态前等待的时长(秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt 的下载路径: %s", - "loc.messages.DownloadKubeCtlFailed": "无法下载版本 %s 的 kubectl 客户端。检查该版本是否正确 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "无法从 %s 下载 kubernetes 稳定版本文件。正在回退到 %s", - "loc.messages.DockerComposeFilePathNotSupplied": "未提供 docker-compose 文件路径", - "loc.messages.UsingLatestStableVersion": "版本规范输入中指定的版本 1.7 无效。请改用最新的稳定版本。检查获取正确的版本 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "未指定正确格式的版本。示例: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "找不到匹配 %s 的任何清单文件。", - "loc.messages.KubernetesServiceConnectionNotFound": "找不到 Kubernetes 服务连接详细信息。", - "loc.messages.UnknownRenderType": "未知的呈现引擎", - "loc.messages.ResourceKindNotDefined": "资源类型为 null", - "loc.messages.NullInputObject": "输入对象为 null。", - "loc.messages.ArgumentsInputNotSupplied": "未提供参数。", - "loc.messages.NullInputObjectMetadata": "输入对象元数据为 null。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒绝操作仅适用于策略: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "升级操作仅适用于策略: canary", - "loc.messages.AllContainersNotInReadyState": "所有容器均未处于就绪状态。", - "loc.messages.CouldNotDeterminePodStatus": "由于错误 %s,无法确定 Pod 的状态", - "loc.messages.KubectlShouldBeUpgraded": "kubectl 客户端版本需要等于或高于 v1.14,才能使用 kustomize 功能。", - "loc.messages.CouldNotDetermineServiceStatus": "由于错误 %s,无法确定服务 %s 状态", - "loc.messages.waitForServiceIpAssignment": "正在等待服务 %s 外部 IP 分配", - "loc.messages.waitForServiceIpAssignmentTimedOut": "等待服务 %s 外部 IP 分配超时", - "loc.messages.ServiceExternalIP": "服务 %s 外部 IP 为 %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "无法创建 TrafficSplit 清单文件。%s", - "loc.messages.StableSpecSelectorNotExist": "未使用 SMI Canary 部署来部署资源 %s。", - "loc.messages.InvalidPercentage": "百分比的值无效。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "副本计数值无效。", - "loc.messages.InvalidTimeoutValue": "超时值无效。请输入有效数字。", - "loc.messages.RolloutStatusTimedout": "推出状态检查失败。", - "loc.messages.EnvironmentLink": "有关详细信息,请转到 %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-TW/resources.resjson deleted file mode 100644 index e859c1ff26e3..000000000000 --- a/_generated/KubernetesManifestV0/Strings/resources.resjson/zh-TW/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "部署至 Kubernetes", - "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=851275)或[參閱 Kubernetes 文件](https://kubernetes.io/docs/home/)", - "loc.description": "使用 Kubernetes 資訊清單檔案部署至叢集,或甚至是使用 Helm charts 轉換用於部署的資訊清單檔案", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "動作", - "loc.input.help.action": "選擇要執行的動作。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 服務連線", - "loc.input.help.kubernetesServiceConnection": "請選取 Kubernetes 服務連線。", - "loc.input.label.namespace": "命名空間", - "loc.input.help.namespace": "使用 –namespace 旗標為命令設定命名空間。若未提供命名空間,這些命令會在預設命名空間中執行。", - "loc.input.label.strategy": "策略", - "loc.input.help.strategy": "要使用的部署策略", - "loc.input.label.trafficSplitMethod": "分流方法", - "loc.input.help.trafficSplitMethod": "要使用的分流方法", - "loc.input.label.percentage": "百分比", - "loc.input.help.percentage": "重新導向至 Canary 部署的流量百分比", - "loc.input.label.baselineAndCanaryReplicas": "基準與 Canary 複本", - "loc.input.help.baselineAndCanaryReplicas": "基準與 Canary 複本計數", - "loc.input.label.manifests": "資訊清單", - "loc.input.help.manifests": "要部署的資訊清單", - "loc.input.label.containers": "容器", - "loc.input.help.containers": "容器", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret 可從私人登錄提取映像", - "loc.input.label.renderType": "轉譯引擎", - "loc.input.help.renderType": "用於產生資訊清單檔案的工具。", - "loc.input.label.dockerComposeFile": "Docker Compose 檔案路徑", - "loc.input.help.dockerComposeFile": "docker-compose 檔案路徑", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "要轉換的 Helm chart 路徑", - "loc.input.label.releaseName": "Helm 版本名稱", - "loc.input.help.releaseName": "要使用的 Helm 版本名稱", - "loc.input.label.overrideFiles": "覆寫檔案", - "loc.input.help.overrideFiles": "覆寫要設定的檔案", - "loc.input.label.overrides": "覆寫", - "loc.input.help.overrides": "覆寫要設定的值", - "loc.input.label.kustomizationPath": "Kustomization 路徑", - "loc.input.help.kustomizationPath": "引數必須是包含檔案的目錄路徑,或路徑尾碼指定目標與儲存機制根路徑相同的 git 存放庫 URL。", - "loc.input.label.resourceToPatch": "要修補的資源", - "loc.input.help.resourceToPatch": "以找出資源", - "loc.input.label.resourceFileToPatch": "檔案路徑", - "loc.input.help.resourceFileToPatch": "用於修補的檔案路徑", - "loc.input.label.kind": "種類", - "loc.input.help.kind": "K8s 物件的種類; deployment、replicaSet 等。", - "loc.input.label.name": "名稱", - "loc.input.help.name": "k8s 物件的名稱", - "loc.input.label.replicas": "複本計數", - "loc.input.help.replicas": "要擴展的目標複本數目", - "loc.input.label.mergeStrategy": "合併策略", - "loc.input.help.mergeStrategy": "所提供的修補類型; 其中一個 [json 策略合併]", - "loc.input.label.arguments": "引數", - "loc.input.help.arguments": "'kubectl delete' 命令的引數", - "loc.input.label.patch": "修補程式", - "loc.input.help.patch": "修補的內容", - "loc.input.label.secretType": "秘密的類型", - "loc.input.help.secretType": "建立/更新一般或 docker imagepullsecret。選取 dockerRegistry 以建立/更新所選登錄的 imagepullsecret。imagePullSecret 這項方法可將包含容器登錄密碼的秘密傳遞給 Kubelet,讓它可以代替您的 Pod 提取私用映像。", - "loc.input.label.secretName": "密碼名稱", - "loc.input.help.secretName": "秘密名稱。您可以在 Kubernetes YAML 組態檔中使用此秘密名稱。", - "loc.input.label.secretArguments": "引數", - "loc.input.help.secretArguments": "指定要在秘密中插入的索引鍵與常值。例如 --from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker 登錄服務連線", - "loc.input.help.dockerRegistryEndpoint": "選取 Docker 登錄服務連線。必須為需要向登錄驗證的命令選取。", - "loc.input.label.rolloutStatusTimeout": "推出狀態逾時", - "loc.input.help.rolloutStatusTimeout": "結束監看推出狀態前所要等候的時間長度 (秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt 的下載路徑: %s", - "loc.messages.DownloadKubeCtlFailed": "無法下載版本為 %s 的 kubectl 用戶端。請檢查版本是否正確 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "無法從 %s 下載 kubernetes 穩定版本檔案。回到 %s", - "loc.messages.DockerComposeFilePathNotSupplied": "未提供 docker-compose 檔案路徑", - "loc.messages.UsingLatestStableVersion": "版本規格輸入中指定的版本 1.7 無效。請改用最新穩定版本。查看正確的版本 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "未以正確的格式指定版本。例如: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "找不到任何符合 %s 的資訊清單檔案。", - "loc.messages.KubernetesServiceConnectionNotFound": "找不到 Kubernetes 服務連線詳細資料。", - "loc.messages.UnknownRenderType": "未知的轉譯引擎", - "loc.messages.ResourceKindNotDefined": "資源種類為 Null", - "loc.messages.NullInputObject": "輸入物件為 Null。", - "loc.messages.ArgumentsInputNotSupplied": "未提供引數。", - "loc.messages.NullInputObjectMetadata": "輸入物件中繼資料為 Null。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒絕動作僅適用於策略: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "升階動作僅適用於策略: canary", - "loc.messages.AllContainersNotInReadyState": "所有容器皆未處於就緒狀態。", - "loc.messages.CouldNotDeterminePodStatus": "因為發生錯誤,所以無法判斷 Pod 的狀態: %s", - "loc.messages.KubectlShouldBeUpgraded": "需要有相當於 v1.14 或更新版本的 kubectl 用戶端版本,才能使用 kustomize 功能。", - "loc.messages.CouldNotDetermineServiceStatus": "因為發生錯誤,所以無法判斷服務 %s 狀態: %s", - "loc.messages.waitForServiceIpAssignment": "正在等候服務 %s 外部 IP 指派", - "loc.messages.waitForServiceIpAssignmentTimedOut": "等候服務 %s 外部 IP 指派已逾時", - "loc.messages.ServiceExternalIP": "服務 %s 的外部 IP 是 %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "無法建立 TrafficSplit 資訊清單檔案。%s", - "loc.messages.StableSpecSelectorNotExist": "未使用 SMI Canary 部署來部署資源 %s。", - "loc.messages.InvalidPercentage": "百分比值無效。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "複本計數值無效。", - "loc.messages.InvalidTimeoutValue": "逾時值無效。請輸入有效的數值。", - "loc.messages.RolloutStatusTimedout": "推出狀態檢查失敗。", - "loc.messages.EnvironmentLink": "如需詳細資訊,請前往 %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/L0.ts b/_generated/KubernetesManifestV0/Tests/L0.ts deleted file mode 100644 index a9c8c05193c0..000000000000 --- a/_generated/KubernetesManifestV0/Tests/L0.ts +++ /dev/null @@ -1,549 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as tl from 'azure-pipelines-task-lib'; -import * as shared from './TestShared'; -import * as utils from '../src/utils/utilities'; -import { updateImagePullSecrets, updateImageDetails } from '../src/utils/KubernetesObjectUtility'; -import * as yaml from 'js-yaml'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; - -describe('Kubernetes Manifests Suite', function () { - this.timeout(30000); - - before((done) => { - process.env[shared.TestEnvVars.operatingSystem] = tl.osType().match(/^Win/) ? shared.OperatingSystems.Windows : shared.OperatingSystems.Other; - process.env[shared.TestEnvVars.isKubectlPresentOnMachine] = 'true'; - process.env[shared.TestEnvVars.manifests] = shared.ManifestFilesPath; - done(); - }); - - beforeEach(() => { - delete process.env[shared.TestEnvVars.action]; - delete process.env[shared.TestEnvVars.strategy]; - delete process.env[shared.TestEnvVars.percentage]; - delete process.env[shared.TestEnvVars.isStableDeploymentPresent]; - delete process.env[shared.TestEnvVars.isCanaryDeploymentPresent]; - delete process.env[shared.TestEnvVars.isBaselineDeploymentPresent]; - delete process.env[shared.TestEnvVars.arguments]; - delete process.env[shared.TestEnvVars.namespace]; - delete process.env[shared.TestEnvVars.dockerComposeFile]; - delete process.env[shared.TestEnvVars.releaseName]; - delete process.env[shared.TestEnvVars.baselineAndCanaryReplicas]; - delete process.env[shared.TestEnvVars.trafficSplitMethod]; - delete process.env[shared.TestEnvVars.containers]; - delete process.env.RemoveNamespaceFromEndpoint; - }); - - after((done) => { - done(); - }); - - it('Run successfuly for deploy with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - process.env[shared.TestEnvVars.imagePullSecrets] = 'test-key1\ntest-key2'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77') - done(); - }); - - it('Run successfully for deploy canary', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.trafficSplitMethod] = shared.TrafficSplitMethod.pod; - process.env[shared.TestEnvVars.percentage] = '30'; - process.env[shared.TestEnvVars.isStableDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isCanaryDeploymentPresent] = 'false'; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment-canary created') != -1, 'Canary deployment is created'); - assert(tr.stdout.indexOf('nginx-deployment-baseline created') != -1, 'Baseline deployment is created'); - assert(tr.stdout.indexOf('deployment "nginx-deployment-canary" successfully rolled out') != -1, 'Canary deployment is successfully rolled out'); - assert(tr.stdout.indexOf('deployment "nginx-deployment-baseline" successfully rolled out') != -1, 'Baseline deployment is successfully rolled out'); - assert(tr.stdout.indexOf('nginx-deployment-canary annotated') != -1, 'Canary deployment is annotated'); - assert(tr.stdout.indexOf('nginx-deployment-baseline annotated') != -1, 'Baseline deployment is annotated'); - done(); - }); - - it('Run should fail when canary deployment already exits', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.percentage] = '30'; - process.env[shared.TestEnvVars.isStableDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isCanaryDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - done(); - }); - - it('Run should fail for promote with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - process.env[shared.TestEnvVars.imagePullSecrets] = 'test-key'; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run successfuly for promote with canary strategy when baseline resource exists', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment created') != -1, 'deployment is created'); - assert(tr.stdout.indexOf('Rollout status has been skipped for Deployment as only updateStartegy:\'RollingUpdate\' is allowed') != -1, 'deployment rollout status skipped'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77') - assert(tr.stdout.indexOf('nginx-deployment annotated') != -1, 'nginx-deployment created.'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') != -1, 'nginx-deployment-baseline workload exists'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted') != -1, 'Baseline and Canary workloads deleted'); - done(); - }); - - it('Run successfuly for promote with canary strategy when baseline resource does not exist', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment created') != -1, 'deployment is created'); - assert(tr.stdout.indexOf('Rollout status has been skipped for Deployment as only updateStartegy:\'RollingUpdate\' is allowed') != -1, 'deployment rollout status skipped'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77'); - assert(tr.stdout.indexOf('nginx-deployment annotated') != -1, 'nginx-deployment created.'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') == -1, 'nginx-deployment-baseline workload does not exist'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted') != -1, 'Canary workload deleted'); - done(); - }); - - it('Run successfuly for reject with canary strategy when baseline resource exists', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') != -1, 'nginx-deployment-baseline workload exists'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted') != -1, 'Baseline and Canary workloads deleted'); - done(); - }); - - it('Run successfuly for reject with canary strategy when baseline resource does not exist', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') == -1, 'nginx-deployment-baseline workload does not exist'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted') != -1, 'Canary workload deleted'); - done(); - }); - - it('Run should fail for reject with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run successfuly for delete with arguments', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - process.env[shared.TestEnvVars.arguments] = 'deployment nginx-deployment' - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.delete; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('deleted successfuly') != -1, 'Deleted successfuly'); - done(); - }); - - it('Run should fail for delete with no arguments', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.delete; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run should succeed with helm bake and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm3 bake and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm2 type (backward compat) with helm2 and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm2'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--name newReleaseName') > -1, 'bake should have overriden release name'); - done(); - }); - - it('Run should succeed with helm3 bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - done(tr.stderr); - }); - - it('Run should succeed with helm2 type (backward compat) and helm3 bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm2'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - done(tr.stderr); - }); - - it('Run should succeed with helm bake overriding release name and use default namespace when not found in endpoint either', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--name newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake overriding release name and use default namespace when not found in endpoint either', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake should override values with : correctly', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.overrides] = 'name:value:with:colons'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('--set name=value:with:colons') > -1, 'should have parsed the :s correctly'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm3 bake should override values with : correctly', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.overrides] = 'name:value:with:colons'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('--set name=value:with:colons') > -1, 'should have parsed the :s correctly'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake with image substituion', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should successfully create secret', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.createSecret; - process.env[shared.TestEnvVars.secretName] = 'secret'; - process.env[shared.TestEnvVars.secretType] = 'generic'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('delete secret') > -1, 'task should have deleted secret'); - assert(tr.stdout.indexOf('create secret') > -1, 'task should have created secret'); - assert(tr.stdout.indexOf('create secret') > tr.stdout.indexOf('delete secret'), 'delete secret should have been called before created secret'); - done(); - }); - - it('Run should scale', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.scale; - process.env[shared.TestEnvVars.kind] = 'replicaset'; - process.env[shared.TestEnvVars.replicas] = '1'; - process.env[shared.TestEnvVars.name] = 'r1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('scale replicaset/r1') > -1, 'task should have run scale command'); - done(); - }); - - it('Run should succeessfully patch', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.patch; - process.env[shared.TestEnvVars.kind] = 'replicaset'; - process.env[shared.TestEnvVars.mergeStrategy] = 'merge'; - process.env[shared.TestEnvVars.name] = 'r1'; - process.env[shared.TestEnvVars.patch] = 'somePatch'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - done(); - }); - - it('Check if error validations', (done: Mocha.Done) => { - try { - const execResults = [{ - code: 0, - stderr: 'Warning: your execution has some warnings' - } as IExecSyncResult]; - utils.checkForErrors(execResults, false); - } catch (ex) { - assert(!ex, 'shouldnt have thrown any error'); - } - try { - const execResults = [{ - code: 1, - stderr: 'error: your execution has some errors' - } as IExecSyncResult]; - utils.checkForErrors(execResults, false); - } catch (ex) { - assert(ex, 'shouldnt have thrown error'); - assert(ex.message === 'error: your execution has some errors', 'The thrown error should have matched'); - } - done(); - }); - - it('Run should successfully add container image tags', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'deployment-image-substitution.yaml'); - const deploymentFile = fs.readFileSync(testFile).toString(); - const deploymentObject = yaml.load(deploymentFile); - - updateImageDetails(deploymentObject, ['nginx:42', 'mysql:8.0', 'imagewithhyphen:1', 'myacr.azurecr.io/myimage:1', 'myimagewithcomment:1', 'nginx-init:42.1', 'myacr.azurecr.io/folder/image-a:1', 'myacr.azurecr.io/folder/image-b:2','mcr.microsoft.com/dotnet/core/sdk:1','mcr.microsoft.com/mssql/server@sha256:46c98da652ed6c3b85b9cdaa611781bdd543668fe730f807eb09adc5bb1e8c03']); - assert(deploymentObject.spec.template.spec.containers[0].image === 'nginx:42', 'nginx image not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[2].image === 'mysql:8.0', 'untagged image not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[3].image === 'myacr.azurecr.io/myimage:1', 'untagged image with registry not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[4].image === 'myimagewithcomment:1', 'untagged image with comment not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[5].image === 'imagewithhyphen:1', 'manifest regex should work correctly'); - assert(deploymentObject.spec.template.spec.containers[6].image === 'myacr.azurecr.io/folder/image-a:1', 'untagged image with common folder not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[7].image === 'myacr.azurecr.io/folder/image-b:2', 'untagged image with common folder not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[8].image === 'mcr.microsoft.com/dotnet/core/sdk:1', 'sha256 image reference should be replaced'); - assert(deploymentObject.spec.template.spec.containers[9].image === 'mcr.microsoft.com/mssql/server@sha256:46c98da652ed6c3b85b9cdaa611781bdd543668fe730f807eb09adc5bb1e8c03', 'sha256 image reference should be used as replacement'); - assert(deploymentObject.spec.template.spec.initContainers[0].image === 'nginx-init:42.1', 'nginx-init image not tagged correctly'); - done(); - }); - - it('Run should bake docker-compose files using kompose', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = 'dockerComposeFilePath'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('Kubernetes files created') > 0, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should bake docker-compose files using kompose with image substituion', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = 'dockerComposeFilePath'; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('Kubernetes files created') > 0, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should fail when docker-compose file path is not supplied', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = ''; - tr.run(); - assert(tr.failed, 'task should have failed'); - assert(tr.stdout.indexOf('Input required: dockerComposeFile') > 0, 'proper error message should have been thrown'); - done(); - }); - - it('Run should successfully add image pull secrets to a cron job', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'cronjob.yaml'); - const cronJobFile = fs.readFileSync(testFile).toString(); - const cronJobObject = yaml.load(cronJobFile); - updateImagePullSecrets(cronJobObject, ['privaterepo-secret'], true); - assert(cronJobObject.spec.jobTemplate.spec.template.spec.imagePullSecrets[0].name === 'privaterepo-secret', 'should have updated the image pull secret correctly'); - done(); - }); - - it('Run should successfully add image pull secrets to a job', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'job.yaml'); - const jobFile = fs.readFileSync(testFile).toString(); - const jobObject = yaml.load(jobFile); - updateImagePullSecrets(jobObject, ['privaterepo-secret'], true); - assert(jobObject.spec.template.spec.imagePullSecrets[0].name === 'privaterepo-secret', 'should have updated the image pull secret correctly'); - done(); - }); - - it('Kustomize bake should fail when kubectl version is lower than v1.14', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env.KubectlMinorVersion = '13'; - tr.run(); - assert(tr.failed, 'task should have failed'); - assert(tr.stdout.indexOf('KubectlShouldBeUpgraded') > 0, 'proper error message should have been thrown'); - done(); - }); - - it('Kustomize bake should pass when kubectl version is greater than or equal to v1.14', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env.KubectlMinorVersion = '14'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdOutContained('kustomize kustomizationPath'), 'task should have invoked tool: kustomize'); - done(); - }); - - it('Kustomize bake should pass with image substituition', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1\nalpine'; - process.env.KubectlMinorVersion = '14'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdOutContained('kustomize kustomizationPath'), 'task should have invoked tool: kustomize'); - done(); - }); -}); diff --git a/_generated/KubernetesManifestV0/Tests/TestSetup.ts b/_generated/KubernetesManifestV0/Tests/TestSetup.ts deleted file mode 100644 index ebd647b1b992..000000000000 --- a/_generated/KubernetesManifestV0/Tests/TestSetup.ts +++ /dev/null @@ -1,386 +0,0 @@ -import * as ma from 'azure-pipelines-task-lib/mock-answer'; -import * as tmrm from 'azure-pipelines-task-lib/mock-run'; -import * as path from 'path'; - -import * as shared from './TestShared'; - -const buildNumber = '1'; -const buildId = '1'; -const teamProject = 'project1'; -const collectionId = 'collection1'; -const definitionName = 'test'; -const definitionId = '123'; -const teamFoundationCollectionUri = 'https://abc.visualstudio.com/'; -const jobName = 'jobName'; - -const testnamespaceWorkingDirectory: string = shared.formatPath('a/w'); -const kubectlPath = shared.formatPath('newUserDir/kubectl.exe'); - -const taskPath = path.join(__dirname, '../src', 'run.js'); -const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); - -tr.setInput('kubernetesServiceConnection', 'kubernetesConnection'); -tr.setInput('namespace', process.env[shared.TestEnvVars.namespace] || ''); -tr.setInput('action', process.env[shared.TestEnvVars.action] || 'deploy'); -tr.setInput('strategy', process.env[shared.TestEnvVars.strategy] || 'None'); -tr.setInput('percentage', process.env[shared.TestEnvVars.percentage] || ''); -tr.setInput('manifests', process.env[shared.TestEnvVars.manifests] || shared.ManifestFilesPath); -tr.setInput('containers', process.env[shared.TestEnvVars.containers] || ''); -tr.setInput('imagePullSecrets', process.env[shared.TestEnvVars.imagePullSecrets] || ''); -tr.setInput('renderType', process.env[shared.TestEnvVars.renderType] || ''); -tr.setInput('helmChart', process.env[shared.TestEnvVars.helmChart] || ''); -tr.setInput('releaseName', process.env[shared.TestEnvVars.releaseName] || ''); -tr.setInput('overrideFiles', process.env[shared.TestEnvVars.overrideFiles] || ''); -tr.setInput('overrides', process.env[shared.TestEnvVars.overrides] || ''); -tr.setInput('resourceToPatch', process.env[shared.TestEnvVars.resourceToPatch] || ''); -tr.setInput('resourceFileToPatch', process.env[shared.TestEnvVars.resourceFileToPatch] || ''); -tr.setInput('kind', process.env[shared.TestEnvVars.kind] || ''); -tr.setInput('name', process.env[shared.TestEnvVars.name] || ''); -tr.setInput('replicas', process.env[shared.TestEnvVars.replicas] || ''); -tr.setInput('mergeStrategy', process.env[shared.TestEnvVars.mergeStrategy] || ''); -tr.setInput('arguments', process.env[shared.TestEnvVars.arguments] || ''); -tr.setInput('patch', process.env[shared.TestEnvVars.patch] || ''); -tr.setInput('secretName', process.env[shared.TestEnvVars.secretName] || ''); -tr.setInput('secretType', process.env[shared.TestEnvVars.secretType] || ''); -tr.setInput('dockerComposeFile', process.env[shared.TestEnvVars.dockerComposeFile] || ''); -tr.setInput('kustomizationPath', process.env[shared.TestEnvVars.kustomizationPath] || ''); -tr.setInput('baselineAndCanaryReplicas', process.env[shared.TestEnvVars.baselineAndCanaryReplicas] || '0'); -tr.setInput('trafficSplitMethod', process.env[shared.TestEnvVars.trafficSplitMethod]); - -process.env.SYSTEM_DEFAULTWORKINGDIRECTORY = testnamespaceWorkingDirectory; -process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = teamFoundationCollectionUri; -process.env.SYSTEM_TEAMPROJECT = teamProject; -process.env.SYSTEM_COLLECTIONID = collectionId; -process.env.SYSTEM_DEFINITIONID = definitionId; - -process.env.BUILD_BUILDID = buildId; -process.env.BUILD_BUILDNUMBER = buildNumber; -process.env.BUILD_DEFINITIONNAME = definitionName; - -process.env.AGENT_JOBNAME = jobName; -process.env.SYSTEM_HOSTTYPE = 'build'; - -process.env[shared.TestEnvVars.manifests] = process.env[shared.TestEnvVars.manifests] || shared.ManifestFilesPath; -process.env.ENDPOINT_DATA_kubernetesConnection_AUTHORIZATIONTYPE = process.env[shared.TestEnvVars.endpointAuthorizationType] || shared.AuthorizationType.Kubeconfig; -process.env.ENDPOINT_AUTH_PARAMETER_kubernetesConnection_KUBECONFIG = '{"apiVersion":"v1", "clusters": [{"cluster": {"insecure-skip-tls-verify":"true", "server":"https://5.6.7.8", "name" : "scratch"}}], "contexts": [{"context" : {"cluster": "scratch", "namespace" : "default", "user": "experimenter", "name" : "exp-scratch"}], "current-context" : "exp-scratch", "kind": "Config", "users" : [{"user": {"password": "regpassword", "username" : "test"}]}'; - -process.env.ENDPOINT_DATA_kubernetesConnection_NAMESPACE = 'testnamespace'; - -if (process.env.RemoveNamespaceFromEndpoint) { - process.env.ENDPOINT_DATA_kubernetesConnection_NAMESPACE = ''; -} - -const a: ma.TaskLibAnswers = { - 'checkPath': { - 'helm': true, - 'kompose': true, - 'dockerComposeFilePath': true - }, - 'exec': { - }, - 'findMatch': {}, - 'which': { - 'helm': 'helm', - 'kompose': 'kompose' - } -}; - -if (process.env[shared.TestEnvVars.action] === 'bake') { - let namespace = process.env[shared.TestEnvVars.namespace] || 'testnamespace'; - if (process.env.RemoveNamespaceFromEndpoint) { - namespace = 'default'; - } - const command = `helm template ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace}`; - const commandWithReleaseNameOverride = `helm template ${process.env[shared.TestEnvVars.helmChart]} --name ${process.env[shared.TestEnvVars.releaseName]} --namespace ${namespace}`; - const commandWithReleaseNameOverride3 = `helm template ${process.env[shared.TestEnvVars.releaseName]} ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace}`; - - a.exec[command] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[commandWithReleaseNameOverride] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[commandWithReleaseNameOverride3] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[`helm template ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace} --set name=value:with:colons`] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - - const kubectlVersion = `${kubectlPath} version --client=true -o json`; - a.exec[kubectlVersion] = { - 'code': 0, - stdout: `{ - "clientVersion": { - "major": "1", - "minor": ${process.env.KubectlMinorVersion}, - "gitVersion": "v1.13.0" - } - }` - }; - - const kustomizeCommand = `${kubectlPath} kustomize ${process.env[shared.TestEnvVars.kustomizationPath]}`; - a.exec[kustomizeCommand] = { - 'code': 0, - stdout: 'Kustomization files created' - }; - - const komposeCommand = `kompose convert -f ${process.env[shared.TestEnvVars.dockerComposeFile]} -o ${path.join('tempdirectory', 'baked-template-random.yaml')}`; - a.exec[komposeCommand] = { - 'code': 0, - stdout: 'Kubernetes files created' - }; -} - -const helmVersionCommand = 'helm version --short'; -if (process.env[shared.TestEnvVars.helmVersion] === 'v3') { - a.exec[helmVersionCommand] = { - 'code': 0, - stdout: 'v3.0.0+ge29ce2a' - }; -} else { - a.exec[helmVersionCommand] = { - 'code': 0, - stdout: 'v2.0.0+da768e' - }; -} - -if (process.env[shared.TestEnvVars.isKubectlPresentOnMachine] && JSON.parse(process.env[shared.TestEnvVars.isKubectlPresentOnMachine])) { - a.which.kubectl = kubectlPath; -} - -a.checkPath[kubectlPath] = true; -a.findMatch[process.env[shared.TestEnvVars.manifests]] = [process.env[shared.TestEnvVars.manifests]]; - -if (process.env[shared.TestEnvVars.isStableDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isStableDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{"apiVersion": "extensions\/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines\/run": "11937a13",\r\n "azure-pipelines\/runuri": "http:\/\/nishu-65\/DefaultCollection\/_build\/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines\/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines\/pipeline": "\\"project1\\"",\r\n "azure-pipelines\/project": "project1",\r\n "deployment.kubernetes.io\/revision": "1",\r\n "kubectl.kubernetes.io\/last-applied-configuration": "{\\"apiVersion\\":\\"apps\/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{},\\"labels\\":{\\"app\\":\\"nginx\\"},\\"name\\":\\"nginx-deployment\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":3,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx"\r\n },\r\n "name": "nginx-deployment",\r\n "namespace": "default",\r\n "resourceVersion": "125935",\r\n "selfLink": "\/apis\/extensions\/v1beta1\/namespaces\/default\/deployments\/nginx-deployment",\r\n "uid": "e2e3e6c2-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 3,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 3,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "lastUpdateTime": "2019-03-22T13:10:55Z",\r\n "message": "ReplicaSet \\"nginx-deployment-5c689d88bb\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-23T01:31:12Z",\r\n "lastUpdateTime": "2019-03-23T01:31:12Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 3,\r\n "replicas": 3,\r\n "updatedReplicas": 3\r\n }\r\n}\r\n' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions "nginx-deployment" not found' - }; -} - -if (process.env[shared.TestEnvVars.isCanaryDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isCanaryDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-canary -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "extensions/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/run": "11937a13",\r\n "azure-pipelines/runuri": "http://nishu-65/DefaultCollection/_build/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines/pipeline": "\\"project1\\"",\r\n "azure-pipelines/project": "project1",\r\n "azure-pipelines/version": "canary",\r\n "deployment.kubernetes.io/revision": "1",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"apps/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{\\"azure-pipelines/version\\":\\"canary\\"},\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"},\\"name\\":\\"nginx-deployment-canary\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":1,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-28T08:36:36Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n },\r\n "name": "nginx-deployment-canary",\r\n "namespace": "default",\r\n "resourceVersion": "911614",\r\n "selfLink": "/apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment-canary",\r\n "uid": "9949c869-5134-11e9-8617-8a66bb81ec3a"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 1,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "/dev/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 1,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:40Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:36Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "ReplicaSet \\"nginx-deployment-canary-6b967f76d6\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 1,\r\n "replicas": 1,\r\n "updatedReplicas": 1\r\n }\r\n}' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-canary -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions "nginx-deployment-canary" not found' - }; -} - -if (process.env[shared.TestEnvVars.isBaselineDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isBaselineDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-baseline -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "extensions/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/run": "11937a13",\r\n "azure-pipelines/runuri": "http://nishu-65/DefaultCollection/_build/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines/pipeline": "\\"project1\\"",\r\n "azure-pipelines/project": "project1",\r\n "azure-pipelines/version": "baseline",\r\n "deployment.kubernetes.io/revision": "1",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"apps/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{\\"azure-pipelines/version\\":\\"baseline\\"},\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"},\\"name\\":\\"nginx-deployment-baseline\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":1,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-28T08:36:36Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n },\r\n "name": "nginx-deployment-baseline",\r\n "namespace": "default",\r\n "resourceVersion": "911614",\r\n "selfLink": "/apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment-baseline",\r\n "uid": "9949c869-5134-11e9-8617-8a66bb81ec3a"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 1,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "/dev/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 1,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:40Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:36Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "ReplicaSet \\"nginx-deployment-baseline-6b967f76d6\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 1,\r\n "replicas": 1,\r\n "updatedReplicas": 1\r\n }\r\n}' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-baseline -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions nginx-deployment-baseline not found' - }; -} - -a.exec[`${kubectlPath} apply -f ${process.env[shared.TestEnvVars.manifests]} --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment created.' -}; - -a.exec[`${kubectlPath} apply -f ${shared.CanaryManifestFilesPath},${shared.BaselineManifestFilesPath} --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment-canary created. deployment.extensions/nginx-deployment-baseline created ' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment-canary" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment-baseline" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status ${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} --namespace testnamespace`] = { - 'code': 0, - 'stdout': `${process.env[shared.TestEnvVars.kind]} "${process.env[shared.TestEnvVars.name]}" successfully rolled out` -}; - -a.exec[`${kubectlPath} patch ${process.env[shared.TestEnvVars.kind]} ${process.env[shared.TestEnvVars.name]} --type=${process.env[shared.TestEnvVars.mergeStrategy]} -p ${process.env[shared.TestEnvVars.patch]} --namespace ${process.env[shared.TestEnvVars.namespace] || 'testnamespace'}`] = { - 'code': 0, - 'stdout': `${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} patched` -}; - -a.exec[`${kubectlPath} get pods -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "v1",\r\n "kind": "List",\r\n "metadata": {\r\n "resourceVersion": "",\r\n "selfLink": ""\r\n },\r\n "items": [\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-btlgf",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "49418",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-btlgf",\r\n "uid": "e2f4690c-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-0",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/5e87acbad211218f3b1e383f2a83bc300095a032e87540c201e8e413b0518eeb",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:53Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.4",\r\n "phase": "Running",\r\n "podIP": "10.240.0.15",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n },\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-gnwrt",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "125932",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-gnwrt",\r\n "uid": "e2ece835-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-1",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/a2bf617633e412760806e06e02dc5f81b5dad6f4f5ce8fe17955cdf72013ba04",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:53Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.35",\r\n "phase": "Running",\r\n "podIP": "10.240.0.43",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n },\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-qmh97",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "49429",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-qmh97",\r\n "uid": "e2f4630d-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-2",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:55Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:55Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/3509c82a27b63f7fdb93746a74cb91862126c2cb66bae307904b2a89dcdf7152",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:54Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.66",\r\n "phase": "Running",\r\n "podIP": "10.240.0.79",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n }\r\n ]\r\n}' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment-canary' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment-baseline' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-canary nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-canary" deleted' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-baseline" deleted' -}; - -a.exec[`${kubectlPath} delete secret secret --namespace testnamespace`] = { - code: 0, - stdout: 'deleted secret' -} - -a.exec[`${kubectlPath} create secret generic secret --namespace testnamespace`] = { - code: 0, - stdout: 'created secret' -} - -a.exec[`${kubectlPath} scale ${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} --replicas=${process.env[shared.TestEnvVars.replicas]} --namespace testnamespace`] = { - code: 0, - stdout: 'created secret' -} - -a.exec[`${kubectlPath} get service/nginx-service -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "v1",\r\n "kind": "Service",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/jobName": "Agent phase",\r\n "azure-pipelines/org": "https://codedev.ms/anchauh/",\r\n "azure-pipelines/pipeline": "aksCd-153 - 64 - CD",\r\n "azure-pipelines/pipelineId": "40",\r\n "azure-pipelines/project": "nginx",\r\n "azure-pipelines/run": "41",\r\n "azure-pipelines/runuri": "https://codedev.ms/anchauh/nginx/_releaseProgress?releaseId=41",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"v1\\",\\"kind\\":\\"Service\\",\\"metadata\\":{\\"annotations\\":{},\\"labels\\":{\\"app\\":\\"nginx\\"},\\"name\\":\\"nginx-service\\",\\"namespace\\":\\"testnamespace\\"},\\"spec\\":{\\"ports\\":[{\\"name\\":\\"http\\",\\"port\\":80,\\"protocol\\":\\"TCP\\",\\"targetPort\\":\\"http\\"}],\\"selector\\":{\\"app\\":\\"nginx\\"},\\"type\\":\\"LoadBalancer\\"}}\\n"\r\n },\r\n "creationTimestamp": "2019-09-11T10:09:09Z",\r\n "labels": {\r\n "app": "nginx"\r\n },\r\n "name": "nginx-service",\r\n "namespace": "testnamespace",\r\n "resourceVersion": "8754335",\r\n "selfLink": "/api/v1/namespaces/testnamespace/services/nginx-service",\r\n "uid": "31f02713-d47c-11e9-9448-16b93c17a2b4"\r\n },\r\n "spec": {\r\n "clusterIP": "10.0.157.189",\r\n "externalTrafficPolicy": "Cluster",\r\n "ports": [\r\n {\r\n "name": "http",\r\n "nodePort": 32112,\r\n "port": 80,\r\n "protocol": "TCP",\r\n "targetPort": "http"\r\n }\r\n ],\r\n "selector": {\r\n "app": "nginx"\r\n },\r\n "sessionAffinity": "***",\r\n "type": "LoadBalancer"\r\n },\r\n "status": {\r\n "loadBalancer": {\r\n "ingress": [\r\n {\r\n "ip": "104.211.243.77"\r\n }\r\n ]\r\n }\r\n }\r\n }' -} - -a.exec[`${kubectlPath} version -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "clientVersion": {\r\n "major": "1",\r\n "minor": "14",\r\n "gitVersion": "v1.14.8",\r\n "gitCommit": "211047e9a1922595eaa3a1127ed365e9299a6c23",\r\n "gitTreeState": "clean",\r\n "buildDate": "2019-10-15T12:11:03Z",\r\n "goVersion": "go1.12.10",\r\n "compiler": "gc",\r\n "platform": "windows/amd64"\r\n },\r\n "serverVersion": {\r\n "major": "1",\r\n "minor": "12",\r\n "gitVersion": "v1.12.7",\r\n "gitCommit": "6f482974b76db3f1e0f5d24605a9d1d38fad9a2b",\r\n "gitTreeState": "clean",\r\n "buildDate": "2019-03-25T02:41:57Z",\r\n "goVersion": "go1.10.8",\r\n "compiler": "gc",\r\n "platform": "linux/amd64"\r\n }\r\n}' -} - -const pipelineAnnotations: string = [ - `azure-pipelines/run=${buildNumber}`, - `azure-pipelines/pipeline="${definitionName}"`, - `azure-pipelines/pipelineId="${definitionId}"`, - `azure-pipelines/jobName="${jobName}"`, - `azure-pipelines/runuri=${teamFoundationCollectionUri}${teamProject}/_build/results?buildId=${buildId}`, - `azure-pipelines/project=${teamProject}`, - `azure-pipelines/org=${teamFoundationCollectionUri}` -].join(' '); -const annotateCanaryCmd = `${kubectlPath} annotate -f ${shared.CanaryManifestFilesPath},${shared.BaselineManifestFilesPath} ` + pipelineAnnotations + ` --overwrite --namespace testnamespace`; - -a.exec[annotateCanaryCmd] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment-canary annotated. deployment.apps/nginx-deployment-baseline annotated' -}; - -a.exec[`${kubectlPath} annotate ${process.env[shared.TestEnvVars.kind]} ${process.env[shared.TestEnvVars.name]} ${pipelineAnnotations} --overwrite --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'annotated' -}; - -const annotateStableCmd = `${kubectlPath} annotate -f ${process.env[shared.TestEnvVars.manifests]} ` + pipelineAnnotations + ` --overwrite --namespace testnamespace`; -a.exec[annotateStableCmd] = { - 'code': 0, - 'stdout': 'deployment.extensions/nginx-deployment annotated' -}; - -if (process.env[shared.TestEnvVars.arguments]) { - const deleteCmd = `${kubectlPath} delete ${process.env[shared.TestEnvVars.arguments]} --namespace testnamespace`; - a.exec[deleteCmd] = { - 'code': 0, - 'stdout': 'deleted successfuly' - }; -} - - -tr.setAnswers(a); -tr.registerMock('azure-pipelines-task-lib/toolrunner', require('azure-pipelines-task-lib/mock-toolrunner')); - -// Create mock for fs module -import * as fs from 'fs'; -const fsClone = Object.assign({}, fs); -fsClone.existsSync = function (filePath) { - switch (filePath) { - case kubectlPath: - if (JSON.parse(process.env[shared.TestEnvVars.isKubectlPresentOnMachine])) { - return true; - } else { - return false; - } - default: - return fs.existsSync(filePath); - } -}; - -fsClone.writeFileSync = function (path, data) { - console.log(`wrote to ${path}`); -}; - -tr.registerMock('fs', fsClone); - -import * as fh from '../src/utils/FileHelper'; - -tr.registerMock('../utils/FileHelper', { - writeObjectsToFile: function (inputObjects: any[]) { - const newFilePaths = []; - - inputObjects.forEach(inputObject => { - if (!!inputObject && !!inputObject.metadata && !!inputObject.metadata.name) { - if (inputObject.metadata.name.indexOf('canary') !== -1) { - newFilePaths.push(shared.CanaryManifestFilesPath); - } else if (inputObject.metadata.name.indexOf('baseline') !== -1) { - newFilePaths.push(shared.BaselineManifestFilesPath); - } - } - }); - - if (newFilePaths.length === 0) { - console.log(shared.ManifestFilesPath); - newFilePaths.push(shared.ManifestFilesPath); - } - return newFilePaths; - }, - getTempDirectory: function () { - return 'tempdirectory'; - }, - getNewUserDirPath: fh.getNewUserDirPath, - ensureDirExists: fh.ensureDirExists, - assertFileExists: fh.assertFileExists, - writeManifestToFile: fh.writeManifestToFile -}); - -tr.registerMock('uuid/v4', function () { - return 'random'; -}); - -tr.run(); diff --git a/_generated/KubernetesManifestV0/Tests/TestShared.ts b/_generated/KubernetesManifestV0/Tests/TestShared.ts deleted file mode 100644 index 3c26d0d73e66..000000000000 --- a/_generated/KubernetesManifestV0/Tests/TestShared.ts +++ /dev/null @@ -1,90 +0,0 @@ -import path = require('path'); - -export let TestEnvVars = { - operatingSystem: "__operating_system__", - connectionType: "__connectionType__", - kubernetesServiceEndpoint: "__kubernetesServiceEndpoint__", - namespace: "__namespace__", - action: "__action__", - strategy: "__strategy__", - percentage: "__percentage__", - configuration: "__configuration__", - manifests: "__manifests__", - containers: "__containers__", - imagePullSecrets: "__imagePullSecrets__", - dockerComposeFile: "__dockerComposeFile__", - kustomizationPath: "__kustomizationPath__", - renderType: "__renderType__", - releaseName: "__releaseName__", - helmChart: "__helmChart__", - helmVersion: "__helmVersion__", - secretName: "__secretName__", - secretType: "__secretType__", - overrideFiles: "__overrideFiles__", - overrides: "__overrides__", - resourceToPatch: "__resourceToPatch__", - resourceFileToPatch: "__resourceFileToPatch__", - kind: "__kind__", - name: "__name__", - replicas: "__replicas__", - mergeStrategy: "__mergeStrategy__", - arguments: "__arguments__", - patch: "__patch__", - resourceName: "__resourceName__", - isKubectlPresentOnMachine: "__isKubectlPresentOnMachine__", - endpointAuthorizationType: "__endpointAuthorizationType__", - isStableDeploymentPresent: "__isStableDeploymentPresent__", - isCanaryDeploymentPresent: "__isCanaryDeploymentPresent__", - isBaselineDeploymentPresent: "__isBaselineDeploymentPresent__", - baselineAndCanaryReplicas: "__baselineAndCanaryReplicas__", - trafficSplitMethod: "__trafficSplitMethod__" -}; - -export let OperatingSystems = { - Windows: "Windows", - Other: "Other" -}; - -export let AuthorizationType = { - Kubeconfig : "Kubeconfig", - ServiceAccount : "ServiceAccount", - AzureSubscription : "AzureSubscription" -}; - -export let Actions = { - bake: "bake", - createSecret: "createSecret", - deploy: "deploy", - patch: "patch", - scale: "scale", - delete: "delete", - reject: "reject", - promote: "promote" -}; - -export let Strategy = { - canary: "canary", - none: "none" -}; - -export let TrafficSplitMethod = { - pod: "pod", - smi: "smi" -}; - -export const ManifestFilesPath = path.join(__dirname, 'manifests', 'deployment.yaml'); -export const CanaryManifestFilesPath = path.join(__dirname, 'manifests', 'deployment-canary.yaml'); -export const BaselineManifestFilesPath = path.join(__dirname, 'manifests', 'deployment-baseline.yaml'); -export const DeleteCmdArguments = "deployment nginx-deployment"; - -/** - * Formats the given path to be appropriate for the operating system. - * @param canonicalPath A non-rooted path using a forward slash (/) as a directory separator. - */ -export function formatPath(canonicalPath: string) { - if (process.env[TestEnvVars.operatingSystem] === OperatingSystems.Windows) { - return "F:\\" + canonicalPath.replace('/', '\\'); - } else { - return "/" + canonicalPath; - } -}; \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/manifests/cronjob.yaml b/_generated/KubernetesManifestV0/Tests/manifests/cronjob.yaml deleted file mode 100644 index e2e4e8d5df09..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/cronjob.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: batch/v1beta1 -kind: CronJob -metadata: - name: test -spec: - schedule: "*/1 * * * *" - jobTemplate: - spec: - template: - spec: - containers: - - name: hello - image: privaterepo/busybox - command: ["echo", "Hello world"] - restartPolicy: Never \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/manifests/deployment-baseline.yaml b/_generated/KubernetesManifestV0/Tests/manifests/deployment-baseline.yaml deleted file mode 100644 index 7edb156ab326..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/deployment-baseline.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment-baseline - labels: - app: nginx -spec: - replicas: 1 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/manifests/deployment-canary.yaml b/_generated/KubernetesManifestV0/Tests/manifests/deployment-canary.yaml deleted file mode 100644 index 0cc843c520a9..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/deployment-canary.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment-canary - labels: - app: nginx -spec: - replicas: 1 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/manifests/deployment-image-substitution.yaml b/_generated/KubernetesManifestV0/Tests/manifests/deployment-image-substitution.yaml deleted file mode 100644 index 3c0c8cae8581..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/deployment-image-substitution.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 - - name: edgecase - image: nginx-image:1.7.9 - - name: untagged - image: mysql - - name: untaggedonacr - image: myacr.azurecr.io/myimage - - name: untaggedwithcomment - image: myimagewithcomment # this is a comment - - image: imagewithhyphen # this is a comment - name: imagewithhyphen - - name: untaggedinsamefoldera - image: myacr.azurecr.io/folder/image-a - - name: untaggedinsamefolderb - image: myacr.azurecr.io/folder/image-b - - name: imagewithsha256 - image: mcr.microsoft.com/dotnet/core/sdk@sha256:1d5dd575dfebb6ed71d973b6a0be37f424306eda337a7dab09b6c0f53dffc2e3 - - name: imagetoreplacewithsha256 - image: mcr.microsoft.com/mssql/server:2019-CU9-ubuntu-16.04 - imagePullSecrets: - - name: key1 - initContainers: - - name: nginx-init-container - image: nginx-init:0.1.0 diff --git a/_generated/KubernetesManifestV0/Tests/manifests/deployment.yaml b/_generated/KubernetesManifestV0/Tests/manifests/deployment.yaml deleted file mode 100644 index a04677d934a2..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - updateStrategy: - type: OnDelete - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 - imagePullSecrets: - - name: key1 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: nginx-service - labels: - app: nginx -spec: - type: LoadBalancer - ports: - - port: 80 - targetPort: http - protocol: TCP - name: http - selector: - app: nginx \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/Tests/manifests/job.yaml b/_generated/KubernetesManifestV0/Tests/manifests/job.yaml deleted file mode 100644 index 7a125470b8ab..000000000000 --- a/_generated/KubernetesManifestV0/Tests/manifests/job.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: process-item - labels: - jobgroup: jobexample -spec: - template: - metadata: - name: jobexample - labels: - jobgroup: jobexample - spec: - containers: - - name: c - image: privaterepo/busybox - command: ["sh", "-c", "echo Processing item"] - restartPolicy: Never \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/ThirdPartyNotices.txt b/_generated/KubernetesManifestV0/ThirdPartyNotices.txt deleted file mode 100644 index 6406f2265a1a..000000000000 --- a/_generated/KubernetesManifestV0/ThirdPartyNotices.txt +++ /dev/null @@ -1,1668 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -The Kubernetes task for Azure Pipelines or Team Foundation Server incorporates components from the projects listed below. Microsoft licenses these components to you under the Microsoft software license terms. The original copyright notices and the licenses under which Microsoft received such components are set forth below for informational purposes. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. - - -1. argparse (https://github.com/nodeca/argparse) -2. array-union (https://github.com/sindresorhus/array-union) -3. array-uniq (https://github.com/sindresorhus/array-uniq) -4. arrify (https://github.com/sindresorhus/arrify) -5. balanced-match (https://github.com/juliangruber/balanced-match) -6. brace-expansion (https://github.com/juliangruber/brace-expansion) -7. buffer-equal-constant-time (https://github.com/salesforce/buffer-equal-constant-time) -8. concat-map (https://github.com/substack/node-concat-map) -9. del (https://github.com/sindresorhus/del) -10. esprima (https://github.com/ariya/esprima) -11. fs.realpath (https://github.com/isaacs/fs.realpath) -12. Glob (https://github.com/isaacs/node-glob) -13. globby (https://github.com/sindresorhus/globby) -14. hoek (https://github.com/hapijs/hoek) -15. inflight (https://github.com/npm/inflight) -16. inherits (https://github.com/isaacs/inherits) -17. isemail (https://github.com/hapijs/isemail) -18. is-path-cwd (https://github.com/sindresorhus/is-path-cwd) -19. is-path-in-cwd (https://github.com/sindresorhus/is-path-in-cwd) -20. is-path-inside (https://github.com/sindresorhus/is-path-inside) -21. joi (https://github.com/hapijs/joi) -22. jsonwebtoken (https://github.com/auth0/node-jsonwebtoken) -23. js-yaml (https://github.com/nodeca/js-yaml) -24. lodash.once (https://github.com/lodash/lodash) -25. minimatch (https://github.com/isaacs/minimatch) -26. Mockery (https://github.com/mfncooper/mockery) -27. Moment (https://github.com/moment/moment) -28. ms (https://github.com/zeit/ms) -29. node-ecdsa-sig-formatter (https://github.com/Brightspace/node-ecdsa-sig-formatter) -30. node-jwa (https://github.com/brianloveswords/node-jwa) -31. node-jws (https://github.com/brianloveswords/node-jws) -26. node-uuid (https://github.com/broofa/node-uuid) -27. object-assign (https://github.com/sindresorhus/object-assign) -28. once (https://github.com/isaacs/once) -29. OpenSSL (http://www.openssl.org) -30. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) -31. path-is-inside (https://github.com/domenic/path-is-inside) -32. pify (https://github.com/sindresorhus/pify) -33. pinkie (https://github.com/floatdrop/pinkie) -34. pinkie-promise (https://github.com/floatdrop/pinkie-promise) -35. q (https://github.com/kriskowal/q) -36. Rimraf (https://github.com/isaacs/rimraf) -37. safe-buffer (https://github.com/feross/safe-buffer) -38. sax js (https://github.com/isaacs/sax-js) -39. semver (https://github.com/npm/node-semver/) -40. ShellJS (https://github.com/shelljs/shelljs) - Includes:wrench-js -41. semver-compare (https://github.com/substack/semver-compare) -42. sprintf-js (https://github.com/alexei/sprintf.js) -43. topo (https://github.com/hapijs/topo) -44. tunnel (https://github.com/koichik/node-tunnel) -45. typed-rest-client (https://github.com/Microsoft/typed-rest-client) -46. underscore (https://github.com/jashkenas/underscore) -47. vso-node-api (https://github.com/Microsoft/vsts-node-api) -48. Azure-Pipelines-Task-Lib (https://github.com/Microsoft/azure-pipelines-task-lib) -49. wrappy (https://github.com/npm/wrappy) -50. xtend (https://github.com/Raynos/xtend) - -%% argparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (C) 2012 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF argparse NOTICES, INFORMATION, AND LICENSE - -%% array-union NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF array-union NOTICES, INFORMATION, AND LICENSE - -%% array-uniq NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF array-uniq NOTICES, INFORMATION, AND LICENSE - -%% arrify NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF arrify NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013, GoInstant Inc., a salesforce.com company -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of salesforce.com, nor GoInstant, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE - -%% del NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF del NOTICES, INFORMATION, AND LICENSE - -%% esprima NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF esprima NOTICES, INFORMATION, AND LICENSE - -%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license, as follows: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -========================================= -END OF fs.realpath NOTICES, INFORMATION, AND LICENSE - -%% Glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF Glob NOTICES, INFORMATION, AND LICENSE - -%% globby NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF globby NOTICES, INFORMATION, AND LICENSE - -%% hoek NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - -Copyright (c) 2011-2014, Walmart and other contributors. -Copyright (c) 2011, Yahoo Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/hapi/graphs/contributors -Portions of this project were initially based on the Yahoo! Inc. Postmile project, -published at https://github.com/yahoo/postmile. -========================================= -Includes code from Deep-eql - -Copyright (c) 2013 Jake Luer jake@alogicalparadox.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF hoek NOTICES, INFORMATION, AND LICENSE - -%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inflight NOTICES, INFORMATION, AND LICENSE - -%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inherits NOTICES, INFORMATION, AND LICENSE - -%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2008-2011, Dominic Sayers -Copyright (c) 2013-2014, GlobeSherpa -Copyright (c) 2014-2015, Eli Skeggs - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -- Neither the name of Dominic Sayers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF isemail NOTICES, INFORMATION, AND LICENSE - -%% is-path-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-cwd NOTICES, INFORMATION, AND LICENSE - -%% is-path-in-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-in-cwd NOTICES, INFORMATION, AND LICENSE - -%% is-path-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-inside NOTICES, INFORMATION, AND LICENSE - -%% joi NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/joi/graphs/contributors -========================================= -END OF joi NOTICES, INFORMATION, AND LICENSE - -%% jsonwebtoken NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2015 Auth0, Inc. (http://auth0.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF jsonwebtoken NOTICES, INFORMATION, AND LICENSE - -%% js-yaml NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF js-yaml NOTICES, INFORMATION, AND LICENSE - -%% lodash.once NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. -========================================= -END OF lodash.once NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following - terms: - - MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Moment NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -Files with code from Closure - -Copyright (c) 2006 The Closure Library Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -========================================= -END OF Moment NOTICES, INFORMATION, AND LICENSE - -%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (c) 2014 Guillermo Rauch -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the Software), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF ms NOTICES, INFORMATION, AND LICENSE - -%% node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright 2015 D2L Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -========================================= -END OF node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE - -%% node-jwa NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF node-jwa NOTICES, INFORMATION, AND LICENSE - -%% node-jws NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF node-jws NOTICES, INFORMATION, AND LICENSE - -%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF node-uuid NOTICES, INFORMATION, AND LICENSE - -%% object-assign NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF object-assign NOTICES, INFORMATION, AND LICENSE - -%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF once NOTICES, INFORMATION, AND LICENSE - -%% OpenSSL NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/) - * - * 4. The names OpenSSL Toolkit and OpenSSL Project must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called OpenSSL - * nor may OpenSSL appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/) - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com) - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * This product includes software written by Tim Hudson (tjh@cryptsoft.com) - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] -========================================= -END OF OpenSSL NOTICES, INFORMATION, AND LICENSE - -%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -path-is-absolute - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -node.js: - -Copyright Joyent, Inc. and other Node contributors. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -Software), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE - -%% path-is-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright � 2013�2014 Domenic Denicola -Licensed under the WTFPL Version 2 (http://www.wtfpl.net/about/) -========================================= -END OF path-is-inside NOTICES, INFORMATION, AND LICENSE - -%% pify NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pify NOTICES, INFORMATION, AND LICENSE - -%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pinkie NOTICES, INFORMATION, AND LICENSE - -%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE - -%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - -/*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF q NOTICES, INFORMATION, AND LICENSE - -%% Rimraf NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF Rimraf NOTICES, INFORMATION, AND LICENSE - -%% safe-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF safe-buffer NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012, Artur Adib -All rights reserved. - -You may use this project under the terms of the New BSD license as follows: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -Includes wrench-js -The MIT License - -Copyright (c) 2010 Ryan McGrath - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% semver-compare NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2014 James Halliday - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF semver-compare NOTICES, INFORMATION, AND LICENSE - -%% sprintf-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2007-2014, Alexandru Marasteanu -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of this software nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF sprintf-js NOTICES, INFORMATION, AND LICENSE - -%% topo NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/topo/graphs/contributors -========================================= -END OF topo NOTICES, INFORMATION, AND LICENSE - -%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2012 Koichi Kobayashi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF tunnel NOTICES, INFORMATION, AND LICENSE - -%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Typed Rest Client for Node.js - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE - -%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF underscore NOTICES, INFORMATION, AND LICENSE - -%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF vso-node-api NOTICES, INFORMATION, AND LICENSE - -%% Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Microsoft Corporation. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -========================================= -END OF Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE - -%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF wrappy NOTICES, INFORMATION, AND LICENSE - -%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF xtend NOTICES, INFORMATION, AND LICENSE diff --git a/_generated/KubernetesManifestV0/icon.png b/_generated/KubernetesManifestV0/icon.png deleted file mode 100644 index 0de14507c37c293e44d9e4a493163155a4ec1675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1304 zcmV+z1?T#SP)zaZ-@ct>qCZ>5~I`h-Zw9rt$29<~}m74=Zt+!4qL2ak471mq6vpOpkx zS7*R)Gl$ak`YD6p?j}1FjEj?y3rMks!>Sw`+*q3d%O(t@IeZqKJGN+q+}th^As3%S z%9Do;fWr$?AZ=iOc+~KbMnrY}2Pms^Aek!eD&$LM1p#b7E@b0FF)Y$I5cfIJ|*WKsq;ICT^;(gQy{sbI%HIWUX{85YK z9crD`q_zJ7%wYynIqrLQqFJ0@@OKT3o^9DQ&KwmDWd$S1VehBUdWw?Wq_+PEtaOMi zKMYp9e{xBhz36Y@?XXz<8uiyKivCRjS zb!`+0A>aM)W7x;B2*sL1CB^EE*9Y~jJ~(lwXNx%AndDt>RD1-HUv#&^AT~}J9!W2^ z?X2w81^wY}Y$u@#B^#?IM&!zqR(Q$Cb5kQBd$6TfkWIWzicb9UPmRRF`|AW+P07Mk zBEZ#WC3NRH3ep^AWOcwwnSl4OfECS7B63XM#Yfy)y`kC&6PHr9s9AjUb;6G~wAj2Ma%HlJy~--j}m^D8FVz|zmi_S*>Q@%>>X>j|Wt)3stYsNfHw7hq>9P_rsu zK9Zd9$MSz4!{M6^V$<22D-|l%fxJH-Xpxt)Uf}d^MtGXdQnSV_z)mOtBjD}mr2lfk zVkN|4qyaoaIj|XtM>6IF)>an^L+vT|*0GQh8?Kqy*afkPY2Y2^KO^@@4kS3ioWKu_ z3ZtkbcR4d3Sv}2zCf;cDrQa;^0S)+7gvmi?^!A(@A+R< z)tG)*6)RW@=N`JJWU`)-7Y96+D~S@j8Y;c`%1g~HC}bxmZ^vg*pmNda`YzBT${-<% zE|?FKfTGk1iRk1|?G*fh{I9V3d^K{t--gNjYsnrYv4?+>d9;ka2rvMP+uwvxyRhW| O0000 - - - diff --git a/_generated/KubernetesManifestV0/make.json b/_generated/KubernetesManifestV0/make.json deleted file mode 100644 index b88c7e76ec27..000000000000 --- a/_generated/KubernetesManifestV0/make.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "rm": [ - { - "items": [ - "node_modules/azure-pipelines-tasks-kubernetes-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib" - ], - "options": "-Rf" - } - ] -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/package-lock.json b/_generated/KubernetesManifestV0/package-lock.json deleted file mode 100644 index efe18cf45501..000000000000 --- a/_generated/KubernetesManifestV0/package-lock.json +++ /dev/null @@ -1,835 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "requires": { - "@types/node": "*" - } - }, - "@types/del": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@types/del/-/del-2.2.33.tgz", - "integrity": "sha512-bXwiHz4Ljz7FXGybdEtCHrsgJE+zIvxmGWgBLMwReMJi6yMenQs1ls3Q/s9rieuja9S/clDKVoXDS7BhEU2lYQ==", - "requires": { - "@types/glob": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "5.0.38", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.38.tgz", - "integrity": "sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tasks-docker-common": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.0.6.tgz", - "integrity": "sha512-Zm8cTQecdvcgFbMTP8ZqKoU9XvM1Ck3CF59BkeaS5C7G0gNZWA4MkJTiC1qESMn8ptK5I33cqcMl7Ja4JtwaJA==", - "requires": { - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "del": "2.2.0", - "q": "1.4.1" - }, - "dependencies": { - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==" - } - } - }, - "azure-pipelines-tasks-kubernetes-common": { - "version": "2.220.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-kubernetes-common/-/azure-pipelines-tasks-kubernetes-common-2.220.0.tgz", - "integrity": "sha512-20BEQl8Pu9MZQSSQ/7ITLRGW7tR3UoK5yx252iffBJpf8tjC63kRWhFHWGehvPFLZU+bSENDKsYBigvKRFSobA==", - "requires": { - "@types/mocha": "5.2.7", - "@types/node": "10.17.0", - "@types/uuid": "8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "azure-pipelines-tool-lib": "^1.0.2", - "js-yaml": "3.13.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==" - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" - }, - "azure-pipelines-tool-lib": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz", - "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.1.10", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - } - } - }, - "azure-pipelines-tasks-utility-common": { - "version": "3.219.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.219.1.tgz", - "integrity": "sha512-VyssHbJQ40aRBq1m0oSG4XCesbRPzsH3Ao8lohmsQZl+GN17TeCnKmr/OoVYsqgtG9TEw59pG4WYW++lsLeeew==", - "requires": { - "@types/node": "^16.11.39", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", - "js-yaml": "3.13.1", - "semver": "^5.4.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz", - "integrity": "sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==" - }, - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - }, - "azure-pipelines-task-lib": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", - "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", - "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - } - } - }, - "azure-pipelines-tool-lib": { - "version": "1.0.0-preview.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.0.0-preview.0.tgz", - "integrity": "sha512-Ao4A/r7q6qTTeDqa40U9/58kw5uC6r29cTJ7386uMSl7RgNu19ja+nN0Tnvl6dQTCjajMjqiT+UADuDi5zhucw==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.0.6-preview.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.7.3", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "del": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", - "integrity": "sha512-AZDiRb78EEGYCsAZTG3v+CM5q8J0BIs+wI7QeUtyosm+zIMm4XSmp6aI/K7cU9l+YaKpDKN9dYP1xTrNjLQ+LA==", - "requires": { - "globby": "^4.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "requires": { - "@types/node": "^10.0.3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - } - }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "requires": { - "get-port": "^3.1.0" - } - }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/_generated/KubernetesManifestV0/package.json b/_generated/KubernetesManifestV0/package.json deleted file mode 100644 index 4e6a8e502039..000000000000 --- a/_generated/KubernetesManifestV0/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "dependencies": { - "@types/del": "^2.2.0", - "@types/glob": "^5.0.10", - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^3.3.1", - "azure-pipelines-tasks-docker-common": "2.0.6", - "azure-pipelines-tasks-kubernetes-common": "^2.212.0", - "azure-pipelines-tasks-utility-common": "^3.210.0", - "azure-pipelines-tool-lib": "1.0.0-preview.0", - "del": "2.2.0", - "js-yaml": "3.13.1", - "moment": "^2.29.4", - "typed-rest-client": "^1.8.9" - }, - "devDependencies": { - "typescript": "4.0.2" - } -} diff --git a/_generated/KubernetesManifestV0/src/actions/bake.ts b/_generated/KubernetesManifestV0/src/actions/bake.ts deleted file mode 100644 index 93fc1224e1de..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/bake.ts +++ /dev/null @@ -1,154 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; -import * as helmutility from 'azure-pipelines-tasks-kubernetes-common/helmutility'; -import * as uuidV4 from 'uuid/v4'; -import { IExecOptions } from 'azure-pipelines-task-lib/toolrunner'; - -import { getTempDirectory } from '../utils/FileHelper'; -import { Helm, NameValuePair } from 'azure-pipelines-tasks-kubernetes-common/helm-object-model'; -import * as TaskParameters from '../models/TaskInputParameters'; -import { KomposeInstaller } from '../utils/installers'; -import * as utils from '../utils/utilities'; -import * as DeploymentHelper from '../utils/DeploymentHelper'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -abstract class RenderEngine { - public bake: () => Promise; - protected getTemplatePath = () => { - return path.join(getTempDirectory(), 'baked-template-' + uuidV4() + '.yaml'); - } - protected updateImages(filePath: string) { - if (TaskInputParameters.containers.length > 0 && fs.existsSync(filePath)) { - const updatedFilesPaths: string[] = DeploymentHelper.updateResourceObjects([filePath], [], TaskInputParameters.containers); - let fileContents: string[] = []; - updatedFilesPaths.forEach((path) => { - const content = yaml.safeDump(JSON.parse(fs.readFileSync(path).toString())); - fileContents.push(content); - }); - fs.writeFileSync(filePath, fileContents.join("\n---\n")); - } - } -} - -class HelmRenderEngine extends RenderEngine { - public bake = async (): Promise => { - // Helm latest releases require restricted permissions on Kubeconfig - const kubeconfigPath = tl.getVariable('KUBECONFIG'); - if (kubeconfigPath) - fs.chmodSync(kubeconfigPath, '600'); - const helmPath = await helmutility.getHelm(); - const helmCommand = new Helm(helmPath, TaskParameters.namespace); - const helmReleaseName = tl.getInput('releaseName', false); - const result = helmCommand.template(helmReleaseName, tl.getPathInput('helmChart', true), tl.getDelimitedInput('overrideFiles', '\n'), this.getOverrideValues()); - if (result.stderr) { - tl.setResult(tl.TaskResult.Failed, result.stderr); - return; - } - tl.debug(result.stdout); - const pathToBakedManifest = this.getTemplatePath(); - fs.writeFileSync(pathToBakedManifest, result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - } - - private getOverrideValues() { - const overridesInput = tl.getDelimitedInput('overrides', '\n'); - const overrideValues = []; - overridesInput.forEach(arg => { - const overrideInput = arg.split(':'); - const overrideName = overrideInput[0]; - const overrideValue = overrideInput.slice(1).join(':'); - overrideValues.push({ - name: overrideName, - value: overrideValue - } as NameValuePair); - }); - - return overrideValues; - } -} - -class KomposeRenderEngine extends RenderEngine { - public bake = async (): Promise => { - if (!tl.filePathSupplied('dockerComposeFile')) { - throw new Error(tl.loc('DockerComposeFilePathNotSupplied')); - } - - const dockerComposeFilePath = tl.getPathInput('dockerComposeFile', true, true); - const installer = new KomposeInstaller(); - let path = installer.checkIfExists(); - if (!path) { - path = await installer.install(); - } - const tool = tl.tool(path); - const pathToBakedManifest = this.getTemplatePath(); - tool.arg(['convert', '-f', dockerComposeFilePath, '-o', pathToBakedManifest]); - const result = tool.execSync(); - if (result.code !== 0 || result.error) { - throw result.error; - } - tl.debug(result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - } -} - -class KustomizeRenderEngine extends RenderEngine { - public bake = async () => { - const kubectlPath = await utils.getKubectl(); - this.validateKustomize(kubectlPath); - const command = tl.tool(kubectlPath); - console.log(`[command] ${kubectlPath} kustomize ${tl.getPathInput('kustomizationPath')}`); - command.arg(['kustomize', tl.getPathInput('kustomizationPath')]); - - const result = command.execSync({ silent: true } as IExecOptions); - if (result.stderr) { - tl.setResult(tl.TaskResult.Failed, result.stderr); - return; - } - tl.debug(result.stdout); - const pathToBakedManifest = this.getTemplatePath(); - fs.writeFileSync(pathToBakedManifest, result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - }; - - private validateKustomize(kubectlPath: string) { - const command = tl.tool(kubectlPath); - command.arg(['version', '--client=true', '-o', 'json']); - const result = command.execSync(); - if (result.code !== 0) { - throw result.error; - } - const clientVersion = JSON.parse(result.stdout).clientVersion; - if (clientVersion && parseInt(clientVersion.major) >= 1 && parseInt(clientVersion.minor) >= 14) { - // Do nothing - } else { - throw new Error(tl.loc('KubectlShouldBeUpgraded')); - } - } -} - -export async function bake(ignoreSslErrors?: boolean) { - const renderType = tl.getInput('renderType', true); - let renderEngine: RenderEngine; - switch (renderType) { - case 'helm': - case 'helm2': - renderEngine = new HelmRenderEngine(); - break; - case 'kompose': - renderEngine = new KomposeRenderEngine(); - break; - case 'kustomize': - renderEngine = new KustomizeRenderEngine(); - break; - default: - throw Error(tl.loc('UnknownRenderType')); - } - await renderEngine.bake(); -} diff --git a/_generated/KubernetesManifestV0/src/actions/createSecret.ts b/_generated/KubernetesManifestV0/src/actions/createSecret.ts deleted file mode 100644 index d5fa5f71aad1..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/createSecret.ts +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import { StringComparer, isEqual } from '../utils/StringComparison'; -import AuthenticationToken from 'azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken'; -import { getDockerRegistryEndpointAuthenticationToken } from 'azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken'; - -export async function createSecret(ignoreSslErrors?: boolean) { - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - let result; - if (isEqual(TaskInputParameters.secretType, 'dockerRegistry', StringComparer.OrdinalIgnoreCase)) { - const authProvider: AuthenticationToken = getDockerRegistryEndpointAuthenticationToken(TaskInputParameters.dockerRegistryEndpoint); - result = kubectl.createDockerSecret(TaskInputParameters.secretName.trim(), - authProvider.getLoginServerUrl(), - authProvider.getUsername(), - authProvider.getPassword(), - authProvider.getEmail(), - true); - } else { - result = kubectl.createGenericSecret(TaskInputParameters.secretName.trim(), - TaskInputParameters.secretArguments.trim(), - true); - } - - utils.checkForErrors([result]); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/delete.ts b/_generated/KubernetesManifestV0/src/actions/delete.ts deleted file mode 100644 index 42f24beb1eff..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/delete.ts +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -export async function deleteResources(ignoreSslErrors?: boolean) { - const args = TaskInputParameters.args; - - if (args == null || args.length === 0) { - throw (tl.loc('ArgumentsInputNotSupplied')); - } - - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - const result = kubectl.delete(args); - utils.checkForErrors([result]); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/deploy.ts b/_generated/KubernetesManifestV0/src/actions/deploy.ts deleted file mode 100644 index 8be590e2a0de..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/deploy.ts +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -import * as deploymentHelper from '../utils/DeploymentHelper'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as utils from '../utils/utilities'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function deploy(ignoreSslErrors?: boolean) { - TaskInputParameters.validateCanaryPercentage(); - TaskInputParameters.validateReplicaCount(); - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectlPath = await utils.getKubectl(); - const kubectl = new Kubectl(kubectlPath, TaskInputParameters.namespace, ignoreSslErrors); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, TaskInputParameters.deploymentStrategy); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/patch.ts b/_generated/KubernetesManifestV0/src/actions/patch.ts deleted file mode 100644 index c28dde6be30a..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/patch.ts +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskParameters from '../models/TaskInputParameters'; - -export async function patch(ignoreSslErrors?: boolean) { - TaskParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskParameters.namespace, ignoreSslErrors); - let kind = tl.getInput('kind', false); - if(kind) - kind = kind.toLowerCase(); - let name = tl.getInput('name', false); - const filePath = tl.getInput('resourceFileToPatch', false); - const strategy = tl.getInput('mergeStrategy', false); - const patch = tl.getInput('patch', true); - if (tl.filePathSupplied('resourceFileToPatch') && tl.getInput('resourceToPatch') === 'file') { - kind = '-f'; - name = filePath; - } - - const result = kubectl.patch(kind, name, patch, strategy); - utils.checkForErrors([result]); - const resources = kubectl.getResources(result.stdout, ['deployment', 'replicaset', 'daemonset', 'pod', 'statefulset']); - - resources.forEach(resource => { - utils.checkForErrors([kubectl.checkRolloutStatus(resource.type, resource.name, TaskParameters.rolloutStatusTimeout)]); - utils.checkForErrors([kubectl.annotate(resource.type, resource.name, constants.pipelineAnnotations, true)]); - utils.checkForErrors(utils.annotateChildPods(kubectl, resource.type, resource.name, JSON.parse((kubectl.getAllPods()).stdout))); - }); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/promote.ts b/_generated/KubernetesManifestV0/src/actions/promote.ts deleted file mode 100644 index 259efe6ea9f6..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/promote.ts +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; - -import * as deploymentHelper from '../utils/DeploymentHelper'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as SMICanaryDeploymentHelper from '../utils/SMICanaryDeploymentHelper'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function promote(ignoreSslErrors?: boolean) { - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - - if (!canaryDeploymentHelper.isCanaryDeploymentStrategy()) { - tl.debug('Strategy is not canary deployment. Invalid request.'); - throw (tl.loc('InvalidPromotetActionDeploymentStrategy')); - } - - let includeServices = false; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - includeServices = true; - // In case of SMI traffic split strategy when deployment is promoted, first we will redirect traffic to - // Canary deployment, then update stable deployment and then redirect traffic to stable deployment - tl.debug('Redirecting traffic to canary deployment'); - SMICanaryDeploymentHelper.redirectTrafficToCanaryDeployment(kubectl, TaskInputParameters.manifests); - - tl.debug('Deploying input manifests with SMI canary strategy'); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, 'None'); - - tl.debug('Redirecting traffic to stable deployment'); - SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(kubectl, TaskInputParameters.manifests); - } else { - tl.debug('Deploying input manifests'); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, 'None'); - } - - tl.debug('Deployment strategy selected is Canary. Deleting canary and baseline workloads.'); - try { - canaryDeploymentHelper.deleteCanaryDeployment(kubectl, TaskInputParameters.manifests, includeServices); - } catch (ex) { - tl.warning('Exception occurred while deleting canary and baseline workloads. Exception: ' + ex); - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/reject.ts b/_generated/KubernetesManifestV0/src/actions/reject.ts deleted file mode 100644 index b25087f11b30..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/reject.ts +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as SMICanaryDeploymentHelper from '../utils/SMICanaryDeploymentHelper'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -export async function reject(ignoreSslErrors?: boolean) { - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - - if (!canaryDeploymentHelper.isCanaryDeploymentStrategy()) { - tl.debug('Strategy is not canary deployment. Invalid request.'); - throw (tl.loc('InvalidRejectActionDeploymentStrategy')); - } - - let includeServices = false; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - tl.debug('Reject deployment with SMI canary strategy'); - includeServices = true; - SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(kubectl, TaskInputParameters.manifests); - } - - tl.debug('Deployment strategy selected is Canary. Deleting baseline and canary workloads.'); - canaryDeploymentHelper.deleteCanaryDeployment(kubectl, TaskInputParameters.manifests, includeServices); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/actions/scale.ts b/_generated/KubernetesManifestV0/src/actions/scale.ts deleted file mode 100644 index 79a5fd6c257c..000000000000 --- a/_generated/KubernetesManifestV0/src/actions/scale.ts +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; - -import * as utils from '../utils/utilities'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function scale(ignoreSslErrors?: boolean) { - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - const kind = tl.getInput('kind', true).toLowerCase(); - const replicas = tl.getInput('replicas', true); - const name = tl.getInput('name', true); - const result = kubectl.scale(kind, name, replicas); - utils.checkForErrors([result]); - utils.checkForErrors([kubectl.checkRolloutStatus(kind, name, TaskInputParameters.rolloutStatusTimeout)]); - utils.checkForErrors([kubectl.annotate(kind, name, constants.pipelineAnnotations, true)]); - utils.checkForErrors(utils.annotateChildPods(kubectl, kind, name, JSON.parse((kubectl.getAllPods()).stdout))); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/models/TaskInputParameters.ts b/_generated/KubernetesManifestV0/src/models/TaskInputParameters.ts deleted file mode 100644 index 91d92c6ef951..000000000000 --- a/_generated/KubernetesManifestV0/src/models/TaskInputParameters.ts +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -export let namespace: string = tl.getInput('namespace', false); -export const containers: string[] = tl.getDelimitedInput('containers', '\n'); -export const imagePullSecrets: string[] = tl.getDelimitedInput('imagePullSecrets', '\n'); -export const manifests = tl.getDelimitedInput('manifests', '\n'); -export const canaryPercentage: string = tl.getInput('percentage'); -export const deploymentStrategy: string = tl.getInput('strategy', false); -export const trafficSplitMethod: string = tl.getInput('trafficSplitMethod', false); -export const baselineAndCanaryReplicas: string = tl.getInput('baselineAndCanaryReplicas', true); -export const args: string = tl.getInput('arguments', false); -export const secretArguments: string = tl.getInput('secretArguments', false) || ''; -export const secretType: string = tl.getInput('secretType', false); -export const secretName: string = tl.getInput('secretName', false); -export const dockerRegistryEndpoint: string = tl.getInput('dockerRegistryEndpoint', false); -export const rolloutStatusTimeout: string = tl.getInput('rolloutStatusTimeout', false); - -if (!namespace) { - const kubConnection = tl.getInput('kubernetesServiceConnection', false); - if (kubConnection) { - namespace = tl.getEndpointDataParameter(kubConnection, 'namespace', true); - } -} - -if (!namespace) { - tl.debug('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.'); - namespace = 'default'; -} - -export function validateTimeoutForRolloutStatus() { - if (rolloutStatusTimeout && !validateRegex("^\\d*$", rolloutStatusTimeout)) { - throw new Error(tl.loc('InvalidTimeoutValue')); - } -} - -export function validateCanaryPercentage() { - if (deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY && (!validateRegex("^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$", canaryPercentage) || parseFloat(canaryPercentage) > 100)) { - throw new Error(tl.loc('InvalidPercentage')); - } -} - -export function validateReplicaCount() { - if (deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY && trafficSplitMethod.toUpperCase() === canaryDeploymentHelper.TRAFFIC_SPLIT_STRATEGY && !validateRegex("(^([0-9]|([1-9]\\d*))$)", baselineAndCanaryReplicas)) { - throw new Error(tl.loc('InvalidBaselineAndCanaryReplicas')); - } -} - -function validateRegex(regex: string, testString: string) { - var percentageRegex = new RegExp(regex); - return percentageRegex.test(testString); -} diff --git a/_generated/KubernetesManifestV0/src/run.ts b/_generated/KubernetesManifestV0/src/run.ts deleted file mode 100644 index 8072187fc954..000000000000 --- a/_generated/KubernetesManifestV0/src/run.ts +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as utils from './utils/utilities'; - -import { deploy } from './actions/deploy'; -import { bake } from './actions/bake'; -import { scale } from './actions/scale'; -import { patch } from './actions/patch'; -import { deleteResources } from './actions/delete'; -import { promote } from './actions/promote'; -import { reject } from './actions/reject'; -import { createSecret } from './actions/createSecret'; - -tl.setResourcePath(path.join(__dirname, '..', 'task.json')); - -function run(): Promise { - const action = tl.getInput('action'); - if (action === 'bake') { - return bake(); - } - const connection = utils.getConnection(); - let action_func = null; - switch (action) { - case 'deploy': - action_func = deploy; - break; - case 'scale': - action_func = scale; - break; - case 'patch': - action_func = patch; - break; - case 'delete': - action_func = deleteResources; - break; - case 'promote': - action_func = promote; - break; - case 'reject': - action_func = reject; - break; - case 'createSecret': - action_func = createSecret; - break; - default: - tl.setResult(tl.TaskResult.Failed, 'Not a supported action, choose from "bake", "deploy", "patch", "scale", "delete", "promote", "reject"'); - process.exit(1); - } - connection.open(); - return action_func(connection.ignoreSSLErrors) - .then(() => connection.close()) - .catch((error) => { - connection.close(); - throw error; - }); -} - -run() - .catch((error) => tl.setResult(tl.TaskResult.Failed, !!error.message ? error.message : error)); \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/utils/CanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0/src/utils/CanaryDeploymentHelper.ts deleted file mode 100644 index 0f70094bddaa..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/CanaryDeploymentHelper.ts +++ /dev/null @@ -1,225 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as helper from '../utils/KubernetesObjectUtility'; -import { KubernetesWorkload } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { StringComparer, isEqual } from './StringComparison'; -import * as utils from '../utils/utilities'; - -export const CANARY_DEPLOYMENT_STRATEGY = 'CANARY'; -export const TRAFFIC_SPLIT_STRATEGY = 'SMI'; -export const CANARY_VERSION_LABEL = 'azure-pipelines/version'; -const BASELINE_SUFFIX = '-baseline'; -export const BASELINE_LABEL_VALUE = 'baseline'; -const CANARY_SUFFIX = '-canary'; -export const CANARY_LABEL_VALUE = 'canary'; -export const STABLE_SUFFIX = '-stable'; -export const STABLE_LABEL_VALUE = 'stable'; - -export function deleteCanaryDeployment(kubectl: Kubectl, manifestFilePaths: string[], includeServices: boolean) { - - // get manifest files - const inputManifestFiles: string[] = utils.getManifestFiles(manifestFilePaths); - - if (inputManifestFiles == null || inputManifestFiles.length == 0) { - throw (tl.loc('ManifestFileNotFound')); - } - - deleteCanaryAndBaselineObjects(kubectl, inputManifestFiles, includeServices); -} - -export function markResourceAsStable(inputObject: any): object { - if (isResourceMarkedAsStable(inputObject)) { - return inputObject; - } - - const newObject = JSON.parse(JSON.stringify(inputObject)); - - // Adding labels and annotations. - addCanaryLabelsAndAnnotations(newObject, STABLE_LABEL_VALUE); - - tl.debug("Added stable label: " + JSON.stringify(newObject)); - return newObject; -} - -export function isResourceMarkedAsStable(inputObject: any): boolean { - return inputObject && - inputObject.metadata && - inputObject.metadata.labels && - inputObject.metadata.labels[CANARY_VERSION_LABEL] == STABLE_LABEL_VALUE; -} - -export function getStableResource(inputObject: any): object { - var replicaCount = isSpecContainsReplicas(inputObject.kind) ? inputObject.metadata.replicas : 0; - return getNewCanaryObject(inputObject, replicaCount, STABLE_LABEL_VALUE); -} - -export function getNewBaselineResource(stableObject: any, replicas?: number): object { - return getNewCanaryObject(stableObject, replicas, BASELINE_LABEL_VALUE); -} - -export function getNewCanaryResource(inputObject: any, replicas?: number): object { - return getNewCanaryObject(inputObject, replicas, CANARY_LABEL_VALUE); -} - -export function fetchCanaryResource(kubectl: Kubectl, kind: string, name: string): object { - return fetchResource(kubectl, kind, getCanaryResourceName(name)); -} - -export function fetchResource(kubectl: Kubectl, kind: string, name: string): object { - const result = kubectl.getResource(kind, name); - - if (result == null || !!result.stderr) { - return null; - } - - if (!!result.stdout) { - const resource = JSON.parse(result.stdout); - try { - UnsetsClusterSpecficDetails(resource); - return resource; - } catch (ex) { - tl.debug('Exception occurred while Parsing ' + resource + ' in Json object'); - tl.debug(`Exception:${ex}`); - } - } - return null; -} - -export function isCanaryDeploymentStrategy() { - const deploymentStrategy = TaskInputParameters.deploymentStrategy; - return deploymentStrategy && deploymentStrategy.toUpperCase() === CANARY_DEPLOYMENT_STRATEGY; -} - -export function isSMICanaryStrategy() { - const deploymentStrategy = TaskInputParameters.trafficSplitMethod; - return isCanaryDeploymentStrategy() && deploymentStrategy && deploymentStrategy.toUpperCase() === TRAFFIC_SPLIT_STRATEGY; -} - -export function getCanaryResourceName(name: string) { - return name + CANARY_SUFFIX; -} - -export function getBaselineResourceName(name: string) { - return name + BASELINE_SUFFIX; -} - -export function getStableResourceName(name: string) { - return name + STABLE_SUFFIX; -} - -function UnsetsClusterSpecficDetails(resource: any) { - - if (resource == null) { - return; - } - - // Unsets the cluster specific details in the object - if (!!resource) { - const metadata = resource.metadata; - const status = resource.status; - - if (!!metadata) { - const newMetadata = { - 'annotations': metadata.annotations, - 'labels': metadata.labels, - 'name': metadata.name - }; - - resource.metadata = newMetadata; - } - - if (!!status) { - resource.status = {}; - } - } -} - -function getNewCanaryObject(inputObject: any, replicas: number, type: string): object { - const newObject = JSON.parse(JSON.stringify(inputObject)); - - // Updating name - if (type === CANARY_LABEL_VALUE) { - newObject.metadata.name = getCanaryResourceName(inputObject.metadata.name) - } else if (type === STABLE_LABEL_VALUE) { - newObject.metadata.name = getStableResourceName(inputObject.metadata.name) - } else { - newObject.metadata.name = getBaselineResourceName(inputObject.metadata.name); - } - - // Adding labels and annotations. - addCanaryLabelsAndAnnotations(newObject, type); - - // Updating no. of replicas - if (isSpecContainsReplicas(newObject.kind)) { - newObject.spec.replicas = replicas; - } - - return newObject; -} - -function isSpecContainsReplicas(kind: string) { - return !isEqual(kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase) && - !isEqual(kind, KubernetesWorkload.daemonSet, StringComparer.OrdinalIgnoreCase) && - !helper.isServiceEntity(kind) -} - -function addCanaryLabelsAndAnnotations(inputObject: any, type: string) { - const newLabels = new Map(); - newLabels[CANARY_VERSION_LABEL] = type; - - helper.updateObjectLabels(inputObject, newLabels, false); - helper.updateObjectAnnotations(inputObject, newLabels, false); - helper.updateSelectorLabels(inputObject, newLabels, false); - - if (!helper.isServiceEntity(inputObject.kind)) { - helper.updateSpecLabels(inputObject, newLabels, false); - } -} - -function addValueToList(map: any, key: string, value: string) { - map[key] = map[key] || new Set(); - map[key].add(value); -} - -function deleteCanaryAndBaselineObjects(kubectl: Kubectl, files: string[], includeServices: boolean) { - var kindNameMap = {}; - files.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind) - || (includeServices && helper.isServiceEntity(kind))) { - const canaryObjectName = getCanaryResourceName(name); - const baselineObjectName = getBaselineResourceName(name); - addValueToList(kindNameMap, kind, canaryObjectName); - const result = kubectl.getResource(kind, baselineObjectName); - if (result != null && !result.stderr) { - addValueToList(kindNameMap, kind, baselineObjectName); - } - } - }); - }); - - const kindList = Object.keys(kindNameMap); - if (kindList.length === 0) { - tl.debug('CanaryDeploymentHelper : No deployment objects found'); - } - kindList.forEach(kind => { - const argsPrefix = utils.createKubectlArgs(kind, kindNameMap[kind]); - const args = utils.getDeleteCmdArgs(argsPrefix, TaskInputParameters.args); - tl.debug('Delete cmd args : ' + args); - - if (!!args && args.length > 0) { - // run kubectl delete cmd - const result = kubectl.delete(args); - utils.checkForErrors([result]); - } - }) -} diff --git a/_generated/KubernetesManifestV0/src/utils/DeploymentHelper.ts b/_generated/KubernetesManifestV0/src/utils/DeploymentHelper.ts deleted file mode 100644 index 5a1fa259aa34..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/DeploymentHelper.ts +++ /dev/null @@ -1,217 +0,0 @@ -'use strict'; - -import * as fs from 'fs'; -import * as path from 'path'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as yaml from 'js-yaml'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as KubernetesObjectUtility from '../utils/KubernetesObjectUtility'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as models from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as fileHelper from '../utils/FileHelper'; -import * as utils from '../utils/utilities'; -import * as KubernetesManifestUtility from 'azure-pipelines-tasks-kubernetes-common/kubernetesmanifestutility'; -import * as KubernetesConstants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; -import { Kubectl, Resource } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { isEqual, StringComparer } from './StringComparison'; -import { getDeploymentMetadata, getPublishDeploymentRequestUrl, isDeploymentEntity, getManifestUrls } from 'azure-pipelines-tasks-kubernetes-common/image-metadata-helper'; -import { WebRequest, sendRequest } from 'azure-pipelines-tasks-utility-common/restutilities'; -import { deployPodCanary } from './PodCanaryDeploymentHelper'; -import { deploySMICanary } from './SMICanaryDeploymentHelper'; - -export async function deploy(kubectl: Kubectl, manifestFilePaths: string[], deploymentStrategy: string) { - - // get manifest files - let inputManifestFiles: string[] = getManifestFiles(manifestFilePaths); - - // imagePullSecrets addition & artifact substitution - inputManifestFiles = updateResourceObjects(inputManifestFiles, TaskInputParameters.imagePullSecrets, TaskInputParameters.containers); - - // deployment - const deployedManifestFiles = deployManifests(inputManifestFiles, kubectl, isCanaryDeploymentStrategy(deploymentStrategy)); - - // check manifest stability - const resourceTypes: Resource[] = KubernetesObjectUtility.getResources(deployedManifestFiles, models.deploymentTypes.concat([KubernetesConstants.DiscoveryAndLoadBalancerResource.service])); - await checkManifestStability(kubectl, resourceTypes); - - // print ingress resources - const ingressResources: Resource[] = KubernetesObjectUtility.getResources(deployedManifestFiles, [KubernetesConstants.DiscoveryAndLoadBalancerResource.ingress]); - ingressResources.forEach(ingressResource => { - kubectl.getResource(KubernetesConstants.DiscoveryAndLoadBalancerResource.ingress, ingressResource.name); - }); - - // annotate resources - let allPods: any; - try { - allPods = JSON.parse((kubectl.getAllPods()).stdout); - } catch (e) { - tl.debug("Unable to parse pods; Error: " + e); - } - - annotateResources(deployedManifestFiles, kubectl, resourceTypes, allPods); - - // Capture and push deployment metadata only if deployment strategy is not specified (because for Canary/SMI we do not replace actual deployment objects) - if (!isCanaryDeploymentStrategy(deploymentStrategy)) { - try { - const clusterInfo = kubectl.getClusterInfo().stdout; - captureAndPushDeploymentMetadata(inputManifestFiles, allPods, deploymentStrategy, clusterInfo, manifestFilePaths); - } catch (e) { - tl.warning("Capturing deployment metadata failed with error: " + e); - } - } -} - -function getManifestFiles(manifestFilePaths: string[]): string[] { - const files: string[] = utils.getManifestFiles(manifestFilePaths); - - if (files == null || files.length === 0) { - throw (tl.loc('ManifestFileNotFound', manifestFilePaths)); - } - - return files; -} - -function deployManifests(files: string[], kubectl: Kubectl, isCanaryDeploymentStrategy: boolean): string[] { - let result; - if (isCanaryDeploymentStrategy) { - let canaryDeploymentOutput: any; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - canaryDeploymentOutput = deploySMICanary(kubectl, files); - } else { - canaryDeploymentOutput = deployPodCanary(kubectl, files); - } - result = canaryDeploymentOutput.result; - files = canaryDeploymentOutput.newFilePaths; - } else { - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - const updatedManifests = appendStableVersionLabelToResource(files, kubectl); - result = kubectl.apply(updatedManifests); - } else { - result = kubectl.apply(files); - } - } - utils.checkForErrors([result]); - return files; -} - -function appendStableVersionLabelToResource(files: string[], kubectl: Kubectl): string[] { - const manifestFiles = []; - const newObjectsList = []; - - files.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const kind = inputObject.kind; - if (KubernetesObjectUtility.isDeploymentEntity(kind)) { - const updatedObject = canaryDeploymentHelper.markResourceAsStable(inputObject); - newObjectsList.push(updatedObject); - } else { - manifestFiles.push(filePath); - } - }); - }); - - const updatedManifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - manifestFiles.push(...updatedManifestFiles); - return manifestFiles; -} - -async function checkManifestStability(kubectl: Kubectl, resources: Resource[]): Promise { - await KubernetesManifestUtility.checkManifestStability(kubectl, resources, TaskInputParameters.rolloutStatusTimeout); - -} - -function annotateResources(files: string[], kubectl: Kubectl, resourceTypes: Resource[], allPods: any) { - const annotateResults: IExecSyncResult[] = []; - annotateResults.push(kubectl.annotateFiles(files, constants.pipelineAnnotations, true)); - resourceTypes.forEach(resource => { - if (resource.type.toUpperCase() !== models.KubernetesWorkload.pod.toUpperCase()) { - utils.annotateChildPods(kubectl, resource.type, resource.name, allPods) - .forEach(execResult => annotateResults.push(execResult)); - } - }); - utils.checkForErrors(annotateResults, true); -} - -export function updateResourceObjects(filePaths: string[], imagePullSecrets: string[], containers: string[]): string[] { - const newObjectsList = []; - const updateResourceObject = (inputObject) => { - if (!!imagePullSecrets && imagePullSecrets.length > 0) { - KubernetesObjectUtility.updateImagePullSecrets(inputObject, imagePullSecrets, false); - } - if (!!containers && containers.length > 0) { - KubernetesObjectUtility.updateImageDetails(inputObject, containers); - } - } - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath).toString(); - yaml.safeLoadAll(fileContents, function (inputObject: any) { - if (inputObject && inputObject.kind) { - const kind = inputObject.kind; - if (KubernetesObjectUtility.isWorkloadEntity(kind)) { - updateResourceObject(inputObject); - } - else if (isEqual(kind, 'list', StringComparer.OrdinalIgnoreCase)) { - let items = inputObject.items; - if (items.length > 0) { - items.forEach((item) => updateResourceObject(item)); - } - } - newObjectsList.push(inputObject); - } - }); - }); - tl.debug('New K8s objects after addin imagePullSecrets are :' + JSON.stringify(newObjectsList)); - const newFilePaths = fileHelper.writeObjectsToFile(newObjectsList); - return newFilePaths; -} - -function captureAndPushDeploymentMetadata(filePaths: string[], allPods: any, deploymentStrategy: string, clusterInfo: any, manifestFilePaths: string[]) { - const requestUrl = getPublishDeploymentRequestUrl(); - let metadata = {}; - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath).toString(); - yaml.safeLoadAll(fileContents, function (inputObject: any) { - if (!!inputObject && inputObject.kind && isDeploymentEntity(inputObject.kind)) { - metadata = getDeploymentMetadata(inputObject, allPods, deploymentStrategy, clusterInfo, getManifestUrls(manifestFilePaths)); - pushDeploymentDataToEvidenceStore(JSON.stringify(metadata), requestUrl).then((result) => { - tl.debug("DeploymentDetailsApiResponse: " + JSON.stringify(result)); - }, (error) => { - tl.warning("publishToImageMetadataStore failed with error: " + error); - }); - } - }); - }); -} - -async function pushDeploymentDataToEvidenceStore(requestBody: string, requestUrl: string): Promise { - const request = new WebRequest(); - const accessToken: string = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - request.uri = requestUrl; - request.method = 'POST'; - request.body = requestBody; - request.headers = { - "Content-Type": "application/json", - "Authorization": "Bearer " + accessToken - }; - - tl.debug("requestUrl: " + requestUrl); - tl.debug("requestBody: " + requestBody); - - try { - tl.debug("Sending request for pushing deployment data to Image meta data store"); - const response = await sendRequest(request); - return response; - } - catch (error) { - tl.debug("Unable to push to deployment details to Artifact Store, Error: " + error); - } - - return Promise.resolve(); -} - -function isCanaryDeploymentStrategy(deploymentStrategy: string): boolean { - return deploymentStrategy != null && deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY.toUpperCase(); -} diff --git a/_generated/KubernetesManifestV0/src/utils/FileHelper.ts b/_generated/KubernetesManifestV0/src/utils/FileHelper.ts deleted file mode 100644 index ce62b4205732..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/FileHelper.ts +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; - -import * as fs from 'fs'; -import * as path from 'path'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as os from 'os'; - -export function getTempDirectory(): string { - return tl.getVariable('agent.tempDirectory') || os.tmpdir(); -} - -export function getNewUserDirPath(): string { - let userDir = path.join(getTempDirectory(), 'kubectlTask'); - ensureDirExists(userDir); - - userDir = path.join(userDir, getCurrentTime().toString()); - ensureDirExists(userDir); - - return userDir; -} - -export function ensureDirExists(dirPath: string): void { - if (!fs.existsSync(dirPath)) { - fs.mkdirSync(dirPath); - } -} - -export function assertFileExists(path: string) { - if (!fs.existsSync(path)) { - tl.error(tl.loc('FileNotFoundException', path)); - throw new Error(tl.loc('FileNotFoundException', path)); - } -} - -export function writeObjectsToFile(inputObjects: any[]): string[] { - const newFilePaths = []; - - if (!!inputObjects) { - inputObjects.forEach((inputObject: any) => { - try { - const inputObjectString = JSON.stringify(inputObject); - if (!!inputObject.kind && !!inputObject.metadata && !!inputObject.metadata.name) { - const fileName = getManifestFileName(inputObject.kind, inputObject.metadata.name); - fs.writeFileSync(path.join(fileName), inputObjectString); - newFilePaths.push(fileName); - } else { - tl.debug('Input object is not proper K8s resource object. Object: ' + inputObjectString); - } - } catch (ex) { - tl.debug('Exception occurred while writing object to file : ' + inputObject + ' . Exception: ' + ex); - } - }); - } - - return newFilePaths; -} - -export function writeManifestToFile(inputObjectString: string, kind: string, name: string): string { - if (inputObjectString) { - try { - const fileName = getManifestFileName(kind, name); - fs.writeFileSync(path.join(fileName), inputObjectString); - return fileName; - } catch (ex) { - tl.debug('Exception occurred while writing object to file : ' + inputObjectString + ' . Exception: ' + ex); - } - } - return ''; -} - -function getManifestFileName(kind: string, name: string) { - const filePath = kind + '_' + name + '_' + getCurrentTime().toString(); - const tempDirectory = getTempDirectory(); - const fileName = path.join(tempDirectory, path.basename(filePath)); - return fileName; -} - -function getCurrentTime(): number { - return new Date().getTime(); -} - diff --git a/_generated/KubernetesManifestV0/src/utils/KubernetesObjectUtility.ts b/_generated/KubernetesManifestV0/src/utils/KubernetesObjectUtility.ts deleted file mode 100644 index dc7f40e0c6fc..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/KubernetesObjectUtility.ts +++ /dev/null @@ -1,391 +0,0 @@ -'use strict'; -import * as fs from 'fs'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as yaml from 'js-yaml'; -import { Resource } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { KubernetesWorkload, deploymentTypes, workloadTypes, workloadTypesWithRolloutStatus } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { StringComparer, isEqual } from '../utils/StringComparison'; - -export function isDeploymentEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return deploymentTypes.some((type: string) => { - return isEqual(type, kind, StringComparer.OrdinalIgnoreCase); - }); -} - -export function isWorkloadEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return workloadTypes.some((type: string) => { - return isEqual(type, kind, StringComparer.OrdinalIgnoreCase); - }); -} - -export function isServiceEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return isEqual("Service", kind, StringComparer.OrdinalIgnoreCase); -} - -export function getReplicaCount(inputObject: any): any { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - const kind = inputObject.kind; - if (!isEqual(kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase) && !isEqual(kind, KubernetesWorkload.daemonSet, StringComparer.OrdinalIgnoreCase)) { - return inputObject.spec.replicas; - } - - return 0; -} - -export function updateObjectLabels(inputObject: any, newLabels: Map, override: boolean) { - - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.metadata) { - throw (tl.loc('NullInputObjectMetadata')); - } - - if (!newLabels) { - return; - } - - if (override) { - inputObject.metadata.labels = newLabels; - } else { - let existingLabels = inputObject.metadata.labels; - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - - inputObject.metadata.labels = existingLabels; - } -} - -export function updateObjectAnnotations(inputObject: any, newAnnotations: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.metadata) { - throw (tl.loc('NullInputObjectMetadata')); - } - - if (!newAnnotations) { - return; - } - if (override) { - inputObject.metadata.annotations = newAnnotations; - } else { - let existingAnnotations = inputObject.metadata.annotations; - if (!existingAnnotations) { - existingAnnotations = new Map(); - } - - Object.keys(newAnnotations).forEach(function (key) { - existingAnnotations[key] = newAnnotations[key]; - }); - - inputObject.metadata.annotations = existingAnnotations; - } -} - -export function updateImagePullSecrets(inputObject: any, newImagePullSecrets: string[], override: boolean) { - if (!inputObject || !inputObject.spec || !newImagePullSecrets) { - return; - } - - const newImagePullSecretsObjects = Array.from(newImagePullSecrets, x => { return { 'name': x }; }); - let existingImagePullSecretObjects: any = getImagePullSecrets(inputObject); - - if (override) { - existingImagePullSecretObjects = newImagePullSecretsObjects; - } else { - if (!existingImagePullSecretObjects) { - existingImagePullSecretObjects = new Array(); - } - - existingImagePullSecretObjects = existingImagePullSecretObjects.concat(newImagePullSecretsObjects); - } - - setImagePullSecrets(inputObject, existingImagePullSecretObjects); -} - -export function updateSpecLabels(inputObject: any, newLabels: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - if (!newLabels) { - return; - } - - let existingLabels = getSpecLabels(inputObject); - - if (override) { - existingLabels = newLabels; - } else { - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - } - - setSpecLabels(inputObject, existingLabels); -} - -export function updateSelectorLabels(inputObject: any, newLabels: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - if (!newLabels) { - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return; - } - - let existingLabels = getSpecSelectorLabels(inputObject); - - if (override) { - existingLabels = newLabels; - } else { - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - } - - setSpecSelectorLabels(inputObject, existingLabels); -} - -export function getResources(filePaths: string[], filterResourceTypes: string[]): Resource[] { - if (!filePaths) { - return []; - } - - const resources: Resource[] = []; - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const inputObjectKind = inputObject ? inputObject.kind : ''; - let isStrategyRollingUpdate = true; - if (workloadTypesWithRolloutStatus.indexOf(inputObjectKind.toLowerCase()) >= 0) { - let inputObjectStrategyType = ''; - if (inputObject && inputObject.spec && inputObject.spec.updateStrategy) { - inputObjectStrategyType = inputObject.spec.updateStrategy.type; - } else { - inputObjectStrategyType = "RollingUpdate"; - } - // Check for unsupported updateStrategy for rollout status - if (!isEqual(inputObjectStrategyType, "RollingUpdate", StringComparer.OrdinalIgnoreCase)) { - isStrategyRollingUpdate = false; - } - } - if (filterResourceTypes.filter(type => isEqual(inputObjectKind, type, StringComparer.OrdinalIgnoreCase)).length > 0) { - const resource = { - type: inputObject.kind, - name: inputObject.metadata.name, - isStrategyRollingUpdate: isStrategyRollingUpdate - }; - resources.push(resource); - } - }); - }); - return resources; -} - -function getSpecLabels(inputObject: any) { - - if (!inputObject) { - return null; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return inputObject.metadata.labels; - } - if (!!inputObject.spec && !!inputObject.spec.template && !!inputObject.spec.template.metadata) { - return inputObject.spec.template.metadata.labels; - } - - return null; -} - -function getImagePullSecrets(inputObject: any) { - - if (!inputObject || !inputObject.spec) { - return null; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.cronjob, StringComparer.OrdinalIgnoreCase)) { - try { - return inputObject.spec.jobTemplate.spec.template.spec.imagePullSecrets; - } catch (ex) { - tl.debug(`Fetching imagePullSecrets failed due to this error: ${JSON.stringify(ex)}`); - return null; - } - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return inputObject.spec.imagePullSecrets; - } - - if (!!inputObject.spec.template && !!inputObject.spec.template.spec) { - return inputObject.spec.template.spec.imagePullSecrets; - } - - return null; -} - -function setImagePullSecrets(inputObject: any, newImagePullSecrets: any) { - if (!inputObject || !inputObject.spec || !newImagePullSecrets) { - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - inputObject.spec.imagePullSecrets = newImagePullSecrets; - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.cronjob, StringComparer.OrdinalIgnoreCase)) { - try { - inputObject.spec.jobTemplate.spec.template.spec.imagePullSecrets = newImagePullSecrets; - } catch (ex) { - tl.debug(`Overriding imagePullSecrets failed due to this error: ${JSON.stringify(ex)}`); - //Do nothing - } - return; - } - - if (!!inputObject.spec.template && !!inputObject.spec.template.spec) { - inputObject.spec.template.spec.imagePullSecrets = newImagePullSecrets; - return; - } - - return; -} - -export function updateImageDetails(inputObject: any, containers: string[]) { - if (!inputObject || !inputObject.spec || !containers) { - return; - } - - if (inputObject.spec.template && !!inputObject.spec.template.spec) { - if (inputObject.spec.template.spec.containers) { - updateContainers(inputObject.spec.template.spec.containers, containers); - } - if (inputObject.spec.template.spec.initContainers) { - updateContainers(inputObject.spec.template.spec.initContainers, containers); - } - return; - } - - if (inputObject.spec.jobTemplate && inputObject.spec.jobTemplate.spec && inputObject.spec.jobTemplate.spec.template && inputObject.spec.jobTemplate.spec.template.spec) { - if (inputObject.spec.jobTemplate.spec.template.spec.containers) { - updateContainers(inputObject.spec.jobTemplate.spec.template.spec.containers, containers); - } - - if (inputObject.spec.jobTemplate.spec.template.spec.initContainers) { - updateContainers(inputObject.spec.jobTemplate.spec.template.spec.initContainers, containers); - } - return; - } - - if (inputObject.spec.containers) { - updateContainers(inputObject.spec.containers, containers); - } - - if (inputObject.spec.initContainers) { - updateContainers(inputObject.spec.initContainers, containers); - } -} - -function extractImageName(imageName) { - let img = ''; - if (imageName.indexOf('/') > 0) { - const registry = imageName.substring(0, imageName.indexOf('/')); - const imgName = imageName.substring(imageName.indexOf('/') + 1).split(':')[0]; - img = `${registry}/${imgName}`; - } else { - img = imageName.split(':')[0]; - } - return img.split('@sha256')[0]; -} - -function updateContainers(containers: any[], images: string[]) { - if (!containers || containers.length === 0) { - return containers; - } - containers.forEach((container) => { - const imageName: string = extractImageName(container.image.trim()); - images.forEach(image => { - if (extractImageName(image) === imageName) { - container.image = image; - } - }); - }); -} - -function setSpecLabels(inputObject: any, newLabels: any) { - let specLabels = getSpecLabels(inputObject); - if (!!newLabels) { - specLabels = newLabels; - } -} - -function getSpecSelectorLabels(inputObject: any) { - - if (!!inputObject && !!inputObject.spec && !!inputObject.spec.selector) { - if (isServiceEntity(inputObject.kind)) { - return inputObject.spec.selector; - } else { - return inputObject.spec.selector.matchLabels; - } - } - - return null; -} - -function setSpecSelectorLabels(inputObject: any, newLabels: any) { - - let selectorLabels = getSpecSelectorLabels(inputObject); - if (!!selectorLabels) { - selectorLabels = newLabels; - } -} diff --git a/_generated/KubernetesManifestV0/src/utils/PodCanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0/src/utils/PodCanaryDeploymentHelper.ts deleted file mode 100644 index 3756b42516f0..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/PodCanaryDeploymentHelper.ts +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as fileHelper from '../utils/FileHelper'; -import * as helper from '../utils/KubernetesObjectUtility'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -export function deployPodCanary(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const percentage = parseInt(TaskInputParameters.canaryPercentage); - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind)) { - tl.debug('Calculating replica count for canary'); - const canaryReplicaCount = calculateReplicaCountForCanary(inputObject, percentage); - tl.debug('Replica count is ' + canaryReplicaCount); - - // Get stable object - tl.debug('Querying stable object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, name); - if (!stableObject) { - tl.debug('Stable object not found. Creating only canary object'); - // If stable object not found, create canary deployment. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - newObjectsList.push(newCanaryObject); - } else { - tl.debug('Stable object found. Creating canary and baseline objects'); - // If canary object not found, create canary and baseline object. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - const newBaselineObject = canaryDeploymentHelper.getNewBaselineResource(stableObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineObject)); - newObjectsList.push(newCanaryObject); - newObjectsList.push(newBaselineObject); - } - } else { - // Updating non deployment entity as it is. - newObjectsList.push(inputObject); - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - const result = kubectl.apply(manifestFiles); - return { 'result': result, 'newFilePaths': manifestFiles }; -} - -function calculateReplicaCountForCanary(inputObject: any, percentage: number) { - const inputReplicaCount = helper.getReplicaCount(inputObject); - return Math.round((inputReplicaCount * percentage) / 100); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/utils/SMICanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0/src/utils/SMICanaryDeploymentHelper.ts deleted file mode 100644 index 1cb24e24938a..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/SMICanaryDeploymentHelper.ts +++ /dev/null @@ -1,234 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; -import * as util from 'util'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as fileHelper from '../utils/FileHelper'; -import * as helper from '../utils/KubernetesObjectUtility'; -import * as utils from '../utils/utilities'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -const TRAFFIC_SPLIT_OBJECT_NAME_SUFFIX = '-azure-pipelines-rollout'; -const TRAFFIC_SPLIT_OBJECT = 'TrafficSplit'; -var trafficSplitAPIVersion = null; - -export function deploySMICanary(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const canaryReplicaCount = parseInt(TaskInputParameters.baselineAndCanaryReplicas); - tl.debug('Replica count is ' + canaryReplicaCount); - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind)) { - // Get stable object - tl.debug('Querying stable object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, name); - if (!stableObject) { - tl.debug('Stable object not found. Creating only canary object'); - // If stable object not found, create canary deployment. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - newObjectsList.push(newCanaryObject); - } else { - if (!canaryDeploymentHelper.isResourceMarkedAsStable(stableObject)) { - throw (tl.loc('StableSpecSelectorNotExist', name)); - } - - tl.debug('Stable object found. Creating canary and baseline objects'); - // If canary object not found, create canary and baseline object. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - const newBaselineObject = canaryDeploymentHelper.getNewBaselineResource(stableObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineObject)); - newObjectsList.push(newCanaryObject); - newObjectsList.push(newBaselineObject); - } - } else { - // Updating non deployment entity as it is. - newObjectsList.push(inputObject); - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - const result = kubectl.apply(manifestFiles); - createCanaryService(kubectl, filePaths); - return { 'result': result, 'newFilePaths': manifestFiles }; -} - -function createCanaryService(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const trafficObjectsList = []; - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isServiceEntity(kind)) { - const newCanaryServiceObject = canaryDeploymentHelper.getNewCanaryResource(inputObject); - tl.debug('New canary service object is: ' + JSON.stringify(newCanaryServiceObject)); - newObjectsList.push(newCanaryServiceObject); - - const newBaselineServiceObject = canaryDeploymentHelper.getNewBaselineResource(inputObject); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineServiceObject)); - newObjectsList.push(newBaselineServiceObject); - - tl.debug('Querying for stable service object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, canaryDeploymentHelper.getStableResourceName(name)); - if (!stableObject) { - const newStableServiceObject = canaryDeploymentHelper.getStableResource(inputObject); - tl.debug('New stable service object is: ' + JSON.stringify(newStableServiceObject)); - newObjectsList.push(newStableServiceObject); - - tl.debug('Creating the traffic object for service: ' + name); - const trafficObject = createTrafficSplitManifestFile(kubectl, name, 0, 0, 1000); - tl.debug('Creating the traffic object for service: ' + trafficObject); - trafficObjectsList.push(trafficObject); - } else { - let updateTrafficObject = true; - const trafficObject = canaryDeploymentHelper.fetchResource(kubectl, TRAFFIC_SPLIT_OBJECT, getTrafficSplitResourceName(name)); - if (trafficObject) { - const trafficJObject = JSON.parse(JSON.stringify(trafficObject)); - if (trafficJObject && trafficJObject.spec && trafficJObject.spec.backends) { - trafficJObject.spec.backends.forEach((s) => { - if (s.service === canaryDeploymentHelper.getCanaryResourceName(name) && s.weight === "1000m") { - tl.debug('Update traffic objcet not required'); - updateTrafficObject = false; - } - }) - } - } - - if (updateTrafficObject) { - tl.debug('Stable service object present so updating the traffic object for service: ' + name); - trafficObjectsList.push(updateTrafficSplitObject(kubectl, name)); - } - } - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - manifestFiles.push(...trafficObjectsList); - const result = kubectl.apply(manifestFiles); - utils.checkForErrors([result]); -} - -export function redirectTrafficToCanaryDeployment(kubectl: Kubectl, manifestFilePaths: string[]) { - adjustTraffic(kubectl, manifestFilePaths, 0, 1000); -} - -export function redirectTrafficToStableDeployment(kubectl: Kubectl, manifestFilePaths: string[]) { - adjustTraffic(kubectl, manifestFilePaths, 1000, 0); -} - -function getNewServiceObject(inputObject: any, type: string): object { - const newObject = JSON.parse(JSON.stringify(inputObject)); - // Updating name - newObject.metadata.name = type === canaryDeploymentHelper.CANARY_LABEL_VALUE ? - canaryDeploymentHelper.getCanaryResourceName(inputObject.metadata.name) : - canaryDeploymentHelper.getBaselineResourceName(inputObject.metadata.name); - - const newLabels = new Map(); - newLabels[canaryDeploymentHelper.CANARY_VERSION_LABEL] = type; - - helper.updateObjectLabels(inputObject, newLabels, false); - helper.updateObjectAnnotations(inputObject, newLabels, false); - helper.updateSelectorLabels(inputObject, newLabels, false); - - return newObject; -} - -function adjustTraffic(kubectl: Kubectl, manifestFilePaths: string[], stableWeight: number, canaryWeight: number) { - // get manifest files - const inputManifestFiles: string[] = utils.getManifestFiles(manifestFilePaths); - - if (inputManifestFiles == null || inputManifestFiles.length == 0) { - return; - } - - const trafficSplitManifests = []; - const serviceObjects = []; - inputManifestFiles.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isServiceEntity(kind)) { - trafficSplitManifests.push(createTrafficSplitManifestFile(kubectl, name, stableWeight, 0, canaryWeight)); - serviceObjects.push(name); - } - }); - }); - - if (trafficSplitManifests.length <= 0) { - return; - } - - const result = kubectl.apply(trafficSplitManifests); - tl.debug('serviceObjects:' + serviceObjects.join(',') + ' result:' + result); - utils.checkForErrors([result]); -} - -function updateTrafficSplitObject(kubectl: Kubectl, serviceName: string): string { - const percentage = parseInt(TaskInputParameters.canaryPercentage) * 10; - const baselineAndCanaryWeight = percentage / 2; - const stableDeploymentWeight = 1000 - percentage; - tl.debug('Creating the traffic object with canary weight: ' + baselineAndCanaryWeight + ',baseling weight: ' + baselineAndCanaryWeight + ',stable: ' + stableDeploymentWeight); - return createTrafficSplitManifestFile(kubectl, serviceName, stableDeploymentWeight, baselineAndCanaryWeight, baselineAndCanaryWeight); -} - -function createTrafficSplitManifestFile(kubectl: Kubectl, serviceName: string, stableWeight: number, baselineWeight: number, canaryWeight: number): string { - const smiObjectString = getTrafficSplitObject(kubectl, serviceName, stableWeight, baselineWeight, canaryWeight); - const manifestFile = fileHelper.writeManifestToFile(smiObjectString, TRAFFIC_SPLIT_OBJECT, serviceName); - if (!manifestFile) { - throw new Error(tl.loc('UnableToCreateTrafficSplitManifestFile', 'Could not create manifest file for TrafficSplit object')); - } - - return manifestFile; -} - -function getTrafficSplitObject(kubectl: Kubectl, name: string, stableWeight: number, baselineWeight: number, canaryWeight: number): string { - if (!trafficSplitAPIVersion) - trafficSplitAPIVersion = utils.getTrafficSplitAPIVersion(kubectl); - const trafficSplitObjectJson = `{ - "apiVersion": "${trafficSplitAPIVersion}", - "kind": "TrafficSplit", - "metadata": { - "name": "%s" - }, - "spec": { - "backends": [ - { - "service": "%s", - "weight": "%sm" - }, - { - "service": "%s", - "weight": "%sm" - }, - { - "service": "%s", - "weight": "%sm" - } - ], - "service": "%s" - } - }`; - - const trafficSplitObject = util.format(trafficSplitObjectJson, getTrafficSplitResourceName(name), canaryDeploymentHelper.getStableResourceName(name), stableWeight, canaryDeploymentHelper.getBaselineResourceName(name), baselineWeight, canaryDeploymentHelper.getCanaryResourceName(name), canaryWeight, name); - return trafficSplitObject; -} - -function getTrafficSplitResourceName(name: string) { - return name + TRAFFIC_SPLIT_OBJECT_NAME_SUFFIX; -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/utils/StringComparison.ts b/_generated/KubernetesManifestV0/src/utils/StringComparison.ts deleted file mode 100644 index 0cb0ee23d07e..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/StringComparison.ts +++ /dev/null @@ -1,25 +0,0 @@ -export enum StringComparer { - Ordinal, - OrdinalIgnoreCase, -} - -export function isEqual(str1: string, str2: string, stringComparer: StringComparer): boolean { - - if (str1 == null && str2 == null) { - return true; - } - - if (str1 == null) { - return false; - } - - if (str2 == null) { - return false; - } - - if (stringComparer == StringComparer.OrdinalIgnoreCase) { - return str1.toUpperCase() === str2.toUpperCase(); - } else { - return str1 === str2; - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/utils/installers.ts b/_generated/KubernetesManifestV0/src/utils/installers.ts deleted file mode 100644 index e8201bcf111c..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/installers.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as os from 'os'; -import * as toolLib from 'azure-pipelines-tool-lib/tool'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as fs from 'fs'; - -export abstract class Installer { - public checkIfExists: () => string; // Return empty string if it doesn't exist - public install: () => Promise; - protected getExecutableExtension () { - switch (os.type()) { - case 'Windows_NT': - return `.exe`; - default: - return ``; - } - } -} - -export class KomposeInstaller extends Installer { - public checkIfExists = () => { - try { - const toolPath = tl.which(this.toolName, true); - return toolPath; - } catch (ex) { - // Finding in tool lib cache - const toolPath = toolLib.findLocalTool(this.toolName, this.defaultVersion); - if (toolPath) { - return path.join(toolPath, this.tool); - } - return ''; - } - } - - public install = async (): Promise => { - let toolPath = await toolLib.downloadTool(this.getDownloadUrl(), this.toolName); - const cachedFolderPath = await toolLib.cacheFile(toolPath, this.tool, this.toolName, this.defaultVersion); - toolPath = path.join(cachedFolderPath, this.tool); - fs.chmodSync(toolPath, 0o100); // execute/search by owner permissions to the tool - return path.join(cachedFolderPath, this.tool); - } - - private getDownloadUrl(): string { - switch (os.type()) { - case 'Linux': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-linux-amd64`; - case 'Darwin': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-darwin-amd64`; - case 'Windows_NT': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-windows-amd64.exe`; - default: - throw Error('Unknown OS type'); - } - } - - public defaultVersion: string = 'v1.18.0'; - public toolName: string = 'kompose'; - public tool: string = `${this.toolName}${this.getExecutableExtension()}`; -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/src/utils/utilities.ts b/_generated/KubernetesManifestV0/src/utils/utilities.ts deleted file mode 100644 index 5e755a2ceddb..000000000000 --- a/_generated/KubernetesManifestV0/src/utils/utilities.ts +++ /dev/null @@ -1,158 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; -import * as kubectlutility from 'azure-pipelines-tasks-kubernetes-common/kubectlutility'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { pipelineAnnotations } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { KubernetesConnection } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconnection'; -import * as filehelper from './FileHelper'; - -export function getManifestFiles(manifestFilePaths: string | string[]): string[] { - if (!manifestFilePaths) { - tl.debug('file input is not present'); - return null; - } - - const files = tl.findMatch(tl.getVariable('System.DefaultWorkingDirectory') || process.cwd(), manifestFilePaths); - return files; -} - -export function getConnection(): KubernetesConnection { - const kubernetesServiceConnection = tl.getInput('kubernetesServiceConnection', true); - const tempPath = filehelper.getNewUserDirPath(); - const connection = new KubernetesConnection(kubernetesServiceConnection, tempPath); - return connection; -} - -export async function getKubectl(): Promise { - try { - return Promise.resolve(tl.which('kubectl', true)); - } catch (ex) { - return kubectlutility.downloadKubectl(await kubectlutility.getStableKubectlVersion()); - } -} - -export function createKubectlArgs(kind: string, names: Set): string { - let args = ''; - if (!!kind) { - args = args + kind; - } - - if (!!names && names.size > 0) { - args = args + ' ' + Array.from(names.values()).join(' '); - } - - return args; -} - -export function getDeleteCmdArgs(argsPrefix: string, inputArgs: string): string { - let args = ''; - - if (!!argsPrefix && argsPrefix.length > 0) { - args = argsPrefix; - } - - if (!!inputArgs && inputArgs.length > 0) { - if (args.length > 0) { - args = args + ' '; - } - - args = args + inputArgs; - } - - return args; -} - -export function checkForErrors(execResults: IExecSyncResult[], warnIfError?: boolean) { - if (execResults.length !== 0) { - let stderr = ''; - execResults.forEach(result => { - if (result.stderr) { - if (result.code !== 0) { - stderr += result.stderr + '\n'; - } else { - tl.warning(result.stderr); - } - } - }); - if (stderr.length > 0) { - if (!!warnIfError) { - tl.warning(stderr.trim()); - } else { - throw new Error(stderr.trim()); - } - } - } -} - -export function annotateChildPods(kubectl: Kubectl, resourceType: string, resourceName: string, allPods): IExecSyncResult[] { - const commandExecutionResults = []; - let owner = resourceName; - if (resourceType.toLowerCase().indexOf('deployment') > -1) { - owner = kubectl.getNewReplicaSet(resourceName); - } - - if (!!allPods && !!allPods.items && allPods.items.length > 0) { - allPods.items.forEach((pod) => { - const owners = pod.metadata.ownerReferences; - if (!!owners) { - owners.forEach(ownerRef => { - if (ownerRef.name === owner) { - commandExecutionResults.push(kubectl.annotate('pod', pod.metadata.name, pipelineAnnotations, true)); - } - }); - } - }); - } - - return commandExecutionResults; -} - -/* - For example, - currentString: `image: "example/example-image"` - imageName: `example/example-image` - imageNameWithNewTag: `example/example-image:identifiertag` - - This substituteImageNameInSpecFile function would return - return Value: `image: "example/example-image:identifiertag"` -*/ - -export function substituteImageNameInSpecFile(currentString: string, imageName: string, imageNameWithNewTag: string) { - if (currentString.indexOf(imageName) < 0) { - tl.debug(`No occurence of replacement token: ${imageName} found`); - return currentString; - } - - return currentString.split('\n').reduce((acc, line) => { - const imageKeyword = line.match(/^ *image:/); - if (imageKeyword) { - let [currentImageName, currentImageTag] = line - .substring(imageKeyword[0].length) // consume the line from keyword onwards - .trim() - .replace(/[',"]/g, '') // replace allowed quotes with nothing - .split(':'); - - if (!currentImageTag && currentImageName.indexOf(' ') > 0) { - currentImageName = currentImageName.split(' ')[0]; // Stripping off comments - } - - if (currentImageName === imageName) { - return acc + `${imageKeyword[0]} ${imageNameWithNewTag}\n`; - } - } - - return acc + line + '\n'; - }, ''); -} - -export function getTrafficSplitAPIVersion(kubectl: Kubectl) { - const result = kubectl.executeCommand('api-versions'); - const trafficSplitAPIVersion = result.stdout.split('\n').find(version => version.startsWith('split.smi-spec.io')); - if (trafficSplitAPIVersion == null || typeof trafficSplitAPIVersion == 'undefined') { - throw new Error(tl.loc('UnableToCreateTrafficSplitManifestFile', 'Could not find a valid api version for TrafficSplit object')); - } - tl.debug("api-version: " + trafficSplitAPIVersion); - return trafficSplitAPIVersion; -} diff --git a/_generated/KubernetesManifestV0/task.json b/_generated/KubernetesManifestV0/task.json deleted file mode 100644 index e53412c023b3..000000000000 --- a/_generated/KubernetesManifestV0/task.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "id": "DEE316A2-586F-4DEF-BE79-488A1F503DFE", - "name": "KubernetesManifest", - "friendlyName": "Deploy to Kubernetes", - "description": "Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts", - "helpUrl": "https://aka.ms/azpipes-k8s-manifest-tsg", - "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=851275) or [see the Kubernetes documentation](https://kubernetes.io/docs/home/)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 0, - "Minor": 226, - "Patch": 1 - }, - "demands": [], - "groups": [], - "inputs": [ - { - "name": "action", - "type": "pickList", - "label": "Action", - "required": false, - "defaultValue": "deploy", - "options": { - "bake": "bake", - "createSecret": "create secret", - "delete": "delete", - "deploy": "deploy", - "patch": "patch", - "promote": "promote", - "scale": "scale", - "reject": "reject" - }, - "helpMarkDown": "Choose the action to be performed." - }, - { - "name": "kubernetesServiceConnection", - "type": "connectedService:kubernetes", - "label": "Kubernetes service connection", - "helpMarkDown": "Select a Kubernetes service connection.", - "visibleRule": "action != bake", - "required": true - }, - { - "name": "namespace", - "type": "string", - "label": "Namespace", - "required": false, - "defaultValue": "", - "helpMarkDown": "Sets the namespace for the commands by using the –namespace flag. If the namespace is not provided, the commands will run in the default namespace." - }, - { - "name": "strategy", - "type": "pickList", - "label": "Strategy", - "required": false, - "defaultValue": "none", - "options": { - "canary": "Canary", - "none": "None" - }, - "helpMarkDown": "Deployment strategy to be used", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "trafficSplitMethod", - "type": "pickList", - "label": "Traffic split method", - "required": false, - "defaultValue": "pod", - "options": { - "pod": "Pod", - "smi": "SMI" - }, - "helpMarkDown": "Traffic split method to be used", - "visibleRule": "strategy = canary" - }, - { - "name": "percentage", - "type": "string", - "label": "Percentage", - "required": true, - "helpMarkDown": "Percentage of traffic redirect to canary deployment", - "defaultValue": 0, - "visibleRule": "strategy = Canary && action = deploy", - "validation": { - "expression": "isMatch(value, '(^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$)','Multiline')", - "message": "Enter valid percentage value i.e between 0 to 100." - } - }, - { - "name": "baselineAndCanaryReplicas", - "type": "string", - "label": "Baseline and canary replicas", - "required": true, - "helpMarkDown": "Baseline and canary replicas count", - "defaultValue": 1, - "visibleRule": "strategy = Canary && action = deploy && trafficSplitMethod = SMI", - "validation": { - "expression": "isMatch(value, '(^([0-9]|([1-9]\\d*))$)','Multiline')", - "message": "Enter valid value for baseline and canary replica count." - } - }, - { - "name": "manifests", - "type": "filePath", - "label": "Manifests", - "required": true, - "defaultValue": "", - "helpMarkDown": "Manifests to deploy", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "containers", - "type": "multiLine", - "label": "Containers", - "required": false, - "defaultValue": "", - "helpMarkDown": "Containers", - "visibleRule": "action = deploy || action = promote || action = bake" - }, - { - "name": "imagePullSecrets", - "type": "multiLine", - "label": "ImagePullSecrets", - "required": false, - "defaultValue": "", - "helpMarkDown": "ImagePullSecret to pull image from private registry", - "visibleRule": "action = deploy || action = promote" - }, - { - "name": "renderType", - "type": "pickList", - "label": "Render Engine", - "required": false, - "defaultValue": "helm", - "visibleRule": "action = bake", - "options": { - "helm": "Helm", - "kompose": "Kompose", - "kustomize": "Kustomize" - }, - "helpMarkDown": "Tool to use for generating manifest files." - }, - { - "name": "dockerComposeFile", - "type": "filePath", - "label": "Path to docker compose file", - "required": true, - "defaultValue": "", - "visibleRule": "action = bake && renderType = kompose", - "helpMarkDown": "docker-compose file path" - }, - { - "name": "helmChart", - "type": "filePath", - "label": "Helm Chart", - "required": true, - "defaultValue": "", - "helpMarkDown": "Helm chart path to bake", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "releaseName", - "type": "string", - "label": "Helm Release Name", - "required": false, - "defaultValue": "", - "helpMarkDown": "Helm release name to use", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrideFiles", - "type": "multiLine", - "label": "Override Files", - "required": false, - "defaultValue": "", - "helpMarkDown": "Override files to set", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrides", - "type": "multiLine", - "label": "Overrides", - "required": false, - "defaultValue": "", - "helpMarkDown": "Override values to set", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "kustomizationPath", - "type": "filePath", - "label": "Kustomization Path", - "required": false, - "visibleRule": "action = bake && renderType = kustomize", - "defaultValue": "", - "helpMarkDown": "The argument must be the path to the directory containing the file, or a git repository URL with a path suffix specifying same with respect to the repository root." - }, - { - "name": "resourceToPatch", - "type": "radio", - "label": "Resource to patch", - "required": true, - "defaultValue": "file", - "options": { - "file": "file", - "name": "name" - }, - "helpMarkDown": "to identify the resource", - "visibleRule": "action = patch" - }, - { - "name": "resourceFileToPatch", - "type": "filePath", - "label": "File path", - "required": true, - "defaultValue": "", - "helpMarkDown": "Path to the file used for patch", - "visibleRule": "action = patch && resourceToPatch = file" - }, - { - "name": "kind", - "type": "pickList", - "label": "Kind", - "required": true, - "defaultValue": "", - "options": { - "deployment": "deployment", - "replicaset": "replicaset", - "statefulset": "statefulset" - }, - "helpMarkDown": "Kind of K8s object; deployment, replicaSet etc.", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "name", - "type": "string", - "label": "Name", - "required": true, - "defaultValue": "", - "helpMarkDown": "Name of the k8s object", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "replicas", - "type": "string", - "label": "Replica count", - "required": true, - "defaultValue": "", - "helpMarkDown": "Number of replicas to scale to", - "visibleRule": "action = scale" - }, - { - "name": "mergeStrategy", - "type": "pickList", - "label": "Merge Strategy", - "required": true, - "defaultValue": "strategic", - "options": { - "json": "json", - "merge": "merge", - "strategic": "strategic" - }, - "helpMarkDown": "The type of patch being provided; one of [json merge strategic]", - "visibleRule": "action = patch" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Arguments for `kubectl delete` command", - "visibleRule": "action = delete" - }, - { - "name": "patch", - "type": "string", - "label": "Patch", - "required": true, - "helpMarkDown": "Contents of patch", - "visibleRule": "action = patch" - }, - { - "name": "secretType", - "type": "pickList", - "label": "Type of secret", - "defaultValue": "dockerRegistry", - "required": true, - "visibleRule": "action = createSecret", - "options": { - "dockerRegistry": "dockerRegistry", - "generic": "generic" - }, - "helpMarkDown": "Create/update a generic or docker imagepullsecret. Select dockerRegistry to create/update the imagepullsecret of the selected registry. An imagePullSecret is a way to pass a secret that contains a container registry password to the Kubelet so it can pull a private image on behalf of your Pod." - }, - { - "name": "secretName", - "type": "string", - "label": "Secret name", - "required": false, - "visibleRule": "action = createSecret", - "defaultValue": "", - "helpMarkDown": "Name of the secret. You can use this secret name in the Kubernetes YAML configuration file." - }, - { - "name": "secretArguments", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2", - "editorExtension": "ms.vss-services-azure.kubernetes-parameters-grid" - }, - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Specify keys and literal values to insert in secret.For example, --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "visibleRule": "action = createSecret && secretType = generic" - }, - { - "name": "dockerRegistryEndpoint", - "type": "connectedService:dockerregistry", - "label": "Docker registry service connection", - "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", - "visibleRule": "action = createSecret && secretType = dockerRegistry" - }, - { - "name": "rolloutStatusTimeout", - "type": "string", - "label": "Timeout for rollout status", - "defaultValue": "0", - "required": false, - "helpMarkDown": "The length of time (in seconds) to wait before ending watch on rollout status", - "visibleRule": "action = deploy || action = patch || action = scale || action = promote", - "validation": { - "expression": "isMatch(value, '(^\\d*$)','Multiline')", - "message": "Enter a valid value for timeout." - } - } - ], - "dataSourceBindings": [], - "instanceNameFormat": "$(action)", - "outputVariables": [ - { - "name": "manifestsBundle", - "description": "The location of the manifest bundles created by bake action" - } - ], - "execution": { - "Node10": { - "target": "src//run.js" - } - }, - "messages": { - "DownloadPathForStableTxt": "Download path for stable.txt: %s", - "DownloadKubeCtlFailed": "Can not download the kubectl client of version %s. Check if the version is correct https://github.com/kubernetes/kubernetes/releases", - "DownloadStableVersionFailed": "Can not download kubernetes stable version file from %s. Falling back to %s", - "DockerComposeFilePathNotSupplied": "docker-compose file path not supplied", - "UsingLatestStableVersion": "Invalid version 1.7 specified in Version Spec input. Using latest stable version instead. Check for correct versions https://github.com/kubernetes/kubernetes/releases", - "NotAValidSemverVersion": "Version not specified in correct format. E.g: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "ManifestFileNotFound": "No manifest file(s) matching %s was found.", - "KubernetesServiceConnectionNotFound": "Kubernetes service connection details not found.", - "UnknownRenderType": "Unknown render engine", - "ResourceKindNotDefined": "Resource kind is null", - "NullInputObject": "Input object is null.", - "ArgumentsInputNotSupplied": "Arguments are not supplied.", - "NullInputObjectMetadata": "Input object metadata is null.", - "InvalidRejectActionDeploymentStrategy": "Reject action works only with strategy: canary", - "InvalidPromotetActionDeploymentStrategy": "Promote action works only with strategy: canary", - "AllContainersNotInReadyState": "All the containers are not in a ready state.", - "CouldNotDeterminePodStatus": "Could not determine the pod's status due to the error: %s", - "KubectlShouldBeUpgraded": "kubectl client version equal to v1.14 or higher is required to use kustomize features.", - "CouldNotDetermineServiceStatus": "Could not determine the service %s status due to the error: %s", - "waitForServiceIpAssignment": "Waiting for service %s external IP assignment", - "waitForServiceIpAssignmentTimedOut": "Wait for service %s external IP assignment timed out", - "ServiceExternalIP": "service %s external IP is %s", - "UnableToCreateTrafficSplitManifestFile": "Unable to create TrafficSplit manifest file. %s", - "StableSpecSelectorNotExist": "Resource %s not deployed using SMI canary deployment.", - "InvalidPercentage": "Invalid value for percentage.", - "InvalidBaselineAndCanaryReplicas": "Invalid value for replica count.", - "InvalidTimeoutValue": "Invalid value for timeout. Enter a valid number.", - "RolloutStatusTimedout": "Rollout status check failed.", - "EnvironmentLink": "For more information, go to %s" - }, - "_buildConfigMapping": { - "Default": "0.226.1", - "Node16-225": "0.226.0" - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/task.loc.json b/_generated/KubernetesManifestV0/task.loc.json deleted file mode 100644 index c8051755ec3b..000000000000 --- a/_generated/KubernetesManifestV0/task.loc.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "id": "DEE316A2-586F-4DEF-BE79-488A1F503DFE", - "name": "KubernetesManifest", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "helpUrl": "https://aka.ms/azpipes-k8s-manifest-tsg", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 0, - "Minor": 226, - "Patch": 1 - }, - "demands": [], - "groups": [], - "inputs": [ - { - "name": "action", - "type": "pickList", - "label": "ms-resource:loc.input.label.action", - "required": false, - "defaultValue": "deploy", - "options": { - "bake": "bake", - "createSecret": "create secret", - "delete": "delete", - "deploy": "deploy", - "patch": "patch", - "promote": "promote", - "scale": "scale", - "reject": "reject" - }, - "helpMarkDown": "ms-resource:loc.input.help.action" - }, - { - "name": "kubernetesServiceConnection", - "type": "connectedService:kubernetes", - "label": "ms-resource:loc.input.label.kubernetesServiceConnection", - "helpMarkDown": "ms-resource:loc.input.help.kubernetesServiceConnection", - "visibleRule": "action != bake", - "required": true - }, - { - "name": "namespace", - "type": "string", - "label": "ms-resource:loc.input.label.namespace", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.namespace" - }, - { - "name": "strategy", - "type": "pickList", - "label": "ms-resource:loc.input.label.strategy", - "required": false, - "defaultValue": "none", - "options": { - "canary": "Canary", - "none": "None" - }, - "helpMarkDown": "ms-resource:loc.input.help.strategy", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "trafficSplitMethod", - "type": "pickList", - "label": "ms-resource:loc.input.label.trafficSplitMethod", - "required": false, - "defaultValue": "pod", - "options": { - "pod": "Pod", - "smi": "SMI" - }, - "helpMarkDown": "ms-resource:loc.input.help.trafficSplitMethod", - "visibleRule": "strategy = canary" - }, - { - "name": "percentage", - "type": "string", - "label": "ms-resource:loc.input.label.percentage", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.percentage", - "defaultValue": 0, - "visibleRule": "strategy = Canary && action = deploy", - "validation": { - "expression": "isMatch(value, '(^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$)','Multiline')", - "message": "Enter valid percentage value i.e between 0 to 100." - } - }, - { - "name": "baselineAndCanaryReplicas", - "type": "string", - "label": "ms-resource:loc.input.label.baselineAndCanaryReplicas", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.baselineAndCanaryReplicas", - "defaultValue": 1, - "visibleRule": "strategy = Canary && action = deploy && trafficSplitMethod = SMI", - "validation": { - "expression": "isMatch(value, '(^([0-9]|([1-9]\\d*))$)','Multiline')", - "message": "Enter valid value for baseline and canary replica count." - } - }, - { - "name": "manifests", - "type": "filePath", - "label": "ms-resource:loc.input.label.manifests", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.manifests", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "containers", - "type": "multiLine", - "label": "ms-resource:loc.input.label.containers", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.containers", - "visibleRule": "action = deploy || action = promote || action = bake" - }, - { - "name": "imagePullSecrets", - "type": "multiLine", - "label": "ms-resource:loc.input.label.imagePullSecrets", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.imagePullSecrets", - "visibleRule": "action = deploy || action = promote" - }, - { - "name": "renderType", - "type": "pickList", - "label": "ms-resource:loc.input.label.renderType", - "required": false, - "defaultValue": "helm", - "visibleRule": "action = bake", - "options": { - "helm": "Helm", - "kompose": "Kompose", - "kustomize": "Kustomize" - }, - "helpMarkDown": "ms-resource:loc.input.help.renderType" - }, - { - "name": "dockerComposeFile", - "type": "filePath", - "label": "ms-resource:loc.input.label.dockerComposeFile", - "required": true, - "defaultValue": "", - "visibleRule": "action = bake && renderType = kompose", - "helpMarkDown": "ms-resource:loc.input.help.dockerComposeFile" - }, - { - "name": "helmChart", - "type": "filePath", - "label": "ms-resource:loc.input.label.helmChart", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.helmChart", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "releaseName", - "type": "string", - "label": "ms-resource:loc.input.label.releaseName", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.releaseName", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrideFiles", - "type": "multiLine", - "label": "ms-resource:loc.input.label.overrideFiles", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.overrideFiles", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrides", - "type": "multiLine", - "label": "ms-resource:loc.input.label.overrides", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.overrides", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "kustomizationPath", - "type": "filePath", - "label": "ms-resource:loc.input.label.kustomizationPath", - "required": false, - "visibleRule": "action = bake && renderType = kustomize", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.kustomizationPath" - }, - { - "name": "resourceToPatch", - "type": "radio", - "label": "ms-resource:loc.input.label.resourceToPatch", - "required": true, - "defaultValue": "file", - "options": { - "file": "file", - "name": "name" - }, - "helpMarkDown": "ms-resource:loc.input.help.resourceToPatch", - "visibleRule": "action = patch" - }, - { - "name": "resourceFileToPatch", - "type": "filePath", - "label": "ms-resource:loc.input.label.resourceFileToPatch", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.resourceFileToPatch", - "visibleRule": "action = patch && resourceToPatch = file" - }, - { - "name": "kind", - "type": "pickList", - "label": "ms-resource:loc.input.label.kind", - "required": true, - "defaultValue": "", - "options": { - "deployment": "deployment", - "replicaset": "replicaset", - "statefulset": "statefulset" - }, - "helpMarkDown": "ms-resource:loc.input.help.kind", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "name", - "type": "string", - "label": "ms-resource:loc.input.label.name", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.name", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "replicas", - "type": "string", - "label": "ms-resource:loc.input.label.replicas", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.replicas", - "visibleRule": "action = scale" - }, - { - "name": "mergeStrategy", - "type": "pickList", - "label": "ms-resource:loc.input.label.mergeStrategy", - "required": true, - "defaultValue": "strategic", - "options": { - "json": "json", - "merge": "merge", - "strategic": "strategic" - }, - "helpMarkDown": "ms-resource:loc.input.help.mergeStrategy", - "visibleRule": "action = patch" - }, - { - "name": "arguments", - "type": "string", - "label": "ms-resource:loc.input.label.arguments", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.arguments", - "visibleRule": "action = delete" - }, - { - "name": "patch", - "type": "string", - "label": "ms-resource:loc.input.label.patch", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.patch", - "visibleRule": "action = patch" - }, - { - "name": "secretType", - "type": "pickList", - "label": "ms-resource:loc.input.label.secretType", - "defaultValue": "dockerRegistry", - "required": true, - "visibleRule": "action = createSecret", - "options": { - "dockerRegistry": "dockerRegistry", - "generic": "generic" - }, - "helpMarkDown": "ms-resource:loc.input.help.secretType" - }, - { - "name": "secretName", - "type": "string", - "label": "ms-resource:loc.input.label.secretName", - "required": false, - "visibleRule": "action = createSecret", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.secretName" - }, - { - "name": "secretArguments", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2", - "editorExtension": "ms.vss-services-azure.kubernetes-parameters-grid" - }, - "label": "ms-resource:loc.input.label.secretArguments", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.secretArguments", - "visibleRule": "action = createSecret && secretType = generic" - }, - { - "name": "dockerRegistryEndpoint", - "type": "connectedService:dockerregistry", - "label": "ms-resource:loc.input.label.dockerRegistryEndpoint", - "helpMarkDown": "ms-resource:loc.input.help.dockerRegistryEndpoint", - "visibleRule": "action = createSecret && secretType = dockerRegistry" - }, - { - "name": "rolloutStatusTimeout", - "type": "string", - "label": "ms-resource:loc.input.label.rolloutStatusTimeout", - "defaultValue": "0", - "required": false, - "helpMarkDown": "ms-resource:loc.input.help.rolloutStatusTimeout", - "visibleRule": "action = deploy || action = patch || action = scale || action = promote", - "validation": { - "expression": "isMatch(value, '(^\\d*$)','Multiline')", - "message": "Enter a valid value for timeout." - } - } - ], - "dataSourceBindings": [], - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "outputVariables": [ - { - "name": "manifestsBundle", - "description": "The location of the manifest bundles created by bake action" - } - ], - "execution": { - "Node10": { - "target": "src//run.js" - } - }, - "messages": { - "DownloadPathForStableTxt": "ms-resource:loc.messages.DownloadPathForStableTxt", - "DownloadKubeCtlFailed": "ms-resource:loc.messages.DownloadKubeCtlFailed", - "DownloadStableVersionFailed": "ms-resource:loc.messages.DownloadStableVersionFailed", - "DockerComposeFilePathNotSupplied": "ms-resource:loc.messages.DockerComposeFilePathNotSupplied", - "UsingLatestStableVersion": "ms-resource:loc.messages.UsingLatestStableVersion", - "NotAValidSemverVersion": "ms-resource:loc.messages.NotAValidSemverVersion", - "ManifestFileNotFound": "ms-resource:loc.messages.ManifestFileNotFound", - "KubernetesServiceConnectionNotFound": "ms-resource:loc.messages.KubernetesServiceConnectionNotFound", - "UnknownRenderType": "ms-resource:loc.messages.UnknownRenderType", - "ResourceKindNotDefined": "ms-resource:loc.messages.ResourceKindNotDefined", - "NullInputObject": "ms-resource:loc.messages.NullInputObject", - "ArgumentsInputNotSupplied": "ms-resource:loc.messages.ArgumentsInputNotSupplied", - "NullInputObjectMetadata": "ms-resource:loc.messages.NullInputObjectMetadata", - "InvalidRejectActionDeploymentStrategy": "ms-resource:loc.messages.InvalidRejectActionDeploymentStrategy", - "InvalidPromotetActionDeploymentStrategy": "ms-resource:loc.messages.InvalidPromotetActionDeploymentStrategy", - "AllContainersNotInReadyState": "ms-resource:loc.messages.AllContainersNotInReadyState", - "CouldNotDeterminePodStatus": "ms-resource:loc.messages.CouldNotDeterminePodStatus", - "KubectlShouldBeUpgraded": "ms-resource:loc.messages.KubectlShouldBeUpgraded", - "CouldNotDetermineServiceStatus": "ms-resource:loc.messages.CouldNotDetermineServiceStatus", - "waitForServiceIpAssignment": "ms-resource:loc.messages.waitForServiceIpAssignment", - "waitForServiceIpAssignmentTimedOut": "ms-resource:loc.messages.waitForServiceIpAssignmentTimedOut", - "ServiceExternalIP": "ms-resource:loc.messages.ServiceExternalIP", - "UnableToCreateTrafficSplitManifestFile": "ms-resource:loc.messages.UnableToCreateTrafficSplitManifestFile", - "StableSpecSelectorNotExist": "ms-resource:loc.messages.StableSpecSelectorNotExist", - "InvalidPercentage": "ms-resource:loc.messages.InvalidPercentage", - "InvalidBaselineAndCanaryReplicas": "ms-resource:loc.messages.InvalidBaselineAndCanaryReplicas", - "InvalidTimeoutValue": "ms-resource:loc.messages.InvalidTimeoutValue", - "RolloutStatusTimedout": "ms-resource:loc.messages.RolloutStatusTimedout", - "EnvironmentLink": "ms-resource:loc.messages.EnvironmentLink" - }, - "_buildConfigMapping": { - "Default": "0.226.1", - "Node16-225": "0.226.0" - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0/tsconfig.json b/_generated/KubernetesManifestV0/tsconfig.json deleted file mode 100644 index 79a868c8d1e3..000000000000 --- a/_generated/KubernetesManifestV0/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs" - }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/de-DE/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/de-DE/resources.resjson deleted file mode 100644 index fb0cf98d7d61..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/de-DE/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Für Kubernetes bereitstellen", - "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=851275) oder [Kubernetes-Dokumentation anzeigen](https://kubernetes.io/docs/home/)", - "loc.description": "Verwenden Sie Kubernetes-Manifestdateien für die Bereitstellung in Clustern, oder erstellen Sie mit \"bake\" sogar die Manifestdateien für Bereitstellungen unter Verwendung von Helm-Charts.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Aktion", - "loc.input.help.action": "Wählen Sie die Aktion aus, die ausgeführt werden soll.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes-Dienstverbindung", - "loc.input.help.kubernetesServiceConnection": "Wählen Sie eine Kubernetes-Dienstverbindung aus.", - "loc.input.label.namespace": "Namespace", - "loc.input.help.namespace": "Legen Sie den Namespace für die Befehle fest, indem Sie das Flag \"–namespace\" verwenden. Wenn kein Namespace angegeben wird, werden die Befehle im Standardnamespace ausgeführt.", - "loc.input.label.strategy": "Strategie", - "loc.input.help.strategy": "Zu verwendende Bereitstellungsstrategie", - "loc.input.label.trafficSplitMethod": "Methode zum Trennen des Datenverkehrs", - "loc.input.help.trafficSplitMethod": "Methode, die zum Trennen des Datenverkehrs verwendet werden soll", - "loc.input.label.percentage": "Prozentsatz", - "loc.input.help.percentage": "Prozentsatz des Datenverkehrs, der an die Canary-Bereitstellung umgeleitet wird", - "loc.input.label.baselineAndCanaryReplicas": "Baseline- und Canary-Replikate", - "loc.input.help.baselineAndCanaryReplicas": "Anzahl von Baseline- und Canary-Replikaten", - "loc.input.label.manifests": "Manifeste", - "loc.input.help.manifests": "Bereitzustellende Manifeste", - "loc.input.label.containers": "Container", - "loc.input.help.containers": "Container", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret zum Abrufen des Images aus der privaten Registrierung", - "loc.input.label.renderType": "Render-Engine", - "loc.input.help.renderType": "Tool, das zum Generieren von Manifestdateien verwendet werden soll.", - "loc.input.label.dockerComposeFile": "Pfad zur Docker Compose-Datei", - "loc.input.help.dockerComposeFile": "Docker Compose-Dateipfad", - "loc.input.label.helmChart": "Helm-Chart", - "loc.input.help.helmChart": "Helm-Chart-Pfad für \"bake\"", - "loc.input.label.releaseName": "Name des Helm-Releases", - "loc.input.help.releaseName": "Name des Helm-Releases, das verwendet werden soll", - "loc.input.label.overrideFiles": "Außerkraftsetzungsdateien", - "loc.input.help.overrideFiles": "Außerkraftsetzungsdateien, die festgelegt werden sollen", - "loc.input.label.overrides": "Außerkraftsetzungen", - "loc.input.help.overrides": "Außerkraftsetzungswerte, die festgelegt werden sollen", - "loc.input.label.kustomizationPath": "Kustomization-Pfad", - "loc.input.help.kustomizationPath": "Das Argument muss der Pfad zum Verzeichnis sein, das die Datei enthält, oder eine Git-Repository-URL mit einem Pfadsuffix, das denselben Wert in Bezug auf den Repositorystamm angibt.", - "loc.input.label.resourceToPatch": "Ressource für Patch", - "loc.input.help.resourceToPatch": "zum Identifizieren der Ressource", - "loc.input.label.resourceFileToPatch": "Dateipfad", - "loc.input.help.resourceFileToPatch": "Pfad zur Datei, die als Patch verwendet wird", - "loc.input.label.kind": "Art", - "loc.input.help.kind": "Art des K8s-Objekts, Bereitstellung, replicaSet usw.", - "loc.input.label.name": "Name", - "loc.input.help.name": "Name des k8s-Objekts", - "loc.input.label.replicas": "Replikatanzahl", - "loc.input.help.replicas": "Anzahl von Replikaten, auf die skaliert werden soll", - "loc.input.label.mergeStrategy": "Mergestrategie", - "loc.input.help.mergeStrategy": "Der Typ des bereitgestellten Patches (einer aus [json merge strategic])", - "loc.input.label.arguments": "Argumente", - "loc.input.help.arguments": "Argumente für den Befehl \"kubectl delete\"", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Patchinhalte", - "loc.input.label.secretType": "Typ des Geheimnisses", - "loc.input.help.secretType": "Ein generisches oder Docker-imagepullsecret erstellen/aktualisieren. Wählen Sie \"dockerRegistry\" aus, um \"imagepullsecret\" für die ausgewählte Registrierung zu erstellen/zu aktualisieren. \"imagePullSecret\" ermöglicht es, ein Geheimnis mit einem Kennwort für die Containerregistrierung an das Kubelet zu übergeben, sodass im Namen Ihres Pods ein privates Image abgerufen werden kann.", - "loc.input.label.secretName": "Geheimnisname", - "loc.input.help.secretName": "Name des Geheimnisses. Sie können diesen Geheimnisnamen in der Kubernetes-YAML-Konfigurationsdatei verwenden.", - "loc.input.label.secretArguments": "Argumente", - "loc.input.help.secretArguments": "Geben Sie Schlüssel- und Literalwerte zum Einfügen in \"secret\" an. Beispiel: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Dienstverbindung für Docker-Registrierung", - "loc.input.help.dockerRegistryEndpoint": "Wählen Sie eine Dienstverbindung für die Docker-Registrierung aus. Erforderlich für Befehle, die eine Authentifizierung bei einer Registrierung erfordern.", - "loc.input.label.rolloutStatusTimeout": "Timeout für Rolloutstatus", - "loc.input.help.rolloutStatusTimeout": "Die Wartezeit (in Sekunden) bis zum Beenden der Überwachung des Rolloutstatus.", - "loc.messages.DownloadPathForStableTxt": "Downloadpfad für \"stable.txt\": %s", - "loc.messages.DownloadKubeCtlFailed": "Der Kubernetes-Client von Version \"%s\" kann nicht heruntergeladen werden. Überprüfen Sie, ob die Version korrekt ist: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Die stabile Kubernetes-Version kann nicht aus \"%s\" heruntergeladen werden. Es wird ein Fallback auf \"%s\" durchgeführt.", - "loc.messages.DockerComposeFilePathNotSupplied": "Der Docker Compose-Dateipfad wurde nicht angegeben.", - "loc.messages.UsingLatestStableVersion": "Ungültige Version 1.7 in der Eingabe für den Versionsbezeichner angegeben. Verwenden Sie stattdessen die letzte stabile Version. Informationen zu korrekten Versionen finden Sie unter https://github.com/kubernetes/kubernetes/releases.", - "loc.messages.NotAValidSemverVersion": "Version nicht im richtigen Format angegeben. Beispiel: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Es wurden keine Manifestdateien gefunden, die \"%s\" entsprechen.", - "loc.messages.KubernetesServiceConnectionNotFound": "Die Details zur Kubernetes-Dienstverbindung wurden nicht gefunden.", - "loc.messages.UnknownRenderType": "Unbekannte Render-Engine", - "loc.messages.ResourceKindNotDefined": "Die Ressourcenart ist NULL.", - "loc.messages.NullInputObject": "Das Eingabeobjekt ist NULL.", - "loc.messages.ArgumentsInputNotSupplied": "Es wurden keine Argumente angegeben.", - "loc.messages.NullInputObjectMetadata": "Die Metadaten des Eingabeobjekts sind NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Ablehnungsaktion funktioniert nur mit Strategie: Canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Aktion zum Höherstufen funktioniert nur mit Strategie: Canary", - "loc.messages.AllContainersNotInReadyState": "Keiner der Container befindet sich im Zustand \"Bereit\".", - "loc.messages.CouldNotDeterminePodStatus": "Der Podstatus konnte aufgrund des folgenden Fehlers nicht bestimmt werden: %s", - "loc.messages.KubectlShouldBeUpgraded": "Für die Verwendung von kustomize-Features wird die kubectl-Clientversion v1.14 oder höher benötigt.", - "loc.messages.CouldNotDetermineServiceStatus": "Der Status des Diensts \"%s\" konnte aufgrund des folgenden Fehlers nicht bestimmt werden: %s", - "loc.messages.waitForServiceIpAssignment": "Es wird auf die Zuweisung einer externen IP-Adresse für den Dienst \"%s\" gewartet.", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Timeout beim Warten auf die Zuweisung einer externen IP-Adresse für den Dienst \"%s\".", - "loc.messages.ServiceExternalIP": "Die externe IP-Adresse für den Dienst \"%s\" lautet %s.", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Die TrafficSplit-Manifestdatei kann nicht erstellt werden. %s", - "loc.messages.StableSpecSelectorNotExist": "Die Ressource \"%s\" wurde nicht mithilfe der SMI-Canary-Bereitstellung bereitgestellt.", - "loc.messages.InvalidPercentage": "Ungültiger Wert für Prozentsatz.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Ungültiger Wert für Replikatanzahl.", - "loc.messages.InvalidTimeoutValue": "Ungültiger Wert für Timeout. Geben Sie eine gültige Zahl ein.", - "loc.messages.RolloutStatusTimedout": "Fehler beim Überprüfen des Rolloutstatus.", - "loc.messages.EnvironmentLink": "Weitere Informationen finden Sie hier: %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/en-US/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index 8bb3d73fda55..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Deploy to Kubernetes", - "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=851275) or [see the Kubernetes documentation](https://kubernetes.io/docs/home/)", - "loc.description": "Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Action", - "loc.input.help.action": "Choose the action to be performed.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes service connection", - "loc.input.help.kubernetesServiceConnection": "Select a Kubernetes service connection.", - "loc.input.label.namespace": "Namespace", - "loc.input.help.namespace": "Sets the namespace for the commands by using the –namespace flag. If the namespace is not provided, the commands will run in the default namespace.", - "loc.input.label.strategy": "Strategy", - "loc.input.help.strategy": "Deployment strategy to be used", - "loc.input.label.trafficSplitMethod": "Traffic split method", - "loc.input.help.trafficSplitMethod": "Traffic split method to be used", - "loc.input.label.percentage": "Percentage", - "loc.input.help.percentage": "Percentage of traffic redirect to canary deployment", - "loc.input.label.baselineAndCanaryReplicas": "Baseline and canary replicas", - "loc.input.help.baselineAndCanaryReplicas": "Baseline and canary replicas count", - "loc.input.label.manifests": "Manifests", - "loc.input.help.manifests": "Manifests to deploy", - "loc.input.label.containers": "Containers", - "loc.input.help.containers": "Containers", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret to pull image from private registry", - "loc.input.label.renderType": "Render Engine", - "loc.input.help.renderType": "Tool to use for generating manifest files.", - "loc.input.label.dockerComposeFile": "Path to docker compose file", - "loc.input.help.dockerComposeFile": "docker-compose file path", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "Helm chart path to bake", - "loc.input.label.releaseName": "Helm Release Name", - "loc.input.help.releaseName": "Helm release name to use", - "loc.input.label.overrideFiles": "Override Files", - "loc.input.help.overrideFiles": "Override files to set", - "loc.input.label.overrides": "Overrides", - "loc.input.help.overrides": "Override values to set", - "loc.input.label.kustomizationPath": "Kustomization Path", - "loc.input.help.kustomizationPath": "The argument must be the path to the directory containing the file, or a git repository URL with a path suffix specifying same with respect to the repository root.", - "loc.input.label.resourceToPatch": "Resource to patch", - "loc.input.help.resourceToPatch": "to identify the resource", - "loc.input.label.resourceFileToPatch": "File path", - "loc.input.help.resourceFileToPatch": "Path to the file used for patch", - "loc.input.label.kind": "Kind", - "loc.input.help.kind": "Kind of K8s object; deployment, replicaSet etc.", - "loc.input.label.name": "Name", - "loc.input.help.name": "Name of the k8s object", - "loc.input.label.replicas": "Replica count", - "loc.input.help.replicas": "Number of replicas to scale to", - "loc.input.label.mergeStrategy": "Merge Strategy", - "loc.input.help.mergeStrategy": "The type of patch being provided; one of [json merge strategic]", - "loc.input.label.arguments": "Arguments", - "loc.input.help.arguments": "Arguments for `kubectl delete` command", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contents of patch", - "loc.input.label.secretType": "Type of secret", - "loc.input.help.secretType": "Create/update a generic or docker imagepullsecret. Select dockerRegistry to create/update the imagepullsecret of the selected registry. An imagePullSecret is a way to pass a secret that contains a container registry password to the Kubelet so it can pull a private image on behalf of your Pod.", - "loc.input.label.secretName": "Secret name", - "loc.input.help.secretName": "Name of the secret. You can use this secret name in the Kubernetes YAML configuration file.", - "loc.input.label.secretArguments": "Arguments", - "loc.input.help.secretArguments": "Specify keys and literal values to insert in secret.For example, --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Docker registry service connection", - "loc.input.help.dockerRegistryEndpoint": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", - "loc.input.label.rolloutStatusTimeout": "Timeout for rollout status", - "loc.input.help.rolloutStatusTimeout": "The length of time (in seconds) to wait before ending watch on rollout status", - "loc.messages.DownloadPathForStableTxt": "Download path for stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Can not download the kubectl client of version %s. Check if the version is correct https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Can not download kubernetes stable version file from %s. Falling back to %s", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose file path not supplied", - "loc.messages.UsingLatestStableVersion": "Invalid version 1.7 specified in Version Spec input. Using latest stable version instead. Check for correct versions https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Version not specified in correct format. E.g: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "No manifest file(s) matching %s was found.", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes service connection details not found.", - "loc.messages.UnknownRenderType": "Unknown render engine", - "loc.messages.ResourceKindNotDefined": "Resource kind is null", - "loc.messages.NullInputObject": "Input object is null.", - "loc.messages.ArgumentsInputNotSupplied": "Arguments are not supplied.", - "loc.messages.NullInputObjectMetadata": "Input object metadata is null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Reject action works only with strategy: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Promote action works only with strategy: canary", - "loc.messages.AllContainersNotInReadyState": "All the containers are not in a ready state.", - "loc.messages.CouldNotDeterminePodStatus": "Could not determine the pod's status due to the error: %s", - "loc.messages.KubectlShouldBeUpgraded": "kubectl client version equal to v1.14 or higher is required to use kustomize features.", - "loc.messages.CouldNotDetermineServiceStatus": "Could not determine the service %s status due to the error: %s", - "loc.messages.waitForServiceIpAssignment": "Waiting for service %s external IP assignment", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Wait for service %s external IP assignment timed out", - "loc.messages.ServiceExternalIP": "service %s external IP is %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Unable to create TrafficSplit manifest file. %s", - "loc.messages.StableSpecSelectorNotExist": "Resource %s not deployed using SMI canary deployment.", - "loc.messages.InvalidPercentage": "Invalid value for percentage.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Invalid value for replica count.", - "loc.messages.InvalidTimeoutValue": "Invalid value for timeout. Enter a valid number.", - "loc.messages.RolloutStatusTimedout": "Rollout status check failed.", - "loc.messages.EnvironmentLink": "For more information, go to %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/es-ES/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/es-ES/resources.resjson deleted file mode 100644 index 223c590dfd3c..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/es-ES/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Implementar en Kubernetes", - "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=851275) o [consultar la documentación de Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Use archivos de manifiesto de Kubernetes para implementar en los clústeres o incluso simule mediante \"bake\" los archivos de manifiesto que se usarán para las implementaciones con gráficos de Helm.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Acción", - "loc.input.help.action": "Elija la acción que se va a realizar.", - "loc.input.label.kubernetesServiceConnection": "Conexión de servicio de Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Seleccione una conexión del servicio de Kubernetes.", - "loc.input.label.namespace": "Espacio de nombres", - "loc.input.help.namespace": "Establece el espacio de nombres para los comandos con la marca –namespace. Si no se proporciona el espacio de nombres, los comandos se ejecutan en el predeterminado.", - "loc.input.label.strategy": "Estrategia", - "loc.input.help.strategy": "Estrategia de implementación que se va a usar", - "loc.input.label.trafficSplitMethod": "Método de división del tráfico", - "loc.input.help.trafficSplitMethod": "Método de división del tráfico que se va a usar.", - "loc.input.label.percentage": "Porcentaje", - "loc.input.help.percentage": "Porcentaje de redireccionamiento del tráfico a la implementación de valores controlados", - "loc.input.label.baselineAndCanaryReplicas": "Réplicas de valores controlados y de línea de base", - "loc.input.help.baselineAndCanaryReplicas": "Recuento de réplicas de valores controlados y de línea de base", - "loc.input.label.manifests": "Manifiestos", - "loc.input.help.manifests": "Manifiestos para implementar", - "loc.input.label.containers": "Contenedores", - "loc.input.help.containers": "Contenedores", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "Se usa ImagePullSecret para extraer la imagen mediante \"pull\" del registro privado", - "loc.input.label.renderType": "Motor de representación", - "loc.input.help.renderType": "Herramienta que se va a usar para generar archivos de manifiesto.", - "loc.input.label.dockerComposeFile": "Ruta de acceso al archivo de Docker Compose", - "loc.input.help.dockerComposeFile": "Ruta de acceso del archivo docker-compose", - "loc.input.label.helmChart": "Gráfico de Helm", - "loc.input.help.helmChart": "Ruta del gráfico de Helm para aplicar simulación mediante \"bake\"", - "loc.input.label.releaseName": "Nombre de versión de Helm", - "loc.input.help.releaseName": "Nombre de la versión de Helm que se va a usar", - "loc.input.label.overrideFiles": "Reemplazar archivos", - "loc.input.help.overrideFiles": "Reemplazar archivos para establecer", - "loc.input.label.overrides": "Invalidaciones", - "loc.input.help.overrides": "Reemplazar valores para establecer", - "loc.input.label.kustomizationPath": "Ruta de acceso de Kustomization", - "loc.input.help.kustomizationPath": "El argumento debe ser la ruta de acceso al directorio que contiene el archivo o una dirección URL del repositorio de GIT con un sufijo de ruta de acceso que especifique lo mismo respecto a la raíz del repositorio.", - "loc.input.label.resourceToPatch": "Recurso para la revisión", - "loc.input.help.resourceToPatch": "para identificar el recurso", - "loc.input.label.resourceFileToPatch": "Ruta de acceso del archivo", - "loc.input.help.resourceFileToPatch": "Ruta de acceso al archivo que se usa para la revisión", - "loc.input.label.kind": "Variante", - "loc.input.help.kind": "Tipo de objeto K8s; implementación, replicaSet, etc.", - "loc.input.label.name": "Nombre", - "loc.input.help.name": "Nombre del objeto k8s", - "loc.input.label.replicas": "Recuento de réplicas", - "loc.input.help.replicas": "Número de réplicas para escalar", - "loc.input.label.mergeStrategy": "Estrategia de \"merge\"", - "loc.input.help.mergeStrategy": "Tipo de revisión que se proporciona; una de las opciones de [json merge strategic]", - "loc.input.label.arguments": "Argumentos", - "loc.input.help.arguments": "Argumentos para el comando \"kubectl delete\".", - "loc.input.label.patch": "Revisión", - "loc.input.help.patch": "Contenido de la revisión", - "loc.input.label.secretType": "Tipo de secreto", - "loc.input.help.secretType": "Cree o actualice un elemento imagepullsecret genérico o de Docker. Seleccione dockerRegistry para crear o actualizar el elemento imagepullsecret del registro seleccionado. El objeto imagePullSecret es una forma de pasar un secreto que contiene una contraseña de Container Registry a Kubelet, de forma que puede extraer una imagen privada en nombre de su pod.", - "loc.input.label.secretName": "Nombre del secreto", - "loc.input.help.secretName": "Nombre del secreto que puede usar en el archivo de configuración de YAML de Kubernetes.", - "loc.input.label.secretArguments": "Argumentos", - "loc.input.help.secretArguments": "Especifique las claves y los valores literales que se van a insertar en el secreto. Por ejemplo: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Conexión de servicio del registro de Docker", - "loc.input.help.dockerRegistryEndpoint": "Seleccione una conexión de servicio de registro de Docker. Obligatorio para los comandos que deben autenticarse en un registro.", - "loc.input.label.rolloutStatusTimeout": "Tiempo de expiración del estado de lanzamiento", - "loc.input.help.rolloutStatusTimeout": "Intervalo de tiempo (en segundos) que debe esperarse antes de finalizar la inspección del estado de lanzamiento.", - "loc.messages.DownloadPathForStableTxt": "Ruta de acceso de descarga para stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "No se puede descargar el cliente kubectl de la versión %s. Compruebe si la versión es correcta: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "No se puede descargar el archivo de versión estable de kubernetes de %s. Revirtiendo a %s", - "loc.messages.DockerComposeFilePathNotSupplied": "La ruta de acceso del archivo docker-compose no se ha proporcionado", - "loc.messages.UsingLatestStableVersion": "Se ha especificado una versión 1.7, que no es válida, en la entrada de Especificación de versión. En su lugar, se va a usar la última versión estable. Compruebe las versiones correctas en https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "La versión no se ha especificado en el formato correcto. Por ejemplo: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "No se encontró ningún archivo de manifiesto que coincida con %s.", - "loc.messages.KubernetesServiceConnectionNotFound": "No se encontraron los detalles de la conexión de servicio de Kubernetes.", - "loc.messages.UnknownRenderType": "Motor de representación desconocido", - "loc.messages.ResourceKindNotDefined": "El tipo de recurso es NULL.", - "loc.messages.NullInputObject": "El objeto de entrada es NULL.", - "loc.messages.ArgumentsInputNotSupplied": "No se proporcionan argumentos.", - "loc.messages.NullInputObjectMetadata": "Los metadatos del objeto de entrada son NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "La acción de rechazar solo funciona con una estrategia: valor controlado", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "La acción de promover solo funciona con una estrategia: valor controlado", - "loc.messages.AllContainersNotInReadyState": "Ninguno de los contenedores está listo.", - "loc.messages.CouldNotDeterminePodStatus": "No se pudo determinar el estado del pod debido al error siguiente: %s", - "loc.messages.KubectlShouldBeUpgraded": "Para usar las características de kustomize, se requiere la versión del cliente kubectl v1.14 o posterior.", - "loc.messages.CouldNotDetermineServiceStatus": "No se pudo determinar el estado del servicio %s debido al error siguiente: %s", - "loc.messages.waitForServiceIpAssignment": "Esperando a la asignación de dirección IP externa del servicio %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Se agotó el tiempo de expiración de la asignación de dirección IP externa del servicio %s", - "loc.messages.ServiceExternalIP": "La dirección IP externa del servicio %s es %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "No se puede crear el archivo de manifiesto TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "El recurso %s no se ha implementado con el método de valores controlados de SMI.", - "loc.messages.InvalidPercentage": "Valor de porcentaje no válido.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Valor de número de réplicas no válido.", - "loc.messages.InvalidTimeoutValue": "Valor de tiempo de expiración no válido. Escriba un número válido.", - "loc.messages.RolloutStatusTimedout": "Error al comprobar el estado de lanzamiento.", - "loc.messages.EnvironmentLink": "Para obtener más información, vaya a %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/fr-FR/resources.resjson deleted file mode 100644 index 20153a50c187..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/fr-FR/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Déployer sur Kubernetes", - "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=851275) ou [consulter la documentation de Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Utiliser les fichiers manifeste Kubernetes pour effectuer un déploiement sur des clusters, ou préparer les fichiers manifeste aux déploiements à l'aide de charts Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Action", - "loc.input.help.action": "Choisissez l'action à effectuer.", - "loc.input.label.kubernetesServiceConnection": "Connexion de service Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Sélectionnez une connexion de service Kubernetes.", - "loc.input.label.namespace": "Espace de noms", - "loc.input.help.namespace": "Définit l'espace de noms des commandes à l'aide de l'indicateur –namespace. Si vous n'indiquez pas l'espace de noms, les commandes sont exécutées dans l'espace de noms par défaut.", - "loc.input.label.strategy": "Stratégie", - "loc.input.help.strategy": "Stratégie de déploiement à utiliser", - "loc.input.label.trafficSplitMethod": "Méthode de division du trafic", - "loc.input.help.trafficSplitMethod": "Méthode de division du trafic à utiliser", - "loc.input.label.percentage": "Pourcentage", - "loc.input.help.percentage": "Pourcentage de redirection du trafic vers le déploiement de contrôle de validité", - "loc.input.label.baselineAndCanaryReplicas": "Réplicas de base de référence et de contrôle de validité", - "loc.input.help.baselineAndCanaryReplicas": "Nombre de réplicas de base de référence et de contrôle de validité", - "loc.input.label.manifests": "Manifestes", - "loc.input.help.manifests": "Manifestes à déployer", - "loc.input.label.containers": "Conteneurs", - "loc.input.help.containers": "Conteneurs", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret pour effectuer le tirage (pull) d'une image à partir d'un registre privé", - "loc.input.label.renderType": "Moteur de rendu", - "loc.input.help.renderType": "Outil à utiliser pour générer les fichiers manifeste.", - "loc.input.label.dockerComposeFile": "Chemin du fichier Docker Compose", - "loc.input.help.dockerComposeFile": "chemin du fichier docker-compose", - "loc.input.label.helmChart": "Chart Helm", - "loc.input.help.helmChart": "Chemin du chart Helm à préparer", - "loc.input.label.releaseName": "Nom de version release Helm", - "loc.input.help.releaseName": "Nom de version release Helm à utiliser", - "loc.input.label.overrideFiles": "Fichiers de remplacement", - "loc.input.help.overrideFiles": "Fichiers de remplacement à définir", - "loc.input.label.overrides": "Remplacements", - "loc.input.help.overrides": "Valeurs de remplacement à définir", - "loc.input.label.kustomizationPath": "Chemin de Kustomization", - "loc.input.help.kustomizationPath": "L'argument doit être le chemin du répertoire contenant le fichier, ou une URL de dépôt GIT avec un suffixe de chemin spécifiant la même chose par rapport à la racine du dépôt.", - "loc.input.label.resourceToPatch": "Ressource à corriger", - "loc.input.help.resourceToPatch": "pour identifier la ressource", - "loc.input.label.resourceFileToPatch": "Chemin du fichier", - "loc.input.help.resourceFileToPatch": "Chemin du fichier utilisé pour le correctif", - "loc.input.label.kind": "Genre", - "loc.input.help.kind": "Genre d'objet K8s : deployment, replicaSet etc.", - "loc.input.label.name": "Nom", - "loc.input.help.name": "Nom de l'objet k8s", - "loc.input.label.replicas": "Nombre de réplicas", - "loc.input.help.replicas": "Nombre de réplicas scalables", - "loc.input.label.mergeStrategy": "Stratégie de fusion", - "loc.input.help.mergeStrategy": "Type de correctif fourni : parmi [json merge strategic]", - "loc.input.label.arguments": "Arguments", - "loc.input.help.arguments": "Arguments de la commande 'kubectl delete'", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contenu du correctif", - "loc.input.label.secretType": "Type de secret", - "loc.input.help.secretType": "Créez/mettez à jour un imagepullsecret générique ou Docker. Sélectionnez dockerRegistry pour créer/mettre à jour le imagepullsecret du registre sélectionné. Un imagePullSecret permet de passer un secret qui contient un mot de passe de registre de conteneurs au Kubelet afin qu'il puisse tirer (pull) une image privée pour le compte de votre pod.", - "loc.input.label.secretName": "Nom du secret", - "loc.input.help.secretName": "Nom du secret. Vous pouvez utiliser le nom de ce secret dans le fichier config YAML de Kubernetes.", - "loc.input.label.secretArguments": "Arguments", - "loc.input.help.secretArguments": "Spécifiez les clés et les valeurs littérales à insérer dans le secret. Par exemple, --from-literal=clé1=valeur1 --from-literal=clé2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Connexion de service de registre Docker", - "loc.input.help.dockerRegistryEndpoint": "Sélectionnez une connexion de service de registre Docker. Obligatoire pour les commandes qui doivent s'authentifier après d'un registre.", - "loc.input.label.rolloutStatusTimeout": "Délai d'expiration de l'état de lancement", - "loc.input.help.rolloutStatusTimeout": "Délai (en secondes) d'attente avant la fin de la surveillance de l'état de lancement", - "loc.messages.DownloadPathForStableTxt": "Chemin de téléchargement de stable.txt : %s", - "loc.messages.DownloadKubeCtlFailed": "Impossible de télécharger le client kubectl de la version %s. Vérifiez si la version est correcte : https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Impossible de télécharger le fichier de la version stable de kubernetes à partir de %s. Retour à %s", - "loc.messages.DockerComposeFilePathNotSupplied": "chemin du fichier docker-compose non fourni", - "loc.messages.UsingLatestStableVersion": "Une version 1.7 non valide a été spécifiée dans l'entrée de spécification de version. Utilisation de la dernière version stable à la place. Recherchez les versions appropriées https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Version non spécifiée au format approprié. Exemple : 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Le ou les fichiers manifeste correspondant à %s sont introuvables.", - "loc.messages.KubernetesServiceConnectionNotFound": "Les détails de la connexion de service Kubernetes sont introuvables.", - "loc.messages.UnknownRenderType": "Moteur de rendu inconnu", - "loc.messages.ResourceKindNotDefined": "Le genre de la ressource a une valeur null", - "loc.messages.NullInputObject": "L'objet d'entrée a une valeur null.", - "loc.messages.ArgumentsInputNotSupplied": "Les arguments ne sont pas fournis.", - "loc.messages.NullInputObjectMetadata": "Les métadonnées d'objet d'entrée ont une valeur null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "L'action de rejet fonctionne uniquement avec la stratégie suivante : contrôle de validité", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "L'action de promotion fonctionne uniquement avec la stratégie suivante : contrôle de validité", - "loc.messages.AllContainersNotInReadyState": "Tous les conteneurs ne sont pas prêts.", - "loc.messages.CouldNotDeterminePodStatus": "Impossible de déterminer l'état du pod en raison de l'erreur %s", - "loc.messages.KubectlShouldBeUpgraded": "une version du client kubectl égale ou postérieure à la version 1.14 est nécessaire pour utiliser les fonctionnalités de kustomize.", - "loc.messages.CouldNotDetermineServiceStatus": "Impossible de déterminer l'état du service %s en raison de l'erreur %s", - "loc.messages.waitForServiceIpAssignment": "En attente d'affectation d'adresse IP externe du service %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Expiration du délai d'attente pour l'affectation d'adresse IP externe du service %s", - "loc.messages.ServiceExternalIP": "l'adresse IP externe du service %s est %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Impossible de créer le fichier manifeste TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "La ressource %s n'est pas déployée à l'aide du déploiement de contrôle de validité SMI.", - "loc.messages.InvalidPercentage": "Valeur non valide pour le pourcentage.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Valeur non valide pour le nombre de réplicas.", - "loc.messages.InvalidTimeoutValue": "Valeur non valide pour le délai d'expiration. Entrez un nombre valide.", - "loc.messages.RolloutStatusTimedout": "Échec de la vérification de l'état de lancement.", - "loc.messages.EnvironmentLink": "Pour plus d'informations, accédez à %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/it-IT/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/it-IT/resources.resjson deleted file mode 100644 index 6773a66c49b0..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/it-IT/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Distribuisci in Kubernetes", - "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=851275). In alternativa, [vedere la documentazione di Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Consente di usare i file manifesto di Kubernetes per la distribuzione nei cluster o persino di effettuare il bake dei file manifesto da usare per le distribuzioni con grafici Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Azione", - "loc.input.help.action": "Scegliere l'azione da eseguire.", - "loc.input.label.kubernetesServiceConnection": "Connessione al servizio Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Selezionare una connessione al servizio Kubernetes.", - "loc.input.label.namespace": "Spazio dei nomi", - "loc.input.help.namespace": "Consente di impostare lo spazio dei nomi per i comandi usando il flag –namespace. Se lo spazio dei nomi non viene specificato, i comandi verranno eseguiti nello spazio dei nomi predefinito.", - "loc.input.label.strategy": "Strategia", - "loc.input.help.strategy": "Strategia di distribuzione da usare", - "loc.input.label.trafficSplitMethod": "Metodo di divisione del traffico", - "loc.input.help.trafficSplitMethod": "Metodo di divisione del traffico da usare", - "loc.input.label.percentage": "Percentuale", - "loc.input.help.percentage": "Percentuale di reindirizzamento del traffico alla distribuzione canary", - "loc.input.label.baselineAndCanaryReplicas": "Repliche baseline e canary", - "loc.input.help.baselineAndCanaryReplicas": "Conteggio delle repliche baseline e canary", - "loc.input.label.manifests": "Manifesti", - "loc.input.help.manifests": "Manifesti da distribuire", - "loc.input.label.containers": "Contenitori", - "loc.input.help.containers": "Contenitori", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret per estrarre l'immagine dal registro privato", - "loc.input.label.renderType": "Motore di rendering", - "loc.input.help.renderType": "Strumento da usare per la generazione di file manifesto.", - "loc.input.label.dockerComposeFile": "Percorso file Docker Compose", - "loc.input.help.dockerComposeFile": "Percorso del file di Docker Compose", - "loc.input.label.helmChart": "Grafico Helm", - "loc.input.help.helmChart": "Percorso del grafico Helm di cui effettuare il bake", - "loc.input.label.releaseName": "Nome della versione di Helm", - "loc.input.help.releaseName": "Nome della versione di Helm da usare", - "loc.input.label.overrideFiles": "File di override", - "loc.input.help.overrideFiles": "File di override da impostare", - "loc.input.label.overrides": "Sostituzioni", - "loc.input.help.overrides": "Valori di override da impostare", - "loc.input.label.kustomizationPath": "Percorso Kustomization", - "loc.input.help.kustomizationPath": "L'argomento deve essere il percorso della directory contenente il file o un URL di repository GIT con un suffisso di percorso che specifica lo stesso rispetto alla radice del repository.", - "loc.input.label.resourceToPatch": "Risorsa a cui applicare la patch", - "loc.input.help.resourceToPatch": "per identificare la risorsa", - "loc.input.label.resourceFileToPatch": "Percorso file", - "loc.input.help.resourceFileToPatch": "Percorso del file usato per la patch", - "loc.input.label.kind": "Tipo", - "loc.input.help.kind": "Tipo di oggetto k8s: distribuzione, set di repliche e così via.", - "loc.input.label.name": "Nome", - "loc.input.help.name": "Nome dell'oggetto k8s", - "loc.input.label.replicas": "Numero di repliche", - "loc.input.help.replicas": "Numero di repliche da ridimensionare", - "loc.input.label.mergeStrategy": "Strategia di merge", - "loc.input.help.mergeStrategy": "Tipo di patch specificato, tra [json merge strategic]", - "loc.input.label.arguments": "Argomenti", - "loc.input.help.arguments": "Argomenti per il comando `kubectl delete`", - "loc.input.label.patch": "Patch", - "loc.input.help.patch": "Contenuto della patch", - "loc.input.label.secretType": "Tipo di segreto", - "loc.input.help.secretType": "Consente di creare/aggiornare un elemento imagepullsecret generico o Docker. Selezionare dockerRegistry per creare/aggiornare l'elemento imagepullsecret del registro selezionato. L'elemento imagePullSecret viene usato per passare al kubelet un segreto che contiene una password di registro contenitori in modo che possa eseguire il pull di un'immagine privata per conto del pod.", - "loc.input.label.secretName": "Nome segreto", - "loc.input.help.secretName": "Nome del segreto. È possibile usare questo nome di segreto nel file di configurazione YAML di Kubernetes.", - "loc.input.label.secretArguments": "Argomenti", - "loc.input.help.secretArguments": "Consente di specificare chiavi e valori letterali da inserire nell'elemento secret, ad esempio --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Connessione al servizio Registro Docker", - "loc.input.help.dockerRegistryEndpoint": "Consente di selezionare una connessione al servizio Registro Docker. È obbligatorio per i comandi che devono eseguire l'autenticazione con un registro.", - "loc.input.label.rolloutStatusTimeout": "Timeout per stato di implementazione", - "loc.input.help.rolloutStatusTimeout": "Intervallo di tempo (in secondi) da attendere prima di terminare il controllo sullo stato di implementazione", - "loc.messages.DownloadPathForStableTxt": "Percorso di download per stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Non è possibile scaricare il client kubectl della versione %s. Verificare se la versione è corretta: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Non è possibile scaricare il file della versione stabile di kubernetes da %s. Verrà eseguito il fallback a %s", - "loc.messages.DockerComposeFilePathNotSupplied": "il percorso del file Docker Compose non è stato specificato", - "loc.messages.UsingLatestStableVersion": "La versione 1.7 specificata come valore di input dell'identificatore di versione non è valida. Verrà usata l'ultima versione stabile. Controllare la disponibilità di versioni corrette in https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Il formato usato per la specifica della versione non è corretto, ad esempio 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Non è stato trovato alcun file manifesto a %s.", - "loc.messages.KubernetesServiceConnectionNotFound": "I dettagli della connessione al servizio Kubernetes non sono stati trovati.", - "loc.messages.UnknownRenderType": "Motore di rendering sconosciuto", - "loc.messages.ResourceKindNotDefined": "Il tipo di risorsa è Null", - "loc.messages.NullInputObject": "L'oggetto di input è Null.", - "loc.messages.ArgumentsInputNotSupplied": "Gli argomenti non sono stati specificati.", - "loc.messages.NullInputObjectMetadata": "I metadati dell'oggetto di input sono Null.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "L'azione di rifiuto funziona solo con strategy: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "L'azione di promozione funziona solo con strategy: canary", - "loc.messages.AllContainersNotInReadyState": "Tutti i contenitori non si trovano in uno stato pronto.", - "loc.messages.CouldNotDeterminePodStatus": "Non è stato possibile determinare lo stato del pod a causa dell'errore: %s", - "loc.messages.KubectlShouldBeUpgraded": "Per usare le funzionalità di Kustomize, è necessario il client kubectl versione 1.14 o successiva.", - "loc.messages.CouldNotDetermineServiceStatus": "Non è stato possibile determinare lo stato del servizio %s a causa dell'errore: %s", - "loc.messages.waitForServiceIpAssignment": "In attesa dell'assegnazione dell'IP esterno del servizio %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Si è verificato un timeout durante l'attesa dell'assegnazione dell'IP esterno del servizio %s", - "loc.messages.ServiceExternalIP": "l'IP esterno del servizio %s è %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Non è possibile creare il file manifesto di TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "La risorsa %s non è stata distribuita tramite la distribuzione canary SMI.", - "loc.messages.InvalidPercentage": "Il valore della percentuale non è valido.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Il valore del numero di repliche non è valido.", - "loc.messages.InvalidTimeoutValue": "Il valore del timeout non è valido. Immettere un numero valido.", - "loc.messages.RolloutStatusTimedout": "Il controllo dello stato di implementazione non è riuscito.", - "loc.messages.EnvironmentLink": "Per altre informazioni, vedere %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ja-JP/resources.resjson deleted file mode 100644 index 5f2f3d914ec8..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ja-JP/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Kubernetes に展開する", - "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=851275)、または [Kubernetes のドキュメントを参照](https://kubernetes.io/docs/home/)", - "loc.description": "Kubernetes マニフェスト ファイルを使用してクラスターに配置するか、または Helm Chart を使用して配置に使用するマニフェスト ファイルを作成します", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "アクション", - "loc.input.help.action": "実行する操作を選択します。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes サービス接続", - "loc.input.help.kubernetesServiceConnection": "Kubernetes サービス接続を選択します。", - "loc.input.label.namespace": "名前空間", - "loc.input.help.namespace": "コマンドの名前空間を設定するには、–namespace フラグを使用します。名前空間が指定されていない場合、コマンドは既定の名前空間で実行されます。", - "loc.input.label.strategy": "戦略", - "loc.input.help.strategy": "使用される配置方法", - "loc.input.label.trafficSplitMethod": "トラフィックの分割方法", - "loc.input.help.trafficSplitMethod": "使用するトラフィックの分割方法", - "loc.input.label.percentage": "割合", - "loc.input.help.percentage": "カナリア デプロイにリダイレクトされるトラフィックの割合", - "loc.input.label.baselineAndCanaryReplicas": "ベースラインとカナリアのレプリカ", - "loc.input.help.baselineAndCanaryReplicas": "ベースラインおよびカナリア レプリカの数", - "loc.input.label.manifests": "マニフェスト", - "loc.input.help.manifests": "配置するマニフェスト", - "loc.input.label.containers": "コンテナー", - "loc.input.help.containers": "コンテナー", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "プライベート レジストリからイメージをプルするための ImagePullSecret", - "loc.input.label.renderType": "レンダー エンジン", - "loc.input.help.renderType": "マニフェスト ファイルを生成するために使用するツール。", - "loc.input.label.dockerComposeFile": "Docker Compose ファイルへのパス", - "loc.input.help.dockerComposeFile": "docker-compose ファイルのパス", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "作成する Helm Chart パス", - "loc.input.label.releaseName": "Helm のリリース名", - "loc.input.help.releaseName": "使用する Helm のリリース名", - "loc.input.label.overrideFiles": "オーバーライド ファイル", - "loc.input.help.overrideFiles": "設定するオーバーライド ファイル", - "loc.input.label.overrides": "オーバーライド", - "loc.input.help.overrides": "設定するオーバーライド値", - "loc.input.label.kustomizationPath": "Kustomization のパス", - "loc.input.help.kustomizationPath": "引数には、ファイルが保存されているディレクトリへのパス、または同じファイルへのリポジトリのルートからのパスのサフィックスを含む Git リポジトリの URL を指定する必要があります。", - "loc.input.label.resourceToPatch": "修正するリソース", - "loc.input.help.resourceToPatch": "リソースを識別するため", - "loc.input.label.resourceFileToPatch": "ファイル パス", - "loc.input.help.resourceFileToPatch": "パッチに使用するファイルへのパス", - "loc.input.label.kind": "種類", - "loc.input.help.kind": "K8s オブジェクトの種類; 配置、replicaSet など。", - "loc.input.label.name": "名前", - "loc.input.help.name": "k8s オブジェクトの名前", - "loc.input.label.replicas": "レプリカ数", - "loc.input.help.replicas": "スケーリングするレプリカの数", - "loc.input.label.mergeStrategy": "マージ戦略", - "loc.input.help.mergeStrategy": "指定されるパッチの種類; [json マージ戦略] の 1 つ", - "loc.input.label.arguments": "引数", - "loc.input.help.arguments": "`kubectl delete` コマンドの引数", - "loc.input.label.patch": "パッチ", - "loc.input.help.patch": "パッチの内容", - "loc.input.label.secretType": "シークレットの種類", - "loc.input.help.secretType": "ジェネリックまたは docker imagepullsecret を作成/更新します。dockerRegistry を選択して、選択したレジストリの imagepullsecret を作成/更新してください。imagePullSecret は、Pod の代わりにコンテナー レジストリ パスワードを含むシークレットを Kubelet に渡して、プライベート イメージをプルできるようにする方法です。", - "loc.input.label.secretName": "シークレット名", - "loc.input.help.secretName": "シークレットの名前。この名前は Kubernetes YAML 構成ファイルに使用できます。", - "loc.input.label.secretArguments": "引数", - "loc.input.help.secretArguments": "シークレットに挿入するキーとリテラル値を指定します。たとえば、--from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker レジストリ サービス接続", - "loc.input.help.dockerRegistryEndpoint": "Docker レジストリ サービス接続を選択します。レジストリを使って認証する必要のあるコマンドの場合に必要です。", - "loc.input.label.rolloutStatusTimeout": "ロールアウトの状態のタイムアウト", - "loc.input.help.rolloutStatusTimeout": "ロールアウトの状態の監視を終了するまでの待機時間 (秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt のダウンロード パス: %s", - "loc.messages.DownloadKubeCtlFailed": "kubectl クライアント バージョン %s をダウンロードすることができません。適切なバージョンかどうか、https://github.com/kubernetes/kubernetes/releases で確認します", - "loc.messages.DownloadStableVersionFailed": "%s から安定バージョンの Kubernetes ファイルをダウンロードすることができません。%s にフォールバックしています", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose ファイルのパスが指定されていません", - "loc.messages.UsingLatestStableVersion": "バージョンの仕様の入力に無効なバージョン 1.7 が指定されました。代わりに最新の安定したバージョンが使用されます。正しいバージョンを https://github.com/kubernetes/kubernetes/releases でご確認ください", - "loc.messages.NotAValidSemverVersion": "バージョンが正しい形式で指定されていません。例: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "%s と一致するマニフェスト ファイルが見つかりませんでした。", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes サービス接続の詳細が見つかりませんでした。", - "loc.messages.UnknownRenderType": "不明なレンダリング エンジン", - "loc.messages.ResourceKindNotDefined": "リソースの種類が null です", - "loc.messages.NullInputObject": "入力オブジェクトが null です。", - "loc.messages.ArgumentsInputNotSupplied": "引数が指定されていません。", - "loc.messages.NullInputObjectMetadata": "入力オブジェクト メタデータが null です。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒否アクションは、次のストラテジーでのみ動作します: カナリア", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "昇格アクションは、次のストラテジーでのみ動作します: カナリア", - "loc.messages.AllContainersNotInReadyState": "一部のコンテナーが準備完了の状態ではありません。", - "loc.messages.CouldNotDeterminePodStatus": "ポッドの状態を特定できませんでした。原因のエラー: %s", - "loc.messages.KubectlShouldBeUpgraded": "kustomize 機能を使用するには、kubectl クライアント バージョン v1.14 またはそれ以降が必要です。", - "loc.messages.CouldNotDetermineServiceStatus": "サービス %s の状態を特定できませんでした。原因のエラー: %s", - "loc.messages.waitForServiceIpAssignment": "サービス %s の外部 IP 割り当てを待機しています", - "loc.messages.waitForServiceIpAssignmentTimedOut": "サービス %s の外部 IP 割り当てがタイムアウトになるのを待機しています", - "loc.messages.ServiceExternalIP": "サービス %s の外部 IP は %s です", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "TrafficSplit マニフェスト ファイルを作成できません。%s", - "loc.messages.StableSpecSelectorNotExist": "リソース %s は SMI カナリア デプロイを使用してデプロイされていません。", - "loc.messages.InvalidPercentage": "パーセンテージの値が無効です。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "レプリカ数の値が無効です。", - "loc.messages.InvalidTimeoutValue": "タイムアウトの値が無効です。有効な数値を入力してください。", - "loc.messages.RolloutStatusTimedout": "ロールアウトの状態を確認できませんでした。", - "loc.messages.EnvironmentLink": "詳細については、%s を参照してください" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ko-KR/resources.resjson deleted file mode 100644 index 27c8e7428291..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ko-KR/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Kubernetes에 배포", - "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=851275) 또는 [Kubernetes 설명서 참조](https://kubernetes.io/docs/home/)", - "loc.description": "Kubernetes 매니페스트 파일을 사용하여 클러스터에 배포하거나, Helm 차트를 사용하여 배포에 사용할 매니페스트 파일을 굽습니다.", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "작업", - "loc.input.help.action": "수행할 작업을 선택합니다.", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 서비스 연결", - "loc.input.help.kubernetesServiceConnection": "Kubernetes 서비스 연결을 선택합니다.", - "loc.input.label.namespace": "네임스페이스", - "loc.input.help.namespace": "–namespace 플래그를 사용하여 명령의 네임스페이스를 설정합니다. 네임스페이스를 지정하지 않으면 기본 네임스페이스에서 명령이 실행됩니다.", - "loc.input.label.strategy": "전략", - "loc.input.help.strategy": "사용할 배포 전략입니다.", - "loc.input.label.trafficSplitMethod": "트래픽 분할 방법", - "loc.input.help.trafficSplitMethod": "사용할 트래픽 분할 방법", - "loc.input.label.percentage": "백분율", - "loc.input.help.percentage": "카나리아 배포로의 트래픽 리디렉션 비율", - "loc.input.label.baselineAndCanaryReplicas": "기준 및 카나리아 복제본", - "loc.input.help.baselineAndCanaryReplicas": "기준 및 카나리아 복제본 수", - "loc.input.label.manifests": "매니페스트", - "loc.input.help.manifests": "배포할 매니페스트입니다.", - "loc.input.label.containers": "컨테이너", - "loc.input.help.containers": "컨테이너", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "프라이빗 레지스트리에서 이미지를 풀하기 위한 ImagePullSecret입니다.", - "loc.input.label.renderType": "렌더링 엔진", - "loc.input.help.renderType": "매니페스트 파일을 생성하는 데 사용하는 도구입니다.", - "loc.input.label.dockerComposeFile": "docker compose 파일의 경로", - "loc.input.help.dockerComposeFile": "docker-compose 파일 경로", - "loc.input.label.helmChart": "Helm 차트", - "loc.input.help.helmChart": "구울 Helm 차트 경로입니다.", - "loc.input.label.releaseName": "Helm 릴리스 이름", - "loc.input.help.releaseName": "사용할 Helm 릴리스 이름", - "loc.input.label.overrideFiles": "재정의 파일", - "loc.input.help.overrideFiles": "설정할 재정의 파일입니다.", - "loc.input.label.overrides": "재정의", - "loc.input.help.overrides": "설정할 재정의 값입니다.", - "loc.input.label.kustomizationPath": "Kustomization 경로", - "loc.input.help.kustomizationPath": "인수는 파일을 포함하는 디렉터리의 경로이거나, 리포지토리 루트에 대해 동일한 경로를 지정하는 경로 접미사를 포함하는 git 리포지토리 URL이어야 합니다.", - "loc.input.label.resourceToPatch": "패치할 리소스", - "loc.input.help.resourceToPatch": "리소스를 식별합니다.", - "loc.input.label.resourceFileToPatch": "파일 경로", - "loc.input.help.resourceFileToPatch": "패치에 사용되는 파일의 경로입니다.", - "loc.input.label.kind": "종류", - "loc.input.help.kind": "K8 개체 종류(deployment, replicaSet)입니다.", - "loc.input.label.name": "이름", - "loc.input.help.name": "K8 개체의 이름입니다.", - "loc.input.label.replicas": "복제본 수", - "loc.input.help.replicas": "크기를 조정할 복제본 수입니다.", - "loc.input.label.mergeStrategy": "병합 전략", - "loc.input.help.mergeStrategy": "제공되는 패치 유형으로, [json merge strategic] 중 하나입니다.", - "loc.input.label.arguments": "인수", - "loc.input.help.arguments": "'kubectl delete' 명령의 인수입니다.", - "loc.input.label.patch": "패치", - "loc.input.help.patch": "패치 내용입니다.", - "loc.input.label.secretType": "비밀 유형", - "loc.input.help.secretType": "제네릭 또는 docker imagepullsecret을 생성/업데이트합니다. 선택한 레지스트리의 imagepullsecret을 생성/업데이트하려면 dockerRegistry를 선택하세요. imagePullSecret을 사용하면 컨테이너 레지스트리 암호가 포함된 비밀을 Kubelet에 전달하여 Pod를 대신해서 프라이빗 이미지를 풀하도록 할 수 있습니다.", - "loc.input.label.secretName": "비밀 이름", - "loc.input.help.secretName": "비밀의 이름입니다. 이 비밀 이름을 Kubernetes YAML 구성 파일에 사용할 수 있습니다.", - "loc.input.label.secretArguments": "인수", - "loc.input.help.secretArguments": "비밀에 삽입할 키와 리터럴 값을 지정합니다(예: --from-literal=key1=value1 --from-literal=key2=\"top secret\").", - "loc.input.label.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결", - "loc.input.help.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결을 선택합니다. 레지스트리를 사용하여 인증해야 하는 명령에 필요합니다.", - "loc.input.label.rolloutStatusTimeout": "롤아웃 상태의 시간 제한", - "loc.input.help.rolloutStatusTimeout": "롤아웃 상태에 대한 조사를 끝내기 전까지 대기하는 시간(초)", - "loc.messages.DownloadPathForStableTxt": "stable.txt의 다운로드 경로: %s", - "loc.messages.DownloadKubeCtlFailed": "%s 버전의 Kubectl 클라이언트를 다운로드할 수 없습니다. https://github.com/kubernetes/kubernetes/releases에서 버전이 올바른지 확인하세요.", - "loc.messages.DownloadStableVersionFailed": "%s에서 안정적인 버전의 Kubernetes 파일을 다운로드할 수 없습니다. %s(으)로 대체합니다.", - "loc.messages.DockerComposeFilePathNotSupplied": "docker-compose 파일 경로가 제공되지 않았습니다.", - "loc.messages.UsingLatestStableVersion": "잘못된 버전 1.7이 버전 사양 입력에 지정되었습니다. 안정적인 최신 버전을 대신 사용합니다. https://github.com/kubernetes/kubernetes/releases에서 올바른 버전을 확인하세요.", - "loc.messages.NotAValidSemverVersion": "버전이 올바른 형식으로 지정되지 않았습니다(예: 1.8.2, v1.8.2, 2.8.2, v2.8.2).", - "loc.messages.ManifestFileNotFound": "%s과(와) 일치하는 매니페스트 파일이 없습니다.", - "loc.messages.KubernetesServiceConnectionNotFound": "Kubernetes 서비스 연결 정보를 찾을 수 없습니다.", - "loc.messages.UnknownRenderType": "알 수 없는 렌더링 엔진입니다.", - "loc.messages.ResourceKindNotDefined": "리소스 종류가 Null입니다.", - "loc.messages.NullInputObject": "입력 개체가 Null입니다.", - "loc.messages.ArgumentsInputNotSupplied": "인수를 지정하지 않았습니다.", - "loc.messages.NullInputObjectMetadata": "입력 개체 메타데이터가 Null입니다.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "거부 작업은 카나리아 전략에서만 실행됩니다.", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "수준 올리기 작업은 카나리아 전략에서만 실행됩니다.", - "loc.messages.AllContainersNotInReadyState": "일부 컨테이너만 준비 상태입니다.", - "loc.messages.CouldNotDeterminePodStatus": "오류로 인해 Pod의 상태를 확인할 수 없음: %s", - "loc.messages.KubectlShouldBeUpgraded": "kustomize 기능을 사용하려면 kubectl 클라이언트 버전이 v1.14 이상이어야 합니다.", - "loc.messages.CouldNotDetermineServiceStatus": "오류로 인해 서비스 %s 상태를 확인할 수 없음: %s", - "loc.messages.waitForServiceIpAssignment": "서비스 %s 외부 IP 할당을 기다리는 중", - "loc.messages.waitForServiceIpAssignmentTimedOut": "서비스 %s 외부 IP 할당 대기 시간이 초과되었습니다.", - "loc.messages.ServiceExternalIP": "서비스 %s 외부 IP가 %s입니다.", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "TrafficSplit 매니페스트 파일 %s을(를) 만들 수 없습니다.", - "loc.messages.StableSpecSelectorNotExist": "리소스 %s이(가) SMI 카나리아 배포를 사용하여 배포되지 않았습니다.", - "loc.messages.InvalidPercentage": "백분율 값이 잘못되었습니다.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "복제본 개수 값이 잘못되었습니다.", - "loc.messages.InvalidTimeoutValue": "시간 제한 값이 잘못되었습니다. 유효한 수를 입력하세요.", - "loc.messages.RolloutStatusTimedout": "롤아웃 상태를 확인하지 못했습니다.", - "loc.messages.EnvironmentLink": "자세한 내용을 보려면 %s(으)로 이동하세요." -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ru-RU/resources.resjson deleted file mode 100644 index 0ff96c8cd265..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/ru-RU/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "Развертывание в Kubernetes", - "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=851275) или [документацию по Kubernetes](https://kubernetes.io/docs/home/)", - "loc.description": "Используйте файлы манифеста Kubernetes для развертывания в кластерах или даже подготовки файлов манифеста, которые будут использоваться для развертываний с помощью чартов Helm", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "Действие", - "loc.input.help.action": "Выберите действие для выполнения.", - "loc.input.label.kubernetesServiceConnection": "Подключение к службе Kubernetes", - "loc.input.help.kubernetesServiceConnection": "Выберите подключение службы Kubernetes.", - "loc.input.label.namespace": "Пространство имен", - "loc.input.help.namespace": "Задает пространство имен для команд с помощью флага –namespace. Если пространство имен не указано, команды будут выполняться в пространстве имен по умолчанию.", - "loc.input.label.strategy": "Стратегия", - "loc.input.help.strategy": "Используемая стратегия развертывания", - "loc.input.label.trafficSplitMethod": "Метод разделения трафика", - "loc.input.help.trafficSplitMethod": "Используемый метод разделения трафика", - "loc.input.label.percentage": "Процент", - "loc.input.help.percentage": "Процент перенаправления трафика в развертывание Canary", - "loc.input.label.baselineAndCanaryReplicas": "Базовые реплики и реплики Canary", - "loc.input.help.baselineAndCanaryReplicas": "Счетчик базовых реплик и реплик Canary", - "loc.input.label.manifests": "Манифесты", - "loc.input.help.manifests": "Развертываемые манифесты", - "loc.input.label.containers": "Контейнеры", - "loc.input.help.containers": "Контейнеры", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret для извлечения образа из закрытого реестра", - "loc.input.label.renderType": "Модуль отрисовки", - "loc.input.help.renderType": "Инструмент, используемый для создания файлов манифеста.", - "loc.input.label.dockerComposeFile": "Путь к файлу Docker Compose", - "loc.input.help.dockerComposeFile": "Путь к файлу docker-compose", - "loc.input.label.helmChart": "Чарт Helm", - "loc.input.help.helmChart": "Путь к подготавливаемому чарту Helm", - "loc.input.label.releaseName": "Имя выпуска Helm", - "loc.input.help.releaseName": "Используемое имя выпуска Helm", - "loc.input.label.overrideFiles": "Переопределение файлов", - "loc.input.help.overrideFiles": "Переопределение задаваемых файлов", - "loc.input.label.overrides": "Переопределения", - "loc.input.help.overrides": "Переопределение задаваемых значений", - "loc.input.label.kustomizationPath": "Путь Kustomization", - "loc.input.help.kustomizationPath": "Аргумент должен быть путем к каталогу, содержащему файл, или URL-адресом репозитория Git с суффиксом path, указывающим тот же путь относительно корня репозитория.", - "loc.input.label.resourceToPatch": "Ресурс для исправления", - "loc.input.help.resourceToPatch": "чтобы идентифицировать ресурс", - "loc.input.label.resourceFileToPatch": "Путь к файлу", - "loc.input.help.resourceFileToPatch": "Путь к файлу, используемому для исправления", - "loc.input.label.kind": "Тип", - "loc.input.help.kind": "Тип объекта K8s; развертывание, replicaSet и т. д.", - "loc.input.label.name": "Имя", - "loc.input.help.name": "Имя объекта k8s", - "loc.input.label.replicas": "Число реплик", - "loc.input.help.replicas": "Число реплик для масштабирования", - "loc.input.label.mergeStrategy": "Стратегия слияния", - "loc.input.help.mergeStrategy": "Тип предоставляемого исправления; одна из [стратегий слияния JSON]", - "loc.input.label.arguments": "Аргументы", - "loc.input.help.arguments": "Аргументы для команды \"kubectl delete\"", - "loc.input.label.patch": "Исправление", - "loc.input.help.patch": "Содержимое исправления", - "loc.input.label.secretType": "Тип секрета", - "loc.input.help.secretType": "Создайте или обновите универсальный объект imagepullsecret или объект imagepullsecret для docker. Выберите реестр dockerRegistry, чтобы создать или обновить объект imagepullsecret для него. imagePullSecret — это способ передачи секрета, содержащего пароль к реестру контейнеров, в Kubelet для извлечения частного образа от имени вашего Pod.", - "loc.input.label.secretName": "Имя секрета", - "loc.input.help.secretName": "Имя секрета. Вы можете использовать это имя в YAML-файле конфигурации Kubernetes.", - "loc.input.label.secretArguments": "Аргументы", - "loc.input.help.secretArguments": "Укажите ключи и литеральные значения для вставки в секрет. Пример: --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "loc.input.label.dockerRegistryEndpoint": "Подключение к службе реестра Docker", - "loc.input.help.dockerRegistryEndpoint": "Выберите подключение к службе реестра Docker. Это требуется для команд, для выполнения которых необходимо пройти проверку подлинности в реестре.", - "loc.input.label.rolloutStatusTimeout": "Время ожидания для состояния выпуска", - "loc.input.help.rolloutStatusTimeout": "Интервал времени (в секундах), по истечении которого будет завершено отслеживание состояния выпуска", - "loc.messages.DownloadPathForStableTxt": "Путь для скачивания stable.txt: %s", - "loc.messages.DownloadKubeCtlFailed": "Не удается скачать клиент kubectl версии %s. Проверьте, верна ли версия: https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "Не удается скачать файл стабильной версии kubernetes с %s. Возврат к %s", - "loc.messages.DockerComposeFilePathNotSupplied": "Путь к файлу docker-compose не указан", - "loc.messages.UsingLatestStableVersion": "В спецификации версии указана недопустимая версия 1.7. Вместо нее будет использована последняя стабильная версия. Проверьте правильность версий на странице https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "Версия указана в неправильном формате. Примеры: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "loc.messages.ManifestFileNotFound": "Файлы манифеста, соответствующие %s, не найдены.", - "loc.messages.KubernetesServiceConnectionNotFound": "Сведения о подключении к службе Kubernetes не найдены.", - "loc.messages.UnknownRenderType": "Неизвестный модуль отрисовки", - "loc.messages.ResourceKindNotDefined": "Тип ресурса равен NULL", - "loc.messages.NullInputObject": "Входной объект имеет значение NULL.", - "loc.messages.ArgumentsInputNotSupplied": "Аргументы не указаны.", - "loc.messages.NullInputObjectMetadata": "Метаданные входного объекта имеют значение NULL.", - "loc.messages.InvalidRejectActionDeploymentStrategy": "Действие отклонения работает только со стратегией: предохранитель", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "Действие повышения уровня работает только со стратегией: предохранитель", - "loc.messages.AllContainersNotInReadyState": "Все контейнеры находятся в состоянии готовности.", - "loc.messages.CouldNotDeterminePodStatus": "Не удалось определить состояние объекта pod из-за ошибки: %s", - "loc.messages.KubectlShouldBeUpgraded": "Для использования функций kustomize требуется версия клиента kubectl 1.14 или выше.", - "loc.messages.CouldNotDetermineServiceStatus": "Не удалось определить состояние службы %s из-за ошибки: %s", - "loc.messages.waitForServiceIpAssignment": "Ожидание назначения внешнего IP-адреса службы %s", - "loc.messages.waitForServiceIpAssignmentTimedOut": "Истекло время ожидания назначения внешнего IP-адреса службы %s", - "loc.messages.ServiceExternalIP": "служба %s имеет внешний IP-адрес %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "Не удалось создать файл манифеста TrafficSplit. %s", - "loc.messages.StableSpecSelectorNotExist": "Ресурс %s не развернут с помощью развертывания Canary SMI.", - "loc.messages.InvalidPercentage": "Недопустимое значение для процента.", - "loc.messages.InvalidBaselineAndCanaryReplicas": "Недопустимое значение для количества реплик.", - "loc.messages.InvalidTimeoutValue": "Недопустимое значение времени ожидания. Введите допустимое число.", - "loc.messages.RolloutStatusTimedout": "Сбой проверки состояния выпуска.", - "loc.messages.EnvironmentLink": "Дополнительные сведения см. на странице %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-CN/resources.resjson deleted file mode 100644 index 02cf99a50e39..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-CN/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "部署到 Kubernetes", - "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=851275)或[参阅 Kubernetes 文档](https://kubernetes.io/docs/home/)", - "loc.description": "使用 Kubernetes 清单文件部署到群集,甚至生成要用于使用 Helm 图表进行部署的清单文件", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "操作", - "loc.input.help.action": "选择要执行的操作。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 服务连接", - "loc.input.help.kubernetesServiceConnection": "选择 Kubernetes 服务连接。", - "loc.input.label.namespace": "命名空间", - "loc.input.help.namespace": "使用 -namespace 标志设置命令的命名空间。如果未提供命名空间,则命令将在默认命名空间中运行。", - "loc.input.label.strategy": "策略", - "loc.input.help.strategy": "要使用的部署策略", - "loc.input.label.trafficSplitMethod": "流量拆分方法", - "loc.input.help.trafficSplitMethod": "要使用的流量拆分方法", - "loc.input.label.percentage": "百分比", - "loc.input.help.percentage": "重定向到 Canary 部署的流量的百分比", - "loc.input.label.baselineAndCanaryReplicas": "基线和 Canary 副本", - "loc.input.help.baselineAndCanaryReplicas": "基线和 Canary 副本计数", - "loc.input.label.manifests": "清单", - "loc.input.help.manifests": "要部署的清单", - "loc.input.label.containers": "容器", - "loc.input.help.containers": "容器", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "从专用注册表拉取映像的 ImagePullSecret", - "loc.input.label.renderType": "呈现引擎", - "loc.input.help.renderType": "用于生成清单文件的工具。", - "loc.input.label.dockerComposeFile": "docker compose 文件的路径", - "loc.input.help.dockerComposeFile": "docker-compose 文件路径", - "loc.input.label.helmChart": "Helm 图表", - "loc.input.help.helmChart": "要生成的 Helm 图表路径", - "loc.input.label.releaseName": "Helm 发布名称", - "loc.input.help.releaseName": "要使用的 Helm 发布名称", - "loc.input.label.overrideFiles": "替代文件", - "loc.input.help.overrideFiles": "替代要设置的文件", - "loc.input.label.overrides": "替代", - "loc.input.help.overrides": "替代要设置的值", - "loc.input.label.kustomizationPath": "Kustomization 路径", - "loc.input.help.kustomizationPath": "该参数必须是包含该文件的目录的路径,或带有路径后缀的 git 存储库 URL,该路径后缀指定与存储库根目录相同的路径。", - "loc.input.label.resourceToPatch": "要修补的资源", - "loc.input.help.resourceToPatch": "识别资源", - "loc.input.label.resourceFileToPatch": "文件路径", - "loc.input.help.resourceFileToPatch": "用于修补程序的文件的路径", - "loc.input.label.kind": "种类", - "loc.input.help.kind": "K8s 对象的类型;部署、replicaSet 等。", - "loc.input.label.name": "名称", - "loc.input.help.name": "k8s 对象的名称", - "loc.input.label.replicas": "副本计数", - "loc.input.help.replicas": "要缩放到的副本数", - "loc.input.label.mergeStrategy": "合并策略", - "loc.input.help.mergeStrategy": "所提供的修补程序的类型;[json 合并策略]之一", - "loc.input.label.arguments": "参数", - "loc.input.help.arguments": "`kubectl delete` 命令的参数", - "loc.input.label.patch": "修补程序", - "loc.input.help.patch": "修补程序的内容", - "loc.input.label.secretType": "机密类型", - "loc.input.help.secretType": "创建/更新泛型或 docker imagepullsecret。选择 dockerRegistry,用于创建/更新所选注册表的 imagepullsecret。imagePullSecret 是一种将包含容器注册表密码的机密传递到 Kubelet 的方法,可便于其代表 Pod 拉取专用映像。", - "loc.input.label.secretName": "机密名称", - "loc.input.help.secretName": "机密名称。可以在 Kubernetes YAML 配置文件中使用此机密名称。", - "loc.input.label.secretArguments": "参数", - "loc.input.help.secretArguments": "指定要插入机密的密钥和文本值。例如,--from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker 注册表服务连接", - "loc.input.help.dockerRegistryEndpoint": "选择 Docker 注册表服务连接。这对于需要执行注册表身份验证的命令是必需的。", - "loc.input.label.rolloutStatusTimeout": "推出状态超时", - "loc.input.help.rolloutStatusTimeout": "在结束监视推出状态前等待的时长(秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt 的下载路径: %s", - "loc.messages.DownloadKubeCtlFailed": "无法下载版本 %s 的 kubectl 客户端。检查该版本是否正确 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "无法从 %s 下载 kubernetes 稳定版本文件。正在回退到 %s", - "loc.messages.DockerComposeFilePathNotSupplied": "未提供 docker-compose 文件路径", - "loc.messages.UsingLatestStableVersion": "版本规范输入中指定的版本 1.7 无效。请改用最新的稳定版本。检查获取正确的版本 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "未指定正确格式的版本。示例: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "找不到匹配 %s 的任何清单文件。", - "loc.messages.KubernetesServiceConnectionNotFound": "找不到 Kubernetes 服务连接详细信息。", - "loc.messages.UnknownRenderType": "未知的呈现引擎", - "loc.messages.ResourceKindNotDefined": "资源类型为 null", - "loc.messages.NullInputObject": "输入对象为 null。", - "loc.messages.ArgumentsInputNotSupplied": "未提供参数。", - "loc.messages.NullInputObjectMetadata": "输入对象元数据为 null。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒绝操作仅适用于策略: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "升级操作仅适用于策略: canary", - "loc.messages.AllContainersNotInReadyState": "所有容器均未处于就绪状态。", - "loc.messages.CouldNotDeterminePodStatus": "由于错误 %s,无法确定 Pod 的状态", - "loc.messages.KubectlShouldBeUpgraded": "kubectl 客户端版本需要等于或高于 v1.14,才能使用 kustomize 功能。", - "loc.messages.CouldNotDetermineServiceStatus": "由于错误 %s,无法确定服务 %s 状态", - "loc.messages.waitForServiceIpAssignment": "正在等待服务 %s 外部 IP 分配", - "loc.messages.waitForServiceIpAssignmentTimedOut": "等待服务 %s 外部 IP 分配超时", - "loc.messages.ServiceExternalIP": "服务 %s 外部 IP 为 %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "无法创建 TrafficSplit 清单文件。%s", - "loc.messages.StableSpecSelectorNotExist": "未使用 SMI Canary 部署来部署资源 %s。", - "loc.messages.InvalidPercentage": "百分比的值无效。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "副本计数值无效。", - "loc.messages.InvalidTimeoutValue": "超时值无效。请输入有效数字。", - "loc.messages.RolloutStatusTimedout": "推出状态检查失败。", - "loc.messages.EnvironmentLink": "有关详细信息,请转到 %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-TW/resources.resjson deleted file mode 100644 index e859c1ff26e3..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Strings/resources.resjson/zh-TW/resources.resjson +++ /dev/null @@ -1,95 +0,0 @@ -{ - "loc.friendlyName": "部署至 Kubernetes", - "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=851275)或[參閱 Kubernetes 文件](https://kubernetes.io/docs/home/)", - "loc.description": "使用 Kubernetes 資訊清單檔案部署至叢集,或甚至是使用 Helm charts 轉換用於部署的資訊清單檔案", - "loc.instanceNameFormat": "$(action)", - "loc.input.label.action": "動作", - "loc.input.help.action": "選擇要執行的動作。", - "loc.input.label.kubernetesServiceConnection": "Kubernetes 服務連線", - "loc.input.help.kubernetesServiceConnection": "請選取 Kubernetes 服務連線。", - "loc.input.label.namespace": "命名空間", - "loc.input.help.namespace": "使用 –namespace 旗標為命令設定命名空間。若未提供命名空間,這些命令會在預設命名空間中執行。", - "loc.input.label.strategy": "策略", - "loc.input.help.strategy": "要使用的部署策略", - "loc.input.label.trafficSplitMethod": "分流方法", - "loc.input.help.trafficSplitMethod": "要使用的分流方法", - "loc.input.label.percentage": "百分比", - "loc.input.help.percentage": "重新導向至 Canary 部署的流量百分比", - "loc.input.label.baselineAndCanaryReplicas": "基準與 Canary 複本", - "loc.input.help.baselineAndCanaryReplicas": "基準與 Canary 複本計數", - "loc.input.label.manifests": "資訊清單", - "loc.input.help.manifests": "要部署的資訊清單", - "loc.input.label.containers": "容器", - "loc.input.help.containers": "容器", - "loc.input.label.imagePullSecrets": "ImagePullSecrets", - "loc.input.help.imagePullSecrets": "ImagePullSecret 可從私人登錄提取映像", - "loc.input.label.renderType": "轉譯引擎", - "loc.input.help.renderType": "用於產生資訊清單檔案的工具。", - "loc.input.label.dockerComposeFile": "Docker Compose 檔案路徑", - "loc.input.help.dockerComposeFile": "docker-compose 檔案路徑", - "loc.input.label.helmChart": "Helm Chart", - "loc.input.help.helmChart": "要轉換的 Helm chart 路徑", - "loc.input.label.releaseName": "Helm 版本名稱", - "loc.input.help.releaseName": "要使用的 Helm 版本名稱", - "loc.input.label.overrideFiles": "覆寫檔案", - "loc.input.help.overrideFiles": "覆寫要設定的檔案", - "loc.input.label.overrides": "覆寫", - "loc.input.help.overrides": "覆寫要設定的值", - "loc.input.label.kustomizationPath": "Kustomization 路徑", - "loc.input.help.kustomizationPath": "引數必須是包含檔案的目錄路徑,或路徑尾碼指定目標與儲存機制根路徑相同的 git 存放庫 URL。", - "loc.input.label.resourceToPatch": "要修補的資源", - "loc.input.help.resourceToPatch": "以找出資源", - "loc.input.label.resourceFileToPatch": "檔案路徑", - "loc.input.help.resourceFileToPatch": "用於修補的檔案路徑", - "loc.input.label.kind": "種類", - "loc.input.help.kind": "K8s 物件的種類; deployment、replicaSet 等。", - "loc.input.label.name": "名稱", - "loc.input.help.name": "k8s 物件的名稱", - "loc.input.label.replicas": "複本計數", - "loc.input.help.replicas": "要擴展的目標複本數目", - "loc.input.label.mergeStrategy": "合併策略", - "loc.input.help.mergeStrategy": "所提供的修補類型; 其中一個 [json 策略合併]", - "loc.input.label.arguments": "引數", - "loc.input.help.arguments": "'kubectl delete' 命令的引數", - "loc.input.label.patch": "修補程式", - "loc.input.help.patch": "修補的內容", - "loc.input.label.secretType": "秘密的類型", - "loc.input.help.secretType": "建立/更新一般或 docker imagepullsecret。選取 dockerRegistry 以建立/更新所選登錄的 imagepullsecret。imagePullSecret 這項方法可將包含容器登錄密碼的秘密傳遞給 Kubelet,讓它可以代替您的 Pod 提取私用映像。", - "loc.input.label.secretName": "密碼名稱", - "loc.input.help.secretName": "秘密名稱。您可以在 Kubernetes YAML 組態檔中使用此秘密名稱。", - "loc.input.label.secretArguments": "引數", - "loc.input.help.secretArguments": "指定要在秘密中插入的索引鍵與常值。例如 --from-literal=key1=value1 --from-literal=key2=\"top secret\"。", - "loc.input.label.dockerRegistryEndpoint": "Docker 登錄服務連線", - "loc.input.help.dockerRegistryEndpoint": "選取 Docker 登錄服務連線。必須為需要向登錄驗證的命令選取。", - "loc.input.label.rolloutStatusTimeout": "推出狀態逾時", - "loc.input.help.rolloutStatusTimeout": "結束監看推出狀態前所要等候的時間長度 (秒)", - "loc.messages.DownloadPathForStableTxt": "stable.txt 的下載路徑: %s", - "loc.messages.DownloadKubeCtlFailed": "無法下載版本為 %s 的 kubectl 用戶端。請檢查版本是否正確 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.DownloadStableVersionFailed": "無法從 %s 下載 kubernetes 穩定版本檔案。回到 %s", - "loc.messages.DockerComposeFilePathNotSupplied": "未提供 docker-compose 檔案路徑", - "loc.messages.UsingLatestStableVersion": "版本規格輸入中指定的版本 1.7 無效。請改用最新穩定版本。查看正確的版本 https://github.com/kubernetes/kubernetes/releases", - "loc.messages.NotAValidSemverVersion": "未以正確的格式指定版本。例如: 1.8.2、v1.8.2、2.8.2、v2.8.2。", - "loc.messages.ManifestFileNotFound": "找不到任何符合 %s 的資訊清單檔案。", - "loc.messages.KubernetesServiceConnectionNotFound": "找不到 Kubernetes 服務連線詳細資料。", - "loc.messages.UnknownRenderType": "未知的轉譯引擎", - "loc.messages.ResourceKindNotDefined": "資源種類為 Null", - "loc.messages.NullInputObject": "輸入物件為 Null。", - "loc.messages.ArgumentsInputNotSupplied": "未提供引數。", - "loc.messages.NullInputObjectMetadata": "輸入物件中繼資料為 Null。", - "loc.messages.InvalidRejectActionDeploymentStrategy": "拒絕動作僅適用於策略: canary", - "loc.messages.InvalidPromotetActionDeploymentStrategy": "升階動作僅適用於策略: canary", - "loc.messages.AllContainersNotInReadyState": "所有容器皆未處於就緒狀態。", - "loc.messages.CouldNotDeterminePodStatus": "因為發生錯誤,所以無法判斷 Pod 的狀態: %s", - "loc.messages.KubectlShouldBeUpgraded": "需要有相當於 v1.14 或更新版本的 kubectl 用戶端版本,才能使用 kustomize 功能。", - "loc.messages.CouldNotDetermineServiceStatus": "因為發生錯誤,所以無法判斷服務 %s 狀態: %s", - "loc.messages.waitForServiceIpAssignment": "正在等候服務 %s 外部 IP 指派", - "loc.messages.waitForServiceIpAssignmentTimedOut": "等候服務 %s 外部 IP 指派已逾時", - "loc.messages.ServiceExternalIP": "服務 %s 的外部 IP 是 %s", - "loc.messages.UnableToCreateTrafficSplitManifestFile": "無法建立 TrafficSplit 資訊清單檔案。%s", - "loc.messages.StableSpecSelectorNotExist": "未使用 SMI Canary 部署來部署資源 %s。", - "loc.messages.InvalidPercentage": "百分比值無效。", - "loc.messages.InvalidBaselineAndCanaryReplicas": "複本計數值無效。", - "loc.messages.InvalidTimeoutValue": "逾時值無效。請輸入有效的數值。", - "loc.messages.RolloutStatusTimedout": "推出狀態檢查失敗。", - "loc.messages.EnvironmentLink": "如需詳細資訊,請前往 %s" -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/L0.ts b/_generated/KubernetesManifestV0_Node16/Tests/L0.ts deleted file mode 100644 index a9c8c05193c0..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/L0.ts +++ /dev/null @@ -1,549 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as tl from 'azure-pipelines-task-lib'; -import * as shared from './TestShared'; -import * as utils from '../src/utils/utilities'; -import { updateImagePullSecrets, updateImageDetails } from '../src/utils/KubernetesObjectUtility'; -import * as yaml from 'js-yaml'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; - -describe('Kubernetes Manifests Suite', function () { - this.timeout(30000); - - before((done) => { - process.env[shared.TestEnvVars.operatingSystem] = tl.osType().match(/^Win/) ? shared.OperatingSystems.Windows : shared.OperatingSystems.Other; - process.env[shared.TestEnvVars.isKubectlPresentOnMachine] = 'true'; - process.env[shared.TestEnvVars.manifests] = shared.ManifestFilesPath; - done(); - }); - - beforeEach(() => { - delete process.env[shared.TestEnvVars.action]; - delete process.env[shared.TestEnvVars.strategy]; - delete process.env[shared.TestEnvVars.percentage]; - delete process.env[shared.TestEnvVars.isStableDeploymentPresent]; - delete process.env[shared.TestEnvVars.isCanaryDeploymentPresent]; - delete process.env[shared.TestEnvVars.isBaselineDeploymentPresent]; - delete process.env[shared.TestEnvVars.arguments]; - delete process.env[shared.TestEnvVars.namespace]; - delete process.env[shared.TestEnvVars.dockerComposeFile]; - delete process.env[shared.TestEnvVars.releaseName]; - delete process.env[shared.TestEnvVars.baselineAndCanaryReplicas]; - delete process.env[shared.TestEnvVars.trafficSplitMethod]; - delete process.env[shared.TestEnvVars.containers]; - delete process.env.RemoveNamespaceFromEndpoint; - }); - - after((done) => { - done(); - }); - - it('Run successfuly for deploy with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - process.env[shared.TestEnvVars.imagePullSecrets] = 'test-key1\ntest-key2'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77') - done(); - }); - - it('Run successfully for deploy canary', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.trafficSplitMethod] = shared.TrafficSplitMethod.pod; - process.env[shared.TestEnvVars.percentage] = '30'; - process.env[shared.TestEnvVars.isStableDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isCanaryDeploymentPresent] = 'false'; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment-canary created') != -1, 'Canary deployment is created'); - assert(tr.stdout.indexOf('nginx-deployment-baseline created') != -1, 'Baseline deployment is created'); - assert(tr.stdout.indexOf('deployment "nginx-deployment-canary" successfully rolled out') != -1, 'Canary deployment is successfully rolled out'); - assert(tr.stdout.indexOf('deployment "nginx-deployment-baseline" successfully rolled out') != -1, 'Baseline deployment is successfully rolled out'); - assert(tr.stdout.indexOf('nginx-deployment-canary annotated') != -1, 'Canary deployment is annotated'); - assert(tr.stdout.indexOf('nginx-deployment-baseline annotated') != -1, 'Baseline deployment is annotated'); - done(); - }); - - it('Run should fail when canary deployment already exits', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.deploy; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.percentage] = '30'; - process.env[shared.TestEnvVars.isStableDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isCanaryDeploymentPresent] = 'true'; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - done(); - }); - - it('Run should fail for promote with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - process.env[shared.TestEnvVars.imagePullSecrets] = 'test-key'; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run successfuly for promote with canary strategy when baseline resource exists', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment created') != -1, 'deployment is created'); - assert(tr.stdout.indexOf('Rollout status has been skipped for Deployment as only updateStartegy:\'RollingUpdate\' is allowed') != -1, 'deployment rollout status skipped'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77') - assert(tr.stdout.indexOf('nginx-deployment annotated') != -1, 'nginx-deployment created.'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') != -1, 'nginx-deployment-baseline workload exists'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted') != -1, 'Baseline and Canary workloads deleted'); - done(); - }); - - it('Run successfuly for promote with canary strategy when baseline resource does not exist', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.promote; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('nginx-deployment created') != -1, 'deployment is created'); - assert(tr.stdout.indexOf('Rollout status has been skipped for Deployment as only updateStartegy:\'RollingUpdate\' is allowed') != -1, 'deployment rollout status skipped'); - assert(tr.stdout.indexOf('nginx-service 104.211.243.77') != -1, 'nginx-service external IP is 104.211.243.77'); - assert(tr.stdout.indexOf('nginx-deployment annotated') != -1, 'nginx-deployment created.'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') == -1, 'nginx-deployment-baseline workload does not exist'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted') != -1, 'Canary workload deleted'); - done(); - }); - - it('Run successfuly for reject with canary strategy when baseline resource exists', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') != -1, 'nginx-deployment-baseline workload exists'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted') != -1, 'Baseline and Canary workloads deleted'); - done(); - }); - - it('Run successfuly for reject with canary strategy when baseline resource does not exist', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.canary; - process.env[shared.TestEnvVars.isBaselineDeploymentPresent] = 'false'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('"azure-pipelines/version": "baseline"') == -1, 'nginx-deployment-baseline workload does not exist'); - assert(tr.stdout.indexOf('"nginx-deployment-canary" deleted') != -1, 'Canary workload deleted'); - done(); - }); - - it('Run should fail for reject with none strategy', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.reject; - process.env[shared.TestEnvVars.strategy] = shared.Strategy.none; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run successfuly for delete with arguments', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - process.env[shared.TestEnvVars.arguments] = 'deployment nginx-deployment' - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.delete; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('deleted successfuly') != -1, 'Deleted successfuly'); - done(); - }); - - it('Run should fail for delete with no arguments', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.delete; - tr.run(); - assert(tr.failed, 'task should have failed'); - done(); - }); - - it('Run should succeed with helm bake and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm3 bake and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm2 type (backward compat) with helm2 and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm2'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should succeed with helm bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--name newReleaseName') > -1, 'bake should have overriden release name'); - done(); - }); - - it('Run should succeed with helm3 bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - done(tr.stderr); - }); - - it('Run should succeed with helm2 type (backward compat) and helm3 bake overriding release name and honor namespace field', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm2'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - done(tr.stderr); - }); - - it('Run should succeed with helm bake overriding release name and use default namespace when not found in endpoint either', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--name newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake overriding release name and use default namespace when not found in endpoint either', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.releaseName] = 'newReleaseName'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('newReleaseName') > -1, 'bake should have overriden release name'); - assert(tr.stdout.indexOf('--name ') <= -1, 'bake should not have added --name arg'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake should override values with : correctly', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.overrides] = 'name:value:with:colons'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('--set name=value:with:colons') > -1, 'should have parsed the :s correctly'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm3 bake should override values with : correctly', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v3"; - process.env[shared.TestEnvVars.overrides] = 'name:value:with:colons'; - process.env.RemoveNamespaceFromEndpoint = 'true'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - assert(tr.stdout.indexOf('--namespace default') > -1, 'should have used default namespace'); - assert(tr.stdout.indexOf('--set name=value:with:colons') > -1, 'should have parsed the :s correctly'); - assert(tr.stdout.indexOf('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.') > -1, 'should have added a debug log'); - done(); - }); - - it('Run should succeed with helm bake with image substituion', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.namespace] = 'namespacefrominput'; - process.env[shared.TestEnvVars.helmChart] = 'helmChart'; - process.env[shared.TestEnvVars.renderType] = 'helm'; - process.env[shared.TestEnvVars.helmVersion] = "v2"; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should successfully create secret', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.createSecret; - process.env[shared.TestEnvVars.secretName] = 'secret'; - process.env[shared.TestEnvVars.secretType] = 'generic'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('delete secret') > -1, 'task should have deleted secret'); - assert(tr.stdout.indexOf('create secret') > -1, 'task should have created secret'); - assert(tr.stdout.indexOf('create secret') > tr.stdout.indexOf('delete secret'), 'delete secret should have been called before created secret'); - done(); - }); - - it('Run should scale', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.scale; - process.env[shared.TestEnvVars.kind] = 'replicaset'; - process.env[shared.TestEnvVars.replicas] = '1'; - process.env[shared.TestEnvVars.name] = 'r1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('scale replicaset/r1') > -1, 'task should have run scale command'); - done(); - }); - - it('Run should succeessfully patch', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.patch; - process.env[shared.TestEnvVars.kind] = 'replicaset'; - process.env[shared.TestEnvVars.mergeStrategy] = 'merge'; - process.env[shared.TestEnvVars.name] = 'r1'; - process.env[shared.TestEnvVars.patch] = 'somePatch'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - done(); - }); - - it('Check if error validations', (done: Mocha.Done) => { - try { - const execResults = [{ - code: 0, - stderr: 'Warning: your execution has some warnings' - } as IExecSyncResult]; - utils.checkForErrors(execResults, false); - } catch (ex) { - assert(!ex, 'shouldnt have thrown any error'); - } - try { - const execResults = [{ - code: 1, - stderr: 'error: your execution has some errors' - } as IExecSyncResult]; - utils.checkForErrors(execResults, false); - } catch (ex) { - assert(ex, 'shouldnt have thrown error'); - assert(ex.message === 'error: your execution has some errors', 'The thrown error should have matched'); - } - done(); - }); - - it('Run should successfully add container image tags', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'deployment-image-substitution.yaml'); - const deploymentFile = fs.readFileSync(testFile).toString(); - const deploymentObject = yaml.load(deploymentFile); - - updateImageDetails(deploymentObject, ['nginx:42', 'mysql:8.0', 'imagewithhyphen:1', 'myacr.azurecr.io/myimage:1', 'myimagewithcomment:1', 'nginx-init:42.1', 'myacr.azurecr.io/folder/image-a:1', 'myacr.azurecr.io/folder/image-b:2','mcr.microsoft.com/dotnet/core/sdk:1','mcr.microsoft.com/mssql/server@sha256:46c98da652ed6c3b85b9cdaa611781bdd543668fe730f807eb09adc5bb1e8c03']); - assert(deploymentObject.spec.template.spec.containers[0].image === 'nginx:42', 'nginx image not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[2].image === 'mysql:8.0', 'untagged image not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[3].image === 'myacr.azurecr.io/myimage:1', 'untagged image with registry not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[4].image === 'myimagewithcomment:1', 'untagged image with comment not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[5].image === 'imagewithhyphen:1', 'manifest regex should work correctly'); - assert(deploymentObject.spec.template.spec.containers[6].image === 'myacr.azurecr.io/folder/image-a:1', 'untagged image with common folder not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[7].image === 'myacr.azurecr.io/folder/image-b:2', 'untagged image with common folder not tagged correctly'); - assert(deploymentObject.spec.template.spec.containers[8].image === 'mcr.microsoft.com/dotnet/core/sdk:1', 'sha256 image reference should be replaced'); - assert(deploymentObject.spec.template.spec.containers[9].image === 'mcr.microsoft.com/mssql/server@sha256:46c98da652ed6c3b85b9cdaa611781bdd543668fe730f807eb09adc5bb1e8c03', 'sha256 image reference should be used as replacement'); - assert(deploymentObject.spec.template.spec.initContainers[0].image === 'nginx-init:42.1', 'nginx-init image not tagged correctly'); - done(); - }); - - it('Run should bake docker-compose files using kompose', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = 'dockerComposeFilePath'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('Kubernetes files created') > 0, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should bake docker-compose files using kompose with image substituion', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = 'dockerComposeFilePath'; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdout.indexOf('Kubernetes files created') > 0, 'task should have succeeded'); - assert(tr.stdout.indexOf('set manifestsBundle') > -1, 'task should have set manifestsBundle output variable'); - done(); - }); - - it('Run should fail when docker-compose file path is not supplied', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kompose'; - process.env[shared.TestEnvVars.dockerComposeFile] = ''; - tr.run(); - assert(tr.failed, 'task should have failed'); - assert(tr.stdout.indexOf('Input required: dockerComposeFile') > 0, 'proper error message should have been thrown'); - done(); - }); - - it('Run should successfully add image pull secrets to a cron job', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'cronjob.yaml'); - const cronJobFile = fs.readFileSync(testFile).toString(); - const cronJobObject = yaml.load(cronJobFile); - updateImagePullSecrets(cronJobObject, ['privaterepo-secret'], true); - assert(cronJobObject.spec.jobTemplate.spec.template.spec.imagePullSecrets[0].name === 'privaterepo-secret', 'should have updated the image pull secret correctly'); - done(); - }); - - it('Run should successfully add image pull secrets to a job', (done: Mocha.Done) => { - const testFile = path.join(__dirname, './manifests/', 'job.yaml'); - const jobFile = fs.readFileSync(testFile).toString(); - const jobObject = yaml.load(jobFile); - updateImagePullSecrets(jobObject, ['privaterepo-secret'], true); - assert(jobObject.spec.template.spec.imagePullSecrets[0].name === 'privaterepo-secret', 'should have updated the image pull secret correctly'); - done(); - }); - - it('Kustomize bake should fail when kubectl version is lower than v1.14', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env.KubectlMinorVersion = '13'; - tr.run(); - assert(tr.failed, 'task should have failed'); - assert(tr.stdout.indexOf('KubectlShouldBeUpgraded') > 0, 'proper error message should have been thrown'); - done(); - }); - - it('Kustomize bake should pass when kubectl version is greater than or equal to v1.14', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env.KubectlMinorVersion = '14'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdOutContained('kustomize kustomizationPath'), 'task should have invoked tool: kustomize'); - done(); - }); - - it('Kustomize bake should pass with image substituition', (done: Mocha.Done) => { - const tp = path.join(__dirname, 'TestSetup.js'); - const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - process.env[shared.TestEnvVars.action] = shared.Actions.bake; - process.env[shared.TestEnvVars.renderType] = 'kustomize'; - process.env[shared.TestEnvVars.kustomizationPath] = 'kustomizationPath'; - process.env[shared.TestEnvVars.containers] = 'nginx:1.1.1\nalpine'; - process.env.KubectlMinorVersion = '14'; - tr.run(); - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.stdOutContained('kustomize kustomizationPath'), 'task should have invoked tool: kustomize'); - done(); - }); -}); diff --git a/_generated/KubernetesManifestV0_Node16/Tests/TestSetup.ts b/_generated/KubernetesManifestV0_Node16/Tests/TestSetup.ts deleted file mode 100644 index ebd647b1b992..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/TestSetup.ts +++ /dev/null @@ -1,386 +0,0 @@ -import * as ma from 'azure-pipelines-task-lib/mock-answer'; -import * as tmrm from 'azure-pipelines-task-lib/mock-run'; -import * as path from 'path'; - -import * as shared from './TestShared'; - -const buildNumber = '1'; -const buildId = '1'; -const teamProject = 'project1'; -const collectionId = 'collection1'; -const definitionName = 'test'; -const definitionId = '123'; -const teamFoundationCollectionUri = 'https://abc.visualstudio.com/'; -const jobName = 'jobName'; - -const testnamespaceWorkingDirectory: string = shared.formatPath('a/w'); -const kubectlPath = shared.formatPath('newUserDir/kubectl.exe'); - -const taskPath = path.join(__dirname, '../src', 'run.js'); -const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); - -tr.setInput('kubernetesServiceConnection', 'kubernetesConnection'); -tr.setInput('namespace', process.env[shared.TestEnvVars.namespace] || ''); -tr.setInput('action', process.env[shared.TestEnvVars.action] || 'deploy'); -tr.setInput('strategy', process.env[shared.TestEnvVars.strategy] || 'None'); -tr.setInput('percentage', process.env[shared.TestEnvVars.percentage] || ''); -tr.setInput('manifests', process.env[shared.TestEnvVars.manifests] || shared.ManifestFilesPath); -tr.setInput('containers', process.env[shared.TestEnvVars.containers] || ''); -tr.setInput('imagePullSecrets', process.env[shared.TestEnvVars.imagePullSecrets] || ''); -tr.setInput('renderType', process.env[shared.TestEnvVars.renderType] || ''); -tr.setInput('helmChart', process.env[shared.TestEnvVars.helmChart] || ''); -tr.setInput('releaseName', process.env[shared.TestEnvVars.releaseName] || ''); -tr.setInput('overrideFiles', process.env[shared.TestEnvVars.overrideFiles] || ''); -tr.setInput('overrides', process.env[shared.TestEnvVars.overrides] || ''); -tr.setInput('resourceToPatch', process.env[shared.TestEnvVars.resourceToPatch] || ''); -tr.setInput('resourceFileToPatch', process.env[shared.TestEnvVars.resourceFileToPatch] || ''); -tr.setInput('kind', process.env[shared.TestEnvVars.kind] || ''); -tr.setInput('name', process.env[shared.TestEnvVars.name] || ''); -tr.setInput('replicas', process.env[shared.TestEnvVars.replicas] || ''); -tr.setInput('mergeStrategy', process.env[shared.TestEnvVars.mergeStrategy] || ''); -tr.setInput('arguments', process.env[shared.TestEnvVars.arguments] || ''); -tr.setInput('patch', process.env[shared.TestEnvVars.patch] || ''); -tr.setInput('secretName', process.env[shared.TestEnvVars.secretName] || ''); -tr.setInput('secretType', process.env[shared.TestEnvVars.secretType] || ''); -tr.setInput('dockerComposeFile', process.env[shared.TestEnvVars.dockerComposeFile] || ''); -tr.setInput('kustomizationPath', process.env[shared.TestEnvVars.kustomizationPath] || ''); -tr.setInput('baselineAndCanaryReplicas', process.env[shared.TestEnvVars.baselineAndCanaryReplicas] || '0'); -tr.setInput('trafficSplitMethod', process.env[shared.TestEnvVars.trafficSplitMethod]); - -process.env.SYSTEM_DEFAULTWORKINGDIRECTORY = testnamespaceWorkingDirectory; -process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = teamFoundationCollectionUri; -process.env.SYSTEM_TEAMPROJECT = teamProject; -process.env.SYSTEM_COLLECTIONID = collectionId; -process.env.SYSTEM_DEFINITIONID = definitionId; - -process.env.BUILD_BUILDID = buildId; -process.env.BUILD_BUILDNUMBER = buildNumber; -process.env.BUILD_DEFINITIONNAME = definitionName; - -process.env.AGENT_JOBNAME = jobName; -process.env.SYSTEM_HOSTTYPE = 'build'; - -process.env[shared.TestEnvVars.manifests] = process.env[shared.TestEnvVars.manifests] || shared.ManifestFilesPath; -process.env.ENDPOINT_DATA_kubernetesConnection_AUTHORIZATIONTYPE = process.env[shared.TestEnvVars.endpointAuthorizationType] || shared.AuthorizationType.Kubeconfig; -process.env.ENDPOINT_AUTH_PARAMETER_kubernetesConnection_KUBECONFIG = '{"apiVersion":"v1", "clusters": [{"cluster": {"insecure-skip-tls-verify":"true", "server":"https://5.6.7.8", "name" : "scratch"}}], "contexts": [{"context" : {"cluster": "scratch", "namespace" : "default", "user": "experimenter", "name" : "exp-scratch"}], "current-context" : "exp-scratch", "kind": "Config", "users" : [{"user": {"password": "regpassword", "username" : "test"}]}'; - -process.env.ENDPOINT_DATA_kubernetesConnection_NAMESPACE = 'testnamespace'; - -if (process.env.RemoveNamespaceFromEndpoint) { - process.env.ENDPOINT_DATA_kubernetesConnection_NAMESPACE = ''; -} - -const a: ma.TaskLibAnswers = { - 'checkPath': { - 'helm': true, - 'kompose': true, - 'dockerComposeFilePath': true - }, - 'exec': { - }, - 'findMatch': {}, - 'which': { - 'helm': 'helm', - 'kompose': 'kompose' - } -}; - -if (process.env[shared.TestEnvVars.action] === 'bake') { - let namespace = process.env[shared.TestEnvVars.namespace] || 'testnamespace'; - if (process.env.RemoveNamespaceFromEndpoint) { - namespace = 'default'; - } - const command = `helm template ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace}`; - const commandWithReleaseNameOverride = `helm template ${process.env[shared.TestEnvVars.helmChart]} --name ${process.env[shared.TestEnvVars.releaseName]} --namespace ${namespace}`; - const commandWithReleaseNameOverride3 = `helm template ${process.env[shared.TestEnvVars.releaseName]} ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace}`; - - a.exec[command] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[commandWithReleaseNameOverride] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[commandWithReleaseNameOverride3] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - a.exec[`helm template ${process.env[shared.TestEnvVars.helmChart]} --namespace ${namespace} --set name=value:with:colons`] = { - 'code': 0, - stdout: 'baked manifest from helm chart' - }; - - const kubectlVersion = `${kubectlPath} version --client=true -o json`; - a.exec[kubectlVersion] = { - 'code': 0, - stdout: `{ - "clientVersion": { - "major": "1", - "minor": ${process.env.KubectlMinorVersion}, - "gitVersion": "v1.13.0" - } - }` - }; - - const kustomizeCommand = `${kubectlPath} kustomize ${process.env[shared.TestEnvVars.kustomizationPath]}`; - a.exec[kustomizeCommand] = { - 'code': 0, - stdout: 'Kustomization files created' - }; - - const komposeCommand = `kompose convert -f ${process.env[shared.TestEnvVars.dockerComposeFile]} -o ${path.join('tempdirectory', 'baked-template-random.yaml')}`; - a.exec[komposeCommand] = { - 'code': 0, - stdout: 'Kubernetes files created' - }; -} - -const helmVersionCommand = 'helm version --short'; -if (process.env[shared.TestEnvVars.helmVersion] === 'v3') { - a.exec[helmVersionCommand] = { - 'code': 0, - stdout: 'v3.0.0+ge29ce2a' - }; -} else { - a.exec[helmVersionCommand] = { - 'code': 0, - stdout: 'v2.0.0+da768e' - }; -} - -if (process.env[shared.TestEnvVars.isKubectlPresentOnMachine] && JSON.parse(process.env[shared.TestEnvVars.isKubectlPresentOnMachine])) { - a.which.kubectl = kubectlPath; -} - -a.checkPath[kubectlPath] = true; -a.findMatch[process.env[shared.TestEnvVars.manifests]] = [process.env[shared.TestEnvVars.manifests]]; - -if (process.env[shared.TestEnvVars.isStableDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isStableDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{"apiVersion": "extensions\/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines\/run": "11937a13",\r\n "azure-pipelines\/runuri": "http:\/\/nishu-65\/DefaultCollection\/_build\/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines\/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines\/pipeline": "\\"project1\\"",\r\n "azure-pipelines\/project": "project1",\r\n "deployment.kubernetes.io\/revision": "1",\r\n "kubectl.kubernetes.io\/last-applied-configuration": "{\\"apiVersion\\":\\"apps\/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{},\\"labels\\":{\\"app\\":\\"nginx\\"},\\"name\\":\\"nginx-deployment\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":3,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx"\r\n },\r\n "name": "nginx-deployment",\r\n "namespace": "default",\r\n "resourceVersion": "125935",\r\n "selfLink": "\/apis\/extensions\/v1beta1\/namespaces\/default\/deployments\/nginx-deployment",\r\n "uid": "e2e3e6c2-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 3,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 3,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "lastUpdateTime": "2019-03-22T13:10:55Z",\r\n "message": "ReplicaSet \\"nginx-deployment-5c689d88bb\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-23T01:31:12Z",\r\n "lastUpdateTime": "2019-03-23T01:31:12Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 3,\r\n "replicas": 3,\r\n "updatedReplicas": 3\r\n }\r\n}\r\n' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions "nginx-deployment" not found' - }; -} - -if (process.env[shared.TestEnvVars.isCanaryDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isCanaryDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-canary -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "extensions/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/run": "11937a13",\r\n "azure-pipelines/runuri": "http://nishu-65/DefaultCollection/_build/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines/pipeline": "\\"project1\\"",\r\n "azure-pipelines/project": "project1",\r\n "azure-pipelines/version": "canary",\r\n "deployment.kubernetes.io/revision": "1",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"apps/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{\\"azure-pipelines/version\\":\\"canary\\"},\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"},\\"name\\":\\"nginx-deployment-canary\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":1,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"canary\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-28T08:36:36Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n },\r\n "name": "nginx-deployment-canary",\r\n "namespace": "default",\r\n "resourceVersion": "911614",\r\n "selfLink": "/apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment-canary",\r\n "uid": "9949c869-5134-11e9-8617-8a66bb81ec3a"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 1,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "canary"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "/dev/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 1,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:40Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:36Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "ReplicaSet \\"nginx-deployment-canary-6b967f76d6\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 1,\r\n "replicas": 1,\r\n "updatedReplicas": 1\r\n }\r\n}' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-canary -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions "nginx-deployment-canary" not found' - }; -} - -if (process.env[shared.TestEnvVars.isBaselineDeploymentPresent] && JSON.parse(process.env[shared.TestEnvVars.isBaselineDeploymentPresent])) { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-baseline -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "extensions/v1beta1",\r\n "kind": "Deployment",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/run": "11937a13",\r\n "azure-pipelines/runuri": "http://nishu-65/DefaultCollection/_build/results?buildId=11937a13b667c4bc609ac98dde4c4d10cbd1f499",\r\n "azure-pipelines/org": "51050983-0664-4716-9ac7-6b6e6ea7e5e8",\r\n "azure-pipelines/pipeline": "\\"project1\\"",\r\n "azure-pipelines/project": "project1",\r\n "azure-pipelines/version": "baseline",\r\n "deployment.kubernetes.io/revision": "1",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"apps/v1\\",\\"kind\\":\\"Deployment\\",\\"metadata\\":{\\"annotations\\":{\\"azure-pipelines/version\\":\\"baseline\\"},\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"},\\"name\\":\\"nginx-deployment-baseline\\",\\"namespace\\":\\"default\\"},\\"spec\\":{\\"replicas\\":1,\\"selector\\":{\\"matchLabels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"}},\\"template\\":{\\"metadata\\":{\\"labels\\":{\\"app\\":\\"nginx\\",\\"azure-pipelines/version\\":\\"baseline\\"}},\\"spec\\":{\\"containers\\":[{\\"image\\":\\"nginx:1.7.9\\",\\"name\\":\\"nginx\\",\\"ports\\":[{\\"containerPort\\":80}]}]}}}}\\n"\r\n },\r\n "creationTimestamp": "2019-03-28T08:36:36Z",\r\n "generation": 2,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n },\r\n "name": "nginx-deployment-baseline",\r\n "namespace": "default",\r\n "resourceVersion": "911614",\r\n "selfLink": "/apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment-baseline",\r\n "uid": "9949c869-5134-11e9-8617-8a66bb81ec3a"\r\n },\r\n "spec": {\r\n "progressDeadlineSeconds": 600,\r\n "replicas": 1,\r\n "revisionHistoryLimit": 10,\r\n "selector": {\r\n "matchLabels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n }\r\n },\r\n "strategy": {\r\n "rollingUpdate": {\r\n "maxSurge": "25%",\r\n "maxUnavailable": "25%"\r\n },\r\n "type": "RollingUpdate"\r\n },\r\n "template": {\r\n "metadata": {\r\n "creationTimestamp": null,\r\n "labels": {\r\n "app": "nginx",\r\n "azure-pipelines/version": "baseline"\r\n }\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "/dev/termination-log",\r\n "terminationMessagePolicy": "File"\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "terminationGracePeriodSeconds": 30\r\n }\r\n }\r\n },\r\n "status": {\r\n "availableReplicas": 1,\r\n "conditions": [\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:40Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "Deployment has minimum availability.",\r\n "reason": "MinimumReplicasAvailable",\r\n "status": "True",\r\n "type": "Available"\r\n },\r\n {\r\n "lastTransitionTime": "2019-03-28T08:36:36Z",\r\n "lastUpdateTime": "2019-03-28T08:36:40Z",\r\n "message": "ReplicaSet \\"nginx-deployment-baseline-6b967f76d6\\" has successfully progressed.",\r\n "reason": "NewReplicaSetAvailable",\r\n "status": "True",\r\n "type": "Progressing"\r\n }\r\n ],\r\n "observedGeneration": 2,\r\n "readyReplicas": 1,\r\n "replicas": 1,\r\n "updatedReplicas": 1\r\n }\r\n}' - }; -} else { - a.exec[`${kubectlPath} get Deployment/nginx-deployment-baseline -o json --namespace testnamespace`] = { - 'code': 1, - 'stderr': 'Error from server (NotFound): deployments.extensions nginx-deployment-baseline not found' - }; -} - -a.exec[`${kubectlPath} apply -f ${process.env[shared.TestEnvVars.manifests]} --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment created.' -}; - -a.exec[`${kubectlPath} apply -f ${shared.CanaryManifestFilesPath},${shared.BaselineManifestFilesPath} --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment-canary created. deployment.extensions/nginx-deployment-baseline created ' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment-canary" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status Deployment/nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'deployment "nginx-deployment-baseline" successfully rolled out' -}; - -a.exec[`${kubectlPath} rollout status ${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} --namespace testnamespace`] = { - 'code': 0, - 'stdout': `${process.env[shared.TestEnvVars.kind]} "${process.env[shared.TestEnvVars.name]}" successfully rolled out` -}; - -a.exec[`${kubectlPath} patch ${process.env[shared.TestEnvVars.kind]} ${process.env[shared.TestEnvVars.name]} --type=${process.env[shared.TestEnvVars.mergeStrategy]} -p ${process.env[shared.TestEnvVars.patch]} --namespace ${process.env[shared.TestEnvVars.namespace] || 'testnamespace'}`] = { - 'code': 0, - 'stdout': `${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} patched` -}; - -a.exec[`${kubectlPath} get pods -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "v1",\r\n "kind": "List",\r\n "metadata": {\r\n "resourceVersion": "",\r\n "selfLink": ""\r\n },\r\n "items": [\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-btlgf",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "49418",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-btlgf",\r\n "uid": "e2f4690c-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-0",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/5e87acbad211218f3b1e383f2a83bc300095a032e87540c201e8e413b0518eeb",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:53Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.4",\r\n "phase": "Running",\r\n "podIP": "10.240.0.15",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n },\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-gnwrt",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "125932",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-gnwrt",\r\n "uid": "e2ece835-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-1",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:54Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/a2bf617633e412760806e06e02dc5f81b5dad6f4f5ce8fe17955cdf72013ba04",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:53Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.35",\r\n "phase": "Running",\r\n "podIP": "10.240.0.43",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n },\r\n {\r\n "apiVersion": "v1",\r\n "kind": "Pod",\r\n "metadata": {\r\n "creationTimestamp": "2019-03-22T13:10:38Z",\r\n "generateName": "nginx-deployment-5c689d88bb-",\r\n "labels": {\r\n "app": "nginx",\r\n "pod-template-hash": "5c689d88bb"\r\n },\r\n "name": "nginx-deployment-5c689d88bb-qmh97",\r\n "namespace": "default",\r\n "ownerReferences": [\r\n {\r\n "apiVersion": "apps\/v1",\r\n "blockOwnerDeletion": true,\r\n "controller": true,\r\n "kind": "ReplicaSet",\r\n "name": "nginx-deployment-5c689d88bb",\r\n "uid": "e2e6b9b8-4ca3-11e9-bdff-2a073485f16f"\r\n }\r\n ],\r\n "resourceVersion": "49429",\r\n "selfLink": "\/api\/v1\/namespaces\/default\/pods\/nginx-deployment-5c689d88bb-qmh97",\r\n "uid": "e2f4630d-4ca3-11e9-bdff-2a073485f16f"\r\n },\r\n "spec": {\r\n "containers": [\r\n {\r\n "env": [\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP_ADDR",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_PORT_443_TCP",\r\n "value": "tcp:\/\/desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io:443"\r\n },\r\n {\r\n "name": "KUBERNETES_SERVICE_HOST",\r\n "value": "desattir-virtual-dns-9381c228.hcp.eastus.azmk8s.io"\r\n }\r\n ],\r\n "image": "nginx:1.7.9",\r\n "imagePullPolicy": "IfNotPresent",\r\n "name": "nginx",\r\n "ports": [\r\n {\r\n "containerPort": 80,\r\n "protocol": "TCP"\r\n }\r\n ],\r\n "resources": {},\r\n "terminationMessagePath": "\/dev\/termination-log",\r\n "terminationMessagePolicy": "File",\r\n "volumeMounts": [\r\n {\r\n "mountPath": "\/var\/run\/secrets\/kubernetes.io\/serviceaccount",\r\n "name": "default-token-rcrjf",\r\n "readOnly": true\r\n }\r\n ]\r\n }\r\n ],\r\n "dnsPolicy": "ClusterFirst",\r\n "nodeName": "aks-agentpool-14980324-2",\r\n "priority": 0,\r\n "restartPolicy": "Always",\r\n "schedulerName": "default-scheduler",\r\n "securityContext": {},\r\n "serviceAccount": "default",\r\n "serviceAccountName": "default",\r\n "terminationGracePeriodSeconds": 30,\r\n "tolerations": [\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/not-ready",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n },\r\n {\r\n "effect": "NoExecute",\r\n "key": "node.kubernetes.io\/unreachable",\r\n "operator": "Exists",\r\n "tolerationSeconds": 300\r\n }\r\n ],\r\n "volumes": [\r\n {\r\n "name": "default-token-rcrjf",\r\n "secret": {\r\n "defaultMode": 420,\r\n "secretName": "default-token-rcrjf"\r\n }\r\n }\r\n ]\r\n },\r\n "status": {\r\n "conditions": [\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "Initialized"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:55Z",\r\n "status": "True",\r\n "type": "Ready"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:55Z",\r\n "status": "True",\r\n "type": "ContainersReady"\r\n },\r\n {\r\n "lastProbeTime": null,\r\n "lastTransitionTime": "2019-03-22T13:10:38Z",\r\n "status": "True",\r\n "type": "PodScheduled"\r\n }\r\n ],\r\n "containerStatuses": [\r\n {\r\n "containerID": "docker:\/\/3509c82a27b63f7fdb93746a74cb91862126c2cb66bae307904b2a89dcdf7152",\r\n "image": "nginx:1.7.9",\r\n "imageID": "docker-pullable:\/\/nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451",\r\n "lastState": {},\r\n "name": "nginx",\r\n "ready": true,\r\n "restartCount": 0,\r\n "state": {\r\n "running": {\r\n "startedAt": "2019-03-22T13:10:54Z"\r\n }\r\n }\r\n }\r\n ],\r\n "hostIP": "10.240.0.66",\r\n "phase": "Running",\r\n "podIP": "10.240.0.79",\r\n "qosClass": "BestEffort",\r\n "startTime": "2019-03-22T13:10:38Z"\r\n }\r\n }\r\n ]\r\n}' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment-canary' -}; - -a.exec[`${kubectlPath} describe deployment nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'Name: nginx-deployment-baseline' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-canary nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-canary" deleted. "nginx-deployment-baseline" deleted' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-canary --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-canary" deleted' -}; - -a.exec[`${kubectlPath} delete Deployment nginx-deployment-baseline --namespace testnamespace`] = { - 'code': 0, - 'stdout': ' "nginx-deployment-baseline" deleted' -}; - -a.exec[`${kubectlPath} delete secret secret --namespace testnamespace`] = { - code: 0, - stdout: 'deleted secret' -} - -a.exec[`${kubectlPath} create secret generic secret --namespace testnamespace`] = { - code: 0, - stdout: 'created secret' -} - -a.exec[`${kubectlPath} scale ${process.env[shared.TestEnvVars.kind]}/${process.env[shared.TestEnvVars.name]} --replicas=${process.env[shared.TestEnvVars.replicas]} --namespace testnamespace`] = { - code: 0, - stdout: 'created secret' -} - -a.exec[`${kubectlPath} get service/nginx-service -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "apiVersion": "v1",\r\n "kind": "Service",\r\n "metadata": {\r\n "annotations": {\r\n "azure-pipelines/jobName": "Agent phase",\r\n "azure-pipelines/org": "https://codedev.ms/anchauh/",\r\n "azure-pipelines/pipeline": "aksCd-153 - 64 - CD",\r\n "azure-pipelines/pipelineId": "40",\r\n "azure-pipelines/project": "nginx",\r\n "azure-pipelines/run": "41",\r\n "azure-pipelines/runuri": "https://codedev.ms/anchauh/nginx/_releaseProgress?releaseId=41",\r\n "kubectl.kubernetes.io/last-applied-configuration": "{\\"apiVersion\\":\\"v1\\",\\"kind\\":\\"Service\\",\\"metadata\\":{\\"annotations\\":{},\\"labels\\":{\\"app\\":\\"nginx\\"},\\"name\\":\\"nginx-service\\",\\"namespace\\":\\"testnamespace\\"},\\"spec\\":{\\"ports\\":[{\\"name\\":\\"http\\",\\"port\\":80,\\"protocol\\":\\"TCP\\",\\"targetPort\\":\\"http\\"}],\\"selector\\":{\\"app\\":\\"nginx\\"},\\"type\\":\\"LoadBalancer\\"}}\\n"\r\n },\r\n "creationTimestamp": "2019-09-11T10:09:09Z",\r\n "labels": {\r\n "app": "nginx"\r\n },\r\n "name": "nginx-service",\r\n "namespace": "testnamespace",\r\n "resourceVersion": "8754335",\r\n "selfLink": "/api/v1/namespaces/testnamespace/services/nginx-service",\r\n "uid": "31f02713-d47c-11e9-9448-16b93c17a2b4"\r\n },\r\n "spec": {\r\n "clusterIP": "10.0.157.189",\r\n "externalTrafficPolicy": "Cluster",\r\n "ports": [\r\n {\r\n "name": "http",\r\n "nodePort": 32112,\r\n "port": 80,\r\n "protocol": "TCP",\r\n "targetPort": "http"\r\n }\r\n ],\r\n "selector": {\r\n "app": "nginx"\r\n },\r\n "sessionAffinity": "***",\r\n "type": "LoadBalancer"\r\n },\r\n "status": {\r\n "loadBalancer": {\r\n "ingress": [\r\n {\r\n "ip": "104.211.243.77"\r\n }\r\n ]\r\n }\r\n }\r\n }' -} - -a.exec[`${kubectlPath} version -o json --namespace testnamespace`] = { - 'code': 0, - 'stdout': '{\r\n "clientVersion": {\r\n "major": "1",\r\n "minor": "14",\r\n "gitVersion": "v1.14.8",\r\n "gitCommit": "211047e9a1922595eaa3a1127ed365e9299a6c23",\r\n "gitTreeState": "clean",\r\n "buildDate": "2019-10-15T12:11:03Z",\r\n "goVersion": "go1.12.10",\r\n "compiler": "gc",\r\n "platform": "windows/amd64"\r\n },\r\n "serverVersion": {\r\n "major": "1",\r\n "minor": "12",\r\n "gitVersion": "v1.12.7",\r\n "gitCommit": "6f482974b76db3f1e0f5d24605a9d1d38fad9a2b",\r\n "gitTreeState": "clean",\r\n "buildDate": "2019-03-25T02:41:57Z",\r\n "goVersion": "go1.10.8",\r\n "compiler": "gc",\r\n "platform": "linux/amd64"\r\n }\r\n}' -} - -const pipelineAnnotations: string = [ - `azure-pipelines/run=${buildNumber}`, - `azure-pipelines/pipeline="${definitionName}"`, - `azure-pipelines/pipelineId="${definitionId}"`, - `azure-pipelines/jobName="${jobName}"`, - `azure-pipelines/runuri=${teamFoundationCollectionUri}${teamProject}/_build/results?buildId=${buildId}`, - `azure-pipelines/project=${teamProject}`, - `azure-pipelines/org=${teamFoundationCollectionUri}` -].join(' '); -const annotateCanaryCmd = `${kubectlPath} annotate -f ${shared.CanaryManifestFilesPath},${shared.BaselineManifestFilesPath} ` + pipelineAnnotations + ` --overwrite --namespace testnamespace`; - -a.exec[annotateCanaryCmd] = { - 'code': 0, - 'stdout': 'deployment.apps/nginx-deployment-canary annotated. deployment.apps/nginx-deployment-baseline annotated' -}; - -a.exec[`${kubectlPath} annotate ${process.env[shared.TestEnvVars.kind]} ${process.env[shared.TestEnvVars.name]} ${pipelineAnnotations} --overwrite --namespace testnamespace`] = { - 'code': 0, - 'stdout': 'annotated' -}; - -const annotateStableCmd = `${kubectlPath} annotate -f ${process.env[shared.TestEnvVars.manifests]} ` + pipelineAnnotations + ` --overwrite --namespace testnamespace`; -a.exec[annotateStableCmd] = { - 'code': 0, - 'stdout': 'deployment.extensions/nginx-deployment annotated' -}; - -if (process.env[shared.TestEnvVars.arguments]) { - const deleteCmd = `${kubectlPath} delete ${process.env[shared.TestEnvVars.arguments]} --namespace testnamespace`; - a.exec[deleteCmd] = { - 'code': 0, - 'stdout': 'deleted successfuly' - }; -} - - -tr.setAnswers(a); -tr.registerMock('azure-pipelines-task-lib/toolrunner', require('azure-pipelines-task-lib/mock-toolrunner')); - -// Create mock for fs module -import * as fs from 'fs'; -const fsClone = Object.assign({}, fs); -fsClone.existsSync = function (filePath) { - switch (filePath) { - case kubectlPath: - if (JSON.parse(process.env[shared.TestEnvVars.isKubectlPresentOnMachine])) { - return true; - } else { - return false; - } - default: - return fs.existsSync(filePath); - } -}; - -fsClone.writeFileSync = function (path, data) { - console.log(`wrote to ${path}`); -}; - -tr.registerMock('fs', fsClone); - -import * as fh from '../src/utils/FileHelper'; - -tr.registerMock('../utils/FileHelper', { - writeObjectsToFile: function (inputObjects: any[]) { - const newFilePaths = []; - - inputObjects.forEach(inputObject => { - if (!!inputObject && !!inputObject.metadata && !!inputObject.metadata.name) { - if (inputObject.metadata.name.indexOf('canary') !== -1) { - newFilePaths.push(shared.CanaryManifestFilesPath); - } else if (inputObject.metadata.name.indexOf('baseline') !== -1) { - newFilePaths.push(shared.BaselineManifestFilesPath); - } - } - }); - - if (newFilePaths.length === 0) { - console.log(shared.ManifestFilesPath); - newFilePaths.push(shared.ManifestFilesPath); - } - return newFilePaths; - }, - getTempDirectory: function () { - return 'tempdirectory'; - }, - getNewUserDirPath: fh.getNewUserDirPath, - ensureDirExists: fh.ensureDirExists, - assertFileExists: fh.assertFileExists, - writeManifestToFile: fh.writeManifestToFile -}); - -tr.registerMock('uuid/v4', function () { - return 'random'; -}); - -tr.run(); diff --git a/_generated/KubernetesManifestV0_Node16/Tests/TestShared.ts b/_generated/KubernetesManifestV0_Node16/Tests/TestShared.ts deleted file mode 100644 index 3c26d0d73e66..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/TestShared.ts +++ /dev/null @@ -1,90 +0,0 @@ -import path = require('path'); - -export let TestEnvVars = { - operatingSystem: "__operating_system__", - connectionType: "__connectionType__", - kubernetesServiceEndpoint: "__kubernetesServiceEndpoint__", - namespace: "__namespace__", - action: "__action__", - strategy: "__strategy__", - percentage: "__percentage__", - configuration: "__configuration__", - manifests: "__manifests__", - containers: "__containers__", - imagePullSecrets: "__imagePullSecrets__", - dockerComposeFile: "__dockerComposeFile__", - kustomizationPath: "__kustomizationPath__", - renderType: "__renderType__", - releaseName: "__releaseName__", - helmChart: "__helmChart__", - helmVersion: "__helmVersion__", - secretName: "__secretName__", - secretType: "__secretType__", - overrideFiles: "__overrideFiles__", - overrides: "__overrides__", - resourceToPatch: "__resourceToPatch__", - resourceFileToPatch: "__resourceFileToPatch__", - kind: "__kind__", - name: "__name__", - replicas: "__replicas__", - mergeStrategy: "__mergeStrategy__", - arguments: "__arguments__", - patch: "__patch__", - resourceName: "__resourceName__", - isKubectlPresentOnMachine: "__isKubectlPresentOnMachine__", - endpointAuthorizationType: "__endpointAuthorizationType__", - isStableDeploymentPresent: "__isStableDeploymentPresent__", - isCanaryDeploymentPresent: "__isCanaryDeploymentPresent__", - isBaselineDeploymentPresent: "__isBaselineDeploymentPresent__", - baselineAndCanaryReplicas: "__baselineAndCanaryReplicas__", - trafficSplitMethod: "__trafficSplitMethod__" -}; - -export let OperatingSystems = { - Windows: "Windows", - Other: "Other" -}; - -export let AuthorizationType = { - Kubeconfig : "Kubeconfig", - ServiceAccount : "ServiceAccount", - AzureSubscription : "AzureSubscription" -}; - -export let Actions = { - bake: "bake", - createSecret: "createSecret", - deploy: "deploy", - patch: "patch", - scale: "scale", - delete: "delete", - reject: "reject", - promote: "promote" -}; - -export let Strategy = { - canary: "canary", - none: "none" -}; - -export let TrafficSplitMethod = { - pod: "pod", - smi: "smi" -}; - -export const ManifestFilesPath = path.join(__dirname, 'manifests', 'deployment.yaml'); -export const CanaryManifestFilesPath = path.join(__dirname, 'manifests', 'deployment-canary.yaml'); -export const BaselineManifestFilesPath = path.join(__dirname, 'manifests', 'deployment-baseline.yaml'); -export const DeleteCmdArguments = "deployment nginx-deployment"; - -/** - * Formats the given path to be appropriate for the operating system. - * @param canonicalPath A non-rooted path using a forward slash (/) as a directory separator. - */ -export function formatPath(canonicalPath: string) { - if (process.env[TestEnvVars.operatingSystem] === OperatingSystems.Windows) { - return "F:\\" + canonicalPath.replace('/', '\\'); - } else { - return "/" + canonicalPath; - } -}; \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/cronjob.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/cronjob.yaml deleted file mode 100644 index e2e4e8d5df09..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/cronjob.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: batch/v1beta1 -kind: CronJob -metadata: - name: test -spec: - schedule: "*/1 * * * *" - jobTemplate: - spec: - template: - spec: - containers: - - name: hello - image: privaterepo/busybox - command: ["echo", "Hello world"] - restartPolicy: Never \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-baseline.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-baseline.yaml deleted file mode 100644 index 7edb156ab326..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-baseline.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment-baseline - labels: - app: nginx -spec: - replicas: 1 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-canary.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-canary.yaml deleted file mode 100644 index 0cc843c520a9..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-canary.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment-canary - labels: - app: nginx -spec: - replicas: 1 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-image-substitution.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-image-substitution.yaml deleted file mode 100644 index 3c0c8cae8581..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment-image-substitution.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 - - name: edgecase - image: nginx-image:1.7.9 - - name: untagged - image: mysql - - name: untaggedonacr - image: myacr.azurecr.io/myimage - - name: untaggedwithcomment - image: myimagewithcomment # this is a comment - - image: imagewithhyphen # this is a comment - name: imagewithhyphen - - name: untaggedinsamefoldera - image: myacr.azurecr.io/folder/image-a - - name: untaggedinsamefolderb - image: myacr.azurecr.io/folder/image-b - - name: imagewithsha256 - image: mcr.microsoft.com/dotnet/core/sdk@sha256:1d5dd575dfebb6ed71d973b6a0be37f424306eda337a7dab09b6c0f53dffc2e3 - - name: imagetoreplacewithsha256 - image: mcr.microsoft.com/mssql/server:2019-CU9-ubuntu-16.04 - imagePullSecrets: - - name: key1 - initContainers: - - name: nginx-init-container - image: nginx-init:0.1.0 diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment.yaml deleted file mode 100644 index a04677d934a2..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - updateStrategy: - type: OnDelete - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 - imagePullSecrets: - - name: key1 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: nginx-service - labels: - app: nginx -spec: - type: LoadBalancer - ports: - - port: 80 - targetPort: http - protocol: TCP - name: http - selector: - app: nginx \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/Tests/manifests/job.yaml b/_generated/KubernetesManifestV0_Node16/Tests/manifests/job.yaml deleted file mode 100644 index 7a125470b8ab..000000000000 --- a/_generated/KubernetesManifestV0_Node16/Tests/manifests/job.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: process-item - labels: - jobgroup: jobexample -spec: - template: - metadata: - name: jobexample - labels: - jobgroup: jobexample - spec: - containers: - - name: c - image: privaterepo/busybox - command: ["sh", "-c", "echo Processing item"] - restartPolicy: Never \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/ThirdPartyNotices.txt b/_generated/KubernetesManifestV0_Node16/ThirdPartyNotices.txt deleted file mode 100644 index 6406f2265a1a..000000000000 --- a/_generated/KubernetesManifestV0_Node16/ThirdPartyNotices.txt +++ /dev/null @@ -1,1668 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -The Kubernetes task for Azure Pipelines or Team Foundation Server incorporates components from the projects listed below. Microsoft licenses these components to you under the Microsoft software license terms. The original copyright notices and the licenses under which Microsoft received such components are set forth below for informational purposes. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. - - -1. argparse (https://github.com/nodeca/argparse) -2. array-union (https://github.com/sindresorhus/array-union) -3. array-uniq (https://github.com/sindresorhus/array-uniq) -4. arrify (https://github.com/sindresorhus/arrify) -5. balanced-match (https://github.com/juliangruber/balanced-match) -6. brace-expansion (https://github.com/juliangruber/brace-expansion) -7. buffer-equal-constant-time (https://github.com/salesforce/buffer-equal-constant-time) -8. concat-map (https://github.com/substack/node-concat-map) -9. del (https://github.com/sindresorhus/del) -10. esprima (https://github.com/ariya/esprima) -11. fs.realpath (https://github.com/isaacs/fs.realpath) -12. Glob (https://github.com/isaacs/node-glob) -13. globby (https://github.com/sindresorhus/globby) -14. hoek (https://github.com/hapijs/hoek) -15. inflight (https://github.com/npm/inflight) -16. inherits (https://github.com/isaacs/inherits) -17. isemail (https://github.com/hapijs/isemail) -18. is-path-cwd (https://github.com/sindresorhus/is-path-cwd) -19. is-path-in-cwd (https://github.com/sindresorhus/is-path-in-cwd) -20. is-path-inside (https://github.com/sindresorhus/is-path-inside) -21. joi (https://github.com/hapijs/joi) -22. jsonwebtoken (https://github.com/auth0/node-jsonwebtoken) -23. js-yaml (https://github.com/nodeca/js-yaml) -24. lodash.once (https://github.com/lodash/lodash) -25. minimatch (https://github.com/isaacs/minimatch) -26. Mockery (https://github.com/mfncooper/mockery) -27. Moment (https://github.com/moment/moment) -28. ms (https://github.com/zeit/ms) -29. node-ecdsa-sig-formatter (https://github.com/Brightspace/node-ecdsa-sig-formatter) -30. node-jwa (https://github.com/brianloveswords/node-jwa) -31. node-jws (https://github.com/brianloveswords/node-jws) -26. node-uuid (https://github.com/broofa/node-uuid) -27. object-assign (https://github.com/sindresorhus/object-assign) -28. once (https://github.com/isaacs/once) -29. OpenSSL (http://www.openssl.org) -30. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) -31. path-is-inside (https://github.com/domenic/path-is-inside) -32. pify (https://github.com/sindresorhus/pify) -33. pinkie (https://github.com/floatdrop/pinkie) -34. pinkie-promise (https://github.com/floatdrop/pinkie-promise) -35. q (https://github.com/kriskowal/q) -36. Rimraf (https://github.com/isaacs/rimraf) -37. safe-buffer (https://github.com/feross/safe-buffer) -38. sax js (https://github.com/isaacs/sax-js) -39. semver (https://github.com/npm/node-semver/) -40. ShellJS (https://github.com/shelljs/shelljs) - Includes:wrench-js -41. semver-compare (https://github.com/substack/semver-compare) -42. sprintf-js (https://github.com/alexei/sprintf.js) -43. topo (https://github.com/hapijs/topo) -44. tunnel (https://github.com/koichik/node-tunnel) -45. typed-rest-client (https://github.com/Microsoft/typed-rest-client) -46. underscore (https://github.com/jashkenas/underscore) -47. vso-node-api (https://github.com/Microsoft/vsts-node-api) -48. Azure-Pipelines-Task-Lib (https://github.com/Microsoft/azure-pipelines-task-lib) -49. wrappy (https://github.com/npm/wrappy) -50. xtend (https://github.com/Raynos/xtend) - -%% argparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (C) 2012 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF argparse NOTICES, INFORMATION, AND LICENSE - -%% array-union NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF array-union NOTICES, INFORMATION, AND LICENSE - -%% array-uniq NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF array-uniq NOTICES, INFORMATION, AND LICENSE - -%% arrify NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF arrify NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013, GoInstant Inc., a salesforce.com company -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of salesforce.com, nor GoInstant, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE - -%% del NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF del NOTICES, INFORMATION, AND LICENSE - -%% esprima NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF esprima NOTICES, INFORMATION, AND LICENSE - -%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license, as follows: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -========================================= -END OF fs.realpath NOTICES, INFORMATION, AND LICENSE - -%% Glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF Glob NOTICES, INFORMATION, AND LICENSE - -%% globby NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF globby NOTICES, INFORMATION, AND LICENSE - -%% hoek NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - -Copyright (c) 2011-2014, Walmart and other contributors. -Copyright (c) 2011, Yahoo Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/hapi/graphs/contributors -Portions of this project were initially based on the Yahoo! Inc. Postmile project, -published at https://github.com/yahoo/postmile. -========================================= -Includes code from Deep-eql - -Copyright (c) 2013 Jake Luer jake@alogicalparadox.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF hoek NOTICES, INFORMATION, AND LICENSE - -%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inflight NOTICES, INFORMATION, AND LICENSE - -%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF inherits NOTICES, INFORMATION, AND LICENSE - -%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2008-2011, Dominic Sayers -Copyright (c) 2013-2014, GlobeSherpa -Copyright (c) 2014-2015, Eli Skeggs - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -- Neither the name of Dominic Sayers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF isemail NOTICES, INFORMATION, AND LICENSE - -%% is-path-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-cwd NOTICES, INFORMATION, AND LICENSE - -%% is-path-in-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-in-cwd NOTICES, INFORMATION, AND LICENSE - -%% is-path-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF is-path-inside NOTICES, INFORMATION, AND LICENSE - -%% joi NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/joi/graphs/contributors -========================================= -END OF joi NOTICES, INFORMATION, AND LICENSE - -%% jsonwebtoken NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2015 Auth0, Inc. (http://auth0.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF jsonwebtoken NOTICES, INFORMATION, AND LICENSE - -%% js-yaml NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF js-yaml NOTICES, INFORMATION, AND LICENSE - -%% lodash.once NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. -========================================= -END OF lodash.once NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following - terms: - - MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Moment NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -Files with code from Closure - -Copyright (c) 2006 The Closure Library Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -========================================= -END OF Moment NOTICES, INFORMATION, AND LICENSE - -%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(The MIT License) - -Copyright (c) 2014 Guillermo Rauch -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the Software), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF ms NOTICES, INFORMATION, AND LICENSE - -%% node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright 2015 D2L Corporation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -========================================= -END OF node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE - -%% node-jwa NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF node-jwa NOTICES, INFORMATION, AND LICENSE - -%% node-jws NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF node-jws NOTICES, INFORMATION, AND LICENSE - -%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF node-uuid NOTICES, INFORMATION, AND LICENSE - -%% object-assign NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF object-assign NOTICES, INFORMATION, AND LICENSE - -%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF once NOTICES, INFORMATION, AND LICENSE - -%% OpenSSL NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/) - * - * 4. The names OpenSSL Toolkit and OpenSSL Project must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called OpenSSL - * nor may OpenSSL appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/) - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com) - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * This product includes software written by Tim Hudson (tjh@cryptsoft.com) - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] -========================================= -END OF OpenSSL NOTICES, INFORMATION, AND LICENSE - -%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -path-is-absolute - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -node.js: - -Copyright Joyent, Inc. and other Node contributors. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -Software), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE - -%% path-is-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright � 2013�2014 Domenic Denicola -Licensed under the WTFPL Version 2 (http://www.wtfpl.net/about/) -========================================= -END OF path-is-inside NOTICES, INFORMATION, AND LICENSE - -%% pify NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pify NOTICES, INFORMATION, AND LICENSE - -%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pinkie NOTICES, INFORMATION, AND LICENSE - -%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE - -%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - -/*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF q NOTICES, INFORMATION, AND LICENSE - -%% Rimraf NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF Rimraf NOTICES, INFORMATION, AND LICENSE - -%% safe-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF safe-buffer NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012, Artur Adib -All rights reserved. - -You may use this project under the terms of the New BSD license as follows: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -Includes wrench-js -The MIT License - -Copyright (c) 2010 Ryan McGrath - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% semver-compare NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2014 James Halliday - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF semver-compare NOTICES, INFORMATION, AND LICENSE - -%% sprintf-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2007-2014, Alexandru Marasteanu -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of this software nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF sprintf-js NOTICES, INFORMATION, AND LICENSE - -%% topo NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/topo/graphs/contributors -========================================= -END OF topo NOTICES, INFORMATION, AND LICENSE - -%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) 2012 Koichi Kobayashi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF tunnel NOTICES, INFORMATION, AND LICENSE - -%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Typed Rest Client for Node.js - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE - -%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF underscore NOTICES, INFORMATION, AND LICENSE - -%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and -associated documentation files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF vso-node-api NOTICES, INFORMATION, AND LICENSE - -%% Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - -Copyright (c) Microsoft Corporation. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -========================================= -END OF Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE - -%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF wrappy NOTICES, INFORMATION, AND LICENSE - -%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -========================================= -END OF xtend NOTICES, INFORMATION, AND LICENSE diff --git a/_generated/KubernetesManifestV0_Node16/icon.png b/_generated/KubernetesManifestV0_Node16/icon.png deleted file mode 100644 index 0de14507c37c293e44d9e4a493163155a4ec1675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1304 zcmV+z1?T#SP)zaZ-@ct>qCZ>5~I`h-Zw9rt$29<~}m74=Zt+!4qL2ak471mq6vpOpkx zS7*R)Gl$ak`YD6p?j}1FjEj?y3rMks!>Sw`+*q3d%O(t@IeZqKJGN+q+}th^As3%S z%9Do;fWr$?AZ=iOc+~KbMnrY}2Pms^Aek!eD&$LM1p#b7E@b0FF)Y$I5cfIJ|*WKsq;ICT^;(gQy{sbI%HIWUX{85YK z9crD`q_zJ7%wYynIqrLQqFJ0@@OKT3o^9DQ&KwmDWd$S1VehBUdWw?Wq_+PEtaOMi zKMYp9e{xBhz36Y@?XXz<8uiyKivCRjS zb!`+0A>aM)W7x;B2*sL1CB^EE*9Y~jJ~(lwXNx%AndDt>RD1-HUv#&^AT~}J9!W2^ z?X2w81^wY}Y$u@#B^#?IM&!zqR(Q$Cb5kQBd$6TfkWIWzicb9UPmRRF`|AW+P07Mk zBEZ#WC3NRH3ep^AWOcwwnSl4OfECS7B63XM#Yfy)y`kC&6PHr9s9AjUb;6G~wAj2Ma%HlJy~--j}m^D8FVz|zmi_S*>Q@%>>X>j|Wt)3stYsNfHw7hq>9P_rsu zK9Zd9$MSz4!{M6^V$<22D-|l%fxJH-Xpxt)Uf}d^MtGXdQnSV_z)mOtBjD}mr2lfk zVkN|4qyaoaIj|XtM>6IF)>an^L+vT|*0GQh8?Kqy*afkPY2Y2^KO^@@4kS3ioWKu_ z3ZtkbcR4d3Sv}2zCf;cDrQa;^0S)+7gvmi?^!A(@A+R< z)tG)*6)RW@=N`JJWU`)-7Y96+D~S@j8Y;c`%1g~HC}bxmZ^vg*pmNda`YzBT${-<% zE|?FKfTGk1iRk1|?G*fh{I9V3d^K{t--gNjYsnrYv4?+>d9;ka2rvMP+uwvxyRhW| O0000 - - - diff --git a/_generated/KubernetesManifestV0_Node16/make.json b/_generated/KubernetesManifestV0_Node16/make.json deleted file mode 100644 index 6dd0abf95c98..000000000000 --- a/_generated/KubernetesManifestV0_Node16/make.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "rm": [ - { - "items": [ - "node_modules/azure-pipelines-tasks-kubernetes-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib", - "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib", - "node_modules/https-proxy-agent/node_modules/agent-base" - ], - "options": "-Rf" - } - ] -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/package-lock.json b/_generated/KubernetesManifestV0_Node16/package-lock.json deleted file mode 100644 index 2b49a1811a7a..000000000000 --- a/_generated/KubernetesManifestV0_Node16/package-lock.json +++ /dev/null @@ -1,903 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "requires": { - "@types/node": "*" - } - }, - "@types/del": { - "version": "2.2.33", - "resolved": "https://registry.npmjs.org/@types/del/-/del-2.2.33.tgz", - "integrity": "sha512-bXwiHz4Ljz7FXGybdEtCHrsgJE+zIvxmGWgBLMwReMJi6yMenQs1ls3Q/s9rieuja9S/clDKVoXDS7BhEU2lYQ==", - "requires": { - "@types/glob": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "5.0.38", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.38.tgz", - "integrity": "sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "azure-pipelines-task-lib": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", - "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tasks-docker-common": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.0.6.tgz", - "integrity": "sha512-Zm8cTQecdvcgFbMTP8ZqKoU9XvM1Ck3CF59BkeaS5C7G0gNZWA4MkJTiC1qESMn8ptK5I33cqcMl7Ja4JtwaJA==", - "requires": { - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "del": "2.2.0", - "q": "1.4.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - } - } - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==" - } - } - }, - "azure-pipelines-tasks-kubernetes-common": { - "version": "2.220.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-kubernetes-common/-/azure-pipelines-tasks-kubernetes-common-2.220.0.tgz", - "integrity": "sha512-20BEQl8Pu9MZQSSQ/7ITLRGW7tR3UoK5yx252iffBJpf8tjC63kRWhFHWGehvPFLZU+bSENDKsYBigvKRFSobA==", - "requires": { - "@types/mocha": "5.2.7", - "@types/node": "10.17.0", - "@types/uuid": "8.3.0", - "azure-pipelines-task-lib": "^3.1.0", - "azure-pipelines-tool-lib": "^1.0.2", - "js-yaml": "3.13.1" - }, - "dependencies": { - "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==" - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" - }, - "azure-pipelines-task-lib": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", - "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz", - "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.1.10", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - } - } - }, - "azure-pipelines-tasks-utility-common": { - "version": "3.219.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.219.1.tgz", - "integrity": "sha512-VyssHbJQ40aRBq1m0oSG4XCesbRPzsH3Ao8lohmsQZl+GN17TeCnKmr/OoVYsqgtG9TEw59pG4WYW++lsLeeew==", - "requires": { - "@types/node": "^16.11.39", - "azure-pipelines-task-lib": "^4.0.0-preview", - "azure-pipelines-tool-lib": "^2.0.0-preview", - "js-yaml": "3.13.1", - "semver": "^5.4.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz", - "integrity": "sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==" - }, - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - }, - "azure-pipelines-task-lib": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", - "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", - "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - } - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz", - "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==", - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "del": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", - "integrity": "sha512-AZDiRb78EEGYCsAZTG3v+CM5q8J0BIs+wI7QeUtyosm+zIMm4XSmp6aI/K7cU9l+YaKpDKN9dYP1xTrNjLQ+LA==", - "requires": { - "globby": "^4.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "requires": { - "@types/node": "^10.0.3" - }, - "dependencies": { - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - } - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - } - }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "requires": { - "get-port": "^3.1.0" - } - }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/_generated/KubernetesManifestV0_Node16/package.json b/_generated/KubernetesManifestV0_Node16/package.json deleted file mode 100644 index 8549ea3d9c9d..000000000000 --- a/_generated/KubernetesManifestV0_Node16/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "dependencies": { - "@types/del": "^2.2.0", - "@types/glob": "^5.0.10", - "@types/mocha": "^5.2.7", - "@types/node": "^16.11.39", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.0", - "azure-pipelines-task-lib": "^4.4.0", - "azure-pipelines-tasks-docker-common": "2.0.6", - "azure-pipelines-tasks-kubernetes-common": "^2.212.0", - "azure-pipelines-tasks-utility-common": "^3.210.0", - "azure-pipelines-tool-lib": "^2.0.4", - "del": "2.2.0", - "js-yaml": "3.13.1", - "moment": "^2.29.4", - "agent-base": "^6.0.2", - "typed-rest-client": "^1.8.9" - }, - "devDependencies": { - "typescript": "4.0.2" - } -} diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/bake.ts b/_generated/KubernetesManifestV0_Node16/src/actions/bake.ts deleted file mode 100644 index 93fc1224e1de..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/bake.ts +++ /dev/null @@ -1,154 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; -import * as helmutility from 'azure-pipelines-tasks-kubernetes-common/helmutility'; -import * as uuidV4 from 'uuid/v4'; -import { IExecOptions } from 'azure-pipelines-task-lib/toolrunner'; - -import { getTempDirectory } from '../utils/FileHelper'; -import { Helm, NameValuePair } from 'azure-pipelines-tasks-kubernetes-common/helm-object-model'; -import * as TaskParameters from '../models/TaskInputParameters'; -import { KomposeInstaller } from '../utils/installers'; -import * as utils from '../utils/utilities'; -import * as DeploymentHelper from '../utils/DeploymentHelper'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -abstract class RenderEngine { - public bake: () => Promise; - protected getTemplatePath = () => { - return path.join(getTempDirectory(), 'baked-template-' + uuidV4() + '.yaml'); - } - protected updateImages(filePath: string) { - if (TaskInputParameters.containers.length > 0 && fs.existsSync(filePath)) { - const updatedFilesPaths: string[] = DeploymentHelper.updateResourceObjects([filePath], [], TaskInputParameters.containers); - let fileContents: string[] = []; - updatedFilesPaths.forEach((path) => { - const content = yaml.safeDump(JSON.parse(fs.readFileSync(path).toString())); - fileContents.push(content); - }); - fs.writeFileSync(filePath, fileContents.join("\n---\n")); - } - } -} - -class HelmRenderEngine extends RenderEngine { - public bake = async (): Promise => { - // Helm latest releases require restricted permissions on Kubeconfig - const kubeconfigPath = tl.getVariable('KUBECONFIG'); - if (kubeconfigPath) - fs.chmodSync(kubeconfigPath, '600'); - const helmPath = await helmutility.getHelm(); - const helmCommand = new Helm(helmPath, TaskParameters.namespace); - const helmReleaseName = tl.getInput('releaseName', false); - const result = helmCommand.template(helmReleaseName, tl.getPathInput('helmChart', true), tl.getDelimitedInput('overrideFiles', '\n'), this.getOverrideValues()); - if (result.stderr) { - tl.setResult(tl.TaskResult.Failed, result.stderr); - return; - } - tl.debug(result.stdout); - const pathToBakedManifest = this.getTemplatePath(); - fs.writeFileSync(pathToBakedManifest, result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - } - - private getOverrideValues() { - const overridesInput = tl.getDelimitedInput('overrides', '\n'); - const overrideValues = []; - overridesInput.forEach(arg => { - const overrideInput = arg.split(':'); - const overrideName = overrideInput[0]; - const overrideValue = overrideInput.slice(1).join(':'); - overrideValues.push({ - name: overrideName, - value: overrideValue - } as NameValuePair); - }); - - return overrideValues; - } -} - -class KomposeRenderEngine extends RenderEngine { - public bake = async (): Promise => { - if (!tl.filePathSupplied('dockerComposeFile')) { - throw new Error(tl.loc('DockerComposeFilePathNotSupplied')); - } - - const dockerComposeFilePath = tl.getPathInput('dockerComposeFile', true, true); - const installer = new KomposeInstaller(); - let path = installer.checkIfExists(); - if (!path) { - path = await installer.install(); - } - const tool = tl.tool(path); - const pathToBakedManifest = this.getTemplatePath(); - tool.arg(['convert', '-f', dockerComposeFilePath, '-o', pathToBakedManifest]); - const result = tool.execSync(); - if (result.code !== 0 || result.error) { - throw result.error; - } - tl.debug(result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - } -} - -class KustomizeRenderEngine extends RenderEngine { - public bake = async () => { - const kubectlPath = await utils.getKubectl(); - this.validateKustomize(kubectlPath); - const command = tl.tool(kubectlPath); - console.log(`[command] ${kubectlPath} kustomize ${tl.getPathInput('kustomizationPath')}`); - command.arg(['kustomize', tl.getPathInput('kustomizationPath')]); - - const result = command.execSync({ silent: true } as IExecOptions); - if (result.stderr) { - tl.setResult(tl.TaskResult.Failed, result.stderr); - return; - } - tl.debug(result.stdout); - const pathToBakedManifest = this.getTemplatePath(); - fs.writeFileSync(pathToBakedManifest, result.stdout); - this.updateImages(pathToBakedManifest); - tl.setVariable('manifestsBundle', pathToBakedManifest); - }; - - private validateKustomize(kubectlPath: string) { - const command = tl.tool(kubectlPath); - command.arg(['version', '--client=true', '-o', 'json']); - const result = command.execSync(); - if (result.code !== 0) { - throw result.error; - } - const clientVersion = JSON.parse(result.stdout).clientVersion; - if (clientVersion && parseInt(clientVersion.major) >= 1 && parseInt(clientVersion.minor) >= 14) { - // Do nothing - } else { - throw new Error(tl.loc('KubectlShouldBeUpgraded')); - } - } -} - -export async function bake(ignoreSslErrors?: boolean) { - const renderType = tl.getInput('renderType', true); - let renderEngine: RenderEngine; - switch (renderType) { - case 'helm': - case 'helm2': - renderEngine = new HelmRenderEngine(); - break; - case 'kompose': - renderEngine = new KomposeRenderEngine(); - break; - case 'kustomize': - renderEngine = new KustomizeRenderEngine(); - break; - default: - throw Error(tl.loc('UnknownRenderType')); - } - await renderEngine.bake(); -} diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/createSecret.ts b/_generated/KubernetesManifestV0_Node16/src/actions/createSecret.ts deleted file mode 100644 index d5fa5f71aad1..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/createSecret.ts +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import { StringComparer, isEqual } from '../utils/StringComparison'; -import AuthenticationToken from 'azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken'; -import { getDockerRegistryEndpointAuthenticationToken } from 'azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken'; - -export async function createSecret(ignoreSslErrors?: boolean) { - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - let result; - if (isEqual(TaskInputParameters.secretType, 'dockerRegistry', StringComparer.OrdinalIgnoreCase)) { - const authProvider: AuthenticationToken = getDockerRegistryEndpointAuthenticationToken(TaskInputParameters.dockerRegistryEndpoint); - result = kubectl.createDockerSecret(TaskInputParameters.secretName.trim(), - authProvider.getLoginServerUrl(), - authProvider.getUsername(), - authProvider.getPassword(), - authProvider.getEmail(), - true); - } else { - result = kubectl.createGenericSecret(TaskInputParameters.secretName.trim(), - TaskInputParameters.secretArguments.trim(), - true); - } - - utils.checkForErrors([result]); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/delete.ts b/_generated/KubernetesManifestV0_Node16/src/actions/delete.ts deleted file mode 100644 index 42f24beb1eff..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/delete.ts +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -export async function deleteResources(ignoreSslErrors?: boolean) { - const args = TaskInputParameters.args; - - if (args == null || args.length === 0) { - throw (tl.loc('ArgumentsInputNotSupplied')); - } - - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - const result = kubectl.delete(args); - utils.checkForErrors([result]); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/deploy.ts b/_generated/KubernetesManifestV0_Node16/src/actions/deploy.ts deleted file mode 100644 index 8be590e2a0de..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/deploy.ts +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -import * as deploymentHelper from '../utils/DeploymentHelper'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as utils from '../utils/utilities'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function deploy(ignoreSslErrors?: boolean) { - TaskInputParameters.validateCanaryPercentage(); - TaskInputParameters.validateReplicaCount(); - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectlPath = await utils.getKubectl(); - const kubectl = new Kubectl(kubectlPath, TaskInputParameters.namespace, ignoreSslErrors); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, TaskInputParameters.deploymentStrategy); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/patch.ts b/_generated/KubernetesManifestV0_Node16/src/actions/patch.ts deleted file mode 100644 index c28dde6be30a..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/patch.ts +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskParameters from '../models/TaskInputParameters'; - -export async function patch(ignoreSslErrors?: boolean) { - TaskParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskParameters.namespace, ignoreSslErrors); - let kind = tl.getInput('kind', false); - if(kind) - kind = kind.toLowerCase(); - let name = tl.getInput('name', false); - const filePath = tl.getInput('resourceFileToPatch', false); - const strategy = tl.getInput('mergeStrategy', false); - const patch = tl.getInput('patch', true); - if (tl.filePathSupplied('resourceFileToPatch') && tl.getInput('resourceToPatch') === 'file') { - kind = '-f'; - name = filePath; - } - - const result = kubectl.patch(kind, name, patch, strategy); - utils.checkForErrors([result]); - const resources = kubectl.getResources(result.stdout, ['deployment', 'replicaset', 'daemonset', 'pod', 'statefulset']); - - resources.forEach(resource => { - utils.checkForErrors([kubectl.checkRolloutStatus(resource.type, resource.name, TaskParameters.rolloutStatusTimeout)]); - utils.checkForErrors([kubectl.annotate(resource.type, resource.name, constants.pipelineAnnotations, true)]); - utils.checkForErrors(utils.annotateChildPods(kubectl, resource.type, resource.name, JSON.parse((kubectl.getAllPods()).stdout))); - }); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/promote.ts b/_generated/KubernetesManifestV0_Node16/src/actions/promote.ts deleted file mode 100644 index 259efe6ea9f6..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/promote.ts +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; - -import * as deploymentHelper from '../utils/DeploymentHelper'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as SMICanaryDeploymentHelper from '../utils/SMICanaryDeploymentHelper'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function promote(ignoreSslErrors?: boolean) { - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - - if (!canaryDeploymentHelper.isCanaryDeploymentStrategy()) { - tl.debug('Strategy is not canary deployment. Invalid request.'); - throw (tl.loc('InvalidPromotetActionDeploymentStrategy')); - } - - let includeServices = false; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - includeServices = true; - // In case of SMI traffic split strategy when deployment is promoted, first we will redirect traffic to - // Canary deployment, then update stable deployment and then redirect traffic to stable deployment - tl.debug('Redirecting traffic to canary deployment'); - SMICanaryDeploymentHelper.redirectTrafficToCanaryDeployment(kubectl, TaskInputParameters.manifests); - - tl.debug('Deploying input manifests with SMI canary strategy'); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, 'None'); - - tl.debug('Redirecting traffic to stable deployment'); - SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(kubectl, TaskInputParameters.manifests); - } else { - tl.debug('Deploying input manifests'); - await deploymentHelper.deploy(kubectl, TaskInputParameters.manifests, 'None'); - } - - tl.debug('Deployment strategy selected is Canary. Deleting canary and baseline workloads.'); - try { - canaryDeploymentHelper.deleteCanaryDeployment(kubectl, TaskInputParameters.manifests, includeServices); - } catch (ex) { - tl.warning('Exception occurred while deleting canary and baseline workloads. Exception: ' + ex); - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/reject.ts b/_generated/KubernetesManifestV0_Node16/src/actions/reject.ts deleted file mode 100644 index b25087f11b30..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/reject.ts +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as SMICanaryDeploymentHelper from '../utils/SMICanaryDeploymentHelper'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as utils from '../utils/utilities'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -export async function reject(ignoreSslErrors?: boolean) { - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - - if (!canaryDeploymentHelper.isCanaryDeploymentStrategy()) { - tl.debug('Strategy is not canary deployment. Invalid request.'); - throw (tl.loc('InvalidRejectActionDeploymentStrategy')); - } - - let includeServices = false; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - tl.debug('Reject deployment with SMI canary strategy'); - includeServices = true; - SMICanaryDeploymentHelper.redirectTrafficToStableDeployment(kubectl, TaskInputParameters.manifests); - } - - tl.debug('Deployment strategy selected is Canary. Deleting baseline and canary workloads.'); - canaryDeploymentHelper.deleteCanaryDeployment(kubectl, TaskInputParameters.manifests, includeServices); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/actions/scale.ts b/_generated/KubernetesManifestV0_Node16/src/actions/scale.ts deleted file mode 100644 index 79a5fd6c257c..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/actions/scale.ts +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; - -import * as utils from '../utils/utilities'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskInputParameters from '../models/TaskInputParameters'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; - -export async function scale(ignoreSslErrors?: boolean) { - TaskInputParameters.validateTimeoutForRolloutStatus(); - const kubectl = new Kubectl(await utils.getKubectl(), TaskInputParameters.namespace, ignoreSslErrors); - const kind = tl.getInput('kind', true).toLowerCase(); - const replicas = tl.getInput('replicas', true); - const name = tl.getInput('name', true); - const result = kubectl.scale(kind, name, replicas); - utils.checkForErrors([result]); - utils.checkForErrors([kubectl.checkRolloutStatus(kind, name, TaskInputParameters.rolloutStatusTimeout)]); - utils.checkForErrors([kubectl.annotate(kind, name, constants.pipelineAnnotations, true)]); - utils.checkForErrors(utils.annotateChildPods(kubectl, kind, name, JSON.parse((kubectl.getAllPods()).stdout))); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/models/TaskInputParameters.ts b/_generated/KubernetesManifestV0_Node16/src/models/TaskInputParameters.ts deleted file mode 100644 index 91d92c6ef951..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/models/TaskInputParameters.ts +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -export let namespace: string = tl.getInput('namespace', false); -export const containers: string[] = tl.getDelimitedInput('containers', '\n'); -export const imagePullSecrets: string[] = tl.getDelimitedInput('imagePullSecrets', '\n'); -export const manifests = tl.getDelimitedInput('manifests', '\n'); -export const canaryPercentage: string = tl.getInput('percentage'); -export const deploymentStrategy: string = tl.getInput('strategy', false); -export const trafficSplitMethod: string = tl.getInput('trafficSplitMethod', false); -export const baselineAndCanaryReplicas: string = tl.getInput('baselineAndCanaryReplicas', true); -export const args: string = tl.getInput('arguments', false); -export const secretArguments: string = tl.getInput('secretArguments', false) || ''; -export const secretType: string = tl.getInput('secretType', false); -export const secretName: string = tl.getInput('secretName', false); -export const dockerRegistryEndpoint: string = tl.getInput('dockerRegistryEndpoint', false); -export const rolloutStatusTimeout: string = tl.getInput('rolloutStatusTimeout', false); - -if (!namespace) { - const kubConnection = tl.getInput('kubernetesServiceConnection', false); - if (kubConnection) { - namespace = tl.getEndpointDataParameter(kubConnection, 'namespace', true); - } -} - -if (!namespace) { - tl.debug('Namespace was not supplied nor present in the endpoint; using "default" namespace instead.'); - namespace = 'default'; -} - -export function validateTimeoutForRolloutStatus() { - if (rolloutStatusTimeout && !validateRegex("^\\d*$", rolloutStatusTimeout)) { - throw new Error(tl.loc('InvalidTimeoutValue')); - } -} - -export function validateCanaryPercentage() { - if (deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY && (!validateRegex("^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$", canaryPercentage) || parseFloat(canaryPercentage) > 100)) { - throw new Error(tl.loc('InvalidPercentage')); - } -} - -export function validateReplicaCount() { - if (deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY && trafficSplitMethod.toUpperCase() === canaryDeploymentHelper.TRAFFIC_SPLIT_STRATEGY && !validateRegex("(^([0-9]|([1-9]\\d*))$)", baselineAndCanaryReplicas)) { - throw new Error(tl.loc('InvalidBaselineAndCanaryReplicas')); - } -} - -function validateRegex(regex: string, testString: string) { - var percentageRegex = new RegExp(regex); - return percentageRegex.test(testString); -} diff --git a/_generated/KubernetesManifestV0_Node16/src/run.ts b/_generated/KubernetesManifestV0_Node16/src/run.ts deleted file mode 100644 index 8072187fc954..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/run.ts +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as utils from './utils/utilities'; - -import { deploy } from './actions/deploy'; -import { bake } from './actions/bake'; -import { scale } from './actions/scale'; -import { patch } from './actions/patch'; -import { deleteResources } from './actions/delete'; -import { promote } from './actions/promote'; -import { reject } from './actions/reject'; -import { createSecret } from './actions/createSecret'; - -tl.setResourcePath(path.join(__dirname, '..', 'task.json')); - -function run(): Promise { - const action = tl.getInput('action'); - if (action === 'bake') { - return bake(); - } - const connection = utils.getConnection(); - let action_func = null; - switch (action) { - case 'deploy': - action_func = deploy; - break; - case 'scale': - action_func = scale; - break; - case 'patch': - action_func = patch; - break; - case 'delete': - action_func = deleteResources; - break; - case 'promote': - action_func = promote; - break; - case 'reject': - action_func = reject; - break; - case 'createSecret': - action_func = createSecret; - break; - default: - tl.setResult(tl.TaskResult.Failed, 'Not a supported action, choose from "bake", "deploy", "patch", "scale", "delete", "promote", "reject"'); - process.exit(1); - } - connection.open(); - return action_func(connection.ignoreSSLErrors) - .then(() => connection.close()) - .catch((error) => { - connection.close(); - throw error; - }); -} - -run() - .catch((error) => tl.setResult(tl.TaskResult.Failed, !!error.message ? error.message : error)); \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/CanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0_Node16/src/utils/CanaryDeploymentHelper.ts deleted file mode 100644 index 0f70094bddaa..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/CanaryDeploymentHelper.ts +++ /dev/null @@ -1,225 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as helper from '../utils/KubernetesObjectUtility'; -import { KubernetesWorkload } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { StringComparer, isEqual } from './StringComparison'; -import * as utils from '../utils/utilities'; - -export const CANARY_DEPLOYMENT_STRATEGY = 'CANARY'; -export const TRAFFIC_SPLIT_STRATEGY = 'SMI'; -export const CANARY_VERSION_LABEL = 'azure-pipelines/version'; -const BASELINE_SUFFIX = '-baseline'; -export const BASELINE_LABEL_VALUE = 'baseline'; -const CANARY_SUFFIX = '-canary'; -export const CANARY_LABEL_VALUE = 'canary'; -export const STABLE_SUFFIX = '-stable'; -export const STABLE_LABEL_VALUE = 'stable'; - -export function deleteCanaryDeployment(kubectl: Kubectl, manifestFilePaths: string[], includeServices: boolean) { - - // get manifest files - const inputManifestFiles: string[] = utils.getManifestFiles(manifestFilePaths); - - if (inputManifestFiles == null || inputManifestFiles.length == 0) { - throw (tl.loc('ManifestFileNotFound')); - } - - deleteCanaryAndBaselineObjects(kubectl, inputManifestFiles, includeServices); -} - -export function markResourceAsStable(inputObject: any): object { - if (isResourceMarkedAsStable(inputObject)) { - return inputObject; - } - - const newObject = JSON.parse(JSON.stringify(inputObject)); - - // Adding labels and annotations. - addCanaryLabelsAndAnnotations(newObject, STABLE_LABEL_VALUE); - - tl.debug("Added stable label: " + JSON.stringify(newObject)); - return newObject; -} - -export function isResourceMarkedAsStable(inputObject: any): boolean { - return inputObject && - inputObject.metadata && - inputObject.metadata.labels && - inputObject.metadata.labels[CANARY_VERSION_LABEL] == STABLE_LABEL_VALUE; -} - -export function getStableResource(inputObject: any): object { - var replicaCount = isSpecContainsReplicas(inputObject.kind) ? inputObject.metadata.replicas : 0; - return getNewCanaryObject(inputObject, replicaCount, STABLE_LABEL_VALUE); -} - -export function getNewBaselineResource(stableObject: any, replicas?: number): object { - return getNewCanaryObject(stableObject, replicas, BASELINE_LABEL_VALUE); -} - -export function getNewCanaryResource(inputObject: any, replicas?: number): object { - return getNewCanaryObject(inputObject, replicas, CANARY_LABEL_VALUE); -} - -export function fetchCanaryResource(kubectl: Kubectl, kind: string, name: string): object { - return fetchResource(kubectl, kind, getCanaryResourceName(name)); -} - -export function fetchResource(kubectl: Kubectl, kind: string, name: string): object { - const result = kubectl.getResource(kind, name); - - if (result == null || !!result.stderr) { - return null; - } - - if (!!result.stdout) { - const resource = JSON.parse(result.stdout); - try { - UnsetsClusterSpecficDetails(resource); - return resource; - } catch (ex) { - tl.debug('Exception occurred while Parsing ' + resource + ' in Json object'); - tl.debug(`Exception:${ex}`); - } - } - return null; -} - -export function isCanaryDeploymentStrategy() { - const deploymentStrategy = TaskInputParameters.deploymentStrategy; - return deploymentStrategy && deploymentStrategy.toUpperCase() === CANARY_DEPLOYMENT_STRATEGY; -} - -export function isSMICanaryStrategy() { - const deploymentStrategy = TaskInputParameters.trafficSplitMethod; - return isCanaryDeploymentStrategy() && deploymentStrategy && deploymentStrategy.toUpperCase() === TRAFFIC_SPLIT_STRATEGY; -} - -export function getCanaryResourceName(name: string) { - return name + CANARY_SUFFIX; -} - -export function getBaselineResourceName(name: string) { - return name + BASELINE_SUFFIX; -} - -export function getStableResourceName(name: string) { - return name + STABLE_SUFFIX; -} - -function UnsetsClusterSpecficDetails(resource: any) { - - if (resource == null) { - return; - } - - // Unsets the cluster specific details in the object - if (!!resource) { - const metadata = resource.metadata; - const status = resource.status; - - if (!!metadata) { - const newMetadata = { - 'annotations': metadata.annotations, - 'labels': metadata.labels, - 'name': metadata.name - }; - - resource.metadata = newMetadata; - } - - if (!!status) { - resource.status = {}; - } - } -} - -function getNewCanaryObject(inputObject: any, replicas: number, type: string): object { - const newObject = JSON.parse(JSON.stringify(inputObject)); - - // Updating name - if (type === CANARY_LABEL_VALUE) { - newObject.metadata.name = getCanaryResourceName(inputObject.metadata.name) - } else if (type === STABLE_LABEL_VALUE) { - newObject.metadata.name = getStableResourceName(inputObject.metadata.name) - } else { - newObject.metadata.name = getBaselineResourceName(inputObject.metadata.name); - } - - // Adding labels and annotations. - addCanaryLabelsAndAnnotations(newObject, type); - - // Updating no. of replicas - if (isSpecContainsReplicas(newObject.kind)) { - newObject.spec.replicas = replicas; - } - - return newObject; -} - -function isSpecContainsReplicas(kind: string) { - return !isEqual(kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase) && - !isEqual(kind, KubernetesWorkload.daemonSet, StringComparer.OrdinalIgnoreCase) && - !helper.isServiceEntity(kind) -} - -function addCanaryLabelsAndAnnotations(inputObject: any, type: string) { - const newLabels = new Map(); - newLabels[CANARY_VERSION_LABEL] = type; - - helper.updateObjectLabels(inputObject, newLabels, false); - helper.updateObjectAnnotations(inputObject, newLabels, false); - helper.updateSelectorLabels(inputObject, newLabels, false); - - if (!helper.isServiceEntity(inputObject.kind)) { - helper.updateSpecLabels(inputObject, newLabels, false); - } -} - -function addValueToList(map: any, key: string, value: string) { - map[key] = map[key] || new Set(); - map[key].add(value); -} - -function deleteCanaryAndBaselineObjects(kubectl: Kubectl, files: string[], includeServices: boolean) { - var kindNameMap = {}; - files.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind) - || (includeServices && helper.isServiceEntity(kind))) { - const canaryObjectName = getCanaryResourceName(name); - const baselineObjectName = getBaselineResourceName(name); - addValueToList(kindNameMap, kind, canaryObjectName); - const result = kubectl.getResource(kind, baselineObjectName); - if (result != null && !result.stderr) { - addValueToList(kindNameMap, kind, baselineObjectName); - } - } - }); - }); - - const kindList = Object.keys(kindNameMap); - if (kindList.length === 0) { - tl.debug('CanaryDeploymentHelper : No deployment objects found'); - } - kindList.forEach(kind => { - const argsPrefix = utils.createKubectlArgs(kind, kindNameMap[kind]); - const args = utils.getDeleteCmdArgs(argsPrefix, TaskInputParameters.args); - tl.debug('Delete cmd args : ' + args); - - if (!!args && args.length > 0) { - // run kubectl delete cmd - const result = kubectl.delete(args); - utils.checkForErrors([result]); - } - }) -} diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/DeploymentHelper.ts b/_generated/KubernetesManifestV0_Node16/src/utils/DeploymentHelper.ts deleted file mode 100644 index 5a1fa259aa34..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/DeploymentHelper.ts +++ /dev/null @@ -1,217 +0,0 @@ -'use strict'; - -import * as fs from 'fs'; -import * as path from 'path'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as yaml from 'js-yaml'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; -import * as KubernetesObjectUtility from '../utils/KubernetesObjectUtility'; -import * as constants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as models from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import * as fileHelper from '../utils/FileHelper'; -import * as utils from '../utils/utilities'; -import * as KubernetesManifestUtility from 'azure-pipelines-tasks-kubernetes-common/kubernetesmanifestutility'; -import * as KubernetesConstants from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; -import { Kubectl, Resource } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { isEqual, StringComparer } from './StringComparison'; -import { getDeploymentMetadata, getPublishDeploymentRequestUrl, isDeploymentEntity, getManifestUrls } from 'azure-pipelines-tasks-kubernetes-common/image-metadata-helper'; -import { WebRequest, sendRequest } from 'azure-pipelines-tasks-utility-common/restutilities'; -import { deployPodCanary } from './PodCanaryDeploymentHelper'; -import { deploySMICanary } from './SMICanaryDeploymentHelper'; - -export async function deploy(kubectl: Kubectl, manifestFilePaths: string[], deploymentStrategy: string) { - - // get manifest files - let inputManifestFiles: string[] = getManifestFiles(manifestFilePaths); - - // imagePullSecrets addition & artifact substitution - inputManifestFiles = updateResourceObjects(inputManifestFiles, TaskInputParameters.imagePullSecrets, TaskInputParameters.containers); - - // deployment - const deployedManifestFiles = deployManifests(inputManifestFiles, kubectl, isCanaryDeploymentStrategy(deploymentStrategy)); - - // check manifest stability - const resourceTypes: Resource[] = KubernetesObjectUtility.getResources(deployedManifestFiles, models.deploymentTypes.concat([KubernetesConstants.DiscoveryAndLoadBalancerResource.service])); - await checkManifestStability(kubectl, resourceTypes); - - // print ingress resources - const ingressResources: Resource[] = KubernetesObjectUtility.getResources(deployedManifestFiles, [KubernetesConstants.DiscoveryAndLoadBalancerResource.ingress]); - ingressResources.forEach(ingressResource => { - kubectl.getResource(KubernetesConstants.DiscoveryAndLoadBalancerResource.ingress, ingressResource.name); - }); - - // annotate resources - let allPods: any; - try { - allPods = JSON.parse((kubectl.getAllPods()).stdout); - } catch (e) { - tl.debug("Unable to parse pods; Error: " + e); - } - - annotateResources(deployedManifestFiles, kubectl, resourceTypes, allPods); - - // Capture and push deployment metadata only if deployment strategy is not specified (because for Canary/SMI we do not replace actual deployment objects) - if (!isCanaryDeploymentStrategy(deploymentStrategy)) { - try { - const clusterInfo = kubectl.getClusterInfo().stdout; - captureAndPushDeploymentMetadata(inputManifestFiles, allPods, deploymentStrategy, clusterInfo, manifestFilePaths); - } catch (e) { - tl.warning("Capturing deployment metadata failed with error: " + e); - } - } -} - -function getManifestFiles(manifestFilePaths: string[]): string[] { - const files: string[] = utils.getManifestFiles(manifestFilePaths); - - if (files == null || files.length === 0) { - throw (tl.loc('ManifestFileNotFound', manifestFilePaths)); - } - - return files; -} - -function deployManifests(files: string[], kubectl: Kubectl, isCanaryDeploymentStrategy: boolean): string[] { - let result; - if (isCanaryDeploymentStrategy) { - let canaryDeploymentOutput: any; - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - canaryDeploymentOutput = deploySMICanary(kubectl, files); - } else { - canaryDeploymentOutput = deployPodCanary(kubectl, files); - } - result = canaryDeploymentOutput.result; - files = canaryDeploymentOutput.newFilePaths; - } else { - if (canaryDeploymentHelper.isSMICanaryStrategy()) { - const updatedManifests = appendStableVersionLabelToResource(files, kubectl); - result = kubectl.apply(updatedManifests); - } else { - result = kubectl.apply(files); - } - } - utils.checkForErrors([result]); - return files; -} - -function appendStableVersionLabelToResource(files: string[], kubectl: Kubectl): string[] { - const manifestFiles = []; - const newObjectsList = []; - - files.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const kind = inputObject.kind; - if (KubernetesObjectUtility.isDeploymentEntity(kind)) { - const updatedObject = canaryDeploymentHelper.markResourceAsStable(inputObject); - newObjectsList.push(updatedObject); - } else { - manifestFiles.push(filePath); - } - }); - }); - - const updatedManifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - manifestFiles.push(...updatedManifestFiles); - return manifestFiles; -} - -async function checkManifestStability(kubectl: Kubectl, resources: Resource[]): Promise { - await KubernetesManifestUtility.checkManifestStability(kubectl, resources, TaskInputParameters.rolloutStatusTimeout); - -} - -function annotateResources(files: string[], kubectl: Kubectl, resourceTypes: Resource[], allPods: any) { - const annotateResults: IExecSyncResult[] = []; - annotateResults.push(kubectl.annotateFiles(files, constants.pipelineAnnotations, true)); - resourceTypes.forEach(resource => { - if (resource.type.toUpperCase() !== models.KubernetesWorkload.pod.toUpperCase()) { - utils.annotateChildPods(kubectl, resource.type, resource.name, allPods) - .forEach(execResult => annotateResults.push(execResult)); - } - }); - utils.checkForErrors(annotateResults, true); -} - -export function updateResourceObjects(filePaths: string[], imagePullSecrets: string[], containers: string[]): string[] { - const newObjectsList = []; - const updateResourceObject = (inputObject) => { - if (!!imagePullSecrets && imagePullSecrets.length > 0) { - KubernetesObjectUtility.updateImagePullSecrets(inputObject, imagePullSecrets, false); - } - if (!!containers && containers.length > 0) { - KubernetesObjectUtility.updateImageDetails(inputObject, containers); - } - } - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath).toString(); - yaml.safeLoadAll(fileContents, function (inputObject: any) { - if (inputObject && inputObject.kind) { - const kind = inputObject.kind; - if (KubernetesObjectUtility.isWorkloadEntity(kind)) { - updateResourceObject(inputObject); - } - else if (isEqual(kind, 'list', StringComparer.OrdinalIgnoreCase)) { - let items = inputObject.items; - if (items.length > 0) { - items.forEach((item) => updateResourceObject(item)); - } - } - newObjectsList.push(inputObject); - } - }); - }); - tl.debug('New K8s objects after addin imagePullSecrets are :' + JSON.stringify(newObjectsList)); - const newFilePaths = fileHelper.writeObjectsToFile(newObjectsList); - return newFilePaths; -} - -function captureAndPushDeploymentMetadata(filePaths: string[], allPods: any, deploymentStrategy: string, clusterInfo: any, manifestFilePaths: string[]) { - const requestUrl = getPublishDeploymentRequestUrl(); - let metadata = {}; - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath).toString(); - yaml.safeLoadAll(fileContents, function (inputObject: any) { - if (!!inputObject && inputObject.kind && isDeploymentEntity(inputObject.kind)) { - metadata = getDeploymentMetadata(inputObject, allPods, deploymentStrategy, clusterInfo, getManifestUrls(manifestFilePaths)); - pushDeploymentDataToEvidenceStore(JSON.stringify(metadata), requestUrl).then((result) => { - tl.debug("DeploymentDetailsApiResponse: " + JSON.stringify(result)); - }, (error) => { - tl.warning("publishToImageMetadataStore failed with error: " + error); - }); - } - }); - }); -} - -async function pushDeploymentDataToEvidenceStore(requestBody: string, requestUrl: string): Promise { - const request = new WebRequest(); - const accessToken: string = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - request.uri = requestUrl; - request.method = 'POST'; - request.body = requestBody; - request.headers = { - "Content-Type": "application/json", - "Authorization": "Bearer " + accessToken - }; - - tl.debug("requestUrl: " + requestUrl); - tl.debug("requestBody: " + requestBody); - - try { - tl.debug("Sending request for pushing deployment data to Image meta data store"); - const response = await sendRequest(request); - return response; - } - catch (error) { - tl.debug("Unable to push to deployment details to Artifact Store, Error: " + error); - } - - return Promise.resolve(); -} - -function isCanaryDeploymentStrategy(deploymentStrategy: string): boolean { - return deploymentStrategy != null && deploymentStrategy.toUpperCase() === canaryDeploymentHelper.CANARY_DEPLOYMENT_STRATEGY.toUpperCase(); -} diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/FileHelper.ts b/_generated/KubernetesManifestV0_Node16/src/utils/FileHelper.ts deleted file mode 100644 index ce62b4205732..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/FileHelper.ts +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; - -import * as fs from 'fs'; -import * as path from 'path'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as os from 'os'; - -export function getTempDirectory(): string { - return tl.getVariable('agent.tempDirectory') || os.tmpdir(); -} - -export function getNewUserDirPath(): string { - let userDir = path.join(getTempDirectory(), 'kubectlTask'); - ensureDirExists(userDir); - - userDir = path.join(userDir, getCurrentTime().toString()); - ensureDirExists(userDir); - - return userDir; -} - -export function ensureDirExists(dirPath: string): void { - if (!fs.existsSync(dirPath)) { - fs.mkdirSync(dirPath); - } -} - -export function assertFileExists(path: string) { - if (!fs.existsSync(path)) { - tl.error(tl.loc('FileNotFoundException', path)); - throw new Error(tl.loc('FileNotFoundException', path)); - } -} - -export function writeObjectsToFile(inputObjects: any[]): string[] { - const newFilePaths = []; - - if (!!inputObjects) { - inputObjects.forEach((inputObject: any) => { - try { - const inputObjectString = JSON.stringify(inputObject); - if (!!inputObject.kind && !!inputObject.metadata && !!inputObject.metadata.name) { - const fileName = getManifestFileName(inputObject.kind, inputObject.metadata.name); - fs.writeFileSync(path.join(fileName), inputObjectString); - newFilePaths.push(fileName); - } else { - tl.debug('Input object is not proper K8s resource object. Object: ' + inputObjectString); - } - } catch (ex) { - tl.debug('Exception occurred while writing object to file : ' + inputObject + ' . Exception: ' + ex); - } - }); - } - - return newFilePaths; -} - -export function writeManifestToFile(inputObjectString: string, kind: string, name: string): string { - if (inputObjectString) { - try { - const fileName = getManifestFileName(kind, name); - fs.writeFileSync(path.join(fileName), inputObjectString); - return fileName; - } catch (ex) { - tl.debug('Exception occurred while writing object to file : ' + inputObjectString + ' . Exception: ' + ex); - } - } - return ''; -} - -function getManifestFileName(kind: string, name: string) { - const filePath = kind + '_' + name + '_' + getCurrentTime().toString(); - const tempDirectory = getTempDirectory(); - const fileName = path.join(tempDirectory, path.basename(filePath)); - return fileName; -} - -function getCurrentTime(): number { - return new Date().getTime(); -} - diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/KubernetesObjectUtility.ts b/_generated/KubernetesManifestV0_Node16/src/utils/KubernetesObjectUtility.ts deleted file mode 100644 index dc7f40e0c6fc..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/KubernetesObjectUtility.ts +++ /dev/null @@ -1,391 +0,0 @@ -'use strict'; -import * as fs from 'fs'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as yaml from 'js-yaml'; -import { Resource } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { KubernetesWorkload, deploymentTypes, workloadTypes, workloadTypesWithRolloutStatus } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { StringComparer, isEqual } from '../utils/StringComparison'; - -export function isDeploymentEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return deploymentTypes.some((type: string) => { - return isEqual(type, kind, StringComparer.OrdinalIgnoreCase); - }); -} - -export function isWorkloadEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return workloadTypes.some((type: string) => { - return isEqual(type, kind, StringComparer.OrdinalIgnoreCase); - }); -} - -export function isServiceEntity(kind: string): boolean { - if (!kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - return isEqual("Service", kind, StringComparer.OrdinalIgnoreCase); -} - -export function getReplicaCount(inputObject: any): any { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - const kind = inputObject.kind; - if (!isEqual(kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase) && !isEqual(kind, KubernetesWorkload.daemonSet, StringComparer.OrdinalIgnoreCase)) { - return inputObject.spec.replicas; - } - - return 0; -} - -export function updateObjectLabels(inputObject: any, newLabels: Map, override: boolean) { - - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.metadata) { - throw (tl.loc('NullInputObjectMetadata')); - } - - if (!newLabels) { - return; - } - - if (override) { - inputObject.metadata.labels = newLabels; - } else { - let existingLabels = inputObject.metadata.labels; - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - - inputObject.metadata.labels = existingLabels; - } -} - -export function updateObjectAnnotations(inputObject: any, newAnnotations: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.metadata) { - throw (tl.loc('NullInputObjectMetadata')); - } - - if (!newAnnotations) { - return; - } - if (override) { - inputObject.metadata.annotations = newAnnotations; - } else { - let existingAnnotations = inputObject.metadata.annotations; - if (!existingAnnotations) { - existingAnnotations = new Map(); - } - - Object.keys(newAnnotations).forEach(function (key) { - existingAnnotations[key] = newAnnotations[key]; - }); - - inputObject.metadata.annotations = existingAnnotations; - } -} - -export function updateImagePullSecrets(inputObject: any, newImagePullSecrets: string[], override: boolean) { - if (!inputObject || !inputObject.spec || !newImagePullSecrets) { - return; - } - - const newImagePullSecretsObjects = Array.from(newImagePullSecrets, x => { return { 'name': x }; }); - let existingImagePullSecretObjects: any = getImagePullSecrets(inputObject); - - if (override) { - existingImagePullSecretObjects = newImagePullSecretsObjects; - } else { - if (!existingImagePullSecretObjects) { - existingImagePullSecretObjects = new Array(); - } - - existingImagePullSecretObjects = existingImagePullSecretObjects.concat(newImagePullSecretsObjects); - } - - setImagePullSecrets(inputObject, existingImagePullSecretObjects); -} - -export function updateSpecLabels(inputObject: any, newLabels: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - if (!newLabels) { - return; - } - - let existingLabels = getSpecLabels(inputObject); - - if (override) { - existingLabels = newLabels; - } else { - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - } - - setSpecLabels(inputObject, existingLabels); -} - -export function updateSelectorLabels(inputObject: any, newLabels: Map, override: boolean) { - if (!inputObject) { - throw (tl.loc('NullInputObject')); - } - - if (!inputObject.kind) { - throw (tl.loc('ResourceKindNotDefined')); - } - - if (!newLabels) { - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return; - } - - let existingLabels = getSpecSelectorLabels(inputObject); - - if (override) { - existingLabels = newLabels; - } else { - if (!existingLabels) { - existingLabels = new Map(); - } - - Object.keys(newLabels).forEach(function (key) { - existingLabels[key] = newLabels[key]; - }); - } - - setSpecSelectorLabels(inputObject, existingLabels); -} - -export function getResources(filePaths: string[], filterResourceTypes: string[]): Resource[] { - if (!filePaths) { - return []; - } - - const resources: Resource[] = []; - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const inputObjectKind = inputObject ? inputObject.kind : ''; - let isStrategyRollingUpdate = true; - if (workloadTypesWithRolloutStatus.indexOf(inputObjectKind.toLowerCase()) >= 0) { - let inputObjectStrategyType = ''; - if (inputObject && inputObject.spec && inputObject.spec.updateStrategy) { - inputObjectStrategyType = inputObject.spec.updateStrategy.type; - } else { - inputObjectStrategyType = "RollingUpdate"; - } - // Check for unsupported updateStrategy for rollout status - if (!isEqual(inputObjectStrategyType, "RollingUpdate", StringComparer.OrdinalIgnoreCase)) { - isStrategyRollingUpdate = false; - } - } - if (filterResourceTypes.filter(type => isEqual(inputObjectKind, type, StringComparer.OrdinalIgnoreCase)).length > 0) { - const resource = { - type: inputObject.kind, - name: inputObject.metadata.name, - isStrategyRollingUpdate: isStrategyRollingUpdate - }; - resources.push(resource); - } - }); - }); - return resources; -} - -function getSpecLabels(inputObject: any) { - - if (!inputObject) { - return null; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return inputObject.metadata.labels; - } - if (!!inputObject.spec && !!inputObject.spec.template && !!inputObject.spec.template.metadata) { - return inputObject.spec.template.metadata.labels; - } - - return null; -} - -function getImagePullSecrets(inputObject: any) { - - if (!inputObject || !inputObject.spec) { - return null; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.cronjob, StringComparer.OrdinalIgnoreCase)) { - try { - return inputObject.spec.jobTemplate.spec.template.spec.imagePullSecrets; - } catch (ex) { - tl.debug(`Fetching imagePullSecrets failed due to this error: ${JSON.stringify(ex)}`); - return null; - } - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - return inputObject.spec.imagePullSecrets; - } - - if (!!inputObject.spec.template && !!inputObject.spec.template.spec) { - return inputObject.spec.template.spec.imagePullSecrets; - } - - return null; -} - -function setImagePullSecrets(inputObject: any, newImagePullSecrets: any) { - if (!inputObject || !inputObject.spec || !newImagePullSecrets) { - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.pod, StringComparer.OrdinalIgnoreCase)) { - inputObject.spec.imagePullSecrets = newImagePullSecrets; - return; - } - - if (isEqual(inputObject.kind, KubernetesWorkload.cronjob, StringComparer.OrdinalIgnoreCase)) { - try { - inputObject.spec.jobTemplate.spec.template.spec.imagePullSecrets = newImagePullSecrets; - } catch (ex) { - tl.debug(`Overriding imagePullSecrets failed due to this error: ${JSON.stringify(ex)}`); - //Do nothing - } - return; - } - - if (!!inputObject.spec.template && !!inputObject.spec.template.spec) { - inputObject.spec.template.spec.imagePullSecrets = newImagePullSecrets; - return; - } - - return; -} - -export function updateImageDetails(inputObject: any, containers: string[]) { - if (!inputObject || !inputObject.spec || !containers) { - return; - } - - if (inputObject.spec.template && !!inputObject.spec.template.spec) { - if (inputObject.spec.template.spec.containers) { - updateContainers(inputObject.spec.template.spec.containers, containers); - } - if (inputObject.spec.template.spec.initContainers) { - updateContainers(inputObject.spec.template.spec.initContainers, containers); - } - return; - } - - if (inputObject.spec.jobTemplate && inputObject.spec.jobTemplate.spec && inputObject.spec.jobTemplate.spec.template && inputObject.spec.jobTemplate.spec.template.spec) { - if (inputObject.spec.jobTemplate.spec.template.spec.containers) { - updateContainers(inputObject.spec.jobTemplate.spec.template.spec.containers, containers); - } - - if (inputObject.spec.jobTemplate.spec.template.spec.initContainers) { - updateContainers(inputObject.spec.jobTemplate.spec.template.spec.initContainers, containers); - } - return; - } - - if (inputObject.spec.containers) { - updateContainers(inputObject.spec.containers, containers); - } - - if (inputObject.spec.initContainers) { - updateContainers(inputObject.spec.initContainers, containers); - } -} - -function extractImageName(imageName) { - let img = ''; - if (imageName.indexOf('/') > 0) { - const registry = imageName.substring(0, imageName.indexOf('/')); - const imgName = imageName.substring(imageName.indexOf('/') + 1).split(':')[0]; - img = `${registry}/${imgName}`; - } else { - img = imageName.split(':')[0]; - } - return img.split('@sha256')[0]; -} - -function updateContainers(containers: any[], images: string[]) { - if (!containers || containers.length === 0) { - return containers; - } - containers.forEach((container) => { - const imageName: string = extractImageName(container.image.trim()); - images.forEach(image => { - if (extractImageName(image) === imageName) { - container.image = image; - } - }); - }); -} - -function setSpecLabels(inputObject: any, newLabels: any) { - let specLabels = getSpecLabels(inputObject); - if (!!newLabels) { - specLabels = newLabels; - } -} - -function getSpecSelectorLabels(inputObject: any) { - - if (!!inputObject && !!inputObject.spec && !!inputObject.spec.selector) { - if (isServiceEntity(inputObject.kind)) { - return inputObject.spec.selector; - } else { - return inputObject.spec.selector.matchLabels; - } - } - - return null; -} - -function setSpecSelectorLabels(inputObject: any, newLabels: any) { - - let selectorLabels = getSpecSelectorLabels(inputObject); - if (!!selectorLabels) { - selectorLabels = newLabels; - } -} diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/PodCanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0_Node16/src/utils/PodCanaryDeploymentHelper.ts deleted file mode 100644 index 3756b42516f0..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/PodCanaryDeploymentHelper.ts +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as fileHelper from '../utils/FileHelper'; -import * as helper from '../utils/KubernetesObjectUtility'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -export function deployPodCanary(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const percentage = parseInt(TaskInputParameters.canaryPercentage); - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind)) { - tl.debug('Calculating replica count for canary'); - const canaryReplicaCount = calculateReplicaCountForCanary(inputObject, percentage); - tl.debug('Replica count is ' + canaryReplicaCount); - - // Get stable object - tl.debug('Querying stable object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, name); - if (!stableObject) { - tl.debug('Stable object not found. Creating only canary object'); - // If stable object not found, create canary deployment. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - newObjectsList.push(newCanaryObject); - } else { - tl.debug('Stable object found. Creating canary and baseline objects'); - // If canary object not found, create canary and baseline object. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - const newBaselineObject = canaryDeploymentHelper.getNewBaselineResource(stableObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineObject)); - newObjectsList.push(newCanaryObject); - newObjectsList.push(newBaselineObject); - } - } else { - // Updating non deployment entity as it is. - newObjectsList.push(inputObject); - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - const result = kubectl.apply(manifestFiles); - return { 'result': result, 'newFilePaths': manifestFiles }; -} - -function calculateReplicaCountForCanary(inputObject: any, percentage: number) { - const inputReplicaCount = helper.getReplicaCount(inputObject); - return Math.round((inputReplicaCount * percentage) / 100); -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/SMICanaryDeploymentHelper.ts b/_generated/KubernetesManifestV0_Node16/src/utils/SMICanaryDeploymentHelper.ts deleted file mode 100644 index 1cb24e24938a..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/SMICanaryDeploymentHelper.ts +++ /dev/null @@ -1,234 +0,0 @@ -'use strict'; - -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; -import * as util from 'util'; - -import * as TaskInputParameters from '../models/TaskInputParameters'; -import * as fileHelper from '../utils/FileHelper'; -import * as helper from '../utils/KubernetesObjectUtility'; -import * as utils from '../utils/utilities'; -import * as canaryDeploymentHelper from '../utils/CanaryDeploymentHelper'; - -const TRAFFIC_SPLIT_OBJECT_NAME_SUFFIX = '-azure-pipelines-rollout'; -const TRAFFIC_SPLIT_OBJECT = 'TrafficSplit'; -var trafficSplitAPIVersion = null; - -export function deploySMICanary(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const canaryReplicaCount = parseInt(TaskInputParameters.baselineAndCanaryReplicas); - tl.debug('Replica count is ' + canaryReplicaCount); - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isDeploymentEntity(kind)) { - // Get stable object - tl.debug('Querying stable object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, name); - if (!stableObject) { - tl.debug('Stable object not found. Creating only canary object'); - // If stable object not found, create canary deployment. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - newObjectsList.push(newCanaryObject); - } else { - if (!canaryDeploymentHelper.isResourceMarkedAsStable(stableObject)) { - throw (tl.loc('StableSpecSelectorNotExist', name)); - } - - tl.debug('Stable object found. Creating canary and baseline objects'); - // If canary object not found, create canary and baseline object. - const newCanaryObject = canaryDeploymentHelper.getNewCanaryResource(inputObject, canaryReplicaCount); - const newBaselineObject = canaryDeploymentHelper.getNewBaselineResource(stableObject, canaryReplicaCount); - tl.debug('New canary object is: ' + JSON.stringify(newCanaryObject)); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineObject)); - newObjectsList.push(newCanaryObject); - newObjectsList.push(newBaselineObject); - } - } else { - // Updating non deployment entity as it is. - newObjectsList.push(inputObject); - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - const result = kubectl.apply(manifestFiles); - createCanaryService(kubectl, filePaths); - return { 'result': result, 'newFilePaths': manifestFiles }; -} - -function createCanaryService(kubectl: Kubectl, filePaths: string[]) { - const newObjectsList = []; - const trafficObjectsList = []; - - filePaths.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isServiceEntity(kind)) { - const newCanaryServiceObject = canaryDeploymentHelper.getNewCanaryResource(inputObject); - tl.debug('New canary service object is: ' + JSON.stringify(newCanaryServiceObject)); - newObjectsList.push(newCanaryServiceObject); - - const newBaselineServiceObject = canaryDeploymentHelper.getNewBaselineResource(inputObject); - tl.debug('New baseline object is: ' + JSON.stringify(newBaselineServiceObject)); - newObjectsList.push(newBaselineServiceObject); - - tl.debug('Querying for stable service object'); - const stableObject = canaryDeploymentHelper.fetchResource(kubectl, kind, canaryDeploymentHelper.getStableResourceName(name)); - if (!stableObject) { - const newStableServiceObject = canaryDeploymentHelper.getStableResource(inputObject); - tl.debug('New stable service object is: ' + JSON.stringify(newStableServiceObject)); - newObjectsList.push(newStableServiceObject); - - tl.debug('Creating the traffic object for service: ' + name); - const trafficObject = createTrafficSplitManifestFile(kubectl, name, 0, 0, 1000); - tl.debug('Creating the traffic object for service: ' + trafficObject); - trafficObjectsList.push(trafficObject); - } else { - let updateTrafficObject = true; - const trafficObject = canaryDeploymentHelper.fetchResource(kubectl, TRAFFIC_SPLIT_OBJECT, getTrafficSplitResourceName(name)); - if (trafficObject) { - const trafficJObject = JSON.parse(JSON.stringify(trafficObject)); - if (trafficJObject && trafficJObject.spec && trafficJObject.spec.backends) { - trafficJObject.spec.backends.forEach((s) => { - if (s.service === canaryDeploymentHelper.getCanaryResourceName(name) && s.weight === "1000m") { - tl.debug('Update traffic objcet not required'); - updateTrafficObject = false; - } - }) - } - } - - if (updateTrafficObject) { - tl.debug('Stable service object present so updating the traffic object for service: ' + name); - trafficObjectsList.push(updateTrafficSplitObject(kubectl, name)); - } - } - } - }); - }); - - const manifestFiles = fileHelper.writeObjectsToFile(newObjectsList); - manifestFiles.push(...trafficObjectsList); - const result = kubectl.apply(manifestFiles); - utils.checkForErrors([result]); -} - -export function redirectTrafficToCanaryDeployment(kubectl: Kubectl, manifestFilePaths: string[]) { - adjustTraffic(kubectl, manifestFilePaths, 0, 1000); -} - -export function redirectTrafficToStableDeployment(kubectl: Kubectl, manifestFilePaths: string[]) { - adjustTraffic(kubectl, manifestFilePaths, 1000, 0); -} - -function getNewServiceObject(inputObject: any, type: string): object { - const newObject = JSON.parse(JSON.stringify(inputObject)); - // Updating name - newObject.metadata.name = type === canaryDeploymentHelper.CANARY_LABEL_VALUE ? - canaryDeploymentHelper.getCanaryResourceName(inputObject.metadata.name) : - canaryDeploymentHelper.getBaselineResourceName(inputObject.metadata.name); - - const newLabels = new Map(); - newLabels[canaryDeploymentHelper.CANARY_VERSION_LABEL] = type; - - helper.updateObjectLabels(inputObject, newLabels, false); - helper.updateObjectAnnotations(inputObject, newLabels, false); - helper.updateSelectorLabels(inputObject, newLabels, false); - - return newObject; -} - -function adjustTraffic(kubectl: Kubectl, manifestFilePaths: string[], stableWeight: number, canaryWeight: number) { - // get manifest files - const inputManifestFiles: string[] = utils.getManifestFiles(manifestFilePaths); - - if (inputManifestFiles == null || inputManifestFiles.length == 0) { - return; - } - - const trafficSplitManifests = []; - const serviceObjects = []; - inputManifestFiles.forEach((filePath: string) => { - const fileContents = fs.readFileSync(filePath); - yaml.safeLoadAll(fileContents, function (inputObject) { - const name = inputObject.metadata.name; - const kind = inputObject.kind; - if (helper.isServiceEntity(kind)) { - trafficSplitManifests.push(createTrafficSplitManifestFile(kubectl, name, stableWeight, 0, canaryWeight)); - serviceObjects.push(name); - } - }); - }); - - if (trafficSplitManifests.length <= 0) { - return; - } - - const result = kubectl.apply(trafficSplitManifests); - tl.debug('serviceObjects:' + serviceObjects.join(',') + ' result:' + result); - utils.checkForErrors([result]); -} - -function updateTrafficSplitObject(kubectl: Kubectl, serviceName: string): string { - const percentage = parseInt(TaskInputParameters.canaryPercentage) * 10; - const baselineAndCanaryWeight = percentage / 2; - const stableDeploymentWeight = 1000 - percentage; - tl.debug('Creating the traffic object with canary weight: ' + baselineAndCanaryWeight + ',baseling weight: ' + baselineAndCanaryWeight + ',stable: ' + stableDeploymentWeight); - return createTrafficSplitManifestFile(kubectl, serviceName, stableDeploymentWeight, baselineAndCanaryWeight, baselineAndCanaryWeight); -} - -function createTrafficSplitManifestFile(kubectl: Kubectl, serviceName: string, stableWeight: number, baselineWeight: number, canaryWeight: number): string { - const smiObjectString = getTrafficSplitObject(kubectl, serviceName, stableWeight, baselineWeight, canaryWeight); - const manifestFile = fileHelper.writeManifestToFile(smiObjectString, TRAFFIC_SPLIT_OBJECT, serviceName); - if (!manifestFile) { - throw new Error(tl.loc('UnableToCreateTrafficSplitManifestFile', 'Could not create manifest file for TrafficSplit object')); - } - - return manifestFile; -} - -function getTrafficSplitObject(kubectl: Kubectl, name: string, stableWeight: number, baselineWeight: number, canaryWeight: number): string { - if (!trafficSplitAPIVersion) - trafficSplitAPIVersion = utils.getTrafficSplitAPIVersion(kubectl); - const trafficSplitObjectJson = `{ - "apiVersion": "${trafficSplitAPIVersion}", - "kind": "TrafficSplit", - "metadata": { - "name": "%s" - }, - "spec": { - "backends": [ - { - "service": "%s", - "weight": "%sm" - }, - { - "service": "%s", - "weight": "%sm" - }, - { - "service": "%s", - "weight": "%sm" - } - ], - "service": "%s" - } - }`; - - const trafficSplitObject = util.format(trafficSplitObjectJson, getTrafficSplitResourceName(name), canaryDeploymentHelper.getStableResourceName(name), stableWeight, canaryDeploymentHelper.getBaselineResourceName(name), baselineWeight, canaryDeploymentHelper.getCanaryResourceName(name), canaryWeight, name); - return trafficSplitObject; -} - -function getTrafficSplitResourceName(name: string) { - return name + TRAFFIC_SPLIT_OBJECT_NAME_SUFFIX; -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/StringComparison.ts b/_generated/KubernetesManifestV0_Node16/src/utils/StringComparison.ts deleted file mode 100644 index 0cb0ee23d07e..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/StringComparison.ts +++ /dev/null @@ -1,25 +0,0 @@ -export enum StringComparer { - Ordinal, - OrdinalIgnoreCase, -} - -export function isEqual(str1: string, str2: string, stringComparer: StringComparer): boolean { - - if (str1 == null && str2 == null) { - return true; - } - - if (str1 == null) { - return false; - } - - if (str2 == null) { - return false; - } - - if (stringComparer == StringComparer.OrdinalIgnoreCase) { - return str1.toUpperCase() === str2.toUpperCase(); - } else { - return str1 === str2; - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/installers.ts b/_generated/KubernetesManifestV0_Node16/src/utils/installers.ts deleted file mode 100644 index e8201bcf111c..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/installers.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as os from 'os'; -import * as toolLib from 'azure-pipelines-tool-lib/tool'; -import * as tl from 'azure-pipelines-task-lib/task'; -import * as path from 'path'; -import * as fs from 'fs'; - -export abstract class Installer { - public checkIfExists: () => string; // Return empty string if it doesn't exist - public install: () => Promise; - protected getExecutableExtension () { - switch (os.type()) { - case 'Windows_NT': - return `.exe`; - default: - return ``; - } - } -} - -export class KomposeInstaller extends Installer { - public checkIfExists = () => { - try { - const toolPath = tl.which(this.toolName, true); - return toolPath; - } catch (ex) { - // Finding in tool lib cache - const toolPath = toolLib.findLocalTool(this.toolName, this.defaultVersion); - if (toolPath) { - return path.join(toolPath, this.tool); - } - return ''; - } - } - - public install = async (): Promise => { - let toolPath = await toolLib.downloadTool(this.getDownloadUrl(), this.toolName); - const cachedFolderPath = await toolLib.cacheFile(toolPath, this.tool, this.toolName, this.defaultVersion); - toolPath = path.join(cachedFolderPath, this.tool); - fs.chmodSync(toolPath, 0o100); // execute/search by owner permissions to the tool - return path.join(cachedFolderPath, this.tool); - } - - private getDownloadUrl(): string { - switch (os.type()) { - case 'Linux': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-linux-amd64`; - case 'Darwin': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-darwin-amd64`; - case 'Windows_NT': - return `https://github.com/kubernetes/kompose/releases/download/${this.defaultVersion}/kompose-windows-amd64.exe`; - default: - throw Error('Unknown OS type'); - } - } - - public defaultVersion: string = 'v1.18.0'; - public toolName: string = 'kompose'; - public tool: string = `${this.toolName}${this.getExecutableExtension()}`; -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/src/utils/utilities.ts b/_generated/KubernetesManifestV0_Node16/src/utils/utilities.ts deleted file mode 100644 index 5e755a2ceddb..000000000000 --- a/_generated/KubernetesManifestV0_Node16/src/utils/utilities.ts +++ /dev/null @@ -1,158 +0,0 @@ -'use strict'; - -import * as tl from 'azure-pipelines-task-lib/task'; -import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner'; -import * as kubectlutility from 'azure-pipelines-tasks-kubernetes-common/kubectlutility'; -import { Kubectl } from 'azure-pipelines-tasks-kubernetes-common/kubectl-object-model'; -import { pipelineAnnotations } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconstants'; -import { KubernetesConnection } from 'azure-pipelines-tasks-kubernetes-common/kubernetesconnection'; -import * as filehelper from './FileHelper'; - -export function getManifestFiles(manifestFilePaths: string | string[]): string[] { - if (!manifestFilePaths) { - tl.debug('file input is not present'); - return null; - } - - const files = tl.findMatch(tl.getVariable('System.DefaultWorkingDirectory') || process.cwd(), manifestFilePaths); - return files; -} - -export function getConnection(): KubernetesConnection { - const kubernetesServiceConnection = tl.getInput('kubernetesServiceConnection', true); - const tempPath = filehelper.getNewUserDirPath(); - const connection = new KubernetesConnection(kubernetesServiceConnection, tempPath); - return connection; -} - -export async function getKubectl(): Promise { - try { - return Promise.resolve(tl.which('kubectl', true)); - } catch (ex) { - return kubectlutility.downloadKubectl(await kubectlutility.getStableKubectlVersion()); - } -} - -export function createKubectlArgs(kind: string, names: Set): string { - let args = ''; - if (!!kind) { - args = args + kind; - } - - if (!!names && names.size > 0) { - args = args + ' ' + Array.from(names.values()).join(' '); - } - - return args; -} - -export function getDeleteCmdArgs(argsPrefix: string, inputArgs: string): string { - let args = ''; - - if (!!argsPrefix && argsPrefix.length > 0) { - args = argsPrefix; - } - - if (!!inputArgs && inputArgs.length > 0) { - if (args.length > 0) { - args = args + ' '; - } - - args = args + inputArgs; - } - - return args; -} - -export function checkForErrors(execResults: IExecSyncResult[], warnIfError?: boolean) { - if (execResults.length !== 0) { - let stderr = ''; - execResults.forEach(result => { - if (result.stderr) { - if (result.code !== 0) { - stderr += result.stderr + '\n'; - } else { - tl.warning(result.stderr); - } - } - }); - if (stderr.length > 0) { - if (!!warnIfError) { - tl.warning(stderr.trim()); - } else { - throw new Error(stderr.trim()); - } - } - } -} - -export function annotateChildPods(kubectl: Kubectl, resourceType: string, resourceName: string, allPods): IExecSyncResult[] { - const commandExecutionResults = []; - let owner = resourceName; - if (resourceType.toLowerCase().indexOf('deployment') > -1) { - owner = kubectl.getNewReplicaSet(resourceName); - } - - if (!!allPods && !!allPods.items && allPods.items.length > 0) { - allPods.items.forEach((pod) => { - const owners = pod.metadata.ownerReferences; - if (!!owners) { - owners.forEach(ownerRef => { - if (ownerRef.name === owner) { - commandExecutionResults.push(kubectl.annotate('pod', pod.metadata.name, pipelineAnnotations, true)); - } - }); - } - }); - } - - return commandExecutionResults; -} - -/* - For example, - currentString: `image: "example/example-image"` - imageName: `example/example-image` - imageNameWithNewTag: `example/example-image:identifiertag` - - This substituteImageNameInSpecFile function would return - return Value: `image: "example/example-image:identifiertag"` -*/ - -export function substituteImageNameInSpecFile(currentString: string, imageName: string, imageNameWithNewTag: string) { - if (currentString.indexOf(imageName) < 0) { - tl.debug(`No occurence of replacement token: ${imageName} found`); - return currentString; - } - - return currentString.split('\n').reduce((acc, line) => { - const imageKeyword = line.match(/^ *image:/); - if (imageKeyword) { - let [currentImageName, currentImageTag] = line - .substring(imageKeyword[0].length) // consume the line from keyword onwards - .trim() - .replace(/[',"]/g, '') // replace allowed quotes with nothing - .split(':'); - - if (!currentImageTag && currentImageName.indexOf(' ') > 0) { - currentImageName = currentImageName.split(' ')[0]; // Stripping off comments - } - - if (currentImageName === imageName) { - return acc + `${imageKeyword[0]} ${imageNameWithNewTag}\n`; - } - } - - return acc + line + '\n'; - }, ''); -} - -export function getTrafficSplitAPIVersion(kubectl: Kubectl) { - const result = kubectl.executeCommand('api-versions'); - const trafficSplitAPIVersion = result.stdout.split('\n').find(version => version.startsWith('split.smi-spec.io')); - if (trafficSplitAPIVersion == null || typeof trafficSplitAPIVersion == 'undefined') { - throw new Error(tl.loc('UnableToCreateTrafficSplitManifestFile', 'Could not find a valid api version for TrafficSplit object')); - } - tl.debug("api-version: " + trafficSplitAPIVersion); - return trafficSplitAPIVersion; -} diff --git a/_generated/KubernetesManifestV0_Node16/task.json b/_generated/KubernetesManifestV0_Node16/task.json deleted file mode 100644 index f411b4773dbd..000000000000 --- a/_generated/KubernetesManifestV0_Node16/task.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "id": "DEE316A2-586F-4DEF-BE79-488A1F503DFE", - "name": "KubernetesManifest", - "friendlyName": "Deploy to Kubernetes", - "description": "Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts", - "helpUrl": "https://aka.ms/azpipes-k8s-manifest-tsg", - "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=851275) or [see the Kubernetes documentation](https://kubernetes.io/docs/home/)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 0, - "Minor": 226, - "Patch": 0 - }, - "demands": [], - "groups": [], - "inputs": [ - { - "name": "action", - "type": "pickList", - "label": "Action", - "required": false, - "defaultValue": "deploy", - "options": { - "bake": "bake", - "createSecret": "create secret", - "delete": "delete", - "deploy": "deploy", - "patch": "patch", - "promote": "promote", - "scale": "scale", - "reject": "reject" - }, - "helpMarkDown": "Choose the action to be performed." - }, - { - "name": "kubernetesServiceConnection", - "type": "connectedService:kubernetes", - "label": "Kubernetes service connection", - "helpMarkDown": "Select a Kubernetes service connection.", - "visibleRule": "action != bake", - "required": true - }, - { - "name": "namespace", - "type": "string", - "label": "Namespace", - "required": false, - "defaultValue": "", - "helpMarkDown": "Sets the namespace for the commands by using the –namespace flag. If the namespace is not provided, the commands will run in the default namespace." - }, - { - "name": "strategy", - "type": "pickList", - "label": "Strategy", - "required": false, - "defaultValue": "none", - "options": { - "canary": "Canary", - "none": "None" - }, - "helpMarkDown": "Deployment strategy to be used", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "trafficSplitMethod", - "type": "pickList", - "label": "Traffic split method", - "required": false, - "defaultValue": "pod", - "options": { - "pod": "Pod", - "smi": "SMI" - }, - "helpMarkDown": "Traffic split method to be used", - "visibleRule": "strategy = canary" - }, - { - "name": "percentage", - "type": "string", - "label": "Percentage", - "required": true, - "helpMarkDown": "Percentage of traffic redirect to canary deployment", - "defaultValue": 0, - "visibleRule": "strategy = Canary && action = deploy", - "validation": { - "expression": "isMatch(value, '(^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$)','Multiline')", - "message": "Enter valid percentage value i.e between 0 to 100." - } - }, - { - "name": "baselineAndCanaryReplicas", - "type": "string", - "label": "Baseline and canary replicas", - "required": true, - "helpMarkDown": "Baseline and canary replicas count", - "defaultValue": 1, - "visibleRule": "strategy = Canary && action = deploy && trafficSplitMethod = SMI", - "validation": { - "expression": "isMatch(value, '(^([0-9]|([1-9]\\d*))$)','Multiline')", - "message": "Enter valid value for baseline and canary replica count." - } - }, - { - "name": "manifests", - "type": "filePath", - "label": "Manifests", - "required": true, - "defaultValue": "", - "helpMarkDown": "Manifests to deploy", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "containers", - "type": "multiLine", - "label": "Containers", - "required": false, - "defaultValue": "", - "helpMarkDown": "Containers", - "visibleRule": "action = deploy || action = promote || action = bake" - }, - { - "name": "imagePullSecrets", - "type": "multiLine", - "label": "ImagePullSecrets", - "required": false, - "defaultValue": "", - "helpMarkDown": "ImagePullSecret to pull image from private registry", - "visibleRule": "action = deploy || action = promote" - }, - { - "name": "renderType", - "type": "pickList", - "label": "Render Engine", - "required": false, - "defaultValue": "helm", - "visibleRule": "action = bake", - "options": { - "helm": "Helm", - "kompose": "Kompose", - "kustomize": "Kustomize" - }, - "helpMarkDown": "Tool to use for generating manifest files." - }, - { - "name": "dockerComposeFile", - "type": "filePath", - "label": "Path to docker compose file", - "required": true, - "defaultValue": "", - "visibleRule": "action = bake && renderType = kompose", - "helpMarkDown": "docker-compose file path" - }, - { - "name": "helmChart", - "type": "filePath", - "label": "Helm Chart", - "required": true, - "defaultValue": "", - "helpMarkDown": "Helm chart path to bake", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "releaseName", - "type": "string", - "label": "Helm Release Name", - "required": false, - "defaultValue": "", - "helpMarkDown": "Helm release name to use", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrideFiles", - "type": "multiLine", - "label": "Override Files", - "required": false, - "defaultValue": "", - "helpMarkDown": "Override files to set", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrides", - "type": "multiLine", - "label": "Overrides", - "required": false, - "defaultValue": "", - "helpMarkDown": "Override values to set", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "kustomizationPath", - "type": "filePath", - "label": "Kustomization Path", - "required": false, - "visibleRule": "action = bake && renderType = kustomize", - "defaultValue": "", - "helpMarkDown": "The argument must be the path to the directory containing the file, or a git repository URL with a path suffix specifying same with respect to the repository root." - }, - { - "name": "resourceToPatch", - "type": "radio", - "label": "Resource to patch", - "required": true, - "defaultValue": "file", - "options": { - "file": "file", - "name": "name" - }, - "helpMarkDown": "to identify the resource", - "visibleRule": "action = patch" - }, - { - "name": "resourceFileToPatch", - "type": "filePath", - "label": "File path", - "required": true, - "defaultValue": "", - "helpMarkDown": "Path to the file used for patch", - "visibleRule": "action = patch && resourceToPatch = file" - }, - { - "name": "kind", - "type": "pickList", - "label": "Kind", - "required": true, - "defaultValue": "", - "options": { - "deployment": "deployment", - "replicaset": "replicaset", - "statefulset": "statefulset" - }, - "helpMarkDown": "Kind of K8s object; deployment, replicaSet etc.", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "name", - "type": "string", - "label": "Name", - "required": true, - "defaultValue": "", - "helpMarkDown": "Name of the k8s object", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "replicas", - "type": "string", - "label": "Replica count", - "required": true, - "defaultValue": "", - "helpMarkDown": "Number of replicas to scale to", - "visibleRule": "action = scale" - }, - { - "name": "mergeStrategy", - "type": "pickList", - "label": "Merge Strategy", - "required": true, - "defaultValue": "strategic", - "options": { - "json": "json", - "merge": "merge", - "strategic": "strategic" - }, - "helpMarkDown": "The type of patch being provided; one of [json merge strategic]", - "visibleRule": "action = patch" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Arguments for `kubectl delete` command", - "visibleRule": "action = delete" - }, - { - "name": "patch", - "type": "string", - "label": "Patch", - "required": true, - "helpMarkDown": "Contents of patch", - "visibleRule": "action = patch" - }, - { - "name": "secretType", - "type": "pickList", - "label": "Type of secret", - "defaultValue": "dockerRegistry", - "required": true, - "visibleRule": "action = createSecret", - "options": { - "dockerRegistry": "dockerRegistry", - "generic": "generic" - }, - "helpMarkDown": "Create/update a generic or docker imagepullsecret. Select dockerRegistry to create/update the imagepullsecret of the selected registry. An imagePullSecret is a way to pass a secret that contains a container registry password to the Kubelet so it can pull a private image on behalf of your Pod." - }, - { - "name": "secretName", - "type": "string", - "label": "Secret name", - "required": false, - "visibleRule": "action = createSecret", - "defaultValue": "", - "helpMarkDown": "Name of the secret. You can use this secret name in the Kubernetes YAML configuration file." - }, - { - "name": "secretArguments", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2", - "editorExtension": "ms.vss-services-azure.kubernetes-parameters-grid" - }, - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Specify keys and literal values to insert in secret.For example, --from-literal=key1=value1 --from-literal=key2=\"top secret\".", - "visibleRule": "action = createSecret && secretType = generic" - }, - { - "name": "dockerRegistryEndpoint", - "type": "connectedService:dockerregistry", - "label": "Docker registry service connection", - "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", - "visibleRule": "action = createSecret && secretType = dockerRegistry" - }, - { - "name": "rolloutStatusTimeout", - "type": "string", - "label": "Timeout for rollout status", - "defaultValue": "0", - "required": false, - "helpMarkDown": "The length of time (in seconds) to wait before ending watch on rollout status", - "visibleRule": "action = deploy || action = patch || action = scale || action = promote", - "validation": { - "expression": "isMatch(value, '(^\\d*$)','Multiline')", - "message": "Enter a valid value for timeout." - } - } - ], - "dataSourceBindings": [], - "instanceNameFormat": "$(action)", - "outputVariables": [ - { - "name": "manifestsBundle", - "description": "The location of the manifest bundles created by bake action" - } - ], - "execution": { - "Node10": { - "target": "src//run.js" - }, - "Node16": { - "target": "src//run.js", - "argumentFormat": "" - } - }, - "messages": { - "DownloadPathForStableTxt": "Download path for stable.txt: %s", - "DownloadKubeCtlFailed": "Can not download the kubectl client of version %s. Check if the version is correct https://github.com/kubernetes/kubernetes/releases", - "DownloadStableVersionFailed": "Can not download kubernetes stable version file from %s. Falling back to %s", - "DockerComposeFilePathNotSupplied": "docker-compose file path not supplied", - "UsingLatestStableVersion": "Invalid version 1.7 specified in Version Spec input. Using latest stable version instead. Check for correct versions https://github.com/kubernetes/kubernetes/releases", - "NotAValidSemverVersion": "Version not specified in correct format. E.g: 1.8.2, v1.8.2, 2.8.2, v2.8.2.", - "ManifestFileNotFound": "No manifest file(s) matching %s was found.", - "KubernetesServiceConnectionNotFound": "Kubernetes service connection details not found.", - "UnknownRenderType": "Unknown render engine", - "ResourceKindNotDefined": "Resource kind is null", - "NullInputObject": "Input object is null.", - "ArgumentsInputNotSupplied": "Arguments are not supplied.", - "NullInputObjectMetadata": "Input object metadata is null.", - "InvalidRejectActionDeploymentStrategy": "Reject action works only with strategy: canary", - "InvalidPromotetActionDeploymentStrategy": "Promote action works only with strategy: canary", - "AllContainersNotInReadyState": "All the containers are not in a ready state.", - "CouldNotDeterminePodStatus": "Could not determine the pod's status due to the error: %s", - "KubectlShouldBeUpgraded": "kubectl client version equal to v1.14 or higher is required to use kustomize features.", - "CouldNotDetermineServiceStatus": "Could not determine the service %s status due to the error: %s", - "waitForServiceIpAssignment": "Waiting for service %s external IP assignment", - "waitForServiceIpAssignmentTimedOut": "Wait for service %s external IP assignment timed out", - "ServiceExternalIP": "service %s external IP is %s", - "UnableToCreateTrafficSplitManifestFile": "Unable to create TrafficSplit manifest file. %s", - "StableSpecSelectorNotExist": "Resource %s not deployed using SMI canary deployment.", - "InvalidPercentage": "Invalid value for percentage.", - "InvalidBaselineAndCanaryReplicas": "Invalid value for replica count.", - "InvalidTimeoutValue": "Invalid value for timeout. Enter a valid number.", - "RolloutStatusTimedout": "Rollout status check failed.", - "EnvironmentLink": "For more information, go to %s" - }, - "_buildConfigMapping": { - "Default": "0.226.1", - "Node16-225": "0.226.0" - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/task.loc.json b/_generated/KubernetesManifestV0_Node16/task.loc.json deleted file mode 100644 index 9020470ec2c4..000000000000 --- a/_generated/KubernetesManifestV0_Node16/task.loc.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "id": "DEE316A2-586F-4DEF-BE79-488A1F503DFE", - "name": "KubernetesManifest", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "helpUrl": "https://aka.ms/azpipes-k8s-manifest-tsg", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 0, - "Minor": 226, - "Patch": 0 - }, - "demands": [], - "groups": [], - "inputs": [ - { - "name": "action", - "type": "pickList", - "label": "ms-resource:loc.input.label.action", - "required": false, - "defaultValue": "deploy", - "options": { - "bake": "bake", - "createSecret": "create secret", - "delete": "delete", - "deploy": "deploy", - "patch": "patch", - "promote": "promote", - "scale": "scale", - "reject": "reject" - }, - "helpMarkDown": "ms-resource:loc.input.help.action" - }, - { - "name": "kubernetesServiceConnection", - "type": "connectedService:kubernetes", - "label": "ms-resource:loc.input.label.kubernetesServiceConnection", - "helpMarkDown": "ms-resource:loc.input.help.kubernetesServiceConnection", - "visibleRule": "action != bake", - "required": true - }, - { - "name": "namespace", - "type": "string", - "label": "ms-resource:loc.input.label.namespace", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.namespace" - }, - { - "name": "strategy", - "type": "pickList", - "label": "ms-resource:loc.input.label.strategy", - "required": false, - "defaultValue": "none", - "options": { - "canary": "Canary", - "none": "None" - }, - "helpMarkDown": "ms-resource:loc.input.help.strategy", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "trafficSplitMethod", - "type": "pickList", - "label": "ms-resource:loc.input.label.trafficSplitMethod", - "required": false, - "defaultValue": "pod", - "options": { - "pod": "Pod", - "smi": "SMI" - }, - "helpMarkDown": "ms-resource:loc.input.help.trafficSplitMethod", - "visibleRule": "strategy = canary" - }, - { - "name": "percentage", - "type": "string", - "label": "ms-resource:loc.input.label.percentage", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.percentage", - "defaultValue": 0, - "visibleRule": "strategy = Canary && action = deploy", - "validation": { - "expression": "isMatch(value, '(^(([0-9]|[1-9][0-9]|100)(\\.\\d*)?)$)','Multiline')", - "message": "Enter valid percentage value i.e between 0 to 100." - } - }, - { - "name": "baselineAndCanaryReplicas", - "type": "string", - "label": "ms-resource:loc.input.label.baselineAndCanaryReplicas", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.baselineAndCanaryReplicas", - "defaultValue": 1, - "visibleRule": "strategy = Canary && action = deploy && trafficSplitMethod = SMI", - "validation": { - "expression": "isMatch(value, '(^([0-9]|([1-9]\\d*))$)','Multiline')", - "message": "Enter valid value for baseline and canary replica count." - } - }, - { - "name": "manifests", - "type": "filePath", - "label": "ms-resource:loc.input.label.manifests", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.manifests", - "visibleRule": "action = deploy || action = promote || action = reject" - }, - { - "name": "containers", - "type": "multiLine", - "label": "ms-resource:loc.input.label.containers", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.containers", - "visibleRule": "action = deploy || action = promote || action = bake" - }, - { - "name": "imagePullSecrets", - "type": "multiLine", - "label": "ms-resource:loc.input.label.imagePullSecrets", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.imagePullSecrets", - "visibleRule": "action = deploy || action = promote" - }, - { - "name": "renderType", - "type": "pickList", - "label": "ms-resource:loc.input.label.renderType", - "required": false, - "defaultValue": "helm", - "visibleRule": "action = bake", - "options": { - "helm": "Helm", - "kompose": "Kompose", - "kustomize": "Kustomize" - }, - "helpMarkDown": "ms-resource:loc.input.help.renderType" - }, - { - "name": "dockerComposeFile", - "type": "filePath", - "label": "ms-resource:loc.input.label.dockerComposeFile", - "required": true, - "defaultValue": "", - "visibleRule": "action = bake && renderType = kompose", - "helpMarkDown": "ms-resource:loc.input.help.dockerComposeFile" - }, - { - "name": "helmChart", - "type": "filePath", - "label": "ms-resource:loc.input.label.helmChart", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.helmChart", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "releaseName", - "type": "string", - "label": "ms-resource:loc.input.label.releaseName", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.releaseName", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrideFiles", - "type": "multiLine", - "label": "ms-resource:loc.input.label.overrideFiles", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.overrideFiles", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "overrides", - "type": "multiLine", - "label": "ms-resource:loc.input.label.overrides", - "required": false, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.overrides", - "visibleRule": "action = bake && renderType = helm" - }, - { - "name": "kustomizationPath", - "type": "filePath", - "label": "ms-resource:loc.input.label.kustomizationPath", - "required": false, - "visibleRule": "action = bake && renderType = kustomize", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.kustomizationPath" - }, - { - "name": "resourceToPatch", - "type": "radio", - "label": "ms-resource:loc.input.label.resourceToPatch", - "required": true, - "defaultValue": "file", - "options": { - "file": "file", - "name": "name" - }, - "helpMarkDown": "ms-resource:loc.input.help.resourceToPatch", - "visibleRule": "action = patch" - }, - { - "name": "resourceFileToPatch", - "type": "filePath", - "label": "ms-resource:loc.input.label.resourceFileToPatch", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.resourceFileToPatch", - "visibleRule": "action = patch && resourceToPatch = file" - }, - { - "name": "kind", - "type": "pickList", - "label": "ms-resource:loc.input.label.kind", - "required": true, - "defaultValue": "", - "options": { - "deployment": "deployment", - "replicaset": "replicaset", - "statefulset": "statefulset" - }, - "helpMarkDown": "ms-resource:loc.input.help.kind", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "name", - "type": "string", - "label": "ms-resource:loc.input.label.name", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.name", - "visibleRule": "action = scale || resourceToPatch = name" - }, - { - "name": "replicas", - "type": "string", - "label": "ms-resource:loc.input.label.replicas", - "required": true, - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.replicas", - "visibleRule": "action = scale" - }, - { - "name": "mergeStrategy", - "type": "pickList", - "label": "ms-resource:loc.input.label.mergeStrategy", - "required": true, - "defaultValue": "strategic", - "options": { - "json": "json", - "merge": "merge", - "strategic": "strategic" - }, - "helpMarkDown": "ms-resource:loc.input.help.mergeStrategy", - "visibleRule": "action = patch" - }, - { - "name": "arguments", - "type": "string", - "label": "ms-resource:loc.input.label.arguments", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.arguments", - "visibleRule": "action = delete" - }, - { - "name": "patch", - "type": "string", - "label": "ms-resource:loc.input.label.patch", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.patch", - "visibleRule": "action = patch" - }, - { - "name": "secretType", - "type": "pickList", - "label": "ms-resource:loc.input.label.secretType", - "defaultValue": "dockerRegistry", - "required": true, - "visibleRule": "action = createSecret", - "options": { - "dockerRegistry": "dockerRegistry", - "generic": "generic" - }, - "helpMarkDown": "ms-resource:loc.input.help.secretType" - }, - { - "name": "secretName", - "type": "string", - "label": "ms-resource:loc.input.label.secretName", - "required": false, - "visibleRule": "action = createSecret", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.secretName" - }, - { - "name": "secretArguments", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2", - "editorExtension": "ms.vss-services-azure.kubernetes-parameters-grid" - }, - "label": "ms-resource:loc.input.label.secretArguments", - "defaultValue": "", - "helpMarkDown": "ms-resource:loc.input.help.secretArguments", - "visibleRule": "action = createSecret && secretType = generic" - }, - { - "name": "dockerRegistryEndpoint", - "type": "connectedService:dockerregistry", - "label": "ms-resource:loc.input.label.dockerRegistryEndpoint", - "helpMarkDown": "ms-resource:loc.input.help.dockerRegistryEndpoint", - "visibleRule": "action = createSecret && secretType = dockerRegistry" - }, - { - "name": "rolloutStatusTimeout", - "type": "string", - "label": "ms-resource:loc.input.label.rolloutStatusTimeout", - "defaultValue": "0", - "required": false, - "helpMarkDown": "ms-resource:loc.input.help.rolloutStatusTimeout", - "visibleRule": "action = deploy || action = patch || action = scale || action = promote", - "validation": { - "expression": "isMatch(value, '(^\\d*$)','Multiline')", - "message": "Enter a valid value for timeout." - } - } - ], - "dataSourceBindings": [], - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "outputVariables": [ - { - "name": "manifestsBundle", - "description": "The location of the manifest bundles created by bake action" - } - ], - "execution": { - "Node10": { - "target": "src//run.js" - }, - "Node16": { - "target": "src//run.js", - "argumentFormat": "" - } - }, - "messages": { - "DownloadPathForStableTxt": "ms-resource:loc.messages.DownloadPathForStableTxt", - "DownloadKubeCtlFailed": "ms-resource:loc.messages.DownloadKubeCtlFailed", - "DownloadStableVersionFailed": "ms-resource:loc.messages.DownloadStableVersionFailed", - "DockerComposeFilePathNotSupplied": "ms-resource:loc.messages.DockerComposeFilePathNotSupplied", - "UsingLatestStableVersion": "ms-resource:loc.messages.UsingLatestStableVersion", - "NotAValidSemverVersion": "ms-resource:loc.messages.NotAValidSemverVersion", - "ManifestFileNotFound": "ms-resource:loc.messages.ManifestFileNotFound", - "KubernetesServiceConnectionNotFound": "ms-resource:loc.messages.KubernetesServiceConnectionNotFound", - "UnknownRenderType": "ms-resource:loc.messages.UnknownRenderType", - "ResourceKindNotDefined": "ms-resource:loc.messages.ResourceKindNotDefined", - "NullInputObject": "ms-resource:loc.messages.NullInputObject", - "ArgumentsInputNotSupplied": "ms-resource:loc.messages.ArgumentsInputNotSupplied", - "NullInputObjectMetadata": "ms-resource:loc.messages.NullInputObjectMetadata", - "InvalidRejectActionDeploymentStrategy": "ms-resource:loc.messages.InvalidRejectActionDeploymentStrategy", - "InvalidPromotetActionDeploymentStrategy": "ms-resource:loc.messages.InvalidPromotetActionDeploymentStrategy", - "AllContainersNotInReadyState": "ms-resource:loc.messages.AllContainersNotInReadyState", - "CouldNotDeterminePodStatus": "ms-resource:loc.messages.CouldNotDeterminePodStatus", - "KubectlShouldBeUpgraded": "ms-resource:loc.messages.KubectlShouldBeUpgraded", - "CouldNotDetermineServiceStatus": "ms-resource:loc.messages.CouldNotDetermineServiceStatus", - "waitForServiceIpAssignment": "ms-resource:loc.messages.waitForServiceIpAssignment", - "waitForServiceIpAssignmentTimedOut": "ms-resource:loc.messages.waitForServiceIpAssignmentTimedOut", - "ServiceExternalIP": "ms-resource:loc.messages.ServiceExternalIP", - "UnableToCreateTrafficSplitManifestFile": "ms-resource:loc.messages.UnableToCreateTrafficSplitManifestFile", - "StableSpecSelectorNotExist": "ms-resource:loc.messages.StableSpecSelectorNotExist", - "InvalidPercentage": "ms-resource:loc.messages.InvalidPercentage", - "InvalidBaselineAndCanaryReplicas": "ms-resource:loc.messages.InvalidBaselineAndCanaryReplicas", - "InvalidTimeoutValue": "ms-resource:loc.messages.InvalidTimeoutValue", - "RolloutStatusTimedout": "ms-resource:loc.messages.RolloutStatusTimedout", - "EnvironmentLink": "ms-resource:loc.messages.EnvironmentLink" - }, - "_buildConfigMapping": { - "Default": "0.226.1", - "Node16-225": "0.226.0" - } -} \ No newline at end of file diff --git a/_generated/KubernetesManifestV0_Node16/tsconfig.json b/_generated/KubernetesManifestV0_Node16/tsconfig.json deleted file mode 100644 index 79a868c8d1e3..000000000000 --- a/_generated/KubernetesManifestV0_Node16/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs" - }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/make-options.json b/make-options.json index ecccc9a23835..56d342e6c4dd 100644 --- a/make-options.json +++ b/make-options.json @@ -219,7 +219,6 @@ "AzureFunctionOnKubernetesV0", "AzureFunctionOnKubernetesV1", "UseDotNetV2", - "KubernetesManifestV0", "KubernetesManifestV1", "AzureVmssDeploymentV0", "AzureMysqlDeploymentV1",