diff --git a/Tasks/PackerBuildV1/_buildConfigs/Node20/package-lock.json b/Tasks/PackerBuildV1/_buildConfigs/Node20/package-lock.json index 151fa54c2bfa..c1efdc461f15 100644 --- a/Tasks/PackerBuildV1/_buildConfigs/Node20/package-lock.json +++ b/Tasks/PackerBuildV1/_buildConfigs/Node20/package-lock.json @@ -72,6 +72,15 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -196,6 +205,11 @@ "concat-map": "0.0.1" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -333,6 +347,33 @@ "safe-buffer": "^5.0.1" } }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, "form-data": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", @@ -368,6 +409,14 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -634,6 +683,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -647,6 +701,15 @@ "asap": "~2.0.6" } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -888,6 +951,15 @@ "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/Tasks/PackerBuildV1/_buildConfigs/Node20/package.json b/Tasks/PackerBuildV1/_buildConfigs/Node20/package.json index c2d6a7958a7c..1c825fb48f57 100644 --- a/Tasks/PackerBuildV1/_buildConfigs/Node20/package.json +++ b/Tasks/PackerBuildV1/_buildConfigs/Node20/package.json @@ -8,7 +8,8 @@ "azure-pipelines-task-lib": "^4.3.1", "azure-pipelines-tasks-azure-arm-rest": "3.221.2", "agent-base": "^6.0.2", - "decompress-zip": "^0.3.3" + "decompress-zip": "^0.3.3", + "extract-zip": "2.0.1" }, "devDependencies": { "typescript": "5.1.6" diff --git a/Tasks/PackerBuildV1/src/utilities.ts b/Tasks/PackerBuildV1/src/utilities.ts index ae34c77e12d0..9002381d5801 100644 --- a/Tasks/PackerBuildV1/src/utilities.ts +++ b/Tasks/PackerBuildV1/src/utilities.ts @@ -5,7 +5,11 @@ var fs = require('fs'); import * as os from "os"; import * as path from "path"; import * as stream from "stream"; +#if NODE20 +import * as extract from 'extract-zip' +#else var DecompressZip = require('decompress-zip'); +#endif import * as tl from "azure-pipelines-task-lib/task"; // copy source file to destination folder. destination folder will be created if it does not exists, otherwise its contents will be overwritten. @@ -53,7 +57,14 @@ export async function unzip(zipLocation, unzipLocation): Promise { if(tl.exist(unzipLocation)) { tl.rmRF(unzipLocation); } - +#if NODE20 + tl.debug(`Using extract-zip package for extracting archive`); + extract(zipLocation, { dir: unzipLocation }).then(() => { + resolve("true"); + }).catch((error) => { + reject(error); + }); +#else var unzipper = new DecompressZip(zipLocation); tl.debug('extracting ' + zipLocation + ' to ' + unzipLocation); unzipper.on('error', err => reject(err)); @@ -65,6 +76,7 @@ export async function unzip(zipLocation, unzipLocation): Promise { unzipper.extract({ path: unzipLocation }); +#endif }); return finishPromise; diff --git a/Tasks/PackerBuildV1/task.json b/Tasks/PackerBuildV1/task.json index db88f1f0f374..bc855ddb3583 100644 --- a/Tasks/PackerBuildV1/task.json +++ b/Tasks/PackerBuildV1/task.json @@ -14,7 +14,7 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, + "Minor": 236, "Patch": 0 }, "demands": [], diff --git a/Tasks/PackerBuildV1/task.loc.json b/Tasks/PackerBuildV1/task.loc.json index b75954661d8b..2c4dc892f645 100644 --- a/Tasks/PackerBuildV1/task.loc.json +++ b/Tasks/PackerBuildV1/task.loc.json @@ -14,7 +14,7 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, + "Minor": 236, "Patch": 0 }, "demands": [], diff --git a/_generated/PackerBuildV1.versionmap.txt b/_generated/PackerBuildV1.versionmap.txt index d79c072dd616..60411307c91b 100644 --- a/_generated/PackerBuildV1.versionmap.txt +++ b/_generated/PackerBuildV1.versionmap.txt @@ -1,2 +1,2 @@ -Default|1.231.0 -Node20_229_6|1.231.2 +Default|1.236.0 +Node20_229_6|1.236.1 diff --git a/_generated/PackerBuildV1/DefaultTemplates/custom.linux.template.json b/_generated/PackerBuildV1/DefaultTemplates/custom.linux.template.json new file mode 100644 index 000000000000..f08724fc83c8 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/custom.linux.template.json @@ -0,0 +1,69 @@ +{ + "variables": { + "client_id": "{{env `client_id`}}", + "client_secret": "{{env `client_secret`}}", + "subscription_id": "{{env `subscription_id`}}", + "tenant_id": "{{env `tenant_id`}}", + "object_id": "{{env `object_id`}}", + "resource_group": "{{env `resource_group`}}", + "storage_account": "{{env `storage_account`}}", + "image_url": "{{env `image_url`}}", + "location": "{{env `location`}}", + "script_relative_path": "{{env `script_relative_path`}}", + "script_arguments": "{{env `script_arguments`}}", + "package_path": "{{env `package_path`}}", + "package_name": "{{env `package_name`}}", + "capture_name_prefix": "{{env `capture_name_prefix`}}", + "skip_clean": "{{env `skip_clean`}}" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "resource_group_name": "{{user `resource_group`}}", + "storage_account": "{{user `storage_account`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Linux", + "image_url": "{{user `image_url`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + + "capture_container_name": "vsts-buildimagetask", + "capture_name_prefix": "{{user `capture_name_prefix`}}" + }], + "provisioners": [{ + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "rm -rf /deployTemp", + "mkdir /deployTemp", + "chmod 777 /deployTemp" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "/deployTemp/{{user `package_name`}}" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "cd /deployTemp", + "ls", + "chmod +x /deployTemp/{{user `package_name`}}/{{user `script_relative_path`}}", + "/deployTemp/{{user `package_name`}}/{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync" + ], + "skip_clean": "{{user `skip_clean`}}" + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/custom.managed.linux.template.json b/_generated/PackerBuildV1/DefaultTemplates/custom.managed.linux.template.json new file mode 100644 index 000000000000..7816c270e6a5 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/custom.managed.linux.template.json @@ -0,0 +1,68 @@ +{ + "variables": { + "client_id": "{{env `client_id`}}", + "client_secret": "{{env `client_secret`}}", + "subscription_id": "{{env `subscription_id`}}", + "tenant_id": "{{env `tenant_id`}}", + "object_id": "{{env `object_id`}}", + "resource_group": "{{env `resource_group`}}", + "storage_account": "{{env `storage_account`}}", + "image_url": "{{env `image_url`}}", + "location": "{{env `location`}}", + "script_relative_path": "{{env `script_relative_path`}}", + "script_arguments": "{{env `script_arguments`}}", + "package_path": "{{env `package_path`}}", + "package_name": "{{env `package_name`}}", + "capture_name_prefix": "{{env `capture_name_prefix`}}", + "skip_clean": "{{env `skip_clean`}}", + "managed_image_name": "{{env `managed_image_name`}}" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "managed_image_resource_group_name": "{{user `resource_group`}}", + "managed_image_name": "{{user `managed_image_name`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Linux", + "image_url": "{{user `image_url`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2" + + }], + "provisioners": [{ + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "rm -rf /deployTemp", + "mkdir /deployTemp", + "chmod 777 /deployTemp" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "/deployTemp/{{user `package_name`}}" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "cd /deployTemp", + "ls", + "chmod +x /deployTemp/{{user `package_name`}}/{{user `script_relative_path`}}", + "/deployTemp/{{user `package_name`}}/{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync" + ], + "skip_clean": "{{user `skip_clean`}}" + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/custom.managed.windows.template.json b/_generated/PackerBuildV1/DefaultTemplates/custom.managed.windows.template.json new file mode 100644 index 000000000000..f713558f7c44 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/custom.managed.windows.template.json @@ -0,0 +1,68 @@ +{ + "variables": { + "client_id": "{{env `client_id`}}", + "client_secret": "{{env `client_secret`}}", + "subscription_id": "{{env `subscription_id`}}", + "tenant_id": "{{env `tenant_id`}}", + "object_id": "{{env `object_id`}}", + "resource_group": "{{env `resource_group`}}", + "storage_account": "{{env `storage_account`}}", + "image_url": "{{env `image_url`}}", + "location": "{{env `location`}}", + "script_relative_path": "{{env `script_relative_path`}}", + "script_arguments": "{{env `script_arguments`}}", + "package_path": "{{env `package_path`}}", + "package_name": "{{env `package_name`}}", + "capture_name_prefix": "{{env `capture_name_prefix`}}", + "managed_image_name": "{{env `managed_image_name`}}" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "managed_image_resource_group_name": "{{user `resource_group`}}", + "managed_image_name": "{{user `managed_image_name`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Windows", + "image_url": "{{user `image_url`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + + "communicator": "winrm", + "winrm_use_ssl": "true", + "winrm_insecure": "true", + "winrm_timeout": "15m", + "winrm_username": "packer" + + }], + "provisioners": [{ + "type": "windows-shell", + "inline": [ + "cmd /c \"if exist c:\\\\DeployTemp rd /s /q c:\\\\DeployTemp\"", + "cmd /c \"mkdir c:\\\\DeployTemp\"" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "c:\\DeployTemp" + }, + { + "type": "powershell", + "inline": [ + "cd \"C:\\DeployTemp\"", + "ls", + "C:\\DeployTemp\\{{user `package_name`}}\\{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "powershell", + "inline": [ + "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}", + "& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quit /quiet" + ] + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/custom.windows.template.json b/_generated/PackerBuildV1/DefaultTemplates/custom.windows.template.json new file mode 100644 index 000000000000..2e06f20d6ce8 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/custom.windows.template.json @@ -0,0 +1,69 @@ +{ + "variables": { + "client_id": "{{env `client_id`}}", + "client_secret": "{{env `client_secret`}}", + "subscription_id": "{{env `subscription_id`}}", + "tenant_id": "{{env `tenant_id`}}", + "object_id": "{{env `object_id`}}", + "resource_group": "{{env `resource_group`}}", + "storage_account": "{{env `storage_account`}}", + "image_url": "{{env `image_url`}}", + "location": "{{env `location`}}", + "script_relative_path": "{{env `script_relative_path`}}", + "script_arguments": "{{env `script_arguments`}}", + "package_path": "{{env `package_path`}}", + "package_name": "{{env `package_name`}}", + "capture_name_prefix": "{{env `capture_name_prefix`}}" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "resource_group_name": "{{user `resource_group`}}", + "storage_account": "{{user `storage_account`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Windows", + "image_url": "{{user `image_url`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + + "communicator": "winrm", + "winrm_use_ssl": "true", + "winrm_insecure": "true", + "winrm_timeout": "15m", + "winrm_username": "packer", + + "capture_container_name": "vsts-buildimagetask", + "capture_name_prefix": "{{user `capture_name_prefix`}}" + }], + "provisioners": [{ + "type": "windows-shell", + "inline": [ + "cmd /c \"if exist c:\\\\DeployTemp rd /s /q c:\\\\DeployTemp\"", + "cmd /c \"mkdir c:\\\\DeployTemp\"" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "c:\\DeployTemp" + }, + { + "type": "powershell", + "inline": [ + "cd \"C:\\DeployTemp\"", + "ls", + "C:\\DeployTemp\\{{user `package_name`}}\\{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "powershell", + "inline": [ + "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}", + "& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quit /quiet" + ] + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/default.linux.template.json b/_generated/PackerBuildV1/DefaultTemplates/default.linux.template.json new file mode 100644 index 000000000000..632285102f7f --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/default.linux.template.json @@ -0,0 +1,73 @@ +{ + "variables": { + "client_id": "", + "client_secret": "", + "subscription_id": "", + "tenant_id": "", + "object_id": "", + "resource_group": "", + "storage_account": "", + "image_publisher": "", + "image_offer": "", + "image_sku": "", + "location": "", + "script_relative_path": "", + "script_arguments": "", + "package_path": "", + "package_name": "", + "capture_name_prefix": "", + "skip_clean":"" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "resource_group_name": "{{user `resource_group`}}", + "storage_account": "{{user `storage_account`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Linux", + "image_publisher": "{{user `image_publisher`}}", + "image_offer": "{{user `image_offer`}}", + "image_sku": "{{user `image_sku`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + + "capture_container_name": "vsts-buildimagetask", + "capture_name_prefix": "{{user `capture_name_prefix`}}" + }], + "provisioners": [{ + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "rm -rf /deployTemp", + "mkdir /deployTemp", + "chmod 777 /deployTemp" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "/deployTemp/{{user `package_name`}}" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "cd /deployTemp", + "ls", + "chmod +x /deployTemp/{{user `package_name`}}/{{user `script_relative_path`}}", + "/deployTemp/{{user `package_name`}}/{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync" + ], + "skip_clean": "{{user `skip_clean`}}" + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/default.managed.linux.template.json b/_generated/PackerBuildV1/DefaultTemplates/default.managed.linux.template.json new file mode 100644 index 000000000000..e57a2c41ca89 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/default.managed.linux.template.json @@ -0,0 +1,70 @@ +{ + "variables": { + "client_id": "", + "client_secret": "", + "subscription_id": "", + "tenant_id": "", + "object_id": "", + "resource_group": "", + "storage_account": "", + "image_publisher": "", + "image_offer": "", + "image_sku": "", + "location": "", + "script_relative_path": "", + "script_arguments": "", + "package_path": "", + "package_name": "", + "capture_name_prefix": "", + "skip_clean": "", + "managed_image_name": "" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "managed_image_resource_group_name": "{{user `resource_group`}}", + "managed_image_name": "{{user `managed_image_name`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + "os_type": "Linux", + "image_publisher": "{{user `image_publisher`}}", + "image_offer": "{{user `image_offer`}}", + "image_sku": "{{user `image_sku`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2" + }], + "provisioners": [{ + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "rm -rf /deployTemp", + "mkdir /deployTemp", + "chmod 777 /deployTemp" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "/deployTemp/{{user `package_name`}}" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "cd /deployTemp", + "ls", + "chmod +x /deployTemp/{{user `package_name`}}/{{user `script_relative_path`}}", + "/deployTemp/{{user `package_name`}}/{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'", + "inline": [ + "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync" + ], + "skip_clean": "{{user `skip_clean`}}" + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/default.managed.windows.template.json b/_generated/PackerBuildV1/DefaultTemplates/default.managed.windows.template.json new file mode 100644 index 000000000000..4f8835230906 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/default.managed.windows.template.json @@ -0,0 +1,69 @@ +{ + "variables": { + "client_id": "", + "client_secret": "", + "subscription_id": "", + "tenant_id": "", + "object_id": "", + "resource_group": "", + "storage_account": "", + "image_publisher": "", + "image_offer": "", + "image_sku": "", + "location": "", + "script_relative_path": "", + "script_arguments": "", + "package_path": "", + "package_name": "", + "capture_name_prefix": "", + "managed_image_name": "" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "managed_image_resource_group_name": "{{user `resource_group`}}", + "managed_image_name": "{{user `managed_image_name`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + "os_type": "Windows", + "image_publisher": "{{user `image_publisher`}}", + "image_offer": "{{user `image_offer`}}", + "image_sku": "{{user `image_sku`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + "communicator": "winrm", + "winrm_use_ssl": "true", + "winrm_insecure": "true", + "winrm_timeout": "15m", + "winrm_username": "packer" + }], + "provisioners": [{ + "type": "windows-shell", + "inline": [ + "cmd /c \"if exist c:\\\\DeployTemp rd /s /q c:\\\\DeployTemp\"", + "cmd /c \"mkdir c:\\\\DeployTemp\"" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "c:\\DeployTemp" + }, + { + "type": "powershell", + "inline": [ + "cd \"C:\\DeployTemp\"", + "ls", + "C:\\DeployTemp\\{{user `package_name`}}\\{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "powershell", + "inline": [ + "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}", + "& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quit /quiet" + ] + }] +} diff --git a/_generated/PackerBuildV1/DefaultTemplates/default.windows.template.json b/_generated/PackerBuildV1/DefaultTemplates/default.windows.template.json new file mode 100644 index 000000000000..046d28d96119 --- /dev/null +++ b/_generated/PackerBuildV1/DefaultTemplates/default.windows.template.json @@ -0,0 +1,73 @@ +{ + "variables": { + "client_id": "", + "client_secret": "", + "subscription_id": "", + "tenant_id": "", + "object_id": "", + "resource_group": "", + "storage_account": "", + "image_publisher": "", + "image_offer": "", + "image_sku": "", + "location": "", + "script_relative_path": "", + "script_arguments": "", + "package_path": "", + "package_name": "", + "capture_name_prefix": "" + }, + "builders": [{ + "type": "azure-arm", + "client_id": "{{user `client_id`}}", + "client_secret": "{{user `client_secret`}}", + "resource_group_name": "{{user `resource_group`}}", + "storage_account": "{{user `storage_account`}}", + "subscription_id": "{{user `subscription_id`}}", + "tenant_id": "{{user `tenant_id`}}", + "object_id": "{{user `object_id`}}", + + "os_type": "Windows", + "image_publisher": "{{user `image_publisher`}}", + "image_offer": "{{user `image_offer`}}", + "image_sku": "{{user `image_sku`}}", + "location": "{{user `location`}}", + "vm_size": "Standard_D3_v2", + + "communicator": "winrm", + "winrm_use_ssl": "true", + "winrm_insecure": "true", + "winrm_timeout": "15m", + "winrm_username": "packer", + + "capture_container_name": "vsts-buildimagetask", + "capture_name_prefix": "{{user `capture_name_prefix`}}" + }], + "provisioners": [{ + "type": "windows-shell", + "inline": [ + "cmd /c \"if exist c:\\\\DeployTemp rd /s /q c:\\\\DeployTemp\"", + "cmd /c \"mkdir c:\\\\DeployTemp\"" + ] + }, + { + "type": "file", + "source": "{{user `package_path`}}", + "destination": "c:\\DeployTemp" + }, + { + "type": "powershell", + "inline": [ + "cd \"C:\\DeployTemp\"", + "ls", + "C:\\DeployTemp\\{{user `package_name`}}\\{{user `script_relative_path`}} {{user `script_arguments`}}" + ] + }, + { + "type": "powershell", + "inline": [ + "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}", + "& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quit /quiet" + ] + }] +} diff --git a/_generated/PackerBuildV1/README.md b/_generated/PackerBuildV1/README.md new file mode 100644 index 000000000000..76b1a7bd9a32 --- /dev/null +++ b/_generated/PackerBuildV1/README.md @@ -0,0 +1 @@ +# Bake immutable machine image Task \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..2477e60ca697 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "Computerimage erstellen", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=845329) oder [Packer-Dokumentation anzeigen](https://www.packer.io/docs/index.html)", + "loc.description": "Hiermit wird unter Verwendung von Packer ein Computerimage erstellt, das für die Bereitstellung von Azure-VM-Skalierungsgruppen verwendet werden kann.", + "loc.instanceNameFormat": "Unveränderliches Image erstellen", + "loc.releaseNotes": "Diese Aufgabe unterstützt ab sofort verwaltete Datenträgerimages.", + "loc.group.displayName.AzureDetails": "Azure-Details", + "loc.group.displayName.DeploymentInputs": "Bereitstellungseingaben", + "loc.group.displayName.Advanced": "Erweitert", + "loc.group.displayName.Output": "Ausgabe", + "loc.input.label.templateType": "Packer-Vorlage", + "loc.input.help.templateType": "Wählen Sie aus, ob die Aufgabe die Packer-Vorlage automatisch erstellen soll oder ob Sie die von Ihnen bereitgestellte benutzerdefinierte Vorlage verwenden möchten.", + "loc.input.label.customTemplateLocation": "Packer-Vorlagenspeicherort", + "loc.input.help.customTemplateLocation": "Pfad zu einer vom Benutzer bereitgestellten Vorlage.", + "loc.input.label.customTemplateParameters": "Vorlagenparameter", + "loc.input.help.customTemplateParameters": "Legen Sie Parameter fest, die zum Erstellen einer benutzerdefinierten Vorlage an Packer übergeben werden. Dies sollte in Ihrer benutzerdefinierten Vorlage dem Abschnitt \"variables\" zugeordnet sein. Wenn die Vorlage z. B. über eine Variable namens \"drop-location\" verfügt, fügen Sie hier einen Parameter mit dem Namen \"drop-location\" und einen zu verwendenden Wert hinzu. Sie können den Wert auch mit einer Releasevariablen verknüpfen. Klicken Sie neben dem Textfeld auf \"...\", um die zusätzlichen Parameter in einem Raster anzuzeigen/zu bearbeiten.", + "loc.input.label.ConnectedServiceName": "Azure-Abonnement", + "loc.input.help.ConnectedServiceName": "Wählen Sie das Azure Resource Manager-Abonnement für das Baking und Speichern des Computerimages aus.", + "loc.input.label.isManagedImage": "Datenträgerimage für verwaltete VM", + "loc.input.help.isManagedImage": "Überprüfen Sie, ob das generierte Image ein verwaltetes Image sein muss.", + "loc.input.label.managedImageName": "Name des Datenträgerimages für verwaltete VM", + "loc.input.help.managedImageName": "Der Name des verwalteten Datenträgerimages für automatisch generierte Vorlagen.", + "loc.input.label.location": "Speicherort", + "loc.input.help.location": "Speicherort des erstellten Computerimages. Dieser Speicherort wird auch verwendet, um einen temporären virtuellen Computer für die Erstellung eines Images zu erstellen.", + "loc.input.label.storageAccountName": "Speicherkonto", + "loc.input.help.storageAccountName": "Speicherkonto zum Speichern des erstellten Computerimages. Dieses Speicherkonto muss im ausgewählten Speicherort bereits vorhanden sein.", + "loc.input.label.azureResourceGroup": "Ressourcengruppe", + "loc.input.help.azureResourceGroup": "Azure-Ressourcengruppe, die das ausgewählte Speicherkonto enthält.", + "loc.input.label.baseImageSource": "Basisimagequelle", + "loc.input.help.baseImageSource": "Wählen Sie die Quelle für das Basisimage aus. Sie können entweder aus einem zusammengestellten Katalog mit Betriebssystemimages auswählen oder eine URL zu Ihrem benutzerdefinierten VHD-Image angeben.
Beachten Sie Folgendes: Wenn Sie die Option zum Erstellen eines verwalteten Images ausgewählt haben, indem Sie die Option \"Verwaltetes VM-Datenträgerimage\" aktiviert haben, sollten Sie hier nur die Option \"Katalog\" auswählen. Eine benutzerdefinierte Quelle wird beim Erstellen verwalteter Images nicht unterstützt.", + "loc.input.label.baseImage": "Basisimage", + "loc.input.help.baseImage": "Treffen Sie Ihre Auswahl aus der zusammengestellten Liste von Betriebssystemimages. Dies wird verwendet, um erforderliche Komponenten und Anwendungen vor dem Erfassen des Computerimages zu installieren.", + "loc.input.label.customImageUrl": "Basisimage-URL", + "loc.input.help.customImageUrl": "Geben Sie die URL für das Basisimage an. Dieses wird verwendet, um erforderliche Komponenten und Anwendungen vor dem Erfassen des Computerimages zu installieren.", + "loc.input.label.customImageOSType": "Basisimage-Betriebssystem", + "loc.input.label.packagePath": "Bereitstellungspaket", + "loc.input.help.packagePath": "Geben Sie den Pfad für das Bereitstellungspaketverzeichnis relativ zu \"$(System.DefaultWorkingDirectory)\" an. Unterstützt das Minimatch-Muster. Beispielpfad: FrontendWebApp/**/GalleryApp
Beachten Sie, dass dieses Paket auf die temporäre VM kopiert wird, die Packer erstellt. Wenn das Paket eine große Anzahl von Dateien enthält und/oder die Dateien sehr groß sind, kann der Upload sehr lange dauern (möglicherweise einige Stunden). Um die Uploadzeit zu optimieren, überprüfen Sie, ob die Paketgröße sinnvoll verringert werden kann. Eine andere Alternative besteht in der Verwendung eines zwischengeschalteten Azure-Speicherkontos. Laden Sie das Paket vor dem Ausführen dieser Aufgabe in ein Speicherkonto hoch. Verwenden Sie dann für diese Aufgabe ein Paket mit einem Skript, mit dem das erforderliche Paket aus dem Speicherkonto heruntergeladen wird.", + "loc.input.label.deployScriptPath": "Bereitstellungsskript", + "loc.input.help.deployScriptPath": "Geben Sie den relativen Pfad zu einem PowerShell-Skript (für Windows) oder einem Shell-Skript (für Linux) an, das das Paket bereitstellt. Dieses Skript muss im oben ausgewählten Paketpfad enthalten sein. Unterstützt das Minimatch-Muster. Beispielpfad: \"deploy/**/scripts/windows/deploy.ps1\"", + "loc.input.label.deployScriptArguments": "Bereitstellungsskriptargumente", + "loc.input.help.deployScriptArguments": "Geben Sie die Argumente an, die an das Bereitstellungsskript übergeben werden.", + "loc.input.label.additionalBuilderParameters": "Zusätzliche Generatorparameter", + "loc.input.help.additionalBuilderParameters": "Im Modus für automatisch generierte Packer-Vorlagen erstellt die Aufgabe eine Packer-Vorlage mit einem Azure-Generator. Dieser Generator dient zum Erstellen eines Computerimages. Sie können dem Azure-Generator Schlüssel hinzufügen, um die erstellte Packer-Vorlage anzupassen. Legen Sie z. B. \"ssh_tty=true\" fest, wenn Sie ein CentOS-Basisimage verwenden und Sie ein tty zum Ausführen von sudo benötigen.
Klicken Sie neben dem Textfeld auf \"...\", um die zusätzlichen Parameter in einem Raster anzuzeigen/zu bearbeiten.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Beim Aufheben der Bereitstellung die Bereinigung der temporären Dateien überspringen", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "Überspringen Sie beim Aufheben der Bereitstellung des virtuellen Computers die Bereinigung der temporären Dateien, die auf den virtuellen Computer hochgeladen wurden. Weitere Informationen finden Sie [hier](https://www.packer.io/docs/builders/azure.html#skip_clean).", + "loc.input.label.packerVersion": "Packer-Version", + "loc.input.help.packerVersion": "Geben Sie die zu installierende Packer-Version an. Dies funktioniert nur mit benutzerdefinierten Vorlagen.", + "loc.input.label.imageUri": "Image-URL oder -name", + "loc.input.help.imageUri": "Geben Sie einen Namen für die Ausgabevariable an, in der für ein nicht verwaltetes VM-Image die Image-VHD-URL des generierten Computers oder für ein verwaltetes VM-Image der Imagename gespeichert wird.", + "loc.input.label.imageId": "Azure-Ressourcen-ID", + "loc.input.help.imageId": "Geben Sie einen Namen für die Ausgabevariable an, in der die Azure-Ressourcen-ID für das neu erstellte Image gespeichert wird. Dies gilt nur für verwaltete Images.", + "loc.messages.OSTypeNotSupported": "Dieser Betriebssystemtyp wird für die Imageerstellung nicht unterstützt: %s. Verwenden Sie entweder Windows oder Linux.", + "loc.messages.CopyTemplateToTempFailed": "Integrierte Vorlage konnte von der Quelle %s nicht zum temporären Speicherort %s kopiert werden.", + "loc.messages.TaskNotFound": "Task.json-Datei nicht gefunden: %s", + "loc.messages.OriginalTemplateLocation": "Ursprünglicher Speicherort der Vorlage: %s", + "loc.messages.CopyingTemplate": "Ursprüngliche Vorlage wird von %s zum temporären Speicherort %s kopiert", + "loc.messages.TempTemplateLocation": "Vorlagendatei wurde zu temporärem Speicherort kopiert: %s", + "loc.messages.CopySourceNotExists": "Quelldateipfad ist zum Kopieren nicht vorhanden: %s", + "loc.messages.CreatingDestinationDir": "Kopierziel ist nicht vorhanden. Wird erstellt: %s", + "loc.messages.CreatedDestinationDir": "Zielverzeichnis zum Kopieren erstellt: %s", + "loc.messages.ExecutingPackerFix": "Packer-Korrekturbefehl wird ausgeführt", + "loc.messages.ExecutingPackerValidate": "Packer-Überprüfungsbefehl wird ausgeführt, um sicherzustellen, dass die Vorlage gültig ist.", + "loc.messages.ExecutingPackerBuild": "Packer-Buildbefehl wird ausgeführt. Es wird gewartet, bis er beendet ist...", + "loc.messages.PackerBuildCompleted": "Packer-Build abgeschlossen.", + "loc.messages.ImageURIOutputVariableNotFound": "Der VHD-Image-URI (nicht verwaltetes Image) konnte nicht aus der Packer-Ausführung abgerufen werden. Die Ausgabevariable wird nicht festgelegt.", + "loc.messages.ImageIDOutputVariableNotFound": "Die ID des verwalteten Images konnte nicht aus der Paketerstellungsausführung abgerufen werden. Die Ausgabevariable wird nicht festgelegt. Hinweis: Diese Variable darf nur mit verwalteten VM-Images verwendet werden.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Der Name des verwalteten Images konnte nicht aus der Packer-Ausführung abgerufen werden. Die Ausgabevariable wird nicht festgelegt.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Der Name des verwalteten Images oder der VHD-Image-URI (nicht verwaltetes Image) konnte nicht aus der Packer-Ausführung abgerufen werden. Die Ausgabevariable wird nicht festgelegt.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Integrierte Vorlage für den Betriebssystemtyp: %s", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Benutzerdefinierte Vorlage am Speicherort nicht gefunden: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Das temporäre Vorlagenverzeichnis %s konnte nicht gelöscht werden. Löschen Sie es manuell.", + "loc.messages.TaskParametersConstructorFailed": "Fehler beim Initialisieren der Aufgabe: %s.", + "loc.messages.PackerFixFailed": "Fehler beim Packer-Korrekturbefehl: \"%s\". Dies tritt unter Umständen auf, wenn die Aufgabe die Packer-Version nicht unterstützt.", + "loc.messages.PackerValidateFailed": "Fehler beim Packer-Überprüfungsbefehl. Dies tritt unter Umständen auf, wenn die Aufgabe die Packer-Version nicht unterstützt.", + "loc.messages.ResolvedPathNotFound": "Es wurde kein mit der Datei übereinstimmendes Muster: %s im Stammorder: %s gefunden.", + "loc.messages.ResolvedDeployPackgePath": "Bereitstellung des Paketpfads behandelt: %s.", + "loc.messages.ResolvedDeployScriptPath": "Bereitstellung des Skriptpfads behandelt: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "Das Betriebssystem wird für die Ausführung von Packer nicht unterstützt.", + "loc.messages.InstallExplicitPackerVersion": "Die Packer-Version %s wird heruntergeladen und für die ausgeführte Aufgabe installiert.", + "loc.messages.DownloadingPackerRequired": "Entweder wurde Packer nicht installiert, oder die Version ist niedriger als %s. Version %s wird heruntergeladen und für ausgeführte Aufgaben installiert.", + "loc.messages.DownloadingPackerCompleted": "Packer-Installationsprogramm erfolgreich heruntergeladen in Pfad: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer erfolgreich extrahiert von Pfad: %s.", + "loc.messages.CreatedStagingDirectory": "Stagingverzeichnis zum Beibehalten von Packer-Binärdateien und Vorlagen erstellt: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "Stagingverzeichnis %s konnte nicht gelöscht werden. Löschen Sie es manuell.", + "loc.messages.InstalledPackerVersion": "Die derzeit installierte Packer-Version ist %s.", + "loc.messages.PackerToolBusy": "Das Packer-Tool ist anscheinend ausgelastet. Erneuter Versuch nach 1 Sekunde...", + "loc.messages.ResolvingDeployPackageInput": "Bereitstellungspaketpfad wird aufgelöst.", + "loc.messages.ResolvingDeployScriptInput": "Bereitstellungsskriptpfad wird aufgelöst.", + "loc.messages.ParsingAdditionalBuilderParameters": "JSON mit zusätzlichen Generatorparametern wird analysiert.", + "loc.messages.ParsingTemplateFileContentFailed": "Analysieren des JSON-Inhalts von der Vorlagendatei %s nicht möglich. Fehler: %s.", + "loc.messages.ParsingCustomTemplateParameters": "JSON mit benutzerdefinierten Vorlagenparametern wird analysiert.", + "loc.messages.FetchingSPNDetailsRemotely": "SPN-Details für App-ID %s werden aus der Azure AD-Diagrammdienstverbindung abgerufen...", + "loc.messages.FetchedSPNDetailsRemotely": "SPN-Details erfolgreich abgerufen. ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "Abrufen von SPN-Details aus der Diagrammdienstverbindung nicht möglich. Fehler: %s.", + "loc.messages.GetArtifactItemsNotSupported": "Das Abrufen von Artefaktelementen wird nicht unterstützt, ungültiger Codepfad.", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Konfigurieren Sie die verwaltete Dienstidentität (MSI) für den virtuellen Computer (https://aka.ms/azure-msi-docs). Statuscode: %s, Statusmeldung: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Statuscode: %s, Statusmeldung: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "Das Erstellen eines verwalteten Images aus einer Quell-VHD wird nicht unterstützt. Sie müssen den Eingabewert \"Basisimagequelle\" auf \"Katalog\" festlegen.", + "loc.messages.ExpiredServicePrincipal": "Das Zugriffstoken für Azure konnte nicht abgerufen werden. Stellen Sie sicher, dass der verwendete Dienstprinzipal gültig und nicht abgelaufen ist." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..808373f95b22 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,97 @@ +{ + "loc.friendlyName": "Build machine image", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=845329) or [see the Packer documentation](https://www.packer.io/docs/index.html)", + "loc.description": "Build a machine image using Packer, which may be used for Azure Virtual machine scale set deployment", + "loc.instanceNameFormat": "Build immutable image", + "loc.releaseNotes": "This task now supports managed disk images.", + "loc.group.displayName.AzureDetails": "Azure Details", + "loc.group.displayName.DeploymentInputs": "Deployment Inputs", + "loc.group.displayName.Advanced": "Advanced", + "loc.group.displayName.Output": "Output", + "loc.input.label.templateType": "Packer template", + "loc.input.help.templateType": "Select whether you want the task to auto generate Packer template or use custom template provided by you.", + "loc.input.label.customTemplateLocation": "Packer template location", + "loc.input.help.customTemplateLocation": "Path to a custom user-provided template.", + "loc.input.label.customTemplateParameters": "Template parameters", + "loc.input.help.customTemplateParameters": "Specify parameters which will be passed to Packer for building custom template. This should map to \"variables\" section in your custom template. E.g. if the template has a variable named \"drop-location\", then add a parameter here with name \"drop-location\" and a value which you want to use. You can link the value to a release variable as well. To view/edit the additional parameters in a grid, click on \"…\" next to text box.", + "loc.input.label.ConnectedServiceName": "Azure subscription", + "loc.input.help.ConnectedServiceName": "Select the Azure Resource Manager subscription for baking and storing the machine image.", + "loc.input.label.isManagedImage": "Managed VM disk image", + "loc.input.help.isManagedImage": "Check if generated image should be a managed image.", + "loc.input.label.managedImageName": "Managed VM Disk Image Name ", + "loc.input.help.managedImageName": "The Name of the Managed disk image for Auto Generated Templates.", + "loc.input.label.location": "Storage location", + "loc.input.help.location": "Location for storing the built machine image. This location will also be used to create a temporary VM for the purpose of building image.", + "loc.input.label.storageAccountName": "Storage account", + "loc.input.help.storageAccountName": "Storage account for storing the built machine image. This storage account must be pre-existing in the location selected.", + "loc.input.label.azureResourceGroup": "Resource group", + "loc.input.help.azureResourceGroup": "Azure Resource group that contains the selected storage account.", + "loc.input.label.baseImageSource": "Base image source", + "loc.input.help.baseImageSource": "Select the source of base image. You can either choose from a curated gallery of OS images or provide URL of your custom VHD image.
Please note that if you have selected option to create a Managed image by checking 'Managed VM disk image' option, then you should only choose 'Gallery' option here. 'Custom' source is not supported to create a managed image.", + "loc.input.label.baseImage": "Base image", + "loc.input.help.baseImage": "Choose from curated list of OS images. This will be used for installing pre-requisite(s) and application(s) before capturing machine image.", + "loc.input.label.customImageUrl": "Base image URL", + "loc.input.help.customImageUrl": "Specify URL of base image. This will be used for installing pre-requisite(s) and application(s) before capturing machine image.", + "loc.input.label.customImageOSType": "Base image OS", + "loc.input.label.packagePath": "Deployment Package", + "loc.input.help.packagePath": "Specify the path for deployment package directory relative to $(System.DefaultWorkingDirectory). Supports minimatch pattern. Example path: FrontendWebApp/**/GalleryApp
Please note that this package will be copied to temporary virtual machine which Packer creates. If the package contains large number of files and/or the files are very large in size, the upload can take quite long time (possibly running into few hours). To optimize the upload time, please see if size of the package can be meaningfully reduced. Another alternative is to use an intermediary Azure storage account. Upload the package to a storage account prior to running this task. And for this task, use a package containing a script which will download the required package from the storage account.", + "loc.input.label.deployScriptPath": "Deployment script", + "loc.input.help.deployScriptPath": "Specify the relative path to powershell script(for Windows) or shell script(for Linux) which deploys the package. This script should be contained in the package path selected above. Supports minimatch pattern. Example path: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "Deployment script arguments", + "loc.input.help.deployScriptArguments": "Specify the arguments to be passed to deployment script.", + "loc.input.label.additionalBuilderParameters": "Additional Builder parameters", + "loc.input.help.additionalBuilderParameters": "In auto generated Packer template mode the task creates a Packer template with an Azure builder. This builder is used to generate a machine image. You can add keys to the Azure builder to customize the generated Packer template. For example setting ssh_tty=true in case you are using a CentOS base image and you need to have a tty to run sudo.
To view/edit the additional parameters in a grid, click on “…” next to text box.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Skip temporary file cleanup during deprovision", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "During deprovisioning of VM, skip clean-up of temporary files uploaded to VM. Refer [here](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Packer Version", + "loc.input.help.packerVersion": "Specify the version of Packer to install. This will work only with custom templates.", + "loc.input.label.imageUri": "Image URL or Name", + "loc.input.help.imageUri": "Provide a name for the output variable which will store generated machine image VHD url for un-managed VM image or image name for managed VM image.", + "loc.input.label.imageId": "Azure Resource Id", + "loc.input.help.imageId": "Provide a name for the output variable which will store the azure resource id for the newly created image. This is for managed images only.", + "loc.messages.OSTypeNotSupported": "This OS type is not supported for image creation: %s. Please use either windows or linux.", + "loc.messages.CopyTemplateToTempFailed": "Could not copy built-in template from source %s to temp location %s", + "loc.messages.TaskNotFound": "Task.json file could not be found: %s", + "loc.messages.OriginalTemplateLocation": "Original template location: %s", + "loc.messages.CopyingTemplate": "Copying original template from %s to temporary location %s", + "loc.messages.TempTemplateLocation": "Copied template file to a temporary location: %s", + "loc.messages.CopySourceNotExists": "Source file path does not exist for copying: %s", + "loc.messages.CreatingDestinationDir": "Destination for copying does not exist. Creating: %s", + "loc.messages.CreatedDestinationDir": "Created destination directory for copying: %s", + "loc.messages.ExecutingPackerFix": "Running packer fix command", + "loc.messages.ExecutingPackerValidate": "Running packer validate command to ensure template is valid", + "loc.messages.ExecutingPackerBuild": "Running packer build command. Waiting for it to finish...", + "loc.messages.PackerBuildCompleted": "packer build completed.", + "loc.messages.ImageURIOutputVariableNotFound": "Could not get vhd image URI (unmanaged image) from packer execution. Output variable will not be set.", + "loc.messages.ImageIDOutputVariableNotFound": "Could not get managed image id from packer execution. Output variable will not be set. Note: This variable should not be used with un-managed VM images.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Could not get managed image name from packer execution. Output variable will not be set.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Could not get managed image name or vhd image URI (unmanaged image) from packer execution. Output variable will not be set.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Built-in template for OS type: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Custom template not found at location: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Could not delete temporary template directory %s. Please delete manually.", + "loc.messages.TaskParametersConstructorFailed": "Error happened while initializing task: %s.", + "loc.messages.PackerFixFailed": "Packer fix command failed with error : '%s'. This could happen if task does not support packer version.", + "loc.messages.PackerValidateFailed": "Packer validate command failed. This could happen if task does not support packer version.", + "loc.messages.ResolvedPathNotFound": "Not found any file matching pattern: %s under root folder: %s.", + "loc.messages.ResolvedDeployPackgePath": "Resolved deploy package path: %s.", + "loc.messages.ResolvedDeployScriptPath": "Resolved deploy script path: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "OS is not supported for running packer.", + "loc.messages.InstallExplicitPackerVersion": "Packer version %s will be downloaded and installed for running task.", + "loc.messages.DownloadingPackerRequired": "Either packer is not installed or its version is less than %s. Version %s will be downloaded and installed for running task.", + "loc.messages.DownloadingPackerCompleted": "Packer installer downloaded successfully at path: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer extracted successfully at path: %s.", + "loc.messages.CreatedStagingDirectory": "Created staging directory for keeping packer binary and templates: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "Could not delete staging directory %s. Please delete manually.", + "loc.messages.InstalledPackerVersion": "Current installed packer version is %s.", + "loc.messages.PackerToolBusy": "Packer tool seems to be busy. Retrying after 1 second...", + "loc.messages.ResolvingDeployPackageInput": "Resolving deploy package path.", + "loc.messages.ResolvingDeployScriptInput": "Resolving deploy script path.", + "loc.messages.ParsingAdditionalBuilderParameters": "Parsing additional builder parameters json.", + "loc.messages.ParsingTemplateFileContentFailed": "Unable to parse json content from template file %s with error: %s.", + "loc.messages.ParsingCustomTemplateParameters": "Parsing custom template parameters json.", + "loc.messages.GetArtifactItemsNotSupported": "Get artifact items not supported, invalid code path", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "Creating managed image from a source VHD is not supported. You must set 'Base image source' input value to 'Gallery'.", + "loc.messages.ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..d6eecd6f99c7 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "Compilar imagen de máquina", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=845329) o [consultar la documentación de Packer](https://www.packer.io/docs/index.html)", + "loc.description": "Compila una imagen de máquina con Packer, que se puede usar para la implementación del conjunto de escalado de máquinas virtuales de Azure.", + "loc.instanceNameFormat": "Compilar imagen inmutable", + "loc.releaseNotes": "Esta tarea admite ahora imágenes de disco administrado.", + "loc.group.displayName.AzureDetails": "Detalles de Azure", + "loc.group.displayName.DeploymentInputs": "Entradas de implementación", + "loc.group.displayName.Advanced": "Avanzado", + "loc.group.displayName.Output": "Salida", + "loc.input.label.templateType": "Plantilla Packer", + "loc.input.help.templateType": "Seleccione si quiere que la tarea genere automáticamente la plantilla Packer o utilice una plantilla personalizada que usted proporcione.", + "loc.input.label.customTemplateLocation": "Ubicación de plantilla Packer", + "loc.input.help.customTemplateLocation": "Ruta de acceso de una plantilla personalizada proporcionada por el usuario.", + "loc.input.label.customTemplateParameters": "Parámetros de la plantilla", + "loc.input.help.customTemplateParameters": "Especifique los parámetros que se pasarán a Packer para compilar la plantilla personalizada. Deben asignarse a la sección \"variables\" de la plantilla personalizada. Por ejemplo, si la plantilla tiene una variable denominada \"ubicación-de-destino\", agregue aquí un parámetro con el nombre \"ubicación-de-destino\" y el valor que desee usar. También puede vincular el valor a una variable de versión. Para ver o editar los parámetros adicionales en una cuadrícula, haga clic en \"…\" junto al cuadro de texto.", + "loc.input.label.ConnectedServiceName": "Suscripción a Azure", + "loc.input.help.ConnectedServiceName": "Seleccione la suscripción de Azure Resource Manager para crear y almacenar la imagen de máquina.", + "loc.input.label.isManagedImage": "Imagen de disco de máquina virtual administrado", + "loc.input.help.isManagedImage": "Compruebe si la imagen generada debe ser una imagen administrada.", + "loc.input.label.managedImageName": "Nombre de imagen de disco de máquina virtual administrado ", + "loc.input.help.managedImageName": "El nombre de la imagen de disco administrado para las plantillas generadas automáticamente.", + "loc.input.label.location": "Ubicación de almacenamiento", + "loc.input.help.location": "Ubicación para almacenar la imagen de máquina compilada. Esta ubicación se usará también para crear una VM temporal para la compilación de la imagen.", + "loc.input.label.storageAccountName": "Cuenta de almacenamiento", + "loc.input.help.storageAccountName": "Cuenta de almacenamiento para la imagen de máquina compilada. Esta cuenta de almacenamiento debe existir ya en la ubicación seleccionada.", + "loc.input.label.azureResourceGroup": "Grupo de recursos", + "loc.input.help.azureResourceGroup": "Grupo de recursos de Azure que contiene la cuenta de almacenamiento seleccionada.", + "loc.input.label.baseImageSource": "Origen de imagen base", + "loc.input.help.baseImageSource": "Seleccione el origen de la imagen base. Puede elegirlo en la galería de imágenes del sistema operativo o proporcionar la dirección URL de la imagen de VHD personalizada.
Tenga en cuenta que, si ha seleccionado la opción \"Imagen de disco de máquina virtual administrado\" para crear una imagen administrada, solo debe elegir la opción \"Galería\" aquí. El origen \"Personalizado\" no se admite para crear una imagen administrada.", + "loc.input.label.baseImage": "Imagen base", + "loc.input.help.baseImage": "Elija una imagen en la lista de imágenes de sistema operativo, que se usará para instalar los requisitos previos y las aplicaciones antes de capturar la imagen de la máquina.", + "loc.input.label.customImageUrl": "URL de imagen base", + "loc.input.help.customImageUrl": "Especifique la dirección URL de la imagen base, que se usará para instalar los requisitos previos y las aplicaciones antes de capturar la imagen de la máquina.", + "loc.input.label.customImageOSType": "Sistema operativo de imagen base", + "loc.input.label.packagePath": "Paquete de implementación", + "loc.input.help.packagePath": "Especifique la ruta de acceso del directorio del paquete de implementación relativa a $(System.DefaultWorkingDirectory). Admite un patrón de minimatch. Ruta de acceso de ejemplo: FrontendWebApp/**/GalleryApp
Tenga en cuenta que este paquete se copiará en una máquina virtual temporal que Packer crea. Si el paquete contiene un gran número de archivos o estos son de gran tamaño, la carga puede tardar bastante (posiblemente incluso horas). Para optimizar el tiempo de carga, compruebe si el tamaño del paquete puede reducirse significativamente. Otra alternativa es usar una cuenta de almacenamiento de Azure intermediaria. Cargue el paquete en una cuenta de almacenamiento antes de ejecutar esta tarea. Para esta tarea, use un paquete que contenga un script que descargue el paquete requerido de la cuenta de almacenamiento.", + "loc.input.label.deployScriptPath": "Script de implementación", + "loc.input.help.deployScriptPath": "Especifique la ruta de acceso relativa al script de PowerShell (para Windows) o al script de shell (para Linux) que implementa el paquete. Este script debe estar incluido en la ruta de acceso del paquete seleccionada anteriormente. Admite un patrón de minimatch. Ruta de acceso de ejemplo: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "Argumentos del script de implementación", + "loc.input.help.deployScriptArguments": "Especifique los argumentos que deben pasarse al script de implementación.", + "loc.input.label.additionalBuilderParameters": "Parámetros adicionales del compilador", + "loc.input.help.additionalBuilderParameters": "En el modo de plantilla Packer generada automáticamente, la tarea crea una plantilla Packer con un compilador de Azure. Este compilador se usa para generar una imagen de máquina. Puede agregar claves al compilador de Azure para personalizar la plantilla Packer generada. Por ejemplo, puede establecer ssh_tty=true en el caso de que use una imagen base de CentOS y necesite tener un tty para ejecutar sudo.
Para ver o editar los parámetros adicionales en una cuadrícula, haga clic en “…” junto al cuadro de texto.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Omitir limpieza de archivos temporales durante el desaprovisionamiento", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "Durante el desaprovisonamiento de la máquina virtual, omita la limpieza de los archivos temporales cargados en la máquina virtual. Consulte la información que se proporciona [aquí](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Versión de Packer", + "loc.input.help.packerVersion": "Especifique la versión de Packer que se va a instalar. Esto solo funcionará con las plantillas personalizadas.", + "loc.input.label.imageUri": "Nombre o dirección URL de la imagen", + "loc.input.help.imageUri": "Proporcione un nombre para la variable de salida que almacenará la dirección URL VHD de la imagen de máquina generada para una imagen de máquina virtual no administrada o un nombre para una imagen de máquina virtual administrada.", + "loc.input.label.imageId": "Identificador de recurso de Azure", + "loc.input.help.imageId": "Proporcione un nombre para la variable de salida que almacenará el identificador de recurso de Azure para la imagen recién creada. Esto solo es aplicable para las imágenes administradas.", + "loc.messages.OSTypeNotSupported": "No se admite este tipo de sistema operativo para crear imágenes: %s. Use Windows o Linux.", + "loc.messages.CopyTemplateToTempFailed": "No se puede copiar la plantilla integrada del origen %s a la ubicación temporal %s", + "loc.messages.TaskNotFound": "No se encuentra el archivo Task.json: %s", + "loc.messages.OriginalTemplateLocation": "Ubicación de la plantilla original: %s", + "loc.messages.CopyingTemplate": "Copiando la plantilla original de %s a la ubicación temporal %s", + "loc.messages.TempTemplateLocation": "Archivo de plantilla copiado en una ubicación temporal: %s", + "loc.messages.CopySourceNotExists": "No existe la ruta de acceso del archivo de origen para copiar: %s", + "loc.messages.CreatingDestinationDir": "No existe el destino para la copia. Creando: %s", + "loc.messages.CreatedDestinationDir": "Directorio de destino creado para copiar: %s", + "loc.messages.ExecutingPackerFix": "Ejecutando el comando fix de Packer", + "loc.messages.ExecutingPackerValidate": "Ejecutando el comando validate de Packer para comprobar que la plantilla es válida", + "loc.messages.ExecutingPackerBuild": "Ejecutando el comando build de Packer. Esperando a que termine...", + "loc.messages.PackerBuildCompleted": "Compilación de Packer finalizada.", + "loc.messages.ImageURIOutputVariableNotFound": "No se puede obtener el URI de la imagen VHD (imagen no administrada) de la ejecución de Packer. No se establecerá la variable de salida.", + "loc.messages.ImageIDOutputVariableNotFound": "No se puede obtener el identificador de imagen administrada de la ejecución de Packer. No se establecerá la variable de salida. Nota: Esta variable no se debe usar con imágenes de máquina virtual no administradas.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "No se puede obtener el nombre de la imagen administrada de la ejecución de Packer. No se establecerá la variable de salida.", + "loc.messages.CustumTemplateOutputVariableNotFound": "No se puede obtener el nombre de la imagen administrada o el URI de la imagen VHD (imagen no administrada) de la ejecución de Packer. No se establecerá la variable de salida.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Plantilla integrada para el tipo de sistema operativo: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "No se encuentra la plantilla personalizada en la ubicación: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "No se puede eliminar el directorio de plantillas temporal %s. Elimínelo manualmente.", + "loc.messages.TaskParametersConstructorFailed": "Error al inicializar la tarea %s.", + "loc.messages.PackerFixFailed": "No se pudo ejecutar el comando fix de Packer. Error: \"%s\". Puede deberse a que la tarea no admite la versión de Packer.", + "loc.messages.PackerValidateFailed": "No se pudo ejecutar el comando validate de Packer. Puede deberse a que la tarea no admite la versión de Packer.", + "loc.messages.ResolvedPathNotFound": "No se encuentra ningún archivo que coincida con el patrón %s en la carpeta raíz %s.", + "loc.messages.ResolvedDeployPackgePath": "Ruta de acceso del paquete de implementación resuelta: %s.", + "loc.messages.ResolvedDeployScriptPath": "Ruta de acceso del script de implementación resuelta: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "No se admite este sistema operativo para ejecutar Packer.", + "loc.messages.InstallExplicitPackerVersion": "La versión de Packer %s se descargará e instalará para la tarea en ejecución.", + "loc.messages.DownloadingPackerRequired": "Puede que Packer no esté instalado o que la versión sea anterior a %s. Se descargará la versión %s y se instalará para ejecutar la tarea.", + "loc.messages.DownloadingPackerCompleted": "Instalador de Packer descargado correctamente en la ruta de acceso: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer se ha extraído correctamente en la ruta de acceso: %s.", + "loc.messages.CreatedStagingDirectory": "Directorio de almacenamiento provisional creado para mantener las plantillas y los archivos binarios de Packer: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "No se puede eliminar el directorio de almacenamiento provisional %s. Elimínelo manualmente.", + "loc.messages.InstalledPackerVersion": "La versión instalada de Packer es %s.", + "loc.messages.PackerToolBusy": "La herramienta Packer parece estar ocupada. Se reintentará en 1 segundo...", + "loc.messages.ResolvingDeployPackageInput": "Resolviendo la ruta de acceso del paquete de Deploy.", + "loc.messages.ResolvingDeployScriptInput": "Resolviendo la ruta de acceso del script de Deploy.", + "loc.messages.ParsingAdditionalBuilderParameters": "Analizando parámetros JSON adicionales del compilador.", + "loc.messages.ParsingTemplateFileContentFailed": "No se puede analizar el contenido de JSON del archivo de plantilla %s. Error: %s.", + "loc.messages.ParsingCustomTemplateParameters": "Analizando parámetros JSON de la plantilla personalizada.", + "loc.messages.FetchingSPNDetailsRemotely": "Capturando detalles de SPN para el identificador de aplicación %s desde la conexión del servicio de Azure AD Graph...", + "loc.messages.FetchedSPNDetailsRemotely": "Los detalles de SPN se han recuperado correctamente. Id. de objeto: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "No se pueden capturar los detalles de SPN de la conexión de servicio de Graph. Error: %s.", + "loc.messages.GetArtifactItemsNotSupported": "No se admite la obtención de elementos de artefacto. La ruta de acceso del código no es válida.", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Configure Managed Service Identity (MSI) para la máquina virtual \"https://aka.ms/azure-msi-docs\". Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "No se admite la creación de una imagen administrada desde un disco duro virtual de origen. Debe establecer el valor de entrada \"Origen de imagen base\" en \"Galería\".", + "loc.messages.ExpiredServicePrincipal": "No se pudo capturar el token de acceso de Azure. Compruebe que la entidad de servicio usada es válida y no ha expirado." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..5b5c25b29119 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "Générer une image de machine", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=845329) ou [consulter la documentation sur Packer](https://www.packer.io/docs/index.html)", + "loc.description": "Générez une image de machine à l'aide de Packer. Vous pouvez utiliser cette image pour déployer des groupes de machines virtuelles identiques Azure", + "loc.instanceNameFormat": "Générer l'image non modifiable", + "loc.releaseNotes": "Cette tâche prend désormais en charge les images de disques managés.", + "loc.group.displayName.AzureDetails": "Détails relatifs à Azure", + "loc.group.displayName.DeploymentInputs": "Entrées de déploiement", + "loc.group.displayName.Advanced": "Avancé", + "loc.group.displayName.Output": "Sortie", + "loc.input.label.templateType": "Modèle Packer", + "loc.input.help.templateType": "Spécifiez si la tâche doit générer automatiquement un modèle Packer ou utiliser votre modèle personnalisé.", + "loc.input.label.customTemplateLocation": "Emplacement du modèle Packer", + "loc.input.help.customTemplateLocation": "Chemin d'un modèle personnalisé fourni par l'utilisateur.", + "loc.input.label.customTemplateParameters": "Paramètres du modèle", + "loc.input.help.customTemplateParameters": "Spécifiez les paramètres à passer à Packer pour la création d'un modèle personnalisé. Il doit s'agir d'un mappage à la section \"variables\" de votre modèle personnalisé. Par exemple, si le modèle comporte une variable nommée \"drop-location\", ajoutez ici un paramètre nommé \"drop-location\" et la valeur à utiliser. Vous pouvez également lier la valeur à une variable de mise en production. Pour afficher/modifier les paramètres supplémentaires dans une grille, cliquez sur \"…\" à côté de la zone de texte.", + "loc.input.label.ConnectedServiceName": "Abonnement Azure", + "loc.input.help.ConnectedServiceName": "Sélectionnez l'abonnement Azure Resource Manager pour la création et le stockage de l'image de machine.", + "loc.input.label.isManagedImage": "Image de disque de machine virtuelle managée", + "loc.input.help.isManagedImage": "Vérifiez si l'image générée doit être une image managée.", + "loc.input.label.managedImageName": "Nom d'image de disque de machine virtuelle managée ", + "loc.input.help.managedImageName": "Nom de l'image de disque managé pour les modèles générés automatiquement.", + "loc.input.label.location": "Emplacement de stockage", + "loc.input.help.location": "Emplacement de stockage de l'image de machine générée. Cet emplacement est également utilisé pour créer une machine virtuelle temporaire afin de générer l'image.", + "loc.input.label.storageAccountName": "Compte de stockage", + "loc.input.help.storageAccountName": "Compte de stockage de l'image de machine générée. Ce compte de stockage doit exister au préalable à l'emplacement choisi.", + "loc.input.label.azureResourceGroup": "Groupe de ressources", + "loc.input.help.azureResourceGroup": "Groupe de ressources Azure qui contient le compte de stockage sélectionné.", + "loc.input.label.baseImageSource": "Source de l'image de base", + "loc.input.help.baseImageSource": "Sélectionnez la source de l'image de base. Vous pouvez effectuer votre choix parmi une galerie organisée d'images d'OS ou indiquer l'URL de votre image VHD personnalisée.
Notez que si vous avez sélectionné l'option permettant de créer une image managée en cochant l'option Image de disque de machine virtuelle managée, vous devez uniquement choisir l'option Galerie ici. La source 'personnalisée' n'est pas prise en charge pour la création d'une image managée.", + "loc.input.label.baseImage": "Image de base", + "loc.input.help.baseImage": "Faites votre choix parmi une liste organisée d'images d'OS. Cela vous permet d'installer les prérequis et les applications avant de capturer l'image de machine.", + "loc.input.label.customImageUrl": "URL de l'image de base", + "loc.input.help.customImageUrl": "Spécifiez l'URL de l'image de base. Cela vous permet d'installer les prérequis et les applications avant de capturer l'image de machine.", + "loc.input.label.customImageOSType": "OS de l'image de base", + "loc.input.label.packagePath": "Package de déploiement", + "loc.input.help.packagePath": "Spécifiez le chemin du répertoire de package de déploiement relatif à $(System.DefaultWorkingDirectory). Prend en charge le modèle minimatch. Exemple de chemin : FrontendWebApp/**/GalleryApp
Notez que ce package est copié sur la machine virtuelle temporaire créée par Packer. Si le package contient un grand nombre de fichiers et/ou si la taille des fichiers est très importante, le chargement peut prendre un certain temps (éventuellement plusieurs heures). Pour optimiser le temps de chargement, vérifiez si la taille du package peut être réduite de manière significative. Une autre solution consiste à utiliser un compte de stockage Azure intermédiaire. Chargez le package sur un compte de stockage avant d'exécuter cette tâche. Et pour cette tâche, utilisez un package contenant un script qui télécharge le package nécessaire à partir du compte de stockage.", + "loc.input.label.deployScriptPath": "Script de déploiement", + "loc.input.help.deployScriptPath": "Spécifiez le chemin relatif du script PowerShell (pour Windows) ou du script d'interpréteur de commandes (pour Linux) qui déploie le package. Ce script doit être contenu dans le chemin de package sélectionné ci-dessus. Prend en charge le modèle minimatch. Exemple de chemin : deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "Arguments du script de déploiement", + "loc.input.help.deployScriptArguments": "Spécifiez les arguments à passer au script de déploiement.", + "loc.input.label.additionalBuilderParameters": "Paramètres supplémentaires du générateur", + "loc.input.help.additionalBuilderParameters": "En mode de génération automatique du modèle Packer, la tâche crée un modèle Packer avec un générateur Azure. Ce générateur permet de générer une image de machine. Vous pouvez ajouter des clés au générateur Azure pour personnaliser le modèle Packer généré. Par exemple, définissez ssh_tty=true si vous utilisez une image de base CentOS et si vous devez avoir un tty pour exécuter sudo.
Pour afficher/modifier les paramètres supplémentaires dans une grille, cliquez sur \"…\" à côté de la zone de texte.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Ignorer le nettoyage des fichiers temporaires durant le déprovisionnement", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "Durant le déprovisionnement de la machine virtuelle, ignorez le nettoyage des fichiers temporaires chargés sur la machine virtuelle. Consultez les informations situées [ici](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Version de Packer", + "loc.input.help.packerVersion": "Spécifiez la version de Packer à installer. Cela fonctionne uniquement avec des modèles personnalisés.", + "loc.input.label.imageUri": "URL ou nom de l'image", + "loc.input.help.imageUri": "Indiquez le nom de la variable de sortie qui doit stocker l'URL du VHD de l'image de machine générée pour l'image de machine virtuelle non managée, ou le nom d'image pour l'image de machine virtuelle managée.", + "loc.input.label.imageId": "ID de ressource Azure", + "loc.input.help.imageId": "Indiquez le nom de la variable de sortie qui doit stocker l'ID de ressource azure correspondant à l'image créée. Cela concerne uniquement les images managées.", + "loc.messages.OSTypeNotSupported": "Ce type d'OS n'est pas pris en charge pour la création d'image : %s. Utilisez Windows ou Linux.", + "loc.messages.CopyTemplateToTempFailed": "Impossible de copier le modèle intégré de la source %s à l'emplacement temporaire %s", + "loc.messages.TaskNotFound": "Le fichier task.json est introuvable : %s", + "loc.messages.OriginalTemplateLocation": "Emplacement du modèle d'origine : %s", + "loc.messages.CopyingTemplate": "Copie du modèle d'origine de %s vers l'emplacement temporaire %s", + "loc.messages.TempTemplateLocation": "Copie effectuée du fichier de modèle à un emplacement temporaire : %s", + "loc.messages.CopySourceNotExists": "Le chemin de fichier source n'existe pas pour la copie : %s", + "loc.messages.CreatingDestinationDir": "La destination de la copie n'existe pas. Création de %s", + "loc.messages.CreatedDestinationDir": "Répertoire de destination créé pour la copie : %s", + "loc.messages.ExecutingPackerFix": "Exécution de la commande de correction de Packer", + "loc.messages.ExecutingPackerValidate": "Exécution de la commande de validation de Packer pour vérifier la validité du modèle", + "loc.messages.ExecutingPackerBuild": "Exécution de la commande de build de Packer. Attente de la fin de son exécution...", + "loc.messages.PackerBuildCompleted": "Build Packer effectuée.", + "loc.messages.ImageURIOutputVariableNotFound": "Impossible d'obtenir l'URI de l'image vhd (image non managée) à partir de l'exécution de l'outil Packer. La variable de sortie ne sera pas définie.", + "loc.messages.ImageIDOutputVariableNotFound": "Impossible d'obtenir l'ID de l'image managée à partir de l'exécution de l'outil Packer. La variable de sortie ne sera pas définie. Remarque : Vous ne devez pas utiliser cette variable avec des images de machines virtuelles non managées.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Impossible d'obtenir le nom de l'image managée à partir de l'exécution de l'outil Packer. La variable de sortie ne sera pas définie.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Impossible d'obtenir le nom de l'image managée ou l'URI de l'image vhd (image non managée) à partir de l'exécution de l'outil Packer. La variable de sortie ne sera pas définie.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Modèle intégré pour le type d'OS : %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Le modèle personnalisé est introuvable à l'emplacement suivant : %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Impossible de supprimer le répertoire de modèles temporaire %s. Effectuez la suppression manuellement.", + "loc.messages.TaskParametersConstructorFailed": "Une erreur s'est produite durant l'initialisation de la tâche : %s.", + "loc.messages.PackerFixFailed": "Échec de la commande de correction de Packer. Erreur : '%s'. Cela peut se produire si la tâche ne prend pas en charge la version de Packer.", + "loc.messages.PackerValidateFailed": "Échec de la commande de validation de Packer. Cela peut se produire si la tâche ne prend pas en charge la version de Packer.", + "loc.messages.ResolvedPathNotFound": "Le fichier correspondant au modèle %s est introuvable dans le dossier racine %s.", + "loc.messages.ResolvedDeployPackgePath": "Résolution effectuée du chemin du package de déploiement : %s.", + "loc.messages.ResolvedDeployScriptPath": "Résolution effectuée du chemin du script de déploiement : %s.", + "loc.messages.OSNotSupportedForRunningPacker": "L'OS n'est pas pris en charge pour l'exécution de Packer.", + "loc.messages.InstallExplicitPackerVersion": "La version %s de Packer va être téléchargée et installée pour l'exécution de la tâche.", + "loc.messages.DownloadingPackerRequired": "Soit Packer n'est pas installé, soit il est antérieur à la version %s. La version %s va être téléchargée et installée pour la tâche en cours d'exécution.", + "loc.messages.DownloadingPackerCompleted": "Le programme d'installation de Packer a été correctement téléchargé dans le chemin suivant : %s.", + "loc.messages.ExtractingPackerCompleted": "Packer a été correctement extrait dans le chemin suivant : %s.", + "loc.messages.CreatedStagingDirectory": "Répertoire de préproduction créé pour la conservation des ressources binaires et des modèles de l'outil Packer : %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "Impossible de supprimer le répertoire de préproduction %s. Effectuez la suppression manuellement.", + "loc.messages.InstalledPackerVersion": "La version installée de Packer est %s.", + "loc.messages.PackerToolBusy": "Packer semble occupé. Nouvelle tentative dans 1 seconde...", + "loc.messages.ResolvingDeployPackageInput": "Résolution du chemin du package de déploiement.", + "loc.messages.ResolvingDeployScriptInput": "Résolution du chemin du script de déploiement.", + "loc.messages.ParsingAdditionalBuilderParameters": "Analyse du contenu json des paramètres supplémentaires du générateur.", + "loc.messages.ParsingTemplateFileContentFailed": "Impossible d'analyser le contenu json du fichier de modèle %s. Erreur : %s.", + "loc.messages.ParsingCustomTemplateParameters": "Analyse du contenu json des paramètres de modèle personnalisé.", + "loc.messages.FetchingSPNDetailsRemotely": "Récupération (fetch) des détails du SPN (nom de principal du service) pour l'ID d'application %s à partir de la connexion de service Azure AD Graph...", + "loc.messages.FetchedSPNDetailsRemotely": "Récupération (fetch) réussie des détails du SPN (nom de principal du service). ObjectId : %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "Impossible de récupérer (fetch) les détails du SPN (nom de principal du service) à partir de la connexion de service Graph. Erreur : %s.", + "loc.messages.GetArtifactItemsNotSupported": "Obtention des éléments d'artefact non prise en charge, chemin du code non valide", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Configurez MSI (Managed Service Identity) pour la machine virtuelle 'https://aka.ms/azure-msi-docs'. Code d'état : %s, message d'état : %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Code d'état : %s, message d'état : %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "La création d'une image managée à partir d'un VHD (disque dur virtuel) source n'est pas prise en charge. Vous devez affecter la valeur 'Galerie' à la valeur d'entrée 'Source de l'image de base'.", + "loc.messages.ExpiredServicePrincipal": "Impossible de récupérer (fetch) le jeton d'accès pour Azure. Vérifiez si le principal de service utilisé est valide et s'il n'a pas expiré." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..c26accc6c7a6 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "Crea immagine di macchina virtuale", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=845329). In alternativa [vedere la documentazione di Packer](https://www.packer.io/docs/index.html)", + "loc.description": "Crea un'immagine di macchina virtuale con Packer. È possibile usare questa immagine per la distribuzione di set di scalabilità di macchine virtuali di Azure", + "loc.instanceNameFormat": "Crea immagine non modificabile", + "loc.releaseNotes": "Questa attività ora supporta le immagini di dischi gestiti.", + "loc.group.displayName.AzureDetails": "Dettagli su Azure", + "loc.group.displayName.DeploymentInputs": "Input per la distribuzione", + "loc.group.displayName.Advanced": "Avanzate", + "loc.group.displayName.Output": "Output", + "loc.input.label.templateType": "Modello Packer", + "loc.input.help.templateType": "Consente di scegliere se si vuole che l'attività generi automaticamente il modello Packer o usi il modello personalizzato specificato dall'utente.", + "loc.input.label.customTemplateLocation": "Posizione del modello Packer", + "loc.input.help.customTemplateLocation": "Percorso di un modello personalizzato specificato dall'utente.", + "loc.input.label.customTemplateParameters": "Parametri del modello", + "loc.input.help.customTemplateParameters": "Specificare i parametri che verranno passati a Packer per la compilazione di un modello personalizzato. In questo modo si dovrebbe eseguire il mapping alla sezione \"variables\" nel modello personalizzato. Se ad esempio il modello ha una variabile denominata \"drop-location\", è possibile aggiungere un parametro qui denominato \"drop-location\" e un valore che si vuole usare. È possibile anche collegare il valore a una variabile di versione. Per visualizzare/modificare i parametri aggiuntivi in una griglia, fare clic su \"…\" accanto alla casella di testo.", + "loc.input.label.ConnectedServiceName": "Sottoscrizione di Azure", + "loc.input.help.ConnectedServiceName": "Consente di selezionare la sottoscrizione di Azure Resource Manager per creare con bake l'immagine del computer e archiviarla.", + "loc.input.label.isManagedImage": "Immagine del disco della macchina virtuale gestita", + "loc.input.help.isManagedImage": "Verifica se l'immagine generata deve essere um'immagine gestita.", + "loc.input.label.managedImageName": "Nome dell'immagine del disco della macchina virtuale gestita ", + "loc.input.help.managedImageName": "Nome dell'immagine del disco gestito per i modelli generati automaticamente.", + "loc.input.label.location": "Posizione di archiviazione", + "loc.input.help.location": "Posizione in cui archiviare l'immagine della macchina virtuale creata. Verrà usata anche per creare una macchina virtuale temporanea per la creazione dell'immagine.", + "loc.input.label.storageAccountName": "Account di archiviazione", + "loc.input.help.storageAccountName": "Account di archiviazione per archiviare l'immagine della macchina virtuale creata. Questo account deve esistere già nella posizione selezionata.", + "loc.input.label.azureResourceGroup": "Gruppo di risorse", + "loc.input.help.azureResourceGroup": "Gruppo di risorse di Azure che contiene l'account di archiviazione selezionato.", + "loc.input.label.baseImageSource": "Origine dell'immagine di base", + "loc.input.help.baseImageSource": "Selezionare l'origine dell'immagine di base. È possibile scegliere in una raccolta dedicata di immagini del sistema operativo o specificare l'URL dell'immagine del disco rigido virtuale personalizzato.
Tenere presente che se è stata selezionata l'opzione 'Immagine del disco della macchina virtuale gestita' per creare un'immagine gestita, è consigliabile scegliere qui solo l'opzione 'Raccolta'. L'origine 'Personalizzata' non è supportata per creare un'immagine gestita.", + "loc.input.label.baseImage": "Immagine di base", + "loc.input.help.baseImage": "Consente di scegliere nell'elenco dedicato di immagini del sistema operativo. Verrà usato per installare i prerequisiti e le applicazioni prima di acquisire l'immagine del computer.", + "loc.input.label.customImageUrl": "URL dell'immagine di base", + "loc.input.help.customImageUrl": "Consente di specificare l'URL dell'immagine di base. Verrà usato per installare i prerequisiti e le applicazioni prima di acquisire l'immagine del computer.", + "loc.input.label.customImageOSType": "Sistema operativo dell'immagine di base", + "loc.input.label.packagePath": "Pacchetto di distribuzione", + "loc.input.help.packagePath": "Specificare il percorso della directory del pacchetto di distribuzione relativa a $(System.DefaultWorkingDirectory). Supporta il criterio di corrispondenza minima. Percorso di esempio: FrontendWebApp/**/GalleryApp
Tenere presente che questo pacchetto verrà copiato nella macchina virtuale temporanea creata da Packer. Se il pacchetto contiene un numero elevato di file e/o le dimensioni dei file sono molto elevate, il caricamento può richiedere molto tempo e rimanere probabilmente in esecuzione per alcune ore. Per ottimizzare il tempo di caricamento, verificare se le dimensioni del pacchetto possano essere ridotte significativamente. Un'alternativa consiste nell'usare un account di archiviazione di Azure intermedio. Caricare il pacchetto in un account di archiviazione prima di eseguire questa attività. Per questa attività usare un pacchetto contenente uno script che scaricherà il pacchetto richiesto dall'account di archiviazione.", + "loc.input.label.deployScriptPath": "Script di distribuzione", + "loc.input.help.deployScriptPath": "Consente di specificare il percorso relativo dello script di PowerShell (per Windows) o della shell (per Linux) che distribuisce il pacchetto. Questo script deve essere incluso nel percorso del pacchetto selezionato in precedenza. Supporta i criteri di corrispondenza minima. Percorso di esempio: distribuzione/**/script/windows/distribuzione.ps1", + "loc.input.label.deployScriptArguments": "Argomenti dello script di distribuzione", + "loc.input.help.deployScriptArguments": "Consente di specificare gli argomenti da passare allo script di distribuzione.", + "loc.input.label.additionalBuilderParameters": "Parametri aggiuntivi del compilatore", + "loc.input.help.additionalBuilderParameters": "In modalità modello Packer generato automaticamente l'attività crea un modello Packer con un compilatore di Azure. Questo compilatore viene usato per generare un'immagine del computer. È possibile aggiungere le chiavi nel compilatore di Azure per personalizzare il modello Packer generato. Ad esempio, impostare ssh_tty=true nel caso si usi un'immagine di base di CentOS ed è necessario avere un tty per eseguire sudo.
Per visualizzare/modificare i parametri aggiuntivi in una griglia, fare clic su \"…\" accanto alla casella di testo.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Ignora pulizia dei file temporanei durante il deprovisioning", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "Durante il deprovisioning della macchina virtuale, consente di ignorare la pulizia dei file temporanei caricati nella macchina virtuale. Vedere [qui](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Versione di Packer", + "loc.input.help.packerVersion": "Consente di specificare la versione di Packer da installare. Funzionerà solo con i modelli personalizzati.", + "loc.input.label.imageUri": "Nome o URL dell'immagine", + "loc.input.help.imageUri": "Consente di specificare un nome per la variabile di output in cui verrà archiviato l'URL del disco rigido virtuale dell'immagine del computer generata per l'immagine della macchina virtuale non gestita oppure il nome dell'immagine della macchina virtuale gestita.", + "loc.input.label.imageId": "ID risorsa di Azure", + "loc.input.help.imageId": "Specificare un nome per la variabile di output in cui verrà archiviato l'ID risorsa di Azure per l'immagine appena creata. È solo per le immagini gestite.", + "loc.messages.OSTypeNotSupported": "Questo tipo di sistema operativo non è supportato per la creazione dell'immagine: %s. Usare Windows o Linux.", + "loc.messages.CopyTemplateToTempFailed": "Non è stato possibile copiare il modello predefinito dall'origine %s alla posizione temporanea %s", + "loc.messages.TaskNotFound": "Non è stato possibile trovare il file task.json: %s", + "loc.messages.OriginalTemplateLocation": "Posizione del modello originale: %s", + "loc.messages.CopyingTemplate": "Copia del modello originale da %s alla posizione temporanea %s", + "loc.messages.TempTemplateLocation": "Il file di modello è stato copiato in una posizione temporanea: %s", + "loc.messages.CopySourceNotExists": "Il percorso del file di origine non esiste per la copia: %s", + "loc.messages.CreatingDestinationDir": "La destinazione per la copia non esiste. Verrà creata: %s", + "loc.messages.CreatedDestinationDir": "La directory di destinazione per la copia è stata creata: %s", + "loc.messages.ExecutingPackerFix": "Esecuzione del comando di correzione di Packer", + "loc.messages.ExecutingPackerValidate": "Esecuzione del comando di convalida di Packer per verificare la validità del modello", + "loc.messages.ExecutingPackerBuild": "Esecuzione del comando di compilazione di Packer. In attesa del completamento dell'operazione...", + "loc.messages.PackerBuildCompleted": "comando di compilazione di Packer completato.", + "loc.messages.ImageURIOutputVariableNotFound": "Non è stato possibile ottenere l'URI dell'immagine del disco rigido virtuale (immagine non gestita) dall'esecuzione di Packer. La variabile di output non verrà impostata.", + "loc.messages.ImageIDOutputVariableNotFound": "Non è stato possibile recuperare l'ID immagine gestita dall'esecuzione di Packer. La variabile di output non verrà impostata. Nota: questa variabile non deve essere usata con immagini di macchina virtuale non gestite.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Non è stato possibile ottenere il nome dell'immagine gestita dall'esecuzione di Packer. La variabile di output non verrà impostata.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Non è stato possibile ottenere il nome dell'immagine gestita o l'URI dell'immagine del disco rigido virtuale (immagine non gestita) dall'esecuzione di Packer. La variabile di output non verrà impostata.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Modello predefinito per il tipo di sistema operativo: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Il modello personalizzato non è stato trovato alla posizione: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Non è stato possibile eliminare la directory dei modelli temporanea %s. Eliminarla manualmente.", + "loc.messages.TaskParametersConstructorFailed": "Si è verificato un errore durante l'inizializzazione dell'attività: %s.", + "loc.messages.PackerFixFailed": "Il comando di correzione di Packer non è riuscito ed è stato restituito l'errore '%s'. Questo errore si verifica se l'attività non supporta la versione di Packer.", + "loc.messages.PackerValidateFailed": "Il comando di convalida di Packer non è riuscito. Questo errore si verifica se l'attività non supporta la versione di Packer.", + "loc.messages.ResolvedPathNotFound": "Non è stato trovato alcun file corrispondente al criterio %s nella cartella radice %s.", + "loc.messages.ResolvedDeployPackgePath": "Il percorso del pacchetto di distribuzione è stato risolto: %s.", + "loc.messages.ResolvedDeployScriptPath": "Il percorso dello script di distribuzione è stato risolto: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "Il sistema operativo non è supportato per l'esecuzione di Packer.", + "loc.messages.InstallExplicitPackerVersion": "La versione di Packer %s verrà scaricata e installata per l'attività in esecuzione.", + "loc.messages.DownloadingPackerRequired": "Packer non è installato oppure la versione è inferiore a %s. La versione %s verrà scaricata e installata per l'attività in esecuzione.", + "loc.messages.DownloadingPackerCompleted": "Il programma di installazione di Packer è stato scaricato nel percorso: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer è stato estratto nel percorso: %s.", + "loc.messages.CreatedStagingDirectory": "La directory di gestione temporanea in cui archiviare file binari e modelli Packer è stata creata: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "Non è stato possibile eliminare la directory di gestione temporanea %s. Eliminarla manualmente.", + "loc.messages.InstalledPackerVersion": "La versione attualmente installata di Packer è la %s.", + "loc.messages.PackerToolBusy": "Packer sembra essere occupato. Verrà effettuato un nuovo tentativo tra 1 secondo...", + "loc.messages.ResolvingDeployPackageInput": "Risoluzione del percorso del pacchetto di distribuzione.", + "loc.messages.ResolvingDeployScriptInput": "Risoluzione del percorso dello script di distribuzione.", + "loc.messages.ParsingAdditionalBuilderParameters": "Analisi dei parametri JSON aggiuntivi del compilatore.", + "loc.messages.ParsingTemplateFileContentFailed": "Non è possibile analizzare il contenuto JSON dal file modello %s con errore: %s.", + "loc.messages.ParsingCustomTemplateParameters": "Analisi dei parametri JSON personalizzati del modello.", + "loc.messages.FetchingSPNDetailsRemotely": "Recupero dei dettagli dell'SPN per l'ID app ID %s dalla connessione al servizio Azure AD Graph...", + "loc.messages.FetchedSPNDetailsRemotely": "I dettagli SPN sono stati recuperati. ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "Non è stato possibile recuperare i dettagli dell'SPN dalla connessione al servizio Graph. Errore: %s.", + "loc.messages.GetArtifactItemsNotSupported": "Il recupero degli elementi di artefatto non è supportato. Il percorso del codice non è valido", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Configurare l'identità del servizio gestita per la macchina virtuale 'https://aka.ms/azure-msi-docs'. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "La creazione dell'immagine gestita da un disco rigido virtuale di origine non è supportata. È necessario impostare il valore di input di 'Origine dell'immagine di base' su 'Raccolta'.", + "loc.messages.ExpiredServicePrincipal": "Non è stato possibile recuperare il token di accesso per Azure. Verificare che l'entità servizio usata sia valida e non sia scaduta." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..db1dbda350c5 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "マシン イメージのビルド", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=845329)、または [Packer のドキュメントを参照](https://www.packer.io/docs/index.html)", + "loc.description": "Packer を使ってマシン イメージをビルドします。このイメージは、Azure 仮想マシン スケール セットのデプロイに利用できます", + "loc.instanceNameFormat": "不変イメージのビルド", + "loc.releaseNotes": "現在このタスクは、マネージド ディスク イメージをサポートしています。", + "loc.group.displayName.AzureDetails": "Azure の詳細", + "loc.group.displayName.DeploymentInputs": "展開の入力", + "loc.group.displayName.Advanced": "詳細設定", + "loc.group.displayName.Output": "出力", + "loc.input.label.templateType": "Packer テンプレート", + "loc.input.help.templateType": "タスクで Packer テンプレートを自動生成するか、それとも自分で指定したカスタム テンプレートを使用するかを選択します。", + "loc.input.label.customTemplateLocation": "Packer テンプレートの場所", + "loc.input.help.customTemplateLocation": "ユーザー提供のカスタム テンプレートへのパス。", + "loc.input.label.customTemplateParameters": "テンプレート パラメーター", + "loc.input.help.customTemplateParameters": "カスタム テンプレートを作成するために Packer に渡すパラメーターを指定します。これは、使用しているカスタム テンプレートの \"variables\" セクションにマップする必要があります。たとえば、テンプレートに \"drop-location\" という名前の変数がある場合は、\"drop-location\" という名前のパラメーターと必要な値をここに追加します。リリース変数についても、値をリンクすることができます。追加のパラメーターをグリッドで表示/編集するには、テキスト ボックスの隣の […] をクリックします。", + "loc.input.label.ConnectedServiceName": "Azure サブスクリプション", + "loc.input.help.ConnectedServiceName": "マシン イメージの作成と保存を行う Azure Resource Manager サブスクリプションを選択します。", + "loc.input.label.isManagedImage": "マネージド VM ディスク イメージ", + "loc.input.help.isManagedImage": "生成されたイメージがマネージド イメージであるべきかどうかを確認します。", + "loc.input.label.managedImageName": "マネージド VM ディスク イメージ名", + "loc.input.help.managedImageName": "自動生成されたテンプレートのためのマネージド ディスク イメージの名前です。", + "loc.input.label.location": "ストレージの場所", + "loc.input.help.location": "ビルドしたマシン イメージを保存する場所。この場所は、イメージをビルドするための一時 VM を作成するためにも使用されます。", + "loc.input.label.storageAccountName": "ストレージ アカウント", + "loc.input.help.storageAccountName": "ビルドされたマシン イメージを保存するストレージ アカウント。このストレージ アカウントは選択した場所に既に存在している必要があります。", + "loc.input.label.azureResourceGroup": "リソース グループ", + "loc.input.help.azureResourceGroup": "選択したストレージ アカウントを含む Azure リソース グループ。", + "loc.input.label.baseImageSource": "基本イメージ ソース", + "loc.input.help.baseImageSource": "基本イメージのソースを選択します。選別された OS イメージのギャラリーから選択するか、カスタム VHD イメージの URL を指定することができます。
[Managed VM disk image] (マネージド VM ディスク イメージ) オプションにチェックを入れてマネージド イメージを作成するオプションを選択した場合、ここでは [ギャラリー] オプションのみを選択してください。[カスタム] ソースは、マネージド イメージの作成ではサポートされていません。", + "loc.input.label.baseImage": "基本イメージ", + "loc.input.help.baseImage": "選別された OS イメージの一覧の中から選択します。これはマシン イメージをキャプチャする前に前提条件とアプリケーションをインストールするために使用されます。", + "loc.input.label.customImageUrl": "基本イメージ URL", + "loc.input.help.customImageUrl": "ベース イメージの URL を指定します。これはマシン イメージをキャプチャする前に前提条件とアプリケーションをインストールするために使用されます。", + "loc.input.label.customImageOSType": "基本イメージ OS", + "loc.input.label.packagePath": "配置パッケージ", + "loc.input.help.packagePath": "配置パッケージ ディレクトリの $(System.DefaultWorkingDirectory) に対する相対パスを指定します。minimatch パターンがサポートされます。パスの例: FrontendWebApp/**/GalleryApp
このパッケージは、Packer が作成する一時仮想マシンにコピーされることにご注意ください。パッケージに多数のファイルが含まれている場合やファイルのサイズが非常に大きい場合は、アップロードに非常に長い時間がかかることがあります (数時間に達する可能性があります)。アップロード時間を最適化するうえで意味を持つ程度にまでパッケージのサイズを小さくできないか、ご確認ください。別の方法として、仲介役の Azure ストレージ アカウントを使用することもできます。このタスクを実行する前に、パッケージをストレージ アカウントにアップロードします。そして、このタスクには、ストレージ アカウントから必要なパッケージをダウンロードするスクリプトを入れたパッケージを使用します。", + "loc.input.label.deployScriptPath": "配置スクリプト", + "loc.input.help.deployScriptPath": "パッケージを配置する PowerShell スクリプト (Windows の場合) またはシェル スクリプト (Linux の場合) の相対パスを指定します。このスクリプトは、上で選択したパッケージ パスに含まれている必要があります。minimatch パターンがサポートされています。パスの例: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "配置スクリプトの引数", + "loc.input.help.deployScriptArguments": "配置スクリプトに渡される引数を指定します。", + "loc.input.label.additionalBuilderParameters": "追加のビルダー パラメーター", + "loc.input.help.additionalBuilderParameters": "自動生成された Packer テンプレート モードでは、タスクは Azure のビルダーを使用して Packer テンプレートを作成します。このビルダーは、マシン イメージを生成するために使用されます。Azure のビルダーにキーを追加すると、生成される Packer テンプレートをカスタマイズできます。たとえば、CentOS 基本イメージを使用していて、sudo を実行するために tty が必要な場合は、ssh_tty=true と設定します。
追加のパラメーターをグリッドで表示/編集するには、テキスト ボックスの隣の […] をクリックします。", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "プロビジョニング解除中に一時ファイルのクリーンアップをスキップする", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "VM のプロビジョニング解除中に、VM にアップロードされた一時ファイルのクリーンアップをスキップします。[こちら](https://www.packer.io/docs/builders/azure.html#skip_clean)をご覧ください", + "loc.input.label.packerVersion": "Packer バージョン", + "loc.input.help.packerVersion": "インストールする Packer のバージョンを指定します。これは、カスタム テンプレートでのみ機能します。", + "loc.input.label.imageUri": "イメージの URL または名前", + "loc.input.help.imageUri": "アンマネージド VM イメージの生成されたマシン イメージ VHD URL またはマネージド VM イメージのイメージ名を保存する、出力変数の名前を指定します。", + "loc.input.label.imageId": "Azure リソース ID", + "loc.input.help.imageId": "新しく作成されたイメージの Azure リソース ID を保存する出力変数の名前を指定します。これは、マネージド イメージにのみ適用されます。", + "loc.messages.OSTypeNotSupported": "この OS の種類はイメージ作成にはサポートされていません: %s。Windows または Linux をご使用ください。", + "loc.messages.CopyTemplateToTempFailed": "ソース %s から一時的な場所 %s にビルトイン テンプレートをコピーできませんでした", + "loc.messages.TaskNotFound": "Task.json ファイルが見つかりませんでした: %s", + "loc.messages.OriginalTemplateLocation": "元のテンプレートの場所: %s", + "loc.messages.CopyingTemplate": "元のテンプレートを %s から一時的な場所 %s にコピーしています", + "loc.messages.TempTemplateLocation": "テンプレート ファイルを一時的な場所にコピーしました: %s", + "loc.messages.CopySourceNotExists": "コピーするソース ファイル パスがありません: %s", + "loc.messages.CreatingDestinationDir": "コピー先が存在しません。作成しています: %s", + "loc.messages.CreatedDestinationDir": "コピー先ディレクトリが作成されました: %s", + "loc.messages.ExecutingPackerFix": "packer fix コマンドを実行中です", + "loc.messages.ExecutingPackerValidate": "テンプレートが有効であることを確認するために packer validate コマンドを実行中です", + "loc.messages.ExecutingPackerBuild": "packer build コマンドを実行中です。終了を待っています...", + "loc.messages.PackerBuildCompleted": "packer build が完了しました。", + "loc.messages.ImageURIOutputVariableNotFound": "packer 実行から vhd イメージ URI (アンマネージド イメージ) を取得できませんでした。出力変数は設定されません。", + "loc.messages.ImageIDOutputVariableNotFound": "packer 実行からマネージド イメージ ID を取得できませんでした。出力変数は設定されません。注意: この変数は、アンマネージド VM イメージには使用しないでください。", + "loc.messages.ManagedImageNameOutputVariableNotFound": "packer 実行からマネージド イメージ名を取得できませんでした。出力変数は設定されません。", + "loc.messages.CustumTemplateOutputVariableNotFound": "packer 実行からマネージド イメージ名も vhd イメージ URI (アンマネージド イメージ) も取得できませんでした。出力変数は設定されません。", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "OS の種類のビルトイン テンプレート: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "カスタム テンプレートが次の場所で見つかりません: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "一時的なテンプレート ディレクトリ %s を削除できませんでした。手動で削除してください。", + "loc.messages.TaskParametersConstructorFailed": "タスクの初期化中にエラーが発生しました: %s。", + "loc.messages.PackerFixFailed": "Packer fix コマンドが失敗しました。エラー: '%s'。これはタスクが Packer のバージョンをサポートしていないと発生することがあります。", + "loc.messages.PackerValidateFailed": "packer validate コマンドが失敗しました。これはタスクが packer バージョンをサポートしていないと発生することがあります。", + "loc.messages.ResolvedPathNotFound": "パターン: %s に一致するファイルがルート フォルダー: %s で見つかりません。", + "loc.messages.ResolvedDeployPackgePath": "配置パッケージ パスを解決しました: %s。", + "loc.messages.ResolvedDeployScriptPath": "配置スクリプト パスを解決しました: %s。", + "loc.messages.OSNotSupportedForRunningPacker": "OS は実行中の packer でサポートされていません。", + "loc.messages.InstallExplicitPackerVersion": "タスクを実行するため、packer バージョン %s がダウンロードおよびインストールされます。", + "loc.messages.DownloadingPackerRequired": "Packer がインストールされていないか、%s より前のバージョンです。タスク実行用にバージョン %s がダウンロードされ、インストールされます。", + "loc.messages.DownloadingPackerCompleted": "パス: %s で Packer インストーラーが正常にダウンロードされました。", + "loc.messages.ExtractingPackerCompleted": "パス: %s で Packer が正常に抽出されました。", + "loc.messages.CreatedStagingDirectory": "Packer バイナリとテンプレートを保持するステージング ディレクトリが作成されました: %s。", + "loc.messages.CouldNotDeleteStagingDirectory": "ステージング ディレクトリ %s を削除できませんでした。手動で削除してください。", + "loc.messages.InstalledPackerVersion": "現在インストールされている packer のバージョンは %s です。", + "loc.messages.PackerToolBusy": "Packer ツールがビジー状態のようです。1 秒後にもう一度試します...", + "loc.messages.ResolvingDeployPackageInput": "配置パッケージ パスを解決しています。", + "loc.messages.ResolvingDeployScriptInput": "配置スクリプト パスを解決しています。", + "loc.messages.ParsingAdditionalBuilderParameters": "追加のビルダー パラメーター JSON を解析しています。", + "loc.messages.ParsingTemplateFileContentFailed": "テンプレート ファイル %s からの JSON コンテンツを解析できません。エラー: %s。", + "loc.messages.ParsingCustomTemplateParameters": "カスタム テンプレート パラメーター JSON を解析しています。", + "loc.messages.FetchingSPNDetailsRemotely": "アプリ ID %s の SPN 詳細を Azure AD グラフ サービス接続からフェッチしています...", + "loc.messages.FetchedSPNDetailsRemotely": "SPN の詳細を正常にフェッチできました。ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "Graph サービス接続から SPN の詳細をフェッチできませんでした。エラー: %s。", + "loc.messages.GetArtifactItemsNotSupported": "成果物項目の取得はサポートされていません。無効なコード パスです", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。仮想マシンのマネージド サービス ID (MSI) を構成してください 'https://aka.ms/azure-msi-docs'。状態コード: %s、ステータス メッセージ: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。状態コード: %s、ステータス メッセージ: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "ソース VHD からのマネージド イメージの作成はサポートされていません。[基本イメージソース] の入力値を [ギャラリー] に設定する必要があります。", + "loc.messages.ExpiredServicePrincipal": "Azure のアクセス トークンをフェッチできませんでした。使用されているサービス プリンシパルが有効であり、有効期限が切れていないことを確認してください。" +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..79fceb81a813 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "머신 이미지 빌드", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=845329) 또는 [Packer 설명서 참조](https://www.packer.io/docs/index.html)", + "loc.description": "Packer를 사용하여 머신 이미지를 빌드합니다. 이 이미지는 Azure 가상 머신 확장 집합 배포에 사용할 수 있습니다.", + "loc.instanceNameFormat": "변경할 수 없는 이미지 빌드", + "loc.releaseNotes": "이제 이 작업에서 관리되는 디스크 이미지를 지원합니다.", + "loc.group.displayName.AzureDetails": "Azure 세부 정보", + "loc.group.displayName.DeploymentInputs": "배포 입력", + "loc.group.displayName.Advanced": "고급", + "loc.group.displayName.Output": "출력", + "loc.input.label.templateType": "Packer 템플릿", + "loc.input.help.templateType": "작업에서 Packer 템플릿을 자동으로 생성하도록 할지, 사용자가 제공한 사용자 지정 템플릿을 사용하도록 할지 선택합니다.", + "loc.input.label.customTemplateLocation": "Packer 템플릿 위치", + "loc.input.help.customTemplateLocation": "사용자가 제공하는 사용자 지정 템플릿에 대한 경로입니다.", + "loc.input.label.customTemplateParameters": "템플릿 매개 변수", + "loc.input.help.customTemplateParameters": "사용자 지정 템플릿을 작성하기 위해 Packer에 전달할 매개 변수를 지정합니다. 사용자 지정 템플릿의 \"변수\" 섹션에 매핑되어야 합니다. 예를 들어 템플릿에 \"drop-location\"이라는 변수가 있는 경우 여기서 이름이 \"drop-location\"이고 사용할 값이 지정된 매개 변수를 추가합니다. 릴리스 변수에 값을 연결할 수도 있습니다. 표에서 추가 매개 변수를 확인/편집하려면 텍스트 상자 옆에 있는 “…”을 클릭하세요.", + "loc.input.label.ConnectedServiceName": "Azure 구독", + "loc.input.help.ConnectedServiceName": "컴퓨터 이미지를 굽고 저장하는 데 필요한 Azure Resource Manager 구독을 선택합니다.", + "loc.input.label.isManagedImage": "관리되는 VM 디스크 이미지", + "loc.input.help.isManagedImage": "생성된 이미지가 관리되는 이미지여야 하는지 확인합니다.", + "loc.input.label.managedImageName": "관리되는 VM 디스크 이미지 이름 ", + "loc.input.help.managedImageName": "자동 생성된 템플릿에 대한 관리되는 디스크 이미지의 이름입니다.", + "loc.input.label.location": "저장소 위치", + "loc.input.help.location": "빌드한 컴퓨터 이미지를 저장하는 위치입니다. 이 위치는 이미지를 빌드하기 위한 임시 VM을 만드는 데에도 사용됩니다.", + "loc.input.label.storageAccountName": "스토리지 계정", + "loc.input.help.storageAccountName": "빌드한 컴퓨터 이미지를 저장하는 데 필요한 저장소 계정입니다. 이 저장소 계정은 선택한 위치에 이미 있어야 합니다.", + "loc.input.label.azureResourceGroup": "리소스 그룹", + "loc.input.help.azureResourceGroup": "선택한 저장소 계정을 포함한 Azure 리소스 그룹입니다.", + "loc.input.label.baseImageSource": "기본 이미지 소스", + "loc.input.help.baseImageSource": "기본 이미지의 소스를 선택합니다. 조정된 OS 이미지 갤러리에서 선택하거나, 사용자 지정 VHD 이미지의 URL을 지정할 수 있습니다.
'관리형 VM 디스크 이미지 ' 옵션을 선택하여 관리형 이미지를 만드는 옵션을 선택한 경우에는 여기서 '갤러리' 옵션을 선택해야 합니다. '사용자 지정' 소스는 관리형 이미지를 만드는 데 사용할 수 없습니다.", + "loc.input.label.baseImage": "기본 이미지", + "loc.input.help.baseImage": "조정된 OS 이미지 목록에서 선택합니다. 컴퓨터 이미지를 캡처하기 전에 필수 조건과 응용 프로그램을 설치하는 데 사용됩니다.", + "loc.input.label.customImageUrl": "기본 이미지 URL", + "loc.input.help.customImageUrl": "기본 이미지의 URL을 지정합니다. 머신 이미지를 캡처하기 전에 필수 구성 요소와 애플리케이션을 설치하는 데 사용됩니다.", + "loc.input.label.customImageOSType": "기본 이미지 OS", + "loc.input.label.packagePath": "배포 패키지", + "loc.input.help.packagePath": "배포 패키지 디렉터리의 경로를 $(System.DefaultWorkingDirectory)의 상대 경로로 지정합니다. minimatch 패턴을 지원합니다. 경로 예: FrontendWebApp/* */GalleryApp
이 패키지는 Packer에서 만드는 임시 가상 머신에 복사됩니다. 패키지에 많은 개수의 파일이 있거나 파일 크기가 매우 큰 경우 업로드하는 데 시간이 오래 걸릴 수 있습니다(몇 시간까지 실행 가능). 업로드 시간을 최적화하려면 패키지 크기를 유효하게 줄일 수 있는지 확인합니다. 또는 중간 Azure 스토리지 계정을 사용합니다. 이 작업을 실행하기 전에 패키지를 스토리지 계정에 업로드합니다. 그런 다음, 스토리지 계정에서 필요한 패키지를 다운로드하는 스크립트가 포함된 패키지를 이 작업에 사용합니다.", + "loc.input.label.deployScriptPath": "배포 스크립트", + "loc.input.help.deployScriptPath": "패키지를 배포하는 PowerShell 스크립트(Windows) 또는 셸 스크립트(Linux)에 대한 상대 경로를 지정합니다. 위에서 선택한 패키지 경로에 이 스크립트를 포함해야 합니다. minimatch 패턴을 지원합니다. 예제 경로: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "배포 스크립트 인수", + "loc.input.help.deployScriptArguments": "인수가 배포 스크립트로 전달되도록 지정합니다.", + "loc.input.label.additionalBuilderParameters": "추가 작성기 매개 변수", + "loc.input.help.additionalBuilderParameters": "자동 생성된 Packer 템플릿 모드에서 작업은 Azure 작성기를 사용하여 Packer 템플릿을 만듭니다. 이 작성기는 컴퓨터 이미지를 생성하는 데 사용됩니다. Azure 작성기에 키를 추가하여 생성된 Packer 템플릿을 사용자 지정할 수 있습니다. 예를 들어 CentOS 기본 이미지를 사용 중이며 sudo를 실행하기 위해 tty가 있어야 하는 경우 ssh_tty=true를 설정합니다.
표에서 추가 매개 변수를 확인/편집하려면 텍스트 상자 옆에 있는 “…”을 클릭하세요.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "프로비전 해제 중 임시 파일 정리 건너뛰기", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "VM 프로비전을 해제하는 동안 VM에 업로드된 임시 파일의 정리를 건너뜁니다. [여기](https://www.packer.io/docs/builders/azure.html#skip_clean)를 참조하세요.", + "loc.input.label.packerVersion": "Packer 버전", + "loc.input.help.packerVersion": "설치할 Packer 버전을 지정합니다. 사용자 지정 템플릿에서만 허용됩니다.", + "loc.input.label.imageUri": "이미지 URL 또는 이름", + "loc.input.help.imageUri": "관리되지 않는 VM 이미지에 대해 생성된 머신 이미지 VHD URL이나 관리되는 VM 이미지의 이미지 이름을 저장할 출력 변수의 이름을 입력합니다.", + "loc.input.label.imageId": "Azure 리소스 ID", + "loc.input.help.imageId": "새로 만든 이미지의 Azure 리소스 ID를 저장할 출력 변수의 이름을 지정합니다. 관리형 이미지에만 해당합니다.", + "loc.messages.OSTypeNotSupported": "OS 유형 %s은(는) 이미지를 만드는 데 지원되지 않습니다. Windows나 Linux를 사용하세요.", + "loc.messages.CopyTemplateToTempFailed": "소스 %s에서 임시 위치 %s(으)로 기본 제공 템플릿을 복사할 수 없음", + "loc.messages.TaskNotFound": "Task.json 파일을 찾을 수 없음: %s", + "loc.messages.OriginalTemplateLocation": "원래 템플릿 위치: %s", + "loc.messages.CopyingTemplate": "%s에서 임시 위치 %s(으)로 원래 템플릿을 복사하는 중", + "loc.messages.TempTemplateLocation": "임시 위치에 템플릿 파일이 복사됨: %s", + "loc.messages.CopySourceNotExists": "복사를 위한 소스 파일 경로가 없음: %s", + "loc.messages.CreatingDestinationDir": "복사를 위한 대상이 없습니다. 만드는 중: %s", + "loc.messages.CreatedDestinationDir": "복사를 위해 대상 디렉터리를 생성함: %s", + "loc.messages.ExecutingPackerFix": "Packer 수정 명령 실행 중", + "loc.messages.ExecutingPackerValidate": "템플릿이 유효한지 확인하기 위해 Packer 유효성 검사 명령 실행 중", + "loc.messages.ExecutingPackerBuild": "Packer 빌드 명령을 실행하고 있습니다. 완료될 때까지 대기하는 중입니다.", + "loc.messages.PackerBuildCompleted": "Packer 빌드가 완료되었습니다.", + "loc.messages.ImageURIOutputVariableNotFound": "Packer 실행에서 VHD 이미지 URI(관리되지 않는 이미지)를 가져올 수 없습니다. 출력 변수가 설정되지 않습니다.", + "loc.messages.ImageIDOutputVariableNotFound": "Packer 실행에서 관리형 이미지 ID를 가져올 수 없습니다. 출력 변수가 설정되지 않습니다. 참고: 비관리형 VM 이미지에는 이 변수를 사용할 수 없습니다.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Packer 실행에서 관리되는 이미지 이름을 가져올 수 없습니다. 출력 변수가 설정되지 않습니다.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Packer 실행에서 관리되는 이미지 이름이나 VHD 이미지 URI(관리되지 않는 이미지)를 가져올 수 없습니다. 출력 변수가 설정되지 않습니다.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "OS 유형에 대한 기본 제공 템플릿: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "사용자 지정 템플릿을 위치에서 찾을 수 없음: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "임시 템플릿 디렉터리 %s을(를) 삭제할 수 없습니다. 수동으로 삭제하세요.", + "loc.messages.TaskParametersConstructorFailed": "작업 초기화 중 오류 발생: %s.", + "loc.messages.PackerFixFailed": "'%s' 오류로 인해 Packer 수정 명령이 실패했습니다. 작업에서 Packer 버전을 지원하지 않는 경우 이러한 문제가 발생할 수 있습니다.", + "loc.messages.PackerValidateFailed": "Packer 유효성 검사 명령이 실패했습니다. 작업에서 Packer 버전을 지원하지 않는 경우 이러한 문제가 발생할 수 있습니다.", + "loc.messages.ResolvedPathNotFound": "%s 패턴과 일치하는 파일이 루트 폴더 %s에 없습니다.", + "loc.messages.ResolvedDeployPackgePath": "확인된 배포 패키지 경로: %s.", + "loc.messages.ResolvedDeployScriptPath": "확인된 배포 스크립트 경로: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "Packer 실행에 OS가 지원되지 않습니다.", + "loc.messages.InstallExplicitPackerVersion": "작업을 실행하기 위해 Packer 버전 %s을(를) 다운로드하여 설치합니다.", + "loc.messages.DownloadingPackerRequired": "Packer가 설치되지 않았거나 버전이 %s 보다 낮습니다. 작업을 실행하기 위해 버전 %s이(가) 다운로드되어 설치됩니다.", + "loc.messages.DownloadingPackerCompleted": "Packer 설치 관리자가 경로에 다운로드됨: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer가 경로 %s에 추출되었습니다.", + "loc.messages.CreatedStagingDirectory": "Packer를 이진 및 템플릿으로 유지하기 위해 스테이징 디렉터리를 생성함: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "스테이징 디렉터리 %s을(를) 삭제할 수 없습니다. 수동으로 삭제하세요.", + "loc.messages.InstalledPackerVersion": "현재 설치된 Packer 버전은 %s입니다.", + "loc.messages.PackerToolBusy": "Packer 도구가 사용 중인 것 같습니다. 1초 후에 다시 시도합니다.", + "loc.messages.ResolvingDeployPackageInput": "배포 패키지 경로를 확인 중입니다.", + "loc.messages.ResolvingDeployScriptInput": "배포 스크립트 경로를 확인 중입니다.", + "loc.messages.ParsingAdditionalBuilderParameters": "추가 작성기 매개 변수 json을 구문 분석 중입니다.", + "loc.messages.ParsingTemplateFileContentFailed": "템플릿 파일 %s의 json 콘텐츠를 구문 분석할 수 없습니다(오류: %s).", + "loc.messages.ParsingCustomTemplateParameters": "사용자 지정 템플릿 매개 변수 json을 구문 분석 중입니다.", + "loc.messages.FetchingSPNDetailsRemotely": "Azure AD Graph 서비스 연결에서 앱 ID %s에 대한 SPN 정보를 페치하는 중...", + "loc.messages.FetchedSPNDetailsRemotely": "SPN 세부 정보를 가져왔습니다. ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "그래프 서비스 연결에서 SPN 정보를 페치할 수 없습니다. 오류: %s.", + "loc.messages.GetArtifactItemsNotSupported": "아티팩트 항목 가져오기가 지원되지 않음, 잘못된 코드 경로", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 가상 머신에 대한 MSI(관리 서비스 ID)를 구성하세요('https://aka.ms/azure-msi-docs'). 상태 코드: %s, 상태 메시지: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 상태 코드: %s, 상태 메시지: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "소스 VHD에서 관리형 이미지를 만들 수 없습니다. '기본 이미지 소스' 입력 값을 '갤러리'로 설정해야 합니다.", + "loc.messages.ExpiredServicePrincipal": "Azure의 액세스 토큰을 페치할 수 없습니다. 사용한 서비스 주체가 유효하고 만료되지 않았는지 확인하세요." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..d88b0aca1960 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "Создать образ компьютера", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=845329) или [документацию по Packer](https://www.packer.io/docs/index.html)", + "loc.description": "Создание образа компьютера с помощью Packer, который можно использовать для развертывания масштабируемого набора виртуальных машин Azure", + "loc.instanceNameFormat": "Собрать неизменяемый образ", + "loc.releaseNotes": "Эта задача теперь поддерживает управляемые образы дисков.", + "loc.group.displayName.AzureDetails": "Сведения об Azure", + "loc.group.displayName.DeploymentInputs": "Входные данные развертывания", + "loc.group.displayName.Advanced": "Дополнительно", + "loc.group.displayName.Output": "Выход", + "loc.input.label.templateType": "Шаблон Packer", + "loc.input.help.templateType": "Укажите, следует ли задаче автоматически генерировать шаблон Packer или использовать предоставленный вами настраиваемый шаблон.", + "loc.input.label.customTemplateLocation": "Расположение шаблона Packer", + "loc.input.help.customTemplateLocation": "Путь к настраиваемому шаблону, указанному пользователем.", + "loc.input.label.customTemplateParameters": "Параметры шаблона", + "loc.input.help.customTemplateParameters": "Укажите параметры, которые будут переданы в Packer для создания пользовательского шаблона. Они должны соответствовать разделу variables в пользовательском шаблоне. Например, если в шаблоне есть переменная drop-location, добавьте здесь параметр с именем drop-location и требуемое значение. Значение можно также связать с переменной выпуска. Чтобы просмотреть и изменить дополнительные параметры в таблице, щелкните многоточие (…) рядом с текстовым полем.", + "loc.input.label.ConnectedServiceName": "Подписка Azure", + "loc.input.help.ConnectedServiceName": "Выберите подписку Azure Resource Manager для внедрения и сохранения образа компьютера.", + "loc.input.label.isManagedImage": "Образ диска управляемой виртуальной машины", + "loc.input.help.isManagedImage": "Проверьте, должен ли созданный образ быть управляемым.", + "loc.input.label.managedImageName": "Имя образа диска управляемой виртуальной машины ", + "loc.input.help.managedImageName": "Имя образа управляемого диска для автоматически создаваемых шаблонов.", + "loc.input.label.location": "Место хранения", + "loc.input.help.location": "Расположение для размещения созданного образа компьютера. Это расположение также будет использоваться при создании временной виртуальной машины для сборки образа.", + "loc.input.label.storageAccountName": "Учетная запись хранения", + "loc.input.help.storageAccountName": "Учетная запись хранения, в которой будет размещен созданный образ компьютера. Эта учетная запись хранения должна существовать в выбранном расположении.", + "loc.input.label.azureResourceGroup": "Группа ресурсов", + "loc.input.help.azureResourceGroup": "Группа ресурсов Azure, в которой находится выбранная учетная запись хранения.", + "loc.input.label.baseImageSource": "Источник базового образа", + "loc.input.help.baseImageSource": "Выберите источник базового образа. Вы можете выбрать проверенную коллекцию образов ОС или указать URL-адрес настраиваемого образа VHD.
Обратите внимание, что, если выбрано создание управляемого образа путем установки флажка \"Управляемый образ диска виртуальной машины\", здесь следует выбрать только параметр \"Коллекция\". Источник \"Настраиваемый\" не поддерживается для создания управляемого образа.", + "loc.input.label.baseImage": "Базовый образ", + "loc.input.help.baseImage": "Выберите образ из проверенного списка образов ОС. Этот образ будет использоваться для установки необходимых компонентов и приложений перед захватом образа компьютера.", + "loc.input.label.customImageUrl": "URL-адрес базового образа", + "loc.input.help.customImageUrl": "Укажите URL-адрес базового образа. Этот образ будет использоваться для установки необходимых компонентов и приложений перед захватом образа компьютера.", + "loc.input.label.customImageOSType": "ОС базового образа", + "loc.input.label.packagePath": "Пакет развертывания", + "loc.input.help.packagePath": "Укажите путь к каталогу пакетов развертывания относительно $(System.DefaultWorkingDirectory). Поддерживает шаблон minimatch. Пример пути: FrontendWebApp/**/GalleryApp
Обратите внимание, что этот пакет будет скопирован во временную виртуальную машину, созданную Packer. Если пакет содержит слишком много файлов и (или) эти файлы имеют очень большой размер, отправка может занять довольно много времени (возможно, несколько часов). Чтобы оптимизировать время отправки, проверьте, можно ли значительно уменьшить размер пакета. Кроме того, можно использовать промежуточную учетную запись хранения Azure. Перед выполнением этой задачи отправьте пакет в учетную запись хранения. Для этой задачи используйте пакет, содержащий скрипт, который скачает требуемый пакет из учетной записи хранения.", + "loc.input.label.deployScriptPath": "Сценарий развертывания", + "loc.input.help.deployScriptPath": "Укажите относительный путь к сценарию PowerShell (для Windows) или сценарию оболочки (для Linux) для развертывания пакета. Сценарий должен содержаться в указанном выше пути к пакету. Поддерживаются шаблоны minimatch. Пример пути: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "Аргументы сценария развертывания", + "loc.input.help.deployScriptArguments": "Укажите аргументы, которые будут переданы в сценарий развертывания.", + "loc.input.label.additionalBuilderParameters": "Дополнительные параметры сборщика", + "loc.input.help.additionalBuilderParameters": "В режиме автоматического создания шаблона Packer задача создает шаблон Packer со сборщиком Azure. Этот сборщик служит для создания образа компьютера. В сборщик Azure можно добавить параметры для настройки созданного шаблона Packer. Например, задайте параметр ssh_tty=true, если используется базовый образ CentOS и для запуска sudo требуется телетайп.
Чтобы просмотреть и изменить дополнительные параметры в таблице, щелкните многоточие (…) рядом с текстовым полем.", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Пропустить очистку временных файлов при отзыве", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "Во время отзыва виртуальной машины пропустить очистку временных файлов, добавленных в виртуальную машину. См. [эту статью](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Версия Packer", + "loc.input.help.packerVersion": "Укажите версию Packer для установки. Это работает только с пользовательскими шаблонами.", + "loc.input.label.imageUri": "URL-адрес или имя образа", + "loc.input.help.imageUri": "Укажите имя выходной переменной, в которой будет храниться созданный URL-адрес виртуального жесткого диска с образом компьютера для образа неуправляемой виртуальной машины или имя образа для образа управляемой виртуальной машины.", + "loc.input.label.imageId": "Идентификатор ресурса Azure", + "loc.input.help.imageId": "Укажите имя выходной переменной, в которой будет храниться идентификатор ресурса Azure для вновь созданного образа. Это предназначено только для управляемых образов.", + "loc.messages.OSTypeNotSupported": "Операционная система этого типа не поддерживается для создания образов: %s. Воспользуйтесь ОС Windows или Linux.", + "loc.messages.CopyTemplateToTempFailed": "Не удалось скопировать встроенный шаблон из источника %s во временное расположение %s", + "loc.messages.TaskNotFound": "Не удалось найти файл Task.json: %s", + "loc.messages.OriginalTemplateLocation": "Исходное расположение шаблона: %s", + "loc.messages.CopyingTemplate": "Копирование исходного шаблона из %s во временное расположение %s", + "loc.messages.TempTemplateLocation": "Файл шаблона скопирован во временное расположение: %s", + "loc.messages.CopySourceNotExists": "Путь к исходному файлу не существует для копирования: %s", + "loc.messages.CreatingDestinationDir": "Место назначения для копирования не существует. Создание: %s", + "loc.messages.CreatedDestinationDir": "Создан каталог назначения для копирования: %s", + "loc.messages.ExecutingPackerFix": "Выполняется команда исправления Packer", + "loc.messages.ExecutingPackerValidate": "Выполняется команда проверки Packer для проверки допустимости шаблона.", + "loc.messages.ExecutingPackerBuild": "Выполняется команда сборки Packer. Ожидается ее завершение...", + "loc.messages.PackerBuildCompleted": "Сборка Packer завершена.", + "loc.messages.ImageURIOutputVariableNotFound": "Во время выполнения Packer не удалось получить URI образа виртуального жесткого диска (неуправляемый образ). Выходная переменная не будет задана.", + "loc.messages.ImageIDOutputVariableNotFound": "Не удалось получить идентификатор управляемого образа из выполнения Packer. Выходная переменная не будет задана. Примечание. Эта переменная не должна использоваться с неуправляемыми образами виртуальных машин.", + "loc.messages.ManagedImageNameOutputVariableNotFound": "Во время выполнения Packer не удалось получить имя управляемого образа. Выходная переменная не будет задана.", + "loc.messages.CustumTemplateOutputVariableNotFound": "Во время выполнения Packer не удалось получить имя управляемого образа или URI образа виртуального жесткого диска (неуправляемый образ). Выходная переменная не будет задана.", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "Встроенный шаблон для типа ОС: %s ", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Не удалось найти настраиваемый шаблон в следующем расположении: %s", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Не удалось удалить временный каталог шаблона %s. Удалите его вручную.", + "loc.messages.TaskParametersConstructorFailed": "Ошибка при инициализации задачи: %s.", + "loc.messages.PackerFixFailed": "Сбой выполнения команды исправления Packer с ошибкой: \"%s\". Это может быть вызвано тем, что задача не поддерживает версию Packer.", + "loc.messages.PackerValidateFailed": "Сбой выполнения команды проверки Packer. Это может быть вызвано тем, что задача не поддерживает версию Packer.", + "loc.messages.ResolvedPathNotFound": "Не найдены файлы, соответствующие шаблону %s, в корневой папке %s.", + "loc.messages.ResolvedDeployPackgePath": "Разрешенный путь к пакету развертывания: %s.", + "loc.messages.ResolvedDeployScriptPath": "Разрешенный путь к сценарию развертывания: %s.", + "loc.messages.OSNotSupportedForRunningPacker": "Операционная система не поддерживается Packer.", + "loc.messages.InstallExplicitPackerVersion": "Версия Packer %s будет скачана и установлена для выполняющейся задачи.", + "loc.messages.DownloadingPackerRequired": "Либо Packer не установлен, либо установлена его версия, предшествующая версии %s. Для выполнения задачи будет загружена и установлена версия %s.", + "loc.messages.DownloadingPackerCompleted": "Установщик Packer загружен по следующему пути: %s.", + "loc.messages.ExtractingPackerCompleted": "Packer успешно извлечен по следующему пути: %s.", + "loc.messages.CreatedStagingDirectory": "Создан каталог временного размещения для двоичных файлов и шаблонов Packer: %s.", + "loc.messages.CouldNotDeleteStagingDirectory": "Не удалось удалить каталог временного размещения %s. Удалите его вручную.", + "loc.messages.InstalledPackerVersion": "Версия текущего установленного Packer: %s.", + "loc.messages.PackerToolBusy": "Средство Packer, кажется, занято. Повторная попытка будет выполнена через 1 секунду...", + "loc.messages.ResolvingDeployPackageInput": "Разрешается путь развертывания пакета.", + "loc.messages.ResolvingDeployScriptInput": "Разрешается путь развертывания скрипта.", + "loc.messages.ParsingAdditionalBuilderParameters": "Анализ файла JSON с дополнительными параметрами сборщика.", + "loc.messages.ParsingTemplateFileContentFailed": "Не удалось проанализировать содержимое JSON из файла шаблона %s. Ошибка: %s.", + "loc.messages.ParsingCustomTemplateParameters": "Анализ файла JSON с параметрами пользовательского шаблона.", + "loc.messages.FetchingSPNDetailsRemotely": "Идет получение сведений об имени участника-службы для идентификатора приложения %s из подключения к службе Azure AD Graph...", + "loc.messages.FetchedSPNDetailsRemotely": "Сведения об имени субъекта-службы получены успешно. ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "Не удалось получить сведения об имени субъекта-службы из подключения к службе графов. Ошибка: %s.", + "loc.messages.GetArtifactItemsNotSupported": "Получение элементов артефактов не поддерживается; недопустимый путь к коду", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Настройте управляемое удостоверение службы (MSI) для виртуальной машины \"https://aka.ms/azure-msi-docs\". Код состояния: %s; сообщения о состоянии: %s.", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Код состояния: %s, сообщение о состоянии: %s.", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "Создание управляемого образа из исходного виртуального жесткого диска не поддерживается. Необходимо задать для входного параметра \"Источник базового образа\" значение \"Коллекция\".", + "loc.messages.ExpiredServicePrincipal": "Не удалось получить маркер доступа для Azure. Убедитесь, что используемый субъект-служба является допустимым, а срок его действия не истек." +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..beb933d45da3 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "生成计算机映像", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=845329)或[参阅 Packer 文档](https://www.packer.io/docs/index.html)", + "loc.description": "使用 Packer 生成计算机映像,此映像可用于 Azure 虚拟机规模集部署", + "loc.instanceNameFormat": "生成不可变映像", + "loc.releaseNotes": "此任务现在支持托管磁盘映像。", + "loc.group.displayName.AzureDetails": "Azure 详细信息", + "loc.group.displayName.DeploymentInputs": "部署输入", + "loc.group.displayName.Advanced": "高级", + "loc.group.displayName.Output": "输出", + "loc.input.label.templateType": "Packer 模板", + "loc.input.help.templateType": "选择希望任务自动生成 Packer 模板还是使用自己提供的自定义模板。", + "loc.input.label.customTemplateLocation": "Packer 模板位置", + "loc.input.help.customTemplateLocation": "自定义用户提供的模板的路径。", + "loc.input.label.customTemplateParameters": "模板参数", + "loc.input.help.customTemplateParameters": "指定将传递给 Packer 来生成自定义模板的参数。这应映射到自定义模板中的“变量”部分。例如,如果模板具有名为 \"drop-location\" 的变量,则在此处添加名为 \"drop-location\" 的参数以及你想使用的值。也可将值链接到发布变量。若要查看/编辑网格中的其他参数,请单击文本框旁边的“…”。", + "loc.input.label.ConnectedServiceName": "Azure 订阅", + "loc.input.help.ConnectedServiceName": "选择 Azure 资源管理器订阅来生成和存储计算机映像。", + "loc.input.label.isManagedImage": "托管 VM 磁盘映像", + "loc.input.help.isManagedImage": "检查生成的映像是否应该是托管映像。", + "loc.input.label.managedImageName": "托管 VM 磁盘映像名称", + "loc.input.help.managedImageName": "自动生成的模板的托管磁盘映像名称。", + "loc.input.label.location": "存储位置", + "loc.input.help.location": "用于存储已生成的计算机映像的位置。该位置还可用于为生成映像而创建临时 VM。", + "loc.input.label.storageAccountName": "存储帐户", + "loc.input.help.storageAccountName": "用于存储已生成的计算机映像的存储帐户。该存储帐户必须预先存在于所选的位置中。", + "loc.input.label.azureResourceGroup": "资源组", + "loc.input.help.azureResourceGroup": "包含所选存储帐户的 Azure 资源组。", + "loc.input.label.baseImageSource": "基础映像源", + "loc.input.help.baseImageSource": "选择基础映像的源。可以从操作系统映像的精选库进行选择,也可以提供自定义 VHD 映像的 URL。
请注意,如果通过选中“托管 VM 磁盘映像”选项选择了创建托管映像的选项,则只应在此处选择“库”选项。不支持使用“自定义”源创建托管映像。", + "loc.input.label.baseImage": "基础映像", + "loc.input.help.baseImage": "从操作系统映像的精选列表中进行选择。这将用于在捕获计算机映像之前安装必备组件和应用程序。", + "loc.input.label.customImageUrl": "基础映像 URL", + "loc.input.help.customImageUrl": "指定基本映像的 URL。这将用于在捕获计算机映像之前安装必备组件和应用程序。", + "loc.input.label.customImageOSType": "基础映像操作系统", + "loc.input.label.packagePath": "部署包", + "loc.input.help.packagePath": "指定部署包目录相对于 $(System.DefaultWorkingDirectory) 的路径。支持 minimatch 模式。示例路径: FrontendWebApp/**/GalleryApp
请注意,此包将被复制到 Packer 创建的临时虚拟机中。如果包中包含大量文件和/或文件大小非常大,则上传可能需要很长时间(可能会运行几个小时)。若要优化上传时间,请查看是否可以有效地减小包大小。另一种方法是使用中间 Azure 存储帐户。请在运行此任务之前将包上传到存储帐户。对于此任务,使用包含将从存储帐户下载所需包的脚本的包。", + "loc.input.label.deployScriptPath": "部署脚本", + "loc.input.help.deployScriptPath": "指定用于部署包的 powershell 脚本(对于 Windows)或 shell 脚本(对于 Linux)的相对路径。此脚本应包含在上面选择的包路径中。支持 minimatch 模式。示例路径: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "部署脚本参数", + "loc.input.help.deployScriptArguments": "指定要传递给部署脚本的参数。", + "loc.input.label.additionalBuilderParameters": "更多生成器参数", + "loc.input.help.additionalBuilderParameters": "在自动生成的 Packer 模板模式下,任务将通过 Azure 生成器创建 Packer 模板。此生成器用于生成计算机映像。可将密钥添加到 Azure 生成器,以自定义生成的 Packer 模板。例如,如果使用 CentOS 基本映像且需要拥有 tty 来运行 sudo,则设置 ssh_tty=true。
若要查看/编辑网格中的其他参数,请单击文本框旁边的“…”。", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "在取消预配过程中跳过临时文件清理", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "在取消预配 VM 的过程中,跳过清理已上传到 VM 的临时文件。请参阅[此处](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Packer 版本", + "loc.input.help.packerVersion": "指定要安装的 Packer 版本。此操作仅适用于自定义模板。", + "loc.input.label.imageUri": "映像 URL 或名称", + "loc.input.help.imageUri": "提供输出变量的名称,该变量将存储非托管 VM 映像的已生成计算机映像 VHD URL 或托管 VM 映像的映像名称。", + "loc.input.label.imageId": "Azure 资源 ID", + "loc.input.help.imageId": "提供输出变量的名称,该变量将存储新创建的映像的 Azure 资源 ID。这仅适用于托管映像。", + "loc.messages.OSTypeNotSupported": "操作系统类型不支持映像创建: %s。请使用 Windows 或 Linux。", + "loc.messages.CopyTemplateToTempFailed": "无法将源 %s 中的内置模板复制到临时位置 %s", + "loc.messages.TaskNotFound": "找不到 Task.json 文件: %s", + "loc.messages.OriginalTemplateLocation": "原始模板位置: %s", + "loc.messages.CopyingTemplate": "正在将 %s 中的原始模板复制到临时位置 %s", + "loc.messages.TempTemplateLocation": "已将模板文件复制到临时位置: %s", + "loc.messages.CopySourceNotExists": "复制 %s 的源文件路径不存在", + "loc.messages.CreatingDestinationDir": "复制的目标位置不存在。正在创建: %s", + "loc.messages.CreatedDestinationDir": "已创建目标目录用于复制: %s ", + "loc.messages.ExecutingPackerFix": "正在运行 packer 修补命令", + "loc.messages.ExecutingPackerValidate": "正在运行 packer 验证命令,以确保模板有效", + "loc.messages.ExecutingPackerBuild": "正在运行 packer 生成命令。正在等待运行过程完成...", + "loc.messages.PackerBuildCompleted": "packer 生成已完成。", + "loc.messages.ImageURIOutputVariableNotFound": "无法在 packer 执行过程中获取 VHD 映像 URI (非托管映像)。将不会设置输出变量。", + "loc.messages.ImageIDOutputVariableNotFound": "无法从 packer 执行过程中获取托管映像 ID。将不会设置输出变量。注意: 不应将此变量用于非托管的 VM 映像。", + "loc.messages.ManagedImageNameOutputVariableNotFound": "无法在 packer 执行过程中获取托管映像名称。将不会设置输出变量。", + "loc.messages.CustumTemplateOutputVariableNotFound": "无法在 packer 执行过程中获取托管映像名称或 VHD 映像 URI (非托管映像)。将不会设置输出变量。", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "操作系统类型 %s 的内置模板", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "位置 %s 上找不到自定义模板", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "无法删除临时模板目录 %s。请手动删除。", + "loc.messages.TaskParametersConstructorFailed": "初始化任务 %s 时出现错误。", + "loc.messages.PackerFixFailed": "Packer 修复命令失败,错误为:“%s”。任务不支持 packer 版本时会发生此情况。", + "loc.messages.PackerValidateFailed": "Packer 验证命令失败。任务不支持 packer 版本时会发生此情况。", + "loc.messages.ResolvedPathNotFound": "在根文件夹 %s 下找不到任何匹配模式 %s 的文件。", + "loc.messages.ResolvedDeployPackgePath": "已解析部署包路径: %s。", + "loc.messages.ResolvedDeployScriptPath": "已解析部署脚本路径: %s。", + "loc.messages.OSNotSupportedForRunningPacker": "操作系统不支持运行 packer。", + "loc.messages.InstallExplicitPackerVersion": "将为运行中的任务下载并安装 Packer 版本 %s。", + "loc.messages.DownloadingPackerRequired": "未安装 packer 或其版本低于 %s。为运行任务,将下载并安装版本 %s。", + "loc.messages.DownloadingPackerCompleted": "已在路径 %s 上成功下载 Packer 安装程序。", + "loc.messages.ExtractingPackerCompleted": "Packer 已成功提取到路径: %s.", + "loc.messages.CreatedStagingDirectory": "已创建分段目录用于保留 packer 二进制和模板: %s。", + "loc.messages.CouldNotDeleteStagingDirectory": "无法删除分段目录 %s。请手动删除。", + "loc.messages.InstalledPackerVersion": "当前安装的 packer 版本是 %s。", + "loc.messages.PackerToolBusy": "Packer 工具似乎处于忙碌状态。请在 1 秒后重试...", + "loc.messages.ResolvingDeployPackageInput": "正在解析部署包路径。", + "loc.messages.ResolvingDeployScriptInput": "正在解析部署脚本路径。", + "loc.messages.ParsingAdditionalBuilderParameters": "分析其他生成器参数 json。", + "loc.messages.ParsingTemplateFileContentFailed": "无法从模板文件 %s 分析 json 内容,错误为: %s。", + "loc.messages.ParsingCustomTemplateParameters": "分析自定义模板参数 json。", + "loc.messages.FetchingSPNDetailsRemotely": "从 Azure AD 图形服务连接提取应用 ID %s 的 SPN 详细信息...", + "loc.messages.FetchedSPNDetailsRemotely": "已成功提取 SPN 详细信息。ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "无法从图形服务连接提取 SPN 详细信息。错误: %s。", + "loc.messages.GetArtifactItemsNotSupported": "获取不受支持的项目项、无效的代码路径", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "无法提取托管服务主体的访问令牌。请为虚拟机配置托管服务标识(MSI)(https://aka.ms/azure-msi-docs)。状态代码: %s,状态消息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "无法提取托管服务主体的访问令牌。状态代码: %s,状态消息: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "不支持从源 VHD 创建托管映像。必须将“基础映像源”输入值设置为“库”。", + "loc.messages.ExpiredServicePrincipal": "无法提取 Azure 的访问令牌。请确保使用的服务主体有效且未过期。" +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PackerBuildV1/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..47426a942647 --- /dev/null +++ b/_generated/PackerBuildV1/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,100 @@ +{ + "loc.friendlyName": "建置機器映像", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=845329)或[參閱 Packer 文件](https://www.packer.io/docs/index.html)", + "loc.description": "使用 Packer 建置機器映像,其可用於 Azure 虛擬機器擴展集部署", + "loc.instanceNameFormat": "建置不可變的映像", + "loc.releaseNotes": "此工作現在支援受控磁碟映像。", + "loc.group.displayName.AzureDetails": "Azure 詳細資料", + "loc.group.displayName.DeploymentInputs": "部署輸入", + "loc.group.displayName.Advanced": "進階", + "loc.group.displayName.Output": "輸出", + "loc.input.label.templateType": "Packer 範本", + "loc.input.help.templateType": "請選取您希望工作自動產生 Packer 範本,或使用您提供的自訂範本。", + "loc.input.label.customTemplateLocation": "Packer 範本位置", + "loc.input.help.customTemplateLocation": "使用者提供之自訂範本的路徑。", + "loc.input.label.customTemplateParameters": "範本參數", + "loc.input.help.customTemplateParameters": "指定將會傳遞至 Packer 以建置自訂範本的參數。這應該對應到您自訂範本中的 [變數] 區段。例如,若範本具有名為 \"drop-location\" 的變數,則於此處新增名稱為 \"drop-location\" 的參數,以及您要使用的值。您也可以將此值連結至版本變數。若要檢視/編輯方格中的其他參數,請按一下文字方塊旁的 [...]。", + "loc.input.label.ConnectedServiceName": "Azure 訂用帳戶", + "loc.input.help.ConnectedServiceName": "請選取 Azure Resource Manager 訂閱,供製作及儲存電腦映像之用。", + "loc.input.label.isManagedImage": "受控 VM 磁碟映像", + "loc.input.help.isManagedImage": "確認所產生的映像是否應為受控映像。", + "loc.input.label.managedImageName": "受控 VM 磁碟映像名稱 ", + "loc.input.help.managedImageName": "自動產生範本的受控磁碟映像名稱。", + "loc.input.label.location": "儲存體位置", + "loc.input.help.location": "儲存建置之機器映像的位置。建立暫存 VM 供建置映像之用時,也會使用此位置。", + "loc.input.label.storageAccountName": "儲存體帳戶", + "loc.input.help.storageAccountName": "用以儲存所建置之機器映像的儲存體帳戶。所選位置中必須已有此儲存體帳戶。", + "loc.input.label.azureResourceGroup": "資源群組", + "loc.input.help.azureResourceGroup": "包含所選儲存體帳戶的 Azure 資源群組。", + "loc.input.label.baseImageSource": "基底映像來源", + "loc.input.help.baseImageSource": "請選取基底映像的來源。您可以從彙總的 OS 映像資源庫選取,或提供您自訂 VHD 映像的 URL。
請注意,如果您已透過選取 [受控 VM 磁碟映像] 選項選取了建立受控映像的選項,則應只選取此處的 [資源庫] 選項。不支援以「自訂」來源建立受控映像。", + "loc.input.label.baseImage": "基底映像", + "loc.input.help.baseImage": "請從準備的 OS 映像清單中選擇。其可用於在擷取電腦映像之前,安裝必要條件與應用程式。", + "loc.input.label.customImageUrl": "基底映像 URL", + "loc.input.help.customImageUrl": "指定基底映像的 URL。在擷取機器映像前,這會用來安裝必要條件與應用程式。", + "loc.input.label.customImageOSType": "基底映像 OS", + "loc.input.label.packagePath": "部署套件", + "loc.input.help.packagePath": "請指定相對於 $(System.DefaultWorkingDirectory) 的部署套件目錄路徑。支援 minimatch 模式。範例路徑: FrontendWebApp/**/GalleryApp
請注意,此套件將複製到暫存虛擬機器,Packer 會建立於其中。如果套件包含大量檔案且 (或) 檔案大小過大,則上傳可能會花費大量時間 (可能會執行數個小時)。如果要將上傳時間降至最低,請確認是否可有意義地減少套件的大小。另一項方法則是使用中繼 Azure 儲存體帳戶,即在執行此工作前將套件上傳至儲存體帳戶。針對這項工作,請使用包含會從儲存體帳戶下載必要套件之指令碼的套件。", + "loc.input.label.deployScriptPath": "部署指令碼", + "loc.input.help.deployScriptPath": "指定用以部署套件之 PowerShell 指令碼 (適用於 Windows) 或 Shell 指令碼 (適用於 Linux) 的相對路徑。此指令碼應該包含在上列選取的套件路徑中。支援 minimatch 模式。範例路徑: deploy/**/scripts/windows/deploy.ps1", + "loc.input.label.deployScriptArguments": "部署指令碼引數", + "loc.input.help.deployScriptArguments": "請指定要傳遞給部署指令碼的引數。", + "loc.input.label.additionalBuilderParameters": "其他產生器參數", + "loc.input.help.additionalBuilderParameters": "在自動產生的 Packer 範本模式中,工作會使用 Azure 產生器建立 Packer 範本。此產生器可用以產生電腦映像。您可以將金鑰新增至 Azure 產生器中,以自訂產生的 Packer 範本。例如,若目前使用 CentOS 基底映像,且您需要有 tty 才可執行 sudo,在此情況下請設定 ssh_tty=true。
若要檢視/編輯方格中的其他參數,請按一下文字方塊旁的 [...]。", + "loc.input.label.skipTempFileCleanupDuringVMDeprovision": "在取消佈建期間跳過清除暫存檔案", + "loc.input.help.skipTempFileCleanupDuringVMDeprovision": "在取消佈建 VM 期間,跳過清除已上傳至 VM 之暫存檔案。請參閱 [這裡](https://www.packer.io/docs/builders/azure.html#skip_clean)", + "loc.input.label.packerVersion": "Packer 版本", + "loc.input.help.packerVersion": "指定要安裝的 Packer 版本。此項僅適用於自訂範本。", + "loc.input.label.imageUri": "映像 URL 或名稱", + "loc.input.help.imageUri": "請提供輸出變數的名稱; 該輸出變數將用於存放所產生之非受控 VM 映像的機器映像 VHD URL,或受控 VM 映像的映像名稱。", + "loc.input.label.imageId": "Azure 資源識別碼", + "loc.input.help.imageId": "請提供輸出變數的名稱,該變數會儲存新建立映像的 Azure 資源識別碼。這僅適用於受控映像。", + "loc.messages.OSTypeNotSupported": "此 OS 類型無法建立映像: %s。請使用 Windows 或 Linux。", + "loc.messages.CopyTemplateToTempFailed": "無法將內建範本從來源 %s 複製到暫存位置 %s", + "loc.messages.TaskNotFound": "找不到 Task.json 檔案: %s", + "loc.messages.OriginalTemplateLocation": "原始範本位置: %s", + "loc.messages.CopyingTemplate": "正在將原始範本從 %s 複製到暫存位置 %s", + "loc.messages.TempTemplateLocation": "已將範本檔案複製到暫存位置: %s", + "loc.messages.CopySourceNotExists": "缺少複製所需的來源檔案路徑: %s", + "loc.messages.CreatingDestinationDir": "沒有複製目的地。正在建立: %s", + "loc.messages.CreatedDestinationDir": "已建立複製所需的目的地目錄: %s", + "loc.messages.ExecutingPackerFix": "正在執行 Packer 修正命令", + "loc.messages.ExecutingPackerValidate": "正在執行 Packer 驗證命令,以確定範本的有效性", + "loc.messages.ExecutingPackerBuild": "正在執行 Packer 建置命令。請等候該命令完成...", + "loc.messages.PackerBuildCompleted": "Packer 建置完成。", + "loc.messages.ImageURIOutputVariableNotFound": "無法從 Packer 執行取得 VHD 映像 URI (非受控映像)。將不會設定輸出變數。", + "loc.messages.ImageIDOutputVariableNotFound": "無法從 Packer 執行取得受控映像識別碼。將不會設定輸出變數。注意: 這個變數不應搭配非受控 VM 映像使用。", + "loc.messages.ManagedImageNameOutputVariableNotFound": "無法從 Packer 執行取得受控映像名稱。將不會設定輸出變數。", + "loc.messages.CustumTemplateOutputVariableNotFound": "無法從 Packer 執行取得受控映像名稱或 VHD 映像 URI。將不會設定輸出變數。", + "loc.messages.BuiltInTemplateNotFoundErrorMessagePathName": "OS 類型 %s 的內建範本", + "loc.messages.CustomTemplateNotFoundErrorMessagePathName": "在位置 %s 找不到自訂範本", + "loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "無法刪除暫存範本目錄 %s。請手動刪除。", + "loc.messages.TaskParametersConstructorFailed": "初始化工作 %s 時發生錯誤。", + "loc.messages.PackerFixFailed": "Packer 修正命令失敗,錯誤: '%s'。當工作不支援 Packer 版本時,可能會發生此狀況。", + "loc.messages.PackerValidateFailed": "Packer 驗證命令失敗。當工作不支援 Packer 的版本時,即可能發生此狀況。", + "loc.messages.ResolvedPathNotFound": "找不到任何符合模式 %s 的檔案 (於根資料夾 %s 下)。", + "loc.messages.ResolvedDeployPackgePath": "解析的部署套件路徑: %s。", + "loc.messages.ResolvedDeployScriptPath": "解析的部署指令碼路徑: %s。", + "loc.messages.OSNotSupportedForRunningPacker": "OS 無法執行 Packer。", + "loc.messages.InstallExplicitPackerVersion": "將會為正在執行的工作下載並安裝 Packer 版本 %s。", + "loc.messages.DownloadingPackerRequired": "可能是未安裝 Packer,或 Packer 的版本低於 %s。將下載及安裝 %s 版供執行工作之用。", + "loc.messages.DownloadingPackerCompleted": "從下列路徑下載 Packer 安裝程式成功: %s。", + "loc.messages.ExtractingPackerCompleted": "從下列路徑擷取 Packer 成功: %s.", + "loc.messages.CreatedStagingDirectory": "已建立用以保存 Packer 二進位檔與範本的暫存目錄: %s。", + "loc.messages.CouldNotDeleteStagingDirectory": "無法刪除暫存目錄 %s。請手動刪除。", + "loc.messages.InstalledPackerVersion": "目前安裝的 Packer 版本為 %s。", + "loc.messages.PackerToolBusy": "Packer 工具似乎忙碌中。將於 1 秒後重試...", + "loc.messages.ResolvingDeployPackageInput": "正在解析部署套件路徑。", + "loc.messages.ResolvingDeployScriptInput": "正在解析部署指令碼路徑。", + "loc.messages.ParsingAdditionalBuilderParameters": "正在剖析其他產生器參數 json。", + "loc.messages.ParsingTemplateFileContentFailed": "無法從範本檔案 %s 剖析 json 內容。錯誤: %s。", + "loc.messages.ParsingCustomTemplateParameters": "正在剖析自訂範本參數 json。", + "loc.messages.FetchingSPNDetailsRemotely": "正在從 Azure AD 圖形服務連線擷取應用程式識別碼 %s 的 SPN 詳細資料...", + "loc.messages.FetchedSPNDetailsRemotely": "已成功擷取 SPN 詳細資料。ObjectId: %s", + "loc.messages.FailedToFetchSPNDetailsRemotely": "無法從圖形服務連線擷取 SPN 詳細資料。錯誤: %s。", + "loc.messages.GetArtifactItemsNotSupported": "不支援取得成品項目,程式碼路徑無效", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "無法擷取受控服務主體的存取權杖。請設定虛擬機器的受控服務識別 (MSI) (https://aka.ms/azure-msi-docs)。狀態碼: %s,狀態訊息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "無法擷取受控服務主體的存取權杖。狀態碼: %s,狀態訊息: %s", + "loc.messages.CreateManagedImageNotSupportedForVHDSource": "不支援從來源 VHD 建立受控映像。您必須將 'Base image source' 輸入值設為 'Gallery'。", + "loc.messages.ExpiredServicePrincipal": "無法擷取 Azure 的存取權杖。請驗證使用的服務主體是否有效且未過期。" +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0.ts b/_generated/PackerBuildV1/Tests/L0.ts new file mode 100644 index 000000000000..f5345017c8ac --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0.ts @@ -0,0 +1,723 @@ +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import tl = require('azure-pipelines-task-lib'); + +function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } +} + +describe('PackerBuild Suite V1', function() { + this.timeout(30000); + before((done) => { + + delete process.env["__build_output__"] ; + delete process.env["__copy_fails__"] ; + delete process.env["__deploy_package_found__"] ; + delete process.env["__dest_path_exists__"] ; + delete process.env["__download_fails__"] ; + delete process.env["__extract_fails__"] ; + delete process.env["__lower_version__"] ; + delete process.env["__no_output_vars__"] ; + delete process.env["__ostype__"] ; + delete process.env["__packer_build_fails__"] ; + delete process.env["__packer_build_no_output__"] ; + delete process.env["__packer_exists__"] ; + delete process.env["__packer_fix_fails__"] ; + delete process.env["__packer_validate_fails__"] ; + + done(); + }); + after(function () { + }); + + if(tl.osType().match(/^Win/)) { + it('Runs successfully for windows template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Writes packer var file successfully for windows template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + let match1 = 'writing to file C:\\somefolder\\somevarfile.json content: {"subscription_id":"sId","client_id":"spId","client_secret":"spKey","tenant_id":"tenant"}'; + let match2 = 'writing to file C:\\somefolder\\somevarfile.json content: {"resource_group":"testrg","storage_account":"teststorage","image_publisher":"MicrosoftWindowsServer","image_offer":"WindowsServer","image_sku":"2012-R2-Datacenter","location":"South India","capture_name_prefix":"Release-1","skip_clean":"true","script_relative_path":"dir3\\\\somedir\\\\deploy.ps1","package_path":"C:\\\\dir1\\\\somedir\\\\dir2","package_name":"dir2","script_arguments":"-target \\"subdir 1\\" -shouldFail false"}'; + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf(match1) > -1, 'correctly writes contents of var file (containing azure spn details)'); + assert(tr.stdout.indexOf(match2) > -1, 'correctly writes contents of var file (containing template variables)'); + done(); + }); + + it('Runs successfully for windows template with managed image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsManaged.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('Runs successfully for custom template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0CustomTemplate.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('Writes packer var file successfully for custom template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0CustomTemplate.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + let match1 = 'writing to file C:\\somefolder\\somevarfile.json content: {"client_id":"abcdef","drop-location":"C:\\\\folder 1\\\\folder-2"}'; + let match2 = 'writing to file C:\\somefolder\\somevarfile.json content: {}'; + + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf(match1) > -1, 'correctly writes contents of var file (containing azure spn details)'); + assert(tr.stdout.indexOf(match2) > -1, 'correctly writes contents of var file (containing template variables)'); + + done(); + }); + + it('Runs successfully for windows custom image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Var file for packer tool is successfully created for custom image template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + let match1 = 'writing to file C:\\somefolder\\somevarfile.json content: {"resource_group":"testrg","storage_account":"teststorage","image_url":"https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/vsts-buildimagetask/Release-1-osDisk.2d175222-b257-405f-a07f-0af4dc4b3dc4.vhd","location":"South India","capture_name_prefix":"Release-1","skip_clean":"true","script_relative_path":"dir3\\\\somedir\\\\deploy.ps1","package_path":"C:\\\\dir1\\\\somedir\\\\dir2","package_name":"dir2","script_arguments":"-target \\"subdir 1\\" -shouldFail false"}'; + let match2 = 'writing to file C:\\somefolder\\somevarfile.json content: {"subscription_id":"sId","client_id":"spId","client_secret":"spKey","tenant_id":"tenant"}'; + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf(match1) > -1, 'correctly writes contents of var file (containing azure spn details)'); + assert(tr.stdout.indexOf(match2) > -1, 'correctly writes contents of var file (containing template variables)'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Creates output variables from packer log', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + runValidations(() => { + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + }, tr, done); + }); + + it('Creates output variables from packer log for managed disk image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsManaged.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + runValidations(() => { + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]builtInWinManagedImageName") != -1, "image uri output variable not set"); + }, tr, done); + }); + + it('Creates output variables from packer log for custom template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0CustomTemplate.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + }, tr, done); + }); + + it('Creates output variables from packer log for custom template generating managed image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0CustomManagedTemplate.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]builtInWinManagedImageName") != -1, "image uri output variable not set"); + }, tr, done); + }); + + it('Creates output variables from packer log for custom windows base image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Should copy builtin template to temp location for windows template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("copying basedir\\DefaultTemplates\\default.windows.template.json to F:\\somedir\\tempdir\\100") != -1, "built-in template should be copied to temp location"); + done(); + }); + + it('Should copy builtin template to temp location for windows template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("copying basedir\\DefaultTemplates\\custom.windows.template.json to F:\\somedir\\tempdir\\100") != -1, "custom image template should be copied to temp location"); + done(); + }); + + it('Should invoke three packer commands - fix, validate and build', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("packer fix -validate=false") != -1, "packer fix command not called"); + assert(tr.stdout.indexOf("packer validate") != -1, "packer validate command not called"); + assert(tr.stdout.indexOf("packer build -force") != -1, "packer build with force command not called"); + done(); + }); + + it('Should write output of packer fix to updated template file', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("packer fix -validate=false") != -1, "packer fix command not called"); + assert(tr.stdout.indexOf("writing to file F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json content: { \"some-key\": \"some-value\" }") != -1, "packer validate command not called"); + done(); + }); + + it('Should cleanup temp template folder', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Windows.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("rmRF F:\\somedir\\tempdir\\100") != -1, "rmRF should be called on temp template folder"); + done(); + }); + + it('should fail if builtin template does not exist or copy fails', (done:MochaDone) => { + process.env["__copy_fails__"] = "true"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__copy_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf("Not found basedir\\DefaultTemplates\\default.windows.template.json") != -1, "error message should be right"); + done(); + }); + + it('should fail if custom windows base image template does not exist or copy fails', (done:MochaDone) => { + process.env["__copy_fails__"] = "true"; + let tp = path.join(__dirname, 'L0WindowsCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__copy_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf("copy failed while copying from basedir\\DefaultTemplates\\custom.windows.template.json") != -1, "error message should be right"); + done(); + }); + + it('should fail if os type is not supported', (done:MochaDone) => { + process.env["__ostype__"] = "random"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__ostype__"] = "windows"; + + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf("##vso[task.issue type=error;]loc_mock_OSTypeNotSupported") != -1, "error message should be right"); + done(); + }); + + it('should fail if deploy package path cannot be globbed', (done:MochaDone) => { + process.env["__deploy_package_found__"] = "false"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__deploy_package_found__"] = null; + + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf("##vso[task.complete result=Failed;]loc_mock_TaskParametersConstructorFailed") != -1, "error message should be right"); + done(); + }); + + it('should fail if packer fix exits with non zero code', (done:MochaDone) => { + process.env["__packer_fix_fails__"] = "true"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_fix_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.invokedToolCount == 2, 'should not invoke packer validate and build commands. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("packer fix failed\r\nsome error") != -1, "error message should be right"); + assert(tr.stdout.indexOf("loc_mock_PackerFixFailed") != -1, "error message should be right"); + done(); + }); + + it('should fail if packer validate exits with non zero code', (done:MochaDone) => { + process.env["__packer_validate_fails__"] = "true"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.failed, 'task should have failed'); + assert(tr.invokedToolCount == 3, 'should not invoke packer build command. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("packer validate failed\r\nsome error") != -1, "error message should be right"); + assert(tr.stdout.indexOf("loc_mock_PackerValidateFailed") != -1, "error message should be right"); + done(); + }); + + it('should fail if packer build exits with non zero code', (done:MochaDone) => { + process.env["__packer_validate_fails__"] = "false"; + process.env["__packer_build_fails__"] = "true"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_build_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.invokedToolCount == 4, 'all 4 commands should have been invoked. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("packer build failed\r\nsome error") != -1, "error message should be right"); + done(); + }); + + it('should fail if packer build exits with non zero code for custom template', (done:MochaDone) => { + process.env["__packer_build_fails__"] = "true"; + let tp = path.join(__dirname, 'L0CustomTemplate.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_build_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.invokedToolCount == 4, 'all 4 commands should have been invoked. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("packer build failed\r\nsome error") != -1, "error message should be right"); + done(); + }); + + it('should fail if output variables cannot be parsed from packer log', (done:MochaDone) => { + process.env["__packer_build_no_output__"] = "true"; + process.env["__packer_build_fails__"] = "false"; + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_build_no_output__"] = "false"; + + assert(tr.failed, 'task should fail if output is not parsed properly'); + assert(tr.invokedToolCount == 4, 'all 4 commands should have been invoked. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]") == -1, "should not try to set output variable"); + assert(tr.stdout.indexOf("##vso[task.issue type=error;]loc_mock_ImageURIOutputVariableNotFound") != -1, "should show proper console message"); + done(); + }); + + it('should not fail if output variables cannot be parsed from packer log but output variables has not been set by user', (done:MochaDone) => { + process.env["__no_output_vars__"] = "true"; + process.env["__packer_build_no_output__"] = "true"; + + let tp = path.join(__dirname, 'L0WindowsFail.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__no_output_vars__"] = "false"; + process.env["__packer_build_no_output__"] = "false"; + + assert(tr.succeeded, 'task should not fail if output is not parsed properly'); + assert(tr.invokedToolCount == 4, 'all 4 commands should have been invoked. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]") == -1, "should not try to set output variable"); + done(); + }); + + it('parser should parse LF and CR', (done:MochaDone) => { + process.env["__build_output__"] = "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\rStorageAccountLocation: SouthIndia\r some random string\n"; + let tp = path.join(__dirname, 'L0Parser.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('copyFiles should not create dest if it exists', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Utilities.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.stdout.indexOf("creating path: F:\\somedir\\tempdir\\100") == -1, "dest should not be created"); + assert(tr.stdout.indexOf("copying .\\DefaultTemplates\\default.windows.template.json to F:\\somedir\\tempdir\\100") != -1, "copy should be done"); + done(); + }); + + it('copyFiles should create dest if it does not exist', (done:MochaDone) => { + process.env["__dest_path_exists__"] = "false"; + + let tp = path.join(__dirname, 'L0Utilities.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__dest_path_exists__"] = "true"; + + assert(tr.stdout.indexOf("creating path: F:\\somedir\\tempdir\\100") != -1, "dest should be created"); + assert(tr.stdout.indexOf("copying .\\DefaultTemplates\\default.windows.template.json to F:\\somedir\\tempdir\\100") != -1, "copy should be done"); + done(); + }); + + it('isGreaterVersion should compare correctly', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Utilities.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.stdout.indexOf("isGreaterVersion scenario 1 pass") != -1, "isGreaterVersion scenario 1 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 2 pass") != -1, "isGreaterVersion scenario 2 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 3 pass") != -1, "isGreaterVersion scenario 3 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 4 pass") != -1, "isGreaterVersion scenario 4 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 5 pass") != -1, "isGreaterVersion scenario 5 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 6 pass") != -1, "isGreaterVersion scenario 6 failed"); + assert(tr.stdout.indexOf("isGreaterVersion scenario 7 pass") != -1, "isGreaterVersion scenario 7 failed"); + done(); + }); + + it('Downloads packer for windows agent if packer not exists', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool 4 times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("Downloading packer from url: https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_windows_amd64.zip") != -1, "should download from correct url"); + assert(tr.stdout.indexOf("downloading from url https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_windows_amd64.zip to F:\\somedir\\tempdir\\100\\packer.zip") != -1, "should download to correct staging dir"); + assert(tr.stdout.indexOf("extracting from zip F:\\somedir\\tempdir\\100\\packer.zip to F:\\somedir\\tempdir\\100\\packer") != -1, "should extract from and to correct path"); + assert(tr.stdout.indexOf("Packer path to be used by task: F:\\somedir\\tempdir\\100\\packer\\packer.exe") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Downloads packer for windows agent if packer of lower version exists', (done:MochaDone) => { + process.env["__packer_exists__"] = "true"; + process.env["__lower_version__"] = "true"; + + let tp = path.join(__dirname, 'L0WindowsInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_exists__"] = "false"; + process.env["__lower_version__"] = "false"; + + assert(tr.invokedToolCount == 5, 'should have invoked tool 5 times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("Downloading packer from url: https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_windows_amd64.zip") != -1, "should download from correct url"); + assert(tr.stdout.indexOf("downloading from url https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_windows_amd64.zip to F:\\somedir\\tempdir\\100\\packer.zip") != -1, "should download to correct staging dir"); + assert(tr.stdout.indexOf("extracting from zip F:\\somedir\\tempdir\\100\\packer.zip to F:\\somedir\\tempdir\\100\\packer") != -1, "should extract from and to correct path"); + assert(tr.stdout.indexOf("Packer path to be used by task: F:\\somedir\\tempdir\\100\\packer\\packer.exe") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Should cleanup staging folder on windows agent', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("rmRF F:\\somedir\\tempdir\\100") != -1, "rmRF should be called on temp template folder"); + done(); + }); + + it('Downloads packer failure should fail the task', (done:MochaDone) => { + process.env["__packer_exists__"] = "true"; + process.env["__lower_version__"] = "true"; + process.env["__download_fails__"] = "true"; + + let tp = path.join(__dirname, 'L0WindowsInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_exists__"] = "false"; + process.env["__lower_version__"] = "false"; + process.env["__download_fails__"] = "false"; + + assert(tr.invokedToolCount == 1, 'should have invoked tool only once. actual: ' + tr.invokedToolCount); + assert(tr.failed, 'task should fail if download fails'); + assert(tr.stdout.indexOf("##vso[task.issue type=error;]packer download failed!!") != -1, "error message should be right"); + done(); + }); + + it('Packer zip extraction failure should fail the task', (done:MochaDone) => { + process.env["__extract_fails__"] = "true"; + + let tp = path.join(__dirname, 'L0WindowsInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__extract_fails__"] = "false"; + + assert(tr.invokedToolCount == 0, 'should have invoked tool not even once. actual: ' + tr.invokedToolCount); + assert(tr.failed, 'task should fail if extraction fails'); + assert(tr.stdout.indexOf("##vso[task.issue type=error;]packer zip extraction failed!!") != -1, "error message should be right"); + done(); + }); + + it('Should add additional parameters to builder section in builtin template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0WindowsBuiltinTemplateAdditionalParameters.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + runValidations(() => { + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.stdout.indexOf("writing to file F:\\somedir\\tempdir\\100\\default.windows.template-builderUpdated.json content: {\"builders\":[{\"type\":\"amazonaws\",\"ssh_pty\":\"true\"}]}") != -1, "additional parameters should be written to updated template file"); + assert(tr.succeeded, 'task should have succeeded'); + }, tr, done); + }); + + } else { + it('Runs successfully for linux template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Runs successfully for linux template with managed image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxManaged.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Runs successfully for linux custom image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Creates output variables from packer log for linux', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Creates output variables from packer log for linux for managed disk image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxManaged.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]builtInWinManagedImageName") != -1, "image uri output variable not set"); + done(); + }); + + it('Creates output variables from packer log for custom linuxbase image', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Should copy builtin template to temp location for linux template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("copying /basedir/DefaultTemplates/default.linux.template.json to /tmp/tempdir/100") != -1, "built-in template should be copied to temp location"); + + done(); + }); + + it('Should not fetch SPN object for linux VM even if service endpoint does not contain it', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("loc_mock_FetchingSPNDetailsRemotely.") == -1, "SPN object should not be fetched"); + }, tr, done); + + }); + + it('Should cleanup temp template folder on linux', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("rmRF /tmp/tempdir/100") != -1, "rmRF should be called on temp template folder"); + done(); + }); + + it('should fail if custom linux base image template does not exist or copy fails', (done:MochaDone) => { + process.env["__copy_fails__"] = "true"; + let tp = path.join(__dirname, 'L0LinuxCustomImage.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__copy_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf("copy failed while copying from /basedir/DefaultTemplates/custom.linux.template.json") != -1, "error message should be right"); + done(); + }); + + it('should fail if packer build exits with non zero code for linux', (done:MochaDone) => { + process.env["__packer_build_fails__"] = "true"; + let tp = path.join(__dirname, 'L0Linux.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_build_fails__"] = "false"; + + assert(tr.failed, 'task should have failed'); + assert(tr.invokedToolCount == 4, 'all 4 commands should have been invoked. actual: ' + tr.invokedToolCount); + assert(tr.stdout.indexOf("packer build failed\r\nsome error") != -1, "error message should be right"); + done(); + }); + + it('Downloads packer for linux agent if packer not exists', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 3, 'should have invoked tool thrice. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("Downloading packer from url: https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_linux_amd64.zip") != -1, "should download from correct url"); + assert(tr.stdout.indexOf("downloading from url https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_linux_amd64.zip to /tmp/tempdir/100/packer.zip") != -1, "should download to correct staging dir"); + assert(tr.stdout.indexOf("extracting from zip /tmp/tempdir/100/packer.zip to /tmp/tempdir/100/packer") != -1, "should extract from and to correct path"); + assert(tr.stdout.indexOf("Packer path to be used by task: /tmp/tempdir/100/packer/packer") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Downloads packer for linux agent if packer of lower version exists', (done:MochaDone) => { + process.env["__packer_exists__"] = "true"; + process.env["__lower_version__"] = "true"; + + let tp = path.join(__dirname, 'L0LinuxInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + process.env["__packer_exists__"] = "false"; + process.env["__lower_version__"] = "false"; + + assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("Downloading packer from url: https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_linux_amd64.zip") != -1, "should download from correct url"); + assert(tr.stdout.indexOf("downloading from url https://releases.hashicorp.com/packer/1.2.4/packer_1.2.4_linux_amd64.zip to /tmp/tempdir/100/packer.zip") != -1, "should download to correct staging dir"); + assert(tr.stdout.indexOf("extracting from zip /tmp/tempdir/100/packer.zip to /tmp/tempdir/100/packer") != -1, "should extract from and to correct path"); + assert(tr.stdout.indexOf("Packer path to be used by task: /tmp/tempdir/100/packer/packer") != -1, "should show message that packer will be downloaded"); + assert(tr.stdout.indexOf("##vso[task.setvariable variable=imageUri;isOutput=false;issecret=false;]https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd") != -1, "image uri output variable not set"); + done(); + }); + + it('Should cleanup staging folder on linux agent', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxInstallPacker.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("rmRF /tmp/tempdir/100") != -1, "rmRF should be called on temp template folder"); + done(); + }); + + it('Should add additional parameters to builder section in builtin template', (done:MochaDone) => { + let tp = path.join(__dirname, 'L0LinuxBuiltinTemplateAdditionalParameters.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.stdout.indexOf("writing to file /tmp/tempdir/100/default.linux.template-builderUpdated.json content: {\"builders\":[{\"type\":\"amazonaws\",\"ssh_pty\":\"true\"}]}") != -1, "additional parameters should be written to updated template file"); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + } +}); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0CustomManagedTemplate.ts b/_generated/PackerBuildV1/Tests/L0CustomManagedTemplate.ts new file mode 100644 index 000000000000..ccd481464b7e --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0CustomManagedTemplate.ts @@ -0,0 +1,97 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', 'custom'); +tr.setInput('customTemplateLocation', 'C:\\custom.template.json'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("customTemplateParameters", "{\"client_id\": \"abcdef\", \"drop-location\":\"C:\\\\folder 1\\\\folder-2\"}"); + +process.env["RELEASE_RELEASENAME"] = "Release-1"; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "C:\\custom.template.json": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false C:\\custom.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json C:\\custom.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json C:\\custom.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nManagedImageResourceGroupName: packer-managed-res-grp\nManagedImageName: builtInWinManagedImageName\nManagedImageLocation: SouthIndia", + } + }, + "exist": { + "C:\\": true, + "packer": true + }, + "rmRF": { + "C:\\": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + if(process.env["__copy_fails__"] === "true") { + throw "copy failed"; + } else { + console.log('copying ' + source + ' to ' + destination); + } + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + return [patterns]; + }, + getCurrentTime: function() { + return 100; + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0CustomTemplate.ts b/_generated/PackerBuildV1/Tests/L0CustomTemplate.ts new file mode 100644 index 000000000000..64c8a846534f --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0CustomTemplate.ts @@ -0,0 +1,97 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', 'custom'); +tr.setInput('customTemplateLocation', 'C:\\custom.template.json'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("customTemplateParameters", "{\"client_id\": \"abcdef\", \"drop-location\":\"C:\\\\folder 1\\\\folder-2\"}"); + +process.env["RELEASE_RELEASENAME"] = "Release-1"; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "C:\\custom.template.json": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false C:\\custom.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json C:\\custom.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json C:\\custom.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "C:\\": true, + "packer": true + }, + "rmRF": { + "C:\\": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + if(process.env["__copy_fails__"] === "true") { + throw "copy failed"; + } else { + console.log('copying ' + source + ' to ' + destination); + } + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + return [patterns]; + }, + getCurrentTime: function() { + return 100; + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0Linux.ts b/_generated/PackerBuildV1/Tests/L0Linux.ts new file mode 100644 index 000000000000..9182c8f39827 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0Linux.ts @@ -0,0 +1,138 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "/a/w"; + +let taskPath = path.join(__dirname, '..', 'src', 'main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'Canonical:UbuntuServer:14.04.4-LTS:linux'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1/**/dir2'); +tr.setInput('deployScriptPath', 'dir3/**/deploy.sh'); +tr.setInput('deployScriptArguments', "\"subdir 1\" false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "/basedir/DefaultTemplates/default.linux.template.json": true, + "/packer-user-scripts/deploy.sh": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false /tmp/tempdir/100/default.linux.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + }, + "packer fix -validate=false \\tmp\\tempdir\\100\\default.linux.template.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "/tmp/tempdir/100": true, + "\\tmp\\tempdir\\100": true, + "/tmp/tempdir/100/": true, + "\\tmp\\tempdir\\100/": true, + "packer": true + }, + "rmRF": { + "/tmp/tempdir/100": { 'success': true }, + "\\tmp\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Linux" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "/somefolder/somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["/tmp/dir1/somedir/dir2"]; + } else { + return ["/tmp/dir1/somedir/dir2/dir3/somedir/deploy.sh"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "/tmp/tempdir" + }, + getCurrentDirectory: function() { + return "/basedir/currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0LinuxBuiltinTemplateAdditionalParameters.ts b/_generated/PackerBuildV1/Tests/L0LinuxBuiltinTemplateAdditionalParameters.ts new file mode 100644 index 000000000000..c105fb527d8d --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0LinuxBuiltinTemplateAdditionalParameters.ts @@ -0,0 +1,141 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "/a/w"; + +let taskPath = path.join(__dirname, '..', 'src', 'main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'Canonical:UbuntuServer:14.04.4-LTS:linux'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1/**/dir2'); +tr.setInput('deployScriptPath', 'dir3/**/deploy.sh'); +tr.setInput('deployScriptArguments', "\"subdir 1\" false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{\"ssh_pty\": \"true\", \"type\":\"amazonaws\"}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "/basedir/DefaultTemplates/default.linux.template.json": true, + "/packer-user-scripts/deploy.sh": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false /tmp/tempdir/100/default.linux.template-builderUpdated.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-builderUpdated-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-builderUpdated-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + }, + "packer fix -validate=false \\tmp\\tempdir\\100\\default.linux.template-builderUpdated.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-builderUpdated-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-builderUpdated-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "/tmp/tempdir/100": true, + "\\tmp\\tempdir\\100": true, + "/tmp/tempdir/100/": true, + "\\tmp\\tempdir\\100/": true, + "packer": true + }, + "rmRF": { + "/tmp/tempdir/100": { 'success': true }, + "\\tmp\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Linux" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + readJsonFile: function(filePath: string) { + return "{\"builders\":[{\"type\":\"azure-arm\"}]}"; + }, + generateTemporaryFilePath: function () { + return "/somefolder/somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["/tmp/dir1/somedir/dir2"]; + } else { + return ["/tmp/dir1/somedir/dir2/dir3/somedir/deploy.sh"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "/tmp/tempdir" + }, + getCurrentDirectory: function() { + return "/basedir/currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); diff --git a/_generated/PackerBuildV1/Tests/L0LinuxCustomImage.ts b/_generated/PackerBuildV1/Tests/L0LinuxCustomImage.ts new file mode 100644 index 000000000000..c096c29f2c95 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0LinuxCustomImage.ts @@ -0,0 +1,143 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "/a/w"; + +let taskPath = path.join(__dirname, '..', 'src', 'main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'customVhd'); +tr.setInput('customImageUrl', 'https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/vsts-buildimagetask/Release-1-osDisk.2d175222-b257-405f-a07f-0af4dc4b3dc4.vhd'); +tr.setInput('customImageOSType', 'linux'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1/**/dir2'); +tr.setInput('deployScriptPath', 'dir3/**/deploy.sh'); +tr.setInput('deployScriptArguments', "\"subdir 1\" false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "/basedir/DefaultTemplates/custom.linux.template.json": true, + "/packer-user-scripts/deploy.sh": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false /tmp/tempdir/100/custom.linux.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/custom.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/custom.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + }, + "packer fix -validate=false \\tmp\\tempdir\\100\\custom.linux.template.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\custom.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\custom.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "/tmp/tempdir/100": true, + "\\tmp\\tempdir\\100": true, + "/tmp/tempdir/100/": true, + "\\tmp\\tempdir\\100/": true, + "packer": true + }, + "rmRF": { + "/tmp/tempdir/100": { 'success': true }, + "\\tmp\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Linux" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + if(process.env["__copy_fails__"] === "true") { + throw "copy failed while copying from " + source; + } else { + console.log('copying ' + source + ' to ' + destination); + } + }, + generateTemporaryFilePath: function () { + return "/somefolder/somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["/tmp/dir1/somedir/dir2"]; + } else { + return ["/tmp/dir1/somedir/dir2/dir3/somedir/deploy.sh"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "/tmp/tempdir" + }, + getCurrentDirectory: function() { + return "/basedir/currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0LinuxInstallPacker.ts b/_generated/PackerBuildV1/Tests/L0LinuxInstallPacker.ts new file mode 100644 index 000000000000..ccd992e7d1d3 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0LinuxInstallPacker.ts @@ -0,0 +1,152 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "/a/w"; + +let taskPath = path.join(__dirname, '..', 'src', 'main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['MOCK_NORMALIZE_SLASHES'] = 'true'; + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'Canonical:UbuntuServer:14.04.4-LTS:linux'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1/**/dir2'); +tr.setInput('deployScriptPath', 'dir3/**/deploy.sh'); +tr.setInput('deployScriptArguments', "\"subdir 1\" false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": process.env["__packer_exists__"] === "true" ? "packer" : null + }, + "checkPath": { + "packer": true, + "/basedir/DefaultTemplates/default.linux.template.json": true, + "/packer-user-scripts/deploy.sh": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": process.env["__lower_version__"] === "true" ? "0.11.2" : "1.2.4" + }, + "/tmp/tempdir/100/packer/packer fix -validate=false /tmp/tempdir/100/default.linux.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "/tmp/tempdir/100/packer/packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "/tmp/tempdir/100/packer/packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + }, + "\\tmp\\tempdir\\100\\packer\\packer fix -validate=false \\tmp\\tempdir\\100\\default.linux.template.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "\\tmp\\tempdir\\100\\packer\\packer fix validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "\\tmp\\tempdir\\100\\packer\\packer fix build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "/tmp/tempdir/100": true, + "\\tmp\\tempdir\\100": true, + "/tmp/tempdir/100/": true, + "\\tmp\\tempdir\\100/": true, + "packer": true + }, + "rmRF": { + "/tmp/tempdir/100": { 'success': true }, + "\\tmp\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Linux" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + download: function(packerDownloadUrl, downloadPath) { + if(process.env["__download_fails__"] === "true") { + throw "packer download failed!!"; + } + console.log('downloading from url ' + packerDownloadUrl + ' to ' + downloadPath); + }, + unzip: function(zipLocation, unzipLocation) { + if(process.env["__extract_fails__"] === "true") { + throw "packer zip extraction failed!!"; + } + console.log('extracting from zip ' + zipLocation + ' to ' + unzipLocation); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "/somefolder/somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["/tmp/dir1/somedir/dir2"]; + } else { + return ["/tmp/dir1/somedir/dir2/dir3/somedir/deploy.sh"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "/tmp/tempdir" + }, + getCurrentDirectory: function() { + return "/basedir/currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0LinuxManaged.ts b/_generated/PackerBuildV1/Tests/L0LinuxManaged.ts new file mode 100644 index 000000000000..d7caa10b8e10 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0LinuxManaged.ts @@ -0,0 +1,140 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "/a/w"; + +let taskPath = path.join(__dirname, '..', 'src', 'main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'Canonical:UbuntuServer:14.04.4-LTS:linux'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1/**/dir2'); +tr.setInput('deployScriptPath', 'dir3/**/deploy.sh'); +tr.setInput('deployScriptArguments', "\"subdir 1\" false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); +tr.setInput("isManagedImage","true") +tr.setInput("managedImageName","builtInLinManagedImageName") + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "/basedir/DefaultTemplates/default.managed.linux.template.json": true, + "/packer-user-scripts/deploy.sh": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false /tmp/tempdir/100/default.managed.linux.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.managed.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json /tmp/tempdir/100/default.managed.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nManagedImageResourceGroupName: packer-managed-res-grp\nManagedImageName: builtInWinManagedImageName\nManagedImageLocation: westus", + }, + "packer fix -validate=false \\tmp\\tempdir\\100\\default.linux.template.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer validate -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.managed.linux.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=/somefolder/somevarfile.json -var-file=/somefolder/somevarfile.json \\tmp\\tempdir\\100\\default.managed.linux.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia", + } + }, + "exist": { + "/tmp/tempdir/100": true, + "\\tmp\\tempdir\\100": true, + "/tmp/tempdir/100/": true, + "\\tmp\\tempdir\\100/": true, + "packer": true + }, + "rmRF": { + "/tmp/tempdir/100": { 'success': true }, + "\\tmp\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Linux" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "/somefolder/somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["/tmp/dir1/somedir/dir2"]; + } else { + return ["/tmp/dir1/somedir/dir2/dir3/somedir/deploy.sh"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "/tmp/tempdir" + }, + getCurrentDirectory: function() { + return "/basedir/currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0Parser.ts b/_generated/PackerBuildV1/Tests/L0Parser.ts new file mode 100644 index 000000000000..e3ee3ea49cc3 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0Parser.ts @@ -0,0 +1,118 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\default.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\default.windows.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": process.env["__build_output__"] + } + }, + "exist": { + "F:\\somedir\\tempdir\\100\\": true, + "packer": true + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0Utilities.ts b/_generated/PackerBuildV1/Tests/L0Utilities.ts new file mode 100644 index 000000000000..f24728dd034d --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0Utilities.ts @@ -0,0 +1,54 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +var mockery = require('mockery'); + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + ".\\DefaultTemplates\\default.windows.template.json": process.env["__source_path_exists__"] === "false" ? false : true, + "C:\\deploy.ps1": true + }, + "exist": { + "F:\\somedir\\tempdir\\100": process.env["__dest_path_exists__"] === "false" ? false : true + } +}; + +mockery.enable({warnOnUnregistered: false}); +var tlm = require('azure-pipelines-task-lib/mock-task'); +tlm.setAnswers(a); +mockery.registerMock('azure-pipelines-task-lib/task', tlm); +var ut = require('../src/utilities.js'); + +ut.copyFile(".\\DefaultTemplates\\default.windows.template.json", "F:\\somedir\\tempdir\\100"); +if(!ut.isGreaterVersion({major: 0, minor: 11, patch: 5}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 1 pass") +} + +if(!ut.isGreaterVersion({major: 0, minor: 12, patch: 3}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 2 pass") +} + +if(ut.isGreaterVersion({major: 0, minor: 12, patch: 5}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 3 pass") +} + +if(ut.isGreaterVersion({major: 0, minor: 13, patch: 3}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 4 pass") +} + +if(ut.isGreaterVersion({major: 1, minor: 12, patch: 3}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 5 pass") +} + +if(!ut.isGreaterVersion({major: 0, minor: 12, patch: 1}, {major: 0, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 6 pass") +} + +if(!ut.isGreaterVersion({major: 0, minor: 12, patch: 3}, {major: 1, minor: 12, patch: 3})) { + console.log("isGreaterVersion scenario 7 pass") +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0Windows.ts b/_generated/PackerBuildV1/Tests/L0Windows.ts new file mode 100644 index 000000000000..5478027ba44e --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0Windows.ts @@ -0,0 +1,127 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('deployScriptArguments', "-target \"subdir 1\" -shouldFail false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\default.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\default.windows.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia" + } + }, + "exist": { + "F:\\somedir\\tempdir\\100": true, + "F:\\somedir\\tempdir\\100\\": true, + "packer": true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); + +tr.registerMock('azure-pipelines-tasks-azure-arm-rest/azure-graph', require('./mock_node_modules/azure-graph')); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0WindowsBuiltinTemplateAdditionalParameters.ts b/_generated/PackerBuildV1/Tests/L0WindowsBuiltinTemplateAdditionalParameters.ts new file mode 100644 index 000000000000..bde6561a0728 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0WindowsBuiltinTemplateAdditionalParameters.ts @@ -0,0 +1,126 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('deployScriptArguments', "-target \"subdir 1\" -shouldFail false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{\"ssh_pty\": \"true\", \"type\":\"amazonaws\"}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\default.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\default.windows.template-builderUpdated.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-builderUpdated-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-builderUpdated-fixed.json": { + "code": 0, + "stdout": "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia" + } + }, + "exist": { + "F:\\somedir\\tempdir\\100": true, + "F:\\somedir\\tempdir\\100\\": true, + "packer": true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + readJsonFile: function(filePath: string) { + return "{\"builders\":[{\"type\":\"azure-arm\"}]}"; + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0WindowsCustomImage.ts b/_generated/PackerBuildV1/Tests/L0WindowsCustomImage.ts new file mode 100644 index 000000000000..5731f8dee7ab --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0WindowsCustomImage.ts @@ -0,0 +1,128 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'customVhd'); +tr.setInput('customImageUrl', 'https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/vsts-buildimagetask/Release-1-osDisk.2d175222-b257-405f-a07f-0af4dc4b3dc4.vhd'); +tr.setInput('customImageOSType', 'windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('deployScriptArguments', "-target \"subdir 1\" -shouldFail false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\custom.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\custom.windows.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\custom.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\custom.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia" + } + }, + "exist": { + "F:\\somedir\\tempdir\\100": true, + "F:\\somedir\\tempdir\\100\\": true, + "packer": true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + if(process.env["__copy_fails__"] === "true") { + throw "copy failed while copying from " + source; + } else { + console.log('copying ' + source + ' to ' + destination); + } + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0WindowsFail.ts b/_generated/PackerBuildV1/Tests/L0WindowsFail.ts new file mode 100644 index 000000000000..970b45d9b25d --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0WindowsFail.ts @@ -0,0 +1,129 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', !!process.env["__ostype__"] ? 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:' + process.env["__ostype__"] : 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +if(!process.env["__no_output_vars__"] || process.env["__no_output_vars__"] !== "true") { + tr.setInput('imageUri', 'imageUri'); + tr.setInput('imageStorageAccount', 'imageStorageAccount'); +} +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": process.env["__packer_exists__"] === "false" ? false : true, + "basedir\\DefaultTemplates\\default.windows.template.json": process.env["__copy_fails__"] === "true" ? false : true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\default.windows.template.json": { + "code": process.env["__packer_fix_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_fix_fails__"] === "true" ? "packer fix failed\r\nsome error" : "{ \"some-key\": \"some-value\" }", + "stderr": process.env["__packer_fix_fails__"] === "true" ? "packer fix failed\r\nsome error" : "" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": process.env["__packer_validate_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_validate_fails__"] === "true" ? "packer validate failed\r\nsome error" : "Executed Successfully", + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": process.env["__packer_build_fails__"] === "true" ? 1 : 0, + "stdout": process.env["__packer_build_fails__"] === "true" ? "packer build failed\r\nsome error" : (process.env["__packer_build_no_output__"] === "true" ? "Executed Successfully but output search will fail" : "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia"), + }, + }, + "exist": { + "F:\\somedir\\tempdir\\100\\": true, + "F:\\somedir\\tempdir\\100": true, + "packer": process.env["__packer_exists__"] === "false" ? false : true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': process.env["__cleanup_fails__"] === "true" ? false : true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(process.env["__deploy_package_found__"] === "false") { + return []; + } else { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0WindowsInstallPacker.ts b/_generated/PackerBuildV1/Tests/L0WindowsInstallPacker.ts new file mode 100644 index 000000000000..dd51cdebf504 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0WindowsInstallPacker.ts @@ -0,0 +1,140 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('deployScriptArguments', "-target \"subdir 1\" -shouldFail false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": process.env["__packer_exists__"] === "true" ? "packer" : null + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\default.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": process.env["__lower_version__"] === "true" ? "0.11.2" : "1.2.4" + }, + "F:\\somedir\\tempdir\\100\\packer\\packer.exe --version": { + "code": 0, + "stdout": process.env["__lower_version__"] === "true" ? "0.11.2" : "1.2.4" + }, + "F:\\somedir\\tempdir\\100\\packer\\packer.exe fix -validate=false F:\\somedir\\tempdir\\100\\default.windows.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "F:\\somedir\\tempdir\\100\\packer\\packer.exe validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "F:\\somedir\\tempdir\\100\\packer\\packer.exe build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully\nOSDiskUri: https://bishalpackerimages.blob.core.windows.net/system/Microsoft.Compute/Images/packer/packer-osDisk.e2e08a75-2d73-49ad-97c2-77f8070b65f5.vhd\nStorageAccountLocation: SouthIndia" + } + }, + "exist": { + "F:\\somedir\\tempdir\\100": true, + "F:\\somedir\\tempdir\\100\\": true, + "packer": true, + "F:\\somedir\\tempdir\\100\\packer\\packer.exe": true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + download: function(packerDownloadUrl, downloadPath) { + if(process.env["__download_fails__"] === "true") { + throw "packer download failed!!"; + } + console.log('downloading from url ' + packerDownloadUrl + ' to ' + downloadPath); + }, + unzip: function(zipLocation, unzipLocation) { + if(process.env["__extract_fails__"] === "true") { + throw "packer zip extraction failed!!"; + } + console.log('extracting from zip ' + zipLocation + ' to ' + unzipLocation); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/L0WindowsManaged.ts b/_generated/PackerBuildV1/Tests/L0WindowsManaged.ts new file mode 100644 index 000000000000..4a7185714e09 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/L0WindowsManaged.ts @@ -0,0 +1,129 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); + +const DefaultWorkingDirectory: string = "C:\\a\\w\\"; + +let taskPath = path.join(__dirname, '..\\src\\main.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('templateType', process.env["__template_type__"] || 'builtin'); +tr.setInput('azureResourceGroup', 'testrg'); +tr.setInput('storageAccountName', 'teststorage'); +tr.setInput('baseImageSource', 'default'); +tr.setInput('baseImage', 'MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows'); +tr.setInput('location', 'South India'); +tr.setInput('packagePath', 'dir1\\**\\dir2'); +tr.setInput('deployScriptPath', 'dir3\\**\\deploy.ps1'); +tr.setInput('deployScriptArguments', "-target \"subdir 1\" -shouldFail false"); +tr.setInput('ConnectedServiceName', 'AzureRMSpn'); +tr.setInput('imageUri', 'imageUri'); +tr.setInput('imageStorageAccount', 'imageStorageAccount'); +tr.setInput("additionalBuilderParameters", "{}"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); +tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true"); +tr.setInput("isManagedImage","true") +tr.setInput("managedImageName","builtInWinManagedImageName") + +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_URL_AzureRMSpn"] = "https://management.azure.com/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ENVIRONMENTAUTHORITYURL"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_ACTIVEDIRECTORYSERVICEENDPOINTRESOURCEID"] = "https://login.windows.net/"; +process.env["ENDPOINT_DATA_AzureRMSpn_GRAPHURL"] = "https://graph.windows.net/"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; + +// provide answers for task mock +let a: any = { + "which": { + "packer": "packer" + }, + "checkPath": { + "packer": true, + "basedir\\DefaultTemplates\\default.managed.windows.template.json": true, + "C:\\deploy.ps1": true + }, + "exec": { + "packer --version": { + "code": 0, + "stdout": "1.2.4" + }, + "packer fix -validate=false F:\\somedir\\tempdir\\100\\default.managed.windows.template.json": { + "code": 0, + "stdout": "{ \"some-key\": \"some-value\" }" + }, + "packer validate -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.managed.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully" + }, + "packer build -force -color=false -var-file=C:\\somefolder\\somevarfile.json -var-file=C:\\somefolder\\somevarfile.json F:\\somedir\\tempdir\\100\\default.managed.windows.template-fixed.json": { + "code": 0, + "stdout": "Executed Successfully\nManagedImageResourceGroupName: packer-managed-res-grp\nManagedImageName: builtInWinManagedImageName\nManagedImageLocation: westus" + } + }, + "exist": { + "F:\\somedir\\tempdir\\100": true, + "F:\\somedir\\tempdir\\100\\": true, + "packer": true + }, + "rmRF": { + "F:\\somedir\\tempdir\\100": { 'success': true } + }, + "osType": { + "osType": "Windows_NT" + } +}; + +var ut = require('../src/utilities'); +var utMock = { + IsNullOrEmpty : ut.IsNullOrEmpty, + HasItems : ut.HasItems, + StringWritable: ut.StringWritable, + PackerVersion: ut.PackerVersion, + isGreaterVersion: ut.isGreaterVersion, + deleteDirectory: function(dir) { + console.log("rmRF " + dir); + }, + copyFile: function(source: string, destination: string) { + console.log('copying ' + source + ' to ' + destination); + }, + writeFile: function(filePath: string, content: string) { + console.log("writing to file " + filePath + " content: " + content); + }, + generateTemporaryFilePath: function () { + return "C:\\somefolder\\somevarfile.json"; + }, + getPackerVarFileContent: function(variables) { + return ut.getPackerVarFileContent(variables); + }, + findMatch: function(root: string, patterns: string[] | string) { + if(root === DefaultWorkingDirectory) { + return ["C:\\dir1\\somedir\\dir2"]; + } else { + return ["C:\\dir1\\somedir\\dir2\\dir3\\somedir\\deploy.ps1"]; + } + }, + getCurrentTime: function() { + return 100; + }, + getTempDirectory: function() { + return "F:\\somedir\\tempdir" + }, + getCurrentDirectory: function() { + return "basedir\\currdir"; + } +}; + +tr.registerMock('./utilities', utMock); +tr.registerMock('../utilities', utMock); + +tr.setAnswers(a); + +tr.registerMock('azure-pipelines-tasks-azure-arm-rest/azure-graph', require('./mock_node_modules/azure-graph')); +tr.run(); \ No newline at end of file diff --git a/_generated/PackerBuildV1/Tests/mock_node_modules/azure-graph.js b/_generated/PackerBuildV1/Tests/mock_node_modules/azure-graph.js new file mode 100644 index 000000000000..f74d94108a22 --- /dev/null +++ b/_generated/PackerBuildV1/Tests/mock_node_modules/azure-graph.js @@ -0,0 +1,41 @@ +'use strict'; + +class GraphManagementClient { + constructor(credentials, subscriptionId, baseUri, options) { + this.credentials = credentials; + this.apiVersion = '1.6'; + this.acceptLanguage = 'en-US'; + this.generateClientRequestId = true; + if (!options) + options = {}; + if (baseUri) { + this.baseUri = baseUri; + } + if (options.acceptLanguage) { + this.acceptLanguage = options.acceptLanguage; + } + if (options.longRunningOperationRetryTimeout) { + this.longRunningOperationRetryTimeout = options.longRunningOperationRetryTimeout; + } + if (options.generateClientRequestId) { + this.generateClientRequestId = options.generateClientRequestId; + } + this.servicePrincipals = new ServicePrincipals(this); + } + + getCredentials() { + return this.credentials; + } +} +exports.GraphManagementClient = GraphManagementClient; +class ServicePrincipals { + constructor(graphClient) { + this.client = graphClient; + } + GetServicePrincipal(options) { + return { + "objectId": "oId" + } + } +} +exports.ServicePrincipals = ServicePrincipals; diff --git a/_generated/PackerBuildV1/ThirdPartyNotices.txt b/_generated/PackerBuildV1/ThirdPartyNotices.txt new file mode 100644 index 000000000000..a33b03f28cff --- /dev/null +++ b/_generated/PackerBuildV1/ThirdPartyNotices.txt @@ -0,0 +1,2147 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +Build Machine Image (PREVIEW) task incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. + +1. abbrev (https://github.com/isaacs/abbrev-js) +2. Archiver (https://github.com/archiverjs/node-archiver) +3. archiver-utils (https://github.com/archiverjs/archiver-utils) +4. async (https://github.com/caolan/async) +5. balanced-match (https://github.com/juliangruber/balanced-match) +6. binary (https://github.com/substack/node-binary) +7. bl (Buffer List) (https://github.com/rvagg/bl) +8. buffer-equal-constant-time (https://github.com/salesforce/buffer-equal-constant-time) +9. brace-expansion (https://github.com/juliangruber/brace-expansion) +10. buffer-crc32 (https://github.com/brianloveswords/buffer-crc32) +11. buffers (DefinitelyTyped) (https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/buffers) +12. buffer-shims (https://github.com/calvinmetcalf/buffer-shims) +13. chainsaw (https://github.com/substack/node-chainsaw) +14. compress-commons (https://github.com/archiverjs/node-compress-commons) +15. concat-map (https://github.com/substack/node-concat-map) +16. core-util-is (https://github.com/isaacs/core-util-is) +17. Crc32-stream (https://github.com/archiverjs/node-crc32-stream) +18. Ctt (https://ctt.codeplex.com) +19. decompress-zip (https://github.com/bower/decompress-zip) +20. end-of-stream (https://github.com/mafintosh/end-of-stream) +21. fs.realpath (https://github.com/isaacs/fs.realpath) +22. Glob (https://github.com/isaacs/node-glob) +23. graceful-fs (https://github.com/isaacs/node-graceful-fs) +24. hoek (https://github.com/hapijs/hoek) +25. inflight (https://github.com/npm/inflight) +26. inherits (https://github.com/isaacs/inherits) +27. isarray (https://github.com/juliangruber/isarray/) +28. isemail (https://github.com/hapijs/isemail) +29. joi (https://github.com/hapijs/joi) +30. jsonwebtoken (https://github.com/auth0/node-jsonwebtoken) +31. lazystream (https://github.com/jpommerening/node-lazystream) +32. lodash (https://lodash.com/) + Includes:File(s) copyright John Resig (http://ejohn.org/blog/javascript-micro-templating/) + Includes:File(s) copyright Laura Doktorova (https://github.com/olado/doT) +33. lodash.once (https://github.com/lodash/lodash) +34. Ltx (https://github.com/node-xmpp/ltx) +35. minimatch (https://github.com/isaacs/minimatch) +36. mkpath (https://github.com/jrajav/mkpath) +37. Mockery (https://github.com/mfncooper/mockery) +38. Moment (https://github.com/moment/moment) +39. ms (https://github.com/zeit/ms) +40. Node.js (https://nodejs.org/) +41. node-ecdsa-sig-formatter (https://github.com/Brightspace/node-ecdsa-sig-formatter) +42. node-jwa (https://github.com/brianloveswords/node-jwa) +43. node-jws (https://github.com/brianloveswords/node-jws) +44. node-tar (https://github.com/npm/node-tar/) +45. node-uuid (https://github.com/broofa/node-uuid/) +46. nopt (https://github.com/npm/nopt) +47. normalize-path (https://github.com/jonschlinkert/normalize-path) +48. once (https://github.com/isaacs/once) +49. OpenSSL (http://www.openssl.org) +50. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) +51. process-nextick-args (https://github.com/calvinmetcalf/process-nextick-args) +52. Q (https://github.com/kriskowal/q) +53. readable-stream (https://github.com/isaacs/readable-stream) +54. safe-buffer (https://github.com/feross/safe-buffer) +55. sax js (https://github.com/isaacs/sax-js) +56. semver (https://github.com/npm/node-semver/) +57. ShellJS (https://github.com/shelljs/shelljs) +58. string_decoder (https://github.com/rvagg/string_decoder) +59. tar-stream (https://github.com/mafintosh/tar-stream) +60. topo (https://github.com/hapijs/topo) +61. touch (https://github.com/isaacs/node-touch) +62. traverse (https://github.com/substack/js-traverse) +63. tunnel (https://github.com/koichik/node-tunnel) +64. underscore.js (http://underscorejs.org/; https://github.com/jashkenas/underscore) +65. util-deprecate (https://github.com/TooTallNate/util-deprecate) +66. vso-node-api (https://github.com/Microsoft/vsts-node-api) +67. azure-pipelines-task-lib (https://github.com/Microsoft/azure-pipelines-task-lib) +68. winreg (https://github.com/fresc81/node-winreg) +69. wrappy (https://github.com/npm/wrappy) +70. Xml2JS (https://github.com/Leonidas-from-XIV/node-xml2js) +71. Xmlbuilder (https://github.com/oozcitak/xmlbuilder-js) +72. xtend (https://github.com/Raynos/xtend) +73. zip-stream (https://github.com/archiverjs/node-zip-stream) + + +%% abbrev 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 abbrev NOTICES, INFORMATION, AND LICENSE + +%% Archiver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Chris Talkington, 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 Archiver NOTICES, INFORMATION, AND LICENSE + +%% archiver-utils NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Chris Talkington. + +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 archiver-utils NOTICES, INFORMATION, AND LICENSE + +%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + +Copyright (c) 2010-2016 Caolan McMahon + +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 async 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 + +%% binary NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012 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 binary NOTICES, INFORMATION, AND LICENSE + +%% bl (Buffer List) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) +Copyright (c) 2014 bl contributors + +bl contributors listed at https://github.com/rvagg/bl#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 bl (Buffer List) 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 + +%% 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-crc32 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License + +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 buffer-crc32 NOTICES, INFORMATION, AND LICENSE + +%% buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is licensed under the MIT license. + +Copyrights are respective of each contributor listed at the beginning of each definition file. + +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 buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE + +%% buffer-shims NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +# Copyright (c) 2016 Calvin Metcalf + +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 buffer-shims NOTICES, INFORMATION, AND LICENSE + +%% chainsaw NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +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 chainsaw NOTICES, INFORMATION, AND LICENSE + +%% compress-commons NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 compress-commons 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 + +%% core-util-is NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Node.js contributors. 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 core-util-is NOTICES, INFORMATION, AND LICENSE + +%% Crc32-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 Crc32-stream NOTICES, INFORMATION, AND LICENSE + +%% Ctt NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Microsoft Public License (Ms-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to the software. + +A "contributor" is any person that distributes its contribution under this license. + +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. +========================================= +END OF Ctt NOTICES, INFORMATION, AND LICENSE + +%% decompress-zip NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Bower Team + +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 decompress-zip NOTICES, INFORMATION, AND LICENSE + +%% end-of-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +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 end-of-stream 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 + +%% graceful-fs 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 graceful-fs 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 + +%% isarray 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 isarray 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 + +%% 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 + +%% lazystream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2013 J. Pommerening, 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 lazystream NOTICES, INFORMATION, AND LICENSE + +%% lodash 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. + +========================================= +// Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) + +Copyright 2008 John Resig + +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. + +========================================= +// Based on Laura Doktorova's doT.js (https://github.com/olado/doT). + +Copyright (c) 2011 Laura Doktorova + +Software includes portions from jQote2 Copyright (c) 2010 aefxx, +http://aefxx.com/ licensed 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 lodash 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 + + +%% Ltx NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2010 Stephan Maka + +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 Ltx 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 + +%% mkpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (C) 2012 Jonathan Rajavuori + +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 mkpath 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.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. 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. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. 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. +""" + +The Node.js license applies to all parts of Node.js that are not externally +maintained libraries. +========================================= +END OF Node.js 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-tar 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 node-tar NOTICES, INFORMATION, AND LICENSE + +%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2010-2012 Robert Kieffer + +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 + +%% nopt 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 nopt NOTICES, INFORMATION, AND LICENSE + +%% normalize-path NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2014-2015, Jon Schlinkert. + +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 normalize-path 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 + +%% process-nextick-args NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Calvin Metcalf + +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 process-nextick-args 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. + +The file q.js is prefaced by the following additional third-party subcomponent information: + +/*! + * + * 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 + +%% readable-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Joyent, Inc. and other Node contributors. 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 readable-stream 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 + +%% sax js 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. + +==== + +`String.fromCodePoint` by Mathias Bynens used according to terms of MIT +License, as follows: + + Copyright Mathias Bynens + + 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 sax js 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. +========================================= +END OF ShellJS NOTICES, INFORMATION, AND LICENSE + +%% string_decoder NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + +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 string_decoder NOTICES, INFORMATION, AND LICENSE + +%% tar-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +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 tar-stream 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 + +%% touch 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 touch NOTICES, INFORMATION, AND LICENSE + +%% traverse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: +http://www.opensource.org/licenses/mit-license.php + +Copyright 2010 James Halliday (mail@substack.net) + +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 traverse 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 + +%% underscore.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2017 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.js NOTICES, INFORMATION, AND LICENSE + +%% util-deprecate NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +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 util-deprecate 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 + +%% winreg NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is released under BSD 2-Clause License. + +Copyright (c) 2016, Paul Bottin 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. + +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 winreg 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 + +%% Xml2JS NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010, 2011, 2012, 2013. 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 Xml2JS NOTICES, INFORMATION, AND LICENSE + +%% Xmlbuilder NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +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 Xmlbuilder 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 + +%% zip-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 zip-stream NOTICES, INFORMATION, AND LICENSE + + diff --git a/_generated/PackerBuildV1/icon.png b/_generated/PackerBuildV1/icon.png new file mode 100644 index 000000000000..f34546ec0584 Binary files /dev/null and b/_generated/PackerBuildV1/icon.png differ diff --git a/_generated/PackerBuildV1/icon.svg b/_generated/PackerBuildV1/icon.svg new file mode 100644 index 000000000000..ef073a018f62 --- /dev/null +++ b/_generated/PackerBuildV1/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/PackerBuildV1/make.json b/_generated/PackerBuildV1/make.json new file mode 100644 index 000000000000..1d261175daed --- /dev/null +++ b/_generated/PackerBuildV1/make.json @@ -0,0 +1,17 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" + ], + "options": "-Rf" + } + ], + "cp": [ + { + "source": "DefaultTemplates", + "options": "-R" + } + ] +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/package-lock.json b/_generated/PackerBuildV1/package-lock.json new file mode 100644 index 000000000000..aaf426f32572 --- /dev/null +++ b/_generated/PackerBuildV1/package-lock.json @@ -0,0 +1,885 @@ +{ + "name": "vsts-tasks-packerbuild", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@azure/msal-common": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", + "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==" + }, + "@azure/msal-node": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz", + "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==", + "requires": { + "@azure/msal-common": "^9.0.1", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@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/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/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "requires": { + "@types/node": "*" + } + }, + "@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.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.25.tgz", + "integrity": "sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA==" + }, + "@types/q": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", + "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + }, + "@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==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "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" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "azure-devops-node-api": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.0.0.tgz", + "integrity": "sha512-S6Il++7dQeMlZDokBDWw7YVoPeb90tWF10pYxnoauRMnkuL91jq9M7SOYRVhtO3FUC5URPkB/qzGa7jTLft0Xw==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "azure-pipelines-task-lib": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.3.1.tgz", + "integrity": "sha512-AEwz0+Sofv80UviCYsS6fzyX5zzsLapmNCMNUoaRePZQVN+oQBStix1DGg4fdZf9zJ6acNd9xEBZQWbWuZu5Zg==", + "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-azure-arm-rest": { + "version": "3.221.2", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.221.2.tgz", + "integrity": "sha512-A8MT2ggii43DjMQhmiLiiU/dxIwGbu08dMZqIq4zZLQPU6Cd7PPUVPQ8BE203X54lYRUKSwCGRsx65eMWbkqmw==", + "requires": { + "@azure/msal-node": "1.14.5", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "async-mutex": "^0.4.0", + "azure-devops-node-api": "^12.0.0", + "azure-pipelines-task-lib": "^3.4.0", + "https-proxy-agent": "^4.0.0", + "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.7", + "q": "1.5.1", + "typed-rest-client": "1.8.4", + "xml2js": "0.4.13" + }, + "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" + } + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "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-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" + }, + "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==" + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "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" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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" + } + }, + "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" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "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" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "requires": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "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" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "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-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==" + } + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "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.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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" + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha512-bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==" + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "requires": { + "abbrev": "1" + } + }, + "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-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "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.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "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" + } + }, + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "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" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "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==" + } + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha512-/LQ54KM9rPf3rGXGo2UPQWx3ol242Zg6Whq27H5DEmZhCJo+pm9N5BzRGepO9vTVhYxpXJdcc1+3uaYt9NyeKg==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "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.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", + "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==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "xml2js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz", + "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": ">=2.4.6" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + } + } +} diff --git a/_generated/PackerBuildV1/package.json b/_generated/PackerBuildV1/package.json new file mode 100644 index 000000000000..9821884ea289 --- /dev/null +++ b/_generated/PackerBuildV1/package.json @@ -0,0 +1,16 @@ +{ + "name": "vsts-tasks-packerbuild", + "main": "main.js", + "dependencies": { + "@types/mocha": "^5.2.7", + "@types/node": "^16.11.39", + "@types/q": "^1.0.7", + "azure-pipelines-task-lib": "^4.3.1", + "azure-pipelines-tasks-azure-arm-rest": "3.221.2", + "agent-base": "^6.0.2", + "decompress-zip": "^0.3.3" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/PackerBuildV1/src/TemplateFileProviderBase.ts b/_generated/PackerBuildV1/src/TemplateFileProviderBase.ts new file mode 100644 index 000000000000..9a8289db4ac7 --- /dev/null +++ b/_generated/PackerBuildV1/src/TemplateFileProviderBase.ts @@ -0,0 +1,85 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as definitions from "./definitions" +import * as utils from "./utilities" + +export default class TemplateFileProviderBase { + + public moveTemplateFile(initialTemplateFileLocation: string, dest: string): void { + console.log(tl.loc("OriginalTemplateLocation", initialTemplateFileLocation)); + console.log(tl.loc("CopyingTemplate", initialTemplateFileLocation, dest)); + utils.copyFile(initialTemplateFileLocation, dest); + console.log(tl.loc("TempTemplateLocation", dest)); + + // construct new full path for template file + var templateFileName = path.basename(initialTemplateFileLocation); + var tempFileLocation = path.join(dest, templateFileName); + this._templateFileLocation = tempFileLocation; + tl.debug("template location: " + tempFileLocation); + } + + public readTemplateFileJson() { + var content = utils.readJsonFile(this._templateFileLocation); + var templateJson = null; + + try { + templateJson = JSON.parse(content); + } catch (err) { + throw (tl.loc("ParsingTemplateFileContentFailed", this._templateFileLocation, err)); + } + + return templateJson; + } + + public saveUpdatedTemplateFile(content: string, newNameSuffix: string): void { + if(utils.IsNullOrEmpty(content)) { + return; + } + + var templateFileName = path.basename(this._templateFileLocation, '.json'); + var templateDir = path.dirname(this._templateFileLocation); + var updatedTemplateFileName = util.format("%s%s.json", templateFileName, newNameSuffix); + var tempFileLocation = path.join(templateDir, updatedTemplateFileName); + + utils.writeFile(tempFileLocation, content); + + this._templateFileLocation = tempFileLocation; + tl.debug("updated template location: " + tempFileLocation); + } + + public updateTemplateBuilderSection(additionalBuilderParameters: {}) { + if(!(Object.keys(additionalBuilderParameters).length === 0 && additionalBuilderParameters.constructor === Object)) { + var templateJson = this.readTemplateFileJson(); + + for (var key in additionalBuilderParameters) { + for (var index = 0; index < templateJson["builders"].length; index++) { + var builder = templateJson["builders"][index]; + builder[key] = additionalBuilderParameters[key]; + } + } + + var newContent = JSON.stringify(templateJson); + this.saveUpdatedTemplateFile(newContent, "-builderUpdated"); + } + } + + public cleanup(): void { + if(!this._templateFileLocation) { + return; + } + + var templateFileDirectory = path.dirname(this._templateFileLocation); + try{ + utils.deleteDirectory(templateFileDirectory); + } + catch (err) { + tl.warning(tl.loc("CouldNotDeleteTemporaryTemplateDirectory", templateFileDirectory)); + } + } + + protected _templateFileLocation: string; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/azureSpnTemplateVariablesProvider.ts b/_generated/PackerBuildV1/src/azureSpnTemplateVariablesProvider.ts new file mode 100644 index 000000000000..bcb3f644f8c4 --- /dev/null +++ b/_generated/PackerBuildV1/src/azureSpnTemplateVariablesProvider.ts @@ -0,0 +1,40 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as definitions from "./definitions" + +// Provider for all template variables related to azure SPN. Reads service endpoint to get all necessary details. +export default class AzureSpnTemplateVariablesProvider implements definitions.ITemplateVariablesProvider { + + public register(packerHost: definitions.IPackerHost): void { + packerHost.registerTemplateVariablesProvider(definitions.VariablesProviderTypes.AzureSPN, this); + tl.debug("registered SPN variables provider"); + } + + public async getTemplateVariables(packerHost: definitions.IPackerHost): Promise> { + if(!!this._spnVariables) { + return this._spnVariables; + } + + var taskParameters = packerHost.getTaskParameters(); + + // if custom template is used, SPN variables are not required + if(taskParameters.templateType === constants.TemplateTypeCustom) { + this._spnVariables = new Map(); + return this._spnVariables; + } + + this._spnVariables = new Map(); + var connectedService = taskParameters.serviceEndpoint; + var subscriptionId: string = tl.getEndpointDataParameter(connectedService, "SubscriptionId", true) + this._spnVariables.set(constants.TemplateVariableSubscriptionIdName, subscriptionId); + this._spnVariables.set(constants.TemplateVariableClientIdName, tl.getEndpointAuthorizationParameter(connectedService, 'serviceprincipalid', false)); + this._spnVariables.set(constants.TemplateVariableClientSecretName, tl.getEndpointAuthorizationParameter(connectedService, 'serviceprincipalkey', false)); + this._spnVariables.set(constants.TemplateVariableTenantIdName, tl.getEndpointAuthorizationParameter(connectedService, 'tenantid', false)); + + return this._spnVariables; + } + + private _spnVariables: Map; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/builtInTemplateFileProvider.ts b/_generated/PackerBuildV1/src/builtInTemplateFileProvider.ts new file mode 100644 index 000000000000..a407bb9a83d0 --- /dev/null +++ b/_generated/PackerBuildV1/src/builtInTemplateFileProvider.ts @@ -0,0 +1,60 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as definitions from "./definitions" +import * as utils from "./utilities" +import TemplateFileProviderBase from "./TemplateFileProviderBase" + +export default class BuiltInTemplateFileProvider extends TemplateFileProviderBase implements definitions.ITemplateFileProvider { + + constructor() { + super(); + this._builtInTemplateFiles = new Map(); + this._builtInTemplateFiles.set(constants.BuiltinWindowsDefaultImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInWindowsDefaultImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinWindowsCustomImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInWindowsCustomImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinLinuxDefaultImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInLinuxDefaultImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinLinuxCustomImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInLinuxCustomImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinManagedWindowsDefaultImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInManagedWindowsDefaultImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinManagedWindowsCustomImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInManagedWindowsCustomImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinManagedLinuxDefaultImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInManagedLinuxDefaultImageTemplateName)); + this._builtInTemplateFiles.set(constants.BuiltinManagedLinuxCustomImageTemplateKey, path.join(utils.getCurrentDirectory(), "..//DefaultTemplates", constants.BuiltInManagedLinuxCustomImageTemplateName)); + } + + public register(packerHost: definitions.IPackerHost): void { + packerHost.registerTemplateFileProvider(definitions.TemplateFileProviderTypes.BuiltIn, this); + tl.debug("registered builtin template provider"); + } + + public getTemplateFileLocation(packerHost: definitions.IPackerHost): string { + if(!!this._templateFileLocation) { + return this._templateFileLocation; + } + + var taskParameters = packerHost.getTaskParameters(); + var osType = taskParameters.osType; + var imageType = taskParameters.baseImageSource; + if(taskParameters.isManagedImage) + { + imageType = imageType + ".managed" + } + var templateKey = util.format("%s-%s", osType, imageType); + if(this._builtInTemplateFiles.has(templateKey)) { + var initialTemplateFileLocation = this._builtInTemplateFiles.get(templateKey); + tl.checkPath(initialTemplateFileLocation, tl.loc("BuiltInTemplateNotFoundErrorMessagePathName", templateKey)); + + // move file to a temp folder - this is a cautionary approach so that previous packer execution which still has handle on template does not cause any problem + this.moveTemplateFile(initialTemplateFileLocation, packerHost.getStagingDirectory()); + + this.updateTemplateBuilderSection(taskParameters.additionalBuilderParameters); + + return this._templateFileLocation; + } + + throw (tl.loc("OSTypeNotSupported", osType)); + } + + private _builtInTemplateFiles: Map; +} diff --git a/_generated/PackerBuildV1/src/constants.ts b/_generated/PackerBuildV1/src/constants.ts new file mode 100644 index 000000000000..6d2d998cf9da --- /dev/null +++ b/_generated/PackerBuildV1/src/constants.ts @@ -0,0 +1,79 @@ +export var BuiltInTemplateOSTypeWindows = "windows"; +export var BuiltInWindowsDefaultImageTemplateName = "default.windows.template.json"; +export var BuiltInWindowsCustomImageTemplateName = "custom.windows.template.json"; +export var BuiltInTemplateOSTypeLinux = "linux"; +export var BuiltInLinuxDefaultImageTemplateName = "default.linux.template.json"; +export var BuiltInLinuxCustomImageTemplateName = "custom.linux.template.json"; + +export var BuiltInManagedWindowsDefaultImageTemplateName = "default.managed.windows.template.json"; +export var BuiltInManagedWindowsCustomImageTemplateName = "custom.managed.windows.template.json"; +export var BuiltInManagedLinuxDefaultImageTemplateName = "default.managed.linux.template.json"; +export var BuiltInManagedLinuxCustomImageTemplateName = "custom.managed.linux.template.json"; + +export var ResourceGroupInputName = "azureResourceGroup"; +export var StorageAccountInputName = "storageAccountName"; +export var BaseImageSourceInputName = "baseImageSource"; +export var BuiltinBaseImageInputName = "baseImage"; +export var CustomImageUrlInputName = "customImageUrl"; +export var CustomImageOsTypeInputName = "customImageOSType"; +export var ManagedImageInputName = "isManagedImage"; +export var ManagedImageNameInputName = "managedImageName"; +export var ImagePublisherInputName = "imagePublisher"; +export var ImageOfferInputName = "imageOffer"; +export var ImageSkuInputName = "imageSku"; +export var LocationInputName = "location"; +export var DeployScriptPathInputName = "deployScriptPath"; +export var DeployPackageInputName = "packagePath"; +export var DeployScriptArgumentsInputName = "deployScriptArguments"; +export var ConnectedServiceInputName = "ConnectedServiceName"; +export var TemplateTypeInputName = "templateType"; +export var CustomTemplateLocationInputType = "customTemplateLocation"; +export var PackerVersionInputName = "packerVersion" + +export var TemplateVariableResourceGroupName = "resource_group"; +export var TemplateVariableStorageAccountName = "storage_account"; +export var TemplateVariableImagePublisherName = "image_publisher"; +export var TemplateVariableImageOfferName = "image_offer"; +export var TemplateVariableImageSkuName = "image_sku"; +export var TemplateVariableImageUrlName = "image_url"; +export var TemplateVariableLocationName = "location"; +export var TemplateVariableCapturePrefixName = "capture_name_prefix"; +export var TemplateVariableScriptRelativePathName = "script_relative_path"; +export var TemplateVariableScriptArgumentsName = "script_arguments"; +export var TemplateVariablePackagePathName = "package_path"; +export var TemplateVariablePackageName = "package_name"; +export var TemplateVariableSubscriptionIdName = "subscription_id"; +export var TemplateVariableClientIdName = "client_id"; +export var TemplateVariableClientSecretName = "client_secret"; +export var TemplateVariableTenantIdName = "tenant_id"; +export var TemplateVariableObjectIdName = "object_id"; +export var TemplateVariableSkipCleanName = "skip_clean"; +export var TemplateVariableManagedImageName = "managed_image_name" + +export var PackerLogTokenImageUri = "OSDiskUri"; +export var PackerLogTokenStorageLocation = "StorageAccountLocation"; +export var PackerLogTokenManagedResourceGroupName = "ManagedImageResourceGroupName"; +export var PackerLogTokenManagedImageName = "ManagedImageName"; +export var PackerLogTokenManagedImageLocation = "ManagedImageLocation"; +export var PackerLogTokenManagedImageId = "ManagedImageId"; + +export var OutputVariableImageUri = "imageUri"; +export var OutputVariableImageId = "imageId"; + +export var CurrentSupportedPackerVersionString = "1.2.4"; +export var PackerDownloadUrlFormat = "https://releases.hashicorp.com/packer/%s/packer_%s_%s.zip" + +export var TemplateTypeCustom = "custom"; +export var TemplateTypeBuiltin = "builtin" +export var BaseImageSourceCustomVhd = "customVhd"; +export var BaseImageSourceDefault = "default"; +export var BaseImageManagedSourceDefault = "default.managed"; +export var BaseImageManagedSourceCustomVhd = "customVhd.managed"; +export var BuiltinWindowsDefaultImageTemplateKey = BuiltInTemplateOSTypeWindows + '-' + BaseImageSourceDefault; +export var BuiltinWindowsCustomImageTemplateKey = BuiltInTemplateOSTypeWindows + '-' + BaseImageSourceCustomVhd; +export var BuiltinLinuxDefaultImageTemplateKey = BuiltInTemplateOSTypeLinux + '-' + BaseImageSourceDefault; +export var BuiltinLinuxCustomImageTemplateKey = BuiltInTemplateOSTypeLinux + '-' + BaseImageSourceCustomVhd; +export var BuiltinManagedWindowsDefaultImageTemplateKey = BuiltInTemplateOSTypeWindows + '-' + BaseImageManagedSourceDefault; +export var BuiltinManagedWindowsCustomImageTemplateKey = BuiltInTemplateOSTypeWindows + '-' + BaseImageManagedSourceCustomVhd; +export var BuiltinManagedLinuxDefaultImageTemplateKey = BuiltInTemplateOSTypeLinux + '-' + BaseImageManagedSourceDefault; +export var BuiltinManagedLinuxCustomImageTemplateKey = BuiltInTemplateOSTypeLinux + '-' + BaseImageManagedSourceCustomVhd; \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/customTemplateFileProvider.ts b/_generated/PackerBuildV1/src/customTemplateFileProvider.ts new file mode 100644 index 000000000000..be36a2d55c81 --- /dev/null +++ b/_generated/PackerBuildV1/src/customTemplateFileProvider.ts @@ -0,0 +1,37 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as definitions from "./definitions" +import * as utils from "./utilities" +import TemplateFileProviderBase from "./TemplateFileProviderBase" + +export default class CustomTemplateFileProvider extends TemplateFileProviderBase implements definitions.ITemplateFileProvider { + + constructor() { + super(); + } + + public register(packerHost: definitions.IPackerHost): void { + packerHost.registerTemplateFileProvider(definitions.TemplateFileProviderTypes.Custom, this); + tl.debug("registered custom template provider"); + } + + public getTemplateFileLocation(packerHost: definitions.IPackerHost): string { + if(!!this._templateFileLocation) { + return this._templateFileLocation; + } + + var initialTemplateFileLocation = packerHost.getTaskParameters().customTemplateLocation; + tl.checkPath(initialTemplateFileLocation, tl.loc("CustomTemplateNotFoundErrorMessagePathName", initialTemplateFileLocation)); + + this._templateFileLocation = initialTemplateFileLocation; + return this._templateFileLocation; + } + + public cleanup(): void { + // do not delete in case of user provided template. + } +} diff --git a/_generated/PackerBuildV1/src/definitions.ts b/_generated/PackerBuildV1/src/definitions.ts new file mode 100644 index 000000000000..c7bfd99a90a2 --- /dev/null +++ b/_generated/PackerBuildV1/src/definitions.ts @@ -0,0 +1,40 @@ +import * as tr from "azure-pipelines-task-lib/toolrunner"; +import TaskParameters from "./taskParameters" + +export enum TemplateFileProviderTypes { + BuiltIn = 0, + Custom = 1 +} + +export enum VariablesProviderTypes { + AzureSPN = 0, + TaskInput = 1 +} + +export interface IOutputParser { + parse(line: string): void; + getExtractedOutputs(): any; +} + +export interface IPackerHost { + createPackerTool(): tr.ToolRunner; + execTool(command: tr.ToolRunner, outputParser?: IOutputParser): Q.Promise; + getTemplateFileProvider(): ITemplateFileProvider; + getTemplateVariablesProviders(): ITemplateVariablesProvider[]; + registerTemplateFileProvider(providerType: TemplateFileProviderTypes, provider: ITemplateFileProvider); + registerTemplateVariablesProvider(providerType: VariablesProviderTypes, provider: ITemplateVariablesProvider); + getTaskParameters(): TaskParameters; + getStagingDirectory(): string; +} + +export interface ITemplateFileProvider { + register(packerHost: IPackerHost): void; + getTemplateFileLocation(packerHost: IPackerHost): string; + saveUpdatedTemplateFile(content: string, newNameSuffix: string): void; + cleanup(): void; +} + +export interface ITemplateVariablesProvider { + register(packerHost: IPackerHost): void; + getTemplateVariables(packerHost: IPackerHost): Promise>; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/main.ts b/_generated/PackerBuildV1/src/main.ts new file mode 100644 index 000000000000..b7ecd2e28eb7 --- /dev/null +++ b/_generated/PackerBuildV1/src/main.ts @@ -0,0 +1,67 @@ +"use strict"; + +import tl = require("azure-pipelines-task-lib/task"); +import path = require("path"); + +import packerHost from "./packerHost"; +import * as packerFix from "./operations/packerFix"; +import * as packerValidate from "./operations/packerValidate"; +import * as packerBuild from "./operations/packerBuild"; +import builtinTemplateFileProvider from "./builtInTemplateFileProvider"; +import CustomTemplateFileProvider from "./customTemplateFileProvider"; +import azureSpnTemplateVariablesProvider from "./azureSpnTemplateVariablesProvider"; +import TaskInputTemplateVariablesProvider from "./taskInputTemplateVariablesProvider"; + +async function run(): Promise { + var host: packerHost = new packerHost(); + await host.initialize(); + + // register providers + registerProviders(host); + + // run packer commands + try { + packerFix.run(host); + await packerValidate.run(host); + await packerBuild.run(host); + console.log(tl.loc("PackerBuildCompleted")); + } + finally { + cleanup(host); + } +} + +function registerProviders(host: packerHost): void { + + // register built-in templates provider. This provider provides built-in packer templates used by task + var builtInTemplateFileProvider = new builtinTemplateFileProvider(); + builtInTemplateFileProvider.register(host); + + // register built-in templates provider. This provider provides built-in packer templates used by task + var customTemplateFileProvider = new CustomTemplateFileProvider(); + customTemplateFileProvider.register(host); + + // register variables provider which will provide task inputs as variables for packer template + var taskInputTemplateVariablesProvider = new TaskInputTemplateVariablesProvider(); + taskInputTemplateVariablesProvider.register(host); + + //register SPN variables provider which will fetch SPN data as variables for packer template + var spnVariablesProvider = new azureSpnTemplateVariablesProvider(); + spnVariablesProvider.register(host); +} + +function cleanup(host: packerHost): void { + var fileProvider = host.getTemplateFileProvider(); + fileProvider.cleanup(); + host.cleanup(); +} + +var taskManifestPath = path.join(__dirname, "..//task.json"); +tl.debug("Setting resource path to " + taskManifestPath); +tl.setResourcePath(taskManifestPath); + +run().then((result) => + tl.setResult(tl.TaskResult.Succeeded, "") +).catch((error) => + tl.setResult(tl.TaskResult.Failed, error) +); \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/operations/packerBuild.ts b/_generated/PackerBuildV1/src/operations/packerBuild.ts new file mode 100644 index 000000000000..9ca004ab19ef --- /dev/null +++ b/_generated/PackerBuildV1/src/operations/packerBuild.ts @@ -0,0 +1,116 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import packerHost from "../packerHost"; +import OutputVariablesParser from "../outputParsers" +import * as constants from "../constants" +import * as definitions from "../definitions" +import * as utils from "../utilities" + +export async function run(packerHost: packerHost): Promise { + var command = packerHost.createPackerTool(); + command.arg("build"); + command.arg("-force"); + command.arg("-color=false"); + + // add all variables + var variableProviders = packerHost.getTemplateVariablesProviders(); + for (var provider of variableProviders) { + var variables = await provider.getTemplateVariables(packerHost); + let filePath: string = utils.generateTemporaryFilePath(); + let content: string = utils.getPackerVarFileContent(variables); + utils.writeFile(filePath, content); + command.arg(util.format("%s=%s", '-var-file', filePath)); + } + + command.arg(packerHost.getTemplateFileProvider().getTemplateFileLocation(packerHost)); + + console.log(tl.loc("ExecutingPackerBuild")); + var taskParameters = packerHost.getTaskParameters(); + var outputVariablesParser: definitions.IOutputParser; + if (taskParameters.templateType === constants.TemplateTypeCustom) { + outputVariablesParser = new OutputVariablesParser([constants.PackerLogTokenImageUri, constants.PackerLogTokenStorageLocation, constants.PackerLogTokenManagedImageName, constants.PackerLogTokenManagedResourceGroupName, constants.PackerLogTokenManagedImageLocation, constants.PackerLogTokenManagedImageId]); + } + else { + if (!taskParameters.isManagedImage) { + outputVariablesParser = new OutputVariablesParser([constants.PackerLogTokenImageUri, constants.PackerLogTokenStorageLocation]); + } else { + outputVariablesParser = new OutputVariablesParser([constants.PackerLogTokenManagedImageName, constants.PackerLogTokenManagedResourceGroupName, constants.PackerLogTokenManagedImageLocation, constants.PackerLogTokenManagedImageId]); + } + } + + await packerHost.execTool(command, outputVariablesParser); + + // set output task variables + setOutputVariables(packerHost, outputVariablesParser.getExtractedOutputs()); +} + +function setOutputVariables(packerHost: packerHost, outputs: Map): void { + var taskParameters = packerHost.getTaskParameters(); + var imageUri; + var imageId; + var managedImageName; + + if (!utils.IsNullOrEmpty(taskParameters.imageId) && !(taskParameters.templateType == constants.TemplateTypeBuiltin && !taskParameters.isManagedImage)) { + imageId = getValueFromOutputs(constants.PackerLogTokenManagedImageId, outputs); + + if (!utils.IsNullOrEmpty(imageId)) { + tl.debug("Setting image Id variable which contains the managed image Id to: " + imageId); + tl.setVariable(taskParameters.imageId, imageId); + } else { + throw tl.loc("ImageIDOutputVariableNotFound"); + } + } + + if (!utils.IsNullOrEmpty(taskParameters.imageUri)) { + if (taskParameters.templateType === constants.TemplateTypeBuiltin) { + if (!taskParameters.isManagedImage) { + imageUri = getValueFromOutputs(constants.PackerLogTokenImageUri, outputs); + if (!utils.IsNullOrEmpty(imageUri)) { + tl.debug("Setting image URI variable to: " + imageUri); + tl.setVariable(taskParameters.imageUri, imageUri); + } else { + throw tl.loc("ImageURIOutputVariableNotFound"); + } + } else { + imageUri = getValueFromOutputs(constants.PackerLogTokenManagedImageName, outputs); + if (!utils.IsNullOrEmpty(imageUri)) { + tl.debug("Setting image URI variable which contains the managed image name to: " + imageUri); + tl.setVariable(taskParameters.imageUri, imageUri); + } else { + throw tl.loc("ManagedImageNameOutputVariableNotFound"); + } + } + } else { + imageUri = getValueFromOutputs(constants.PackerLogTokenImageUri, outputs); + managedImageName = getValueFromOutputs(constants.PackerLogTokenManagedImageName, outputs); + + if (!utils.IsNullOrEmpty(managedImageName)) { + tl.debug("Setting image URI variable which contains the managed image name to: " + managedImageName); + tl.setVariable(taskParameters.imageUri, managedImageName); + } + else if (!utils.IsNullOrEmpty(imageUri)) { + tl.debug("Setting image URI variable to: " + imageUri); + tl.setVariable(taskParameters.imageUri, imageUri); + } + else { + throw tl.loc("CustumTemplateOutputVariableNotFound"); + } + } + } +} + +function getValueFromOutputs (key: string, outputs: Map): string { + var value; + try { + value = outputs.get(key); + } + catch (ex) + { + // do not throw as this is try get + } + + return value; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/operations/packerFix.ts b/_generated/PackerBuildV1/src/operations/packerFix.ts new file mode 100644 index 000000000000..cf752ccceea9 --- /dev/null +++ b/_generated/PackerBuildV1/src/operations/packerFix.ts @@ -0,0 +1,23 @@ +"use strict"; + +import * as path from "path"; +import * as tl from "azure-pipelines-task-lib/task"; +import packerHost from "../packerHost"; + +export function run(packerHost: packerHost): void { + var command = packerHost.createPackerTool(); + command.arg("fix"); + + // do not validate in fix. We will validate separately + command.arg("-validate=false"); + command.arg(packerHost.getTemplateFileProvider().getTemplateFileLocation(packerHost)); + + console.log(tl.loc("ExecutingPackerFix")); + var result = command.execSync(); + + if(result.code != 0) { + throw tl.loc("PackerFixFailed", result.error ? result.error.message : result.stderr); + } + + packerHost.getTemplateFileProvider().saveUpdatedTemplateFile(result.stdout, "-fixed"); +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/operations/packerValidate.ts b/_generated/PackerBuildV1/src/operations/packerValidate.ts new file mode 100644 index 000000000000..498de396414e --- /dev/null +++ b/_generated/PackerBuildV1/src/operations/packerValidate.ts @@ -0,0 +1,31 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import packerHost from "../packerHost"; +import * as utils from "../utilities" + +export async function run(packerHost: packerHost): Promise { + var command = packerHost.createPackerTool(); + command.arg("validate"); + + // add all variables + var variableProviders = packerHost.getTemplateVariablesProviders(); + for (var provider of variableProviders) { + var variables = await provider.getTemplateVariables(packerHost); + let filePath: string = utils.generateTemporaryFilePath(); + let content: string = utils.getPackerVarFileContent(variables); + utils.writeFile(filePath, content); + command.arg(util.format("%s=%s", '-var-file', filePath)); + } + + command.arg(packerHost.getTemplateFileProvider().getTemplateFileLocation(packerHost)); + + console.log(tl.loc("ExecutingPackerValidate")); + var result = command.execSync(); + + if(result.code != 0) { + throw tl.loc("PackerValidateFailed"); + } +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/outputParsers.ts b/_generated/PackerBuildV1/src/outputParsers.ts new file mode 100644 index 000000000000..f0776c454981 --- /dev/null +++ b/_generated/PackerBuildV1/src/outputParsers.ts @@ -0,0 +1,66 @@ +"use strict"; + +import * as os from "os"; +import * as util from "util" +import * as utils from "./utilities"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as definitions from "./definitions" + +export default class OutputVariablesParser implements definitions.IOutputParser { + + constructor(outputExtractionKeys?: string[]) { + this._outputExtractionKeys = outputExtractionKeys; + this._extractedOutputs = new Map(); + } + + public parse(log: string): void { + if(utils.IsNullOrEmpty(log) || !utils.HasItems(this._outputExtractionKeys)) { + return; + } + + tl.debug("Parsing log line to extract output..."); + tl.debug("/*************************************") + tl.debug(log); + tl.debug("**************************************/") + + this._outputExtractionKeys.forEach((key: string) => { + var keyValue = this._extractOutputValue(log, key); + if(keyValue !== null) { + this._extractedOutputs.set(key, keyValue); + } + }) + } + + public getExtractedOutputs(): any { + return this._extractedOutputs; + } + + private _extractOutputValue(log: string, key: string): string { + var matchingInfoStartIndex = log.search(util.format("(\\n|\\r|\\u2028|\\u2029|^)%s: .*(\\n|\\r|\\u2028|\\u2029)", key)); + tl.debug("Match start index: " + matchingInfoStartIndex); + + if (matchingInfoStartIndex !== -1) { + var padding = 1; + + if(log.startsWith(key)) { + padding = 0; + } + var matchingInfo = log.substring(matchingInfoStartIndex + key.length + padding + 1).trim(); // one extra character is for ':' preceding the key + var matchingInfoEndIndex = matchingInfo.search("(\\n|\\r|\\u2028|\\u2029)"); + tl.debug("Match end index: " + matchingInfoEndIndex); + + if (matchingInfoEndIndex !== -1) { + matchingInfo = matchingInfo.substring(0, matchingInfoEndIndex).trim(); + } + + var matchingValue = matchingInfo; + tl.debug("...found match for key " + key + " value: " + matchingValue); + return matchingValue; + } + + return null; + } + + private _outputExtractionKeys: string[]; + private _extractedOutputs: Map; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/packerHost.ts b/_generated/PackerBuildV1/src/packerHost.ts new file mode 100644 index 000000000000..87f7fb476678 --- /dev/null +++ b/_generated/PackerBuildV1/src/packerHost.ts @@ -0,0 +1,187 @@ +"use strict"; + +import * as path from "path"; +import * as util from "util"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as tr from "azure-pipelines-task-lib/toolrunner"; +import * as utils from "./utilities"; +import * as constants from "./constants"; +import * as definitions from "./definitions" +import TaskParameters from "./taskParameters" + + +export default class PackerHost implements definitions.IPackerHost { + + constructor() { + this._templateFileProviders = {}; + this._templateVariablesProviders = {}; + this._taskParameters = new TaskParameters(); + } + + public async initialize() { + this._packerPath = await this._getPackerPath(); + tl.debug("Packer path to be used by task: " + this._packerPath); + } + + // Will create and return packer toolrunner + public createPackerTool(): tr.ToolRunner { + var command = tl.tool(this._packerPath); + return command; + } + + // Creates packer toolrunner with options + // Also sets up parser which will parse output log on the fly + public execTool(command: tr.ToolRunner, outputParser?: definitions.IOutputParser): Q.Promise { + var outputExtractorFunc = null; + if(!!outputParser) { + outputExtractorFunc = (line: string) => { + outputParser.parse(line); + } + } + + var options = { + outStream: new utils.StringWritable({ decodeStrings: false }, outputExtractorFunc), + errStream: new utils.StringWritable({ decodeStrings: false }) + }; + + return command.exec(options); + } + + public getTaskParameters(): TaskParameters { + return this._taskParameters; + } + + public getStagingDirectory(): string { + if(!!this._stagingDirectory) { + return this._stagingDirectory; + } + + this._stagingDirectory = path.join(utils.getTempDirectory(), utils.getCurrentTime().toString()); + if(!tl.exist(this._stagingDirectory)) { + tl.mkdirP(this._stagingDirectory); + } + + console.log(tl.loc("CreatedStagingDirectory", this._stagingDirectory)); + return this._stagingDirectory; + } + + public getTemplateFileProvider(): definitions.ITemplateFileProvider { + if(this._taskParameters.templateType === constants.TemplateTypeCustom) { + return this._templateFileProviders[definitions.TemplateFileProviderTypes.Custom]; + } else { + return this._templateFileProviders[definitions.TemplateFileProviderTypes.BuiltIn]; + } + } + + public getTemplateVariablesProviders(): definitions.ITemplateVariablesProvider[] { + var taskInputTemplateVariablesProvider = this._templateVariablesProviders[definitions.VariablesProviderTypes.TaskInput]; + var azureSpnTemplateVariablesProvider = this._templateVariablesProviders[definitions.VariablesProviderTypes.AzureSPN]; + + return [taskInputTemplateVariablesProvider, azureSpnTemplateVariablesProvider]; + } + + public registerTemplateFileProvider(providerType: definitions.TemplateFileProviderTypes, provider: definitions.ITemplateFileProvider) { + this._templateFileProviders[providerType] = provider; + } + + public registerTemplateVariablesProvider(providerType: definitions.VariablesProviderTypes, provider: definitions.ITemplateVariablesProvider) { + this._templateVariablesProviders[providerType] = provider; + } + + public cleanup(): void { + try{ + utils.deleteDirectory(this._stagingDirectory); + } + catch (err) { + tl.warning(tl.loc("CouldNotDeleteStagingDirectory", this._stagingDirectory)); + } + } + + private async _getPackerPath(): Promise { + var installedPackerPath = tl.which("packer", false); + var installedPackerVersion = this._getPackerVersion(installedPackerPath); + console.log(tl.loc("InstalledPackerVersion", installedPackerVersion)); + var packerVersionString = constants.CurrentSupportedPackerVersionString; + var explicitPackerVersion : boolean= false ; + + if(this._taskParameters.templateType == constants.TemplateTypeCustom && this._taskParameters.packerVersionString && installedPackerVersion != this._taskParameters.packerVersionString) { + packerVersionString = this._taskParameters.packerVersionString; + explicitPackerVersion = true; + } + + if(explicitPackerVersion || !installedPackerVersion || utils.isGreaterVersion(utils.PackerVersion.convertFromString(packerVersionString), utils.PackerVersion.convertFromString(installedPackerVersion))) { + if(explicitPackerVersion){ + console.log(tl.loc("InstallExplicitPackerVersion", packerVersionString)) + } else { + console.log(tl.loc("DownloadingPackerRequired", packerVersionString, packerVersionString)); + } + var downloadPath = path.join(this.getStagingDirectory(), "packer.zip"); + var packerDownloadUrl = util.format(constants.PackerDownloadUrlFormat, packerVersionString, packerVersionString, this._getPackerZipNamePrefix()); + tl.debug("Downloading packer from url: " + packerDownloadUrl); + await utils.download(packerDownloadUrl, downloadPath); + console.log(tl.loc("DownloadingPackerCompleted", downloadPath)); + + var extractedPackerLocation = path.join(this.getStagingDirectory(), "packer"); + await utils.unzip(downloadPath, extractedPackerLocation); + if(tl.osType().match(/^Win/)) { + var packerPath = path.join(extractedPackerLocation, "packer.exe"); + } else { + var packerPath = path.join(extractedPackerLocation, "packer"); + } + + console.log(tl.loc("ExtractingPackerCompleted", packerPath)); + await this._waitForPackerExecutable(packerPath); + return packerPath; + } else { + return installedPackerPath; + } + } + + private _getPackerVersion(packerPath: string): string { + if(!!packerPath && tl.exist(packerPath)) { + // if failed to get version, do not fail task + try { + return tl.tool(packerPath).arg("--version").execSync().stdout.trim(); + } catch (err) {} + } + + return null; + } + + private async _waitForPackerExecutable(packerPath: string): Promise { + if(!!packerPath && tl.exist(packerPath)) { + var iterationCount = 0; + do{ + // query version to check if packer executable is ready + var result = tl.tool(packerPath).arg("--version").execSync(); + if(result.code != 0 && result.error && result.error.message.indexOf("EBUSY") != -1){ + iterationCount++; + console.log(tl.loc("PackerToolBusy")); + await utils.sleep(1000); + } else { + break; + } + } while (iterationCount <= 10) + } + } + + private _getPackerZipNamePrefix(): string { + if(tl.osType().match(/^Win/)) { + return 'windows_amd64'; + } else if(tl.osType().match(/^Linux/)) { + return 'linux_amd64'; + } else if(tl.osType().match(/^Darwin/)) { + return 'darwin_amd64'; + } + + throw tl.loc("OSNotSupportedForRunningPacker"); + } + + private _packerPath: string; + private _taskParameters: TaskParameters; + private _stagingDirectory: string; + private _templateFileProviders: ObjectDictionary; + private _templateVariablesProviders: ObjectDictionary; +} + +interface ObjectDictionary { [key: number]: T; } \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/taskInputTemplateVariablesProvider.ts b/_generated/PackerBuildV1/src/taskInputTemplateVariablesProvider.ts new file mode 100644 index 000000000000..1a3c21f908d1 --- /dev/null +++ b/_generated/PackerBuildV1/src/taskInputTemplateVariablesProvider.ts @@ -0,0 +1,76 @@ +"use strict"; + +import * as path from "path"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as definitions from "./definitions" +import * as utils from "./utilities" + +// provider for all template variables which are derived from task input(apart from azure subscription input which is read by AzureSpnVariablesProvider) +export default class TaskInputTemplateVariablesProvider implements definitions.ITemplateVariablesProvider { + + constructor() { + } + + public register(packerHost: definitions.IPackerHost): void { + packerHost.registerTemplateVariablesProvider(definitions.VariablesProviderTypes.TaskInput, this); + tl.debug("registered task input variables provider"); + } + + public async getTemplateVariables(packerHost: definitions.IPackerHost): Promise> { + if(!!this._templateVariables) { + return this._templateVariables; + } + + var taskParameters = packerHost.getTaskParameters(); + + // custom template variables + if(taskParameters.templateType === constants.TemplateTypeCustom) { + this._templateVariables = new Map(); + var customTemplateParameters = taskParameters.customTemplateParameters; + for (var key in customTemplateParameters) { + this._templateVariables.set(key, customTemplateParameters[key]) + } + + return this._templateVariables; + } + + // VM specific variables + this._templateVariables = new Map(); + this._templateVariables.set(constants.TemplateVariableResourceGroupName, taskParameters.resourceGroup); + this._templateVariables.set(constants.TemplateVariableStorageAccountName, taskParameters.storageAccount); + + if(taskParameters.isManagedImage){ + this._templateVariables.set(constants.TemplateVariableManagedImageName, taskParameters.managedImageName) + } + + if(taskParameters.baseImageSource === constants.BaseImageSourceCustomVhd) { + this._templateVariables.set(constants.TemplateVariableImageUrlName, taskParameters.customBaseImageUrl); + } else { + this._templateVariables.set(constants.TemplateVariableImagePublisherName, taskParameters.imagePublisher); + this._templateVariables.set(constants.TemplateVariableImageOfferName, taskParameters.imageOffer); + this._templateVariables.set(constants.TemplateVariableImageSkuName, taskParameters.imageSku); + } + + this._templateVariables.set(constants.TemplateVariableLocationName, taskParameters.location); + + var capturePrefix = tl.getVariable('release.releaseName') || tl.getVariable('build.buildnumber') || "vstscapture"; + this._templateVariables.set(constants.TemplateVariableCapturePrefixName, capturePrefix); + this._templateVariables.set(constants.TemplateVariableSkipCleanName, taskParameters.skipTempFileCleanupDuringVMDeprovision.toString()); + + // user deployment script specific variables + var deployScriptPath = taskParameters.deployScriptPath; + var packagePath = taskParameters.packagePath; + this._templateVariables.set(constants.TemplateVariableScriptRelativePathName, deployScriptPath); + this._templateVariables.set(constants.TemplateVariablePackagePathName, packagePath); + this._templateVariables.set(constants.TemplateVariablePackageName, path.basename(packagePath)); + if(!utils.IsNullOrEmpty(taskParameters.deployScriptArguments)) { + this._templateVariables.set(constants.TemplateVariableScriptArgumentsName, taskParameters.deployScriptArguments); + } + + + return this._templateVariables; + } + + private _templateVariables: Map; +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/taskParameters.ts b/_generated/PackerBuildV1/src/taskParameters.ts new file mode 100644 index 000000000000..7945b1932caf --- /dev/null +++ b/_generated/PackerBuildV1/src/taskParameters.ts @@ -0,0 +1,133 @@ +"use strict"; + +import * as path from "path"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as constants from "./constants"; +import * as utils from "./utilities"; +import { AzureRMEndpoint } from "azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint"; +import msRestAzure = require("azure-pipelines-tasks-azure-arm-rest/azure-arm-common"); + +export default class TaskParameters { + public templateType: string; + public customTemplateLocation: string; + public serviceEndpoint: string; + + public resourceGroup: string; + public location: string; + public storageAccount: string; + + public baseImageSource: string; + public builtinBaseImage: string; + public customBaseImageUrl: string; + public isManagedImage: boolean; + public managedImageName: string; + public imagePublisher: string; + public imageOffer: string; + public imageSku: string; + public osType: string; + + public packagePath: string; + public deployScriptPath: string; + public deployScriptArguments: string; + public packerVersionString: string; + + public additionalBuilderParameters: {}; + public customTemplateParameters: {}; + public skipTempFileCleanupDuringVMDeprovision: boolean = true; + + public imageUri: string; + public imageId: string; + + public graphCredentialsPromise: Promise; + + constructor() { + try { + this.templateType = tl.getInput(constants.TemplateTypeInputName, true); + + if (this.templateType === constants.TemplateTypeCustom) { + this.customTemplateLocation = tl.getPathInput(constants.CustomTemplateLocationInputType, true, true); + console.log(tl.loc("ParsingCustomTemplateParameters")); + this.customTemplateParameters = JSON.parse(tl.getInput("customTemplateParameters")); + this.packerVersionString = tl.getInput(constants.PackerVersionInputName); + } else { + this.serviceEndpoint = tl.getInput(constants.ConnectedServiceInputName, true); + this.resourceGroup = tl.getInput(constants.ResourceGroupInputName, true); + this.storageAccount = tl.getInput(constants.StorageAccountInputName, true); + this.location = tl.getInput(constants.LocationInputName, true); + this.isManagedImage = tl.getBoolInput(constants.ManagedImageInputName, false); + + if (this.isManagedImage) { + this.managedImageName = tl.getInput(constants.ManagedImageNameInputName, true); + } + + this.baseImageSource = tl.getInput(constants.BaseImageSourceInputName, true); + if (this.baseImageSource === constants.BaseImageSourceDefault) { + this.builtinBaseImage = tl.getInput(constants.BuiltinBaseImageInputName, true); + this._extractImageDetails(); + } else if (this.isManagedImage) { + throw (tl.loc("CreateManagedImageNotSupportedForVHDSource")); + } else { + this.customBaseImageUrl = tl.getInput(constants.CustomImageUrlInputName, true); + this.osType = tl.getInput(constants.CustomImageOsTypeInputName, true); + } + + console.log(tl.loc("ResolvingDeployPackageInput")); + this.packagePath = this._getResolvedPath(tl.getVariable('System.DefaultWorkingDirectory'), tl.getInput(constants.DeployPackageInputName, true)); + console.log(tl.loc("ResolvedDeployPackgePath", this.packagePath)); + + console.log(tl.loc("ResolvingDeployScriptInput")); + var deployScriptAbsolutePath = this._getResolvedPath(this.packagePath, tl.getInput(constants.DeployScriptPathInputName, true)); + var scriptRelativePath = path.relative(this.packagePath, deployScriptAbsolutePath); + this.deployScriptPath = this._normalizeRelativePathForTargetOS(scriptRelativePath); + console.log(tl.loc("ResolvedDeployScriptPath", this.deployScriptPath)); + + this.deployScriptArguments = tl.getInput(constants.DeployScriptArgumentsInputName, false); + + this.graphCredentialsPromise = this.getGraphCredentials(this.serviceEndpoint); + } + console.log(tl.loc("ParsingAdditionalBuilderParameters")); + this.additionalBuilderParameters = JSON.parse(tl.getInput("additionalBuilderParameters")); + this.skipTempFileCleanupDuringVMDeprovision = tl.getBoolInput("skipTempFileCleanupDuringVMDeprovision", false); + this.imageUri = tl.getInput(constants.OutputVariableImageUri, false); + this.imageId = tl.getInput(constants.OutputVariableImageId, false); + } + catch (error) { + throw (tl.loc("TaskParametersConstructorFailed", error)); + } + } + + // extract image details from base image e.g. "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows" + private _extractImageDetails() { + var parts = this.builtinBaseImage.split(':'); + this.imagePublisher = parts[0]; + this.imageOffer = parts[1]; + this.imageSku = parts[2]; + this.osType = parts[3]; + } + + private _getResolvedPath(rootFolder: string, inputPath: string) { + var matchingFiles = utils.findMatch(rootFolder, inputPath); + if (!utils.HasItems(matchingFiles)) { + throw tl.loc("ResolvedPathNotFound", inputPath, rootFolder); + } + + return matchingFiles[0]; + } + + private _normalizeRelativePathForTargetOS(inputPath: string) { + if (tl.osType().match(/^Win/) && !this.osType.toLowerCase().match(/^win/)) { + var splitPath = inputPath.split(path.sep); + return path.posix.join.apply(null, splitPath); + } else if (!tl.osType().match(/^Win/) && this.osType.toLocaleLowerCase().match(/^win/)) { + var splitPath = inputPath.split(path.sep); + return path.win32.join.apply(null, splitPath); + } + + return inputPath; + } + + private async getGraphCredentials(connectedService: string): Promise { + var azureEndpoint = await new AzureRMEndpoint(connectedService).getEndpoint(true); + return azureEndpoint.applicationTokenCredentials; + } +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/src/utilities.ts b/_generated/PackerBuildV1/src/utilities.ts new file mode 100644 index 000000000000..5bd6715db369 --- /dev/null +++ b/_generated/PackerBuildV1/src/utilities.ts @@ -0,0 +1,207 @@ +"use strict"; + +var https = require('https'); +var fs = require('fs'); +import * as os from "os"; +import * as path from "path"; +import * as stream from "stream"; +var DecompressZip = require('decompress-zip'); +import * as tl from "azure-pipelines-task-lib/task"; + +// copy source file to destination folder. destination folder will be created if it does not exists, otherwise its contents will be overwritten. +export function copyFile(sourceFile: string, destinationFolder: string): void { + tl.checkPath(sourceFile, tl.loc("CopySourceNotExists", sourceFile)); + + if(!tl.exist(destinationFolder)) { + console.log(tl.loc("CreatingDestinationDir", destinationFolder)); + tl.mkdirP(destinationFolder); + console.log(tl.loc("CreatedDestinationDir", destinationFolder)); + } + + tl.cp(sourceFile, destinationFolder, "-f") +} + +export async function download(url: string, downloadPath: string): Promise { + var file = fs.createWriteStream(downloadPath); + await new Promise((resolve, reject) => { + var req = https.request(url, res => { + tl.debug("statusCode: " + res.statusCode); + res.pipe(file); + res.on("error", err => reject(err)); + res.on("end", () => { + tl.debug("File download completed"); + resolve(null); + }); + }); + + req.on("error", err => { + tl.debug(err); + reject(err); + }); + + req.end(); + }); + + if (!file.writableEnded) { + file.end(null, null, file.close); + } +} + +export async function unzip(zipLocation, unzipLocation): Promise { + + var finishPromise = new Promise(function (resolve, reject) { + if(tl.exist(unzipLocation)) { + tl.rmRF(unzipLocation); + } + var unzipper = new DecompressZip(zipLocation); + tl.debug('extracting ' + zipLocation + ' to ' + unzipLocation); + unzipper.on('error', err => reject(err)); + unzipper.on('extract', log => { + tl.debug('extracted ' + zipLocation + ' to ' + unzipLocation + ' Successfully'); + resolve(unzipLocation); + }); + + unzipper.extract({ + path: unzipLocation + }); + }); + + return finishPromise; +} + +export function readJsonFile(filePath: string): string { + var content = null; + if (tl.exist(filePath)) { + var content = fs.readFileSync(filePath, 'utf8').toString(); + + // remove BOM + if (content.indexOf('\uFEFF') == 0) { + content = content.slice(1); + } + } + else { + tl.debug('Json file not found: ' + filePath); + } + return content; +} + +export function generateTemporaryFilePath (): string { + let filePath: string = path.resolve(tl.getVariable('Agent.TempDirectory'), Math.random().toString(36).replace('0.', '') + '.json'); + return filePath; +} + +export function getPackerVarFileContent (templateVariables: Map): string { + let res = {}; + templateVariables.forEach((value: string, key: string) => { + res[key] = value + }); + let content: string = JSON.stringify(res); + return content; +} + +export function writeFile(filePath: string, content: string): void { + tl.writeFile(filePath, content); +} + +export function findMatch(root: string, patterns: string[] | string): string[] { + return tl.findMatch(root, patterns); +} + +export function getTempDirectory(): string { + return tl.getVariable('Agent.TempDirectory'); +} + +export function getCurrentTime(): number { + return new Date().getTime(); +} + +export function getCurrentDirectory(): string { + return __dirname; +} + +export function isGreaterVersion(firstVersion: PackerVersion, secondVersion: PackerVersion): boolean { + if(firstVersion.major > secondVersion.major) { + return true; + } else if(firstVersion.major === secondVersion.major && firstVersion.minor > secondVersion.minor) { + return true; + } else if(firstVersion.major === secondVersion.major && firstVersion.minor === secondVersion.minor && firstVersion.patch > secondVersion.patch) { + return true; + } + + return false; +} + +export function IsNullOrEmpty(str: string): boolean { + if(str === null || str === undefined || str === "") { + return true; + } + + return false; +} + +export function HasItems(arr: any[]): boolean { + if(arr === null || arr === undefined || arr.length === 0) { + return false; + } + + return true; +} + +export function sleep (time): Promise { + return new Promise((resolve) => setTimeout(resolve, time)); +} + +export function deleteDirectory(dir: string): void { + if(!dir) { + return; + } + + if(tl.exist(dir)) { + tl.debug("Cleaning-up directory " + dir); + try { + tl.rmRF(dir); + } catch(error) {} + } +} + +// Extends stream.Writable to support parsing data as they are written +export class StringWritable extends stream.Writable { + + constructor(options, parserCallback?) { + super(options); + this._parserCallback = parserCallback; + } + + _write(data: any, encoding: string, callback: Function): void { + console.log(data.toString()); + + if(!!this._parserCallback) { + this._parserCallback(data.toString()); + } + + if (callback) { + callback(); + } + } + + private _parserCallback: (line: string) => void; +}; + +export class PackerVersion { + public major: number; + public minor: number; + public patch: number; + + public static convertFromString(versionString: string): PackerVersion { + var parts = versionString.split('.'); + if(parts.length !== 3) { + throw tl.loc("InvalidPackerVersionString", versionString); + } + + return { + major: parseInt(parts[0]), + minor: parseInt(parts[1]), + patch: parseInt(parts[2]) + }; + } +} diff --git a/_generated/PackerBuildV1/task.json b/_generated/PackerBuildV1/task.json new file mode 100644 index 000000000000..24937d5d9240 --- /dev/null +++ b/_generated/PackerBuildV1/task.json @@ -0,0 +1,358 @@ +{ + "id": "845fd4f4-642d-4694-8514-047948a5a556", + "name": "PackerBuild", + "friendlyName": "Build machine image", + "description": "Build a machine image using Packer, which may be used for Azure Virtual machine scale set deployment", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/packer-build", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=845329) or [see the Packer documentation](https://www.packer.io/docs/index.html)", + "category": "Deploy", + "releaseNotes": "This task now supports managed disk images.", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 236, + "Patch": 0 + }, + "demands": [], + "minimumAgentVersion": "2.0.0", + "groups": [ + { + "name": "AzureDetails", + "displayName": "Azure Details", + "isExpanded": true, + "visibleRule": "templateType = builtin" + }, + { + "name": "DeploymentInputs", + "displayName": "Deployment Inputs", + "isExpanded": true, + "visibleRule": "templateType = builtin" + }, + { + "name": "Advanced", + "displayName": "Advanced", + "isExpanded": false + }, + { + "name": "Output", + "displayName": "Output", + "isExpanded": true + } + ], + "inputs": [ + { + "name": "templateType", + "type": "pickList", + "label": "Packer template", + "required": true, + "helpMarkDown": "Select whether you want the task to auto generate Packer template or use custom template provided by you.", + "options": { + "builtin": "Auto generated", + "custom": "User provided" + }, + "defaultValue": "builtin" + }, + { + "name": "customTemplateLocation", + "type": "filePath", + "label": "Packer template location", + "required": true, + "helpMarkDown": "Path to a custom user-provided template.", + "visibleRule": "templateType = custom" + }, + { + "name": "customTemplateParameters", + "type": "multiLine", + "label": "Template parameters", + "required": false, + "defaultValue": "{}", + "visibleRule": "templateType = custom", + "helpMarkDown": "Specify parameters which will be passed to Packer for building custom template. This should map to \"variables\" section in your custom template. E.g. if the template has a variable named \"drop-location\", then add a parameter here with name \"drop-location\" and a value which you want to use. You can link the value to a release variable as well. To view/edit the additional parameters in a grid, click on \"…\" next to text box.", + "properties": { + "editorExtension": "ms.vss-services-azure.azure-servicebus-message-grid" + } + }, + { + "name": "ConnectedServiceName", + "type": "connectedService:AzureRM", + "label": "Azure subscription", + "required": true, + "helpMarkDown": "Select the Azure Resource Manager subscription for baking and storing the machine image.", + "groupName": "AzureDetails" + }, + { + "name": "isManagedImage", + "type": "boolean", + "label": "Managed VM disk image", + "required": true, + "helpMarkDown": "Check if generated image should be a managed image.", + "defaultValue": true, + "groupName": "AzureDetails" + }, + { + "name": "managedImageName", + "type": "string", + "label": "Managed VM Disk Image Name ", + "required": true, + "helpMarkDown": "The Name of the Managed disk image for Auto Generated Templates.", + "visibleRule": "isManagedImage = true", + "groupName": "AzureDetails" + }, + { + "name": "location", + "type": "pickList", + "label": "Storage location", + "required": true, + "helpMarkDown": "Location for storing the built machine image. This location will also be used to create a temporary VM for the purpose of building image.", + "groupName": "AzureDetails" + }, + { + "name": "storageAccountName", + "type": "pickList", + "label": "Storage account", + "required": true, + "helpMarkDown": "Storage account for storing the built machine image. This storage account must be pre-existing in the location selected.", + "groupName": "AzureDetails" + }, + { + "name": "azureResourceGroup", + "type": "pickList", + "label": "Resource group", + "helpMarkDown": "Azure Resource group that contains the selected storage account.", + "required": true, + "groupName": "AzureDetails" + }, + { + "name": "baseImageSource", + "type": "pickList", + "label": "Base image source", + "required": true, + "defaultValue": "default", + "helpMarkDown": "Select the source of base image. You can either choose from a curated gallery of OS images or provide URL of your custom VHD image.
Please note that if you have selected option to create a Managed image by checking 'Managed VM disk image' option, then you should only choose 'Gallery' option here. 'Custom' source is not supported to create a managed image.", + "options": { + "default": "Gallery", + "customVhd": "Custom" + }, + "groupName": "DeploymentInputs" + }, + { + "name": "baseImage", + "type": "pickList", + "label": "Base image", + "required": true, + "helpMarkDown": "Choose from curated list of OS images. This will be used for installing pre-requisite(s) and application(s) before capturing machine image.", + "properties": { + "EditableOptions": "True" + }, + "options": { + "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows": "Windows 2012-R2-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2016-Datacenter:windows": "Windows 2016-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2012-Datacenter:windows": "Windows 2012-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:windows": "Windows 2008-R2-SP1", + "Canonical:UbuntuServer:14.04.4-LTS:linux": "Ubuntu 14.04.4-LTS", + "Canonical:UbuntuServer:16.04-LTS:linux": "Ubuntu 16.04-LTS", + "Canonical:UbuntuServer:18.04-LTS:linux": "Ubuntu 18.04-LTS", + "RedHat:RHEL:7.2:linux": "RHEL 7.2", + "RedHat:RHEL:6.8:linux": "RHEL 6.8", + "OpenLogic:CentOS:7.2:linux": "CentOS 7.2", + "OpenLogic:CentOS:6.8:linux": "CentOS 6.8", + "credativ:Debian:8:linux": "Debian 8", + "credativ:Debian:7:linux": "Debian 7", + "SUSE:openSUSE-Leap:42.2:linux": "openSUSE-Leap 42.2", + "SUSE:SLES:12-SP2:linux": "SLES 12-SP2", + "SUSE:SLES:11-SP4:linux": "SLES 11-SP4" + }, + "defaultValue": "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows", + "visibleRule": "baseImageSource = default", + "groupName": "DeploymentInputs" + }, + { + "name": "customImageUrl", + "type": "string", + "label": "Base image URL", + "required": true, + "helpMarkDown": "Specify URL of base image. This will be used for installing pre-requisite(s) and application(s) before capturing machine image.", + "visibleRule": "baseImageSource = customVhd", + "groupName": "DeploymentInputs" + }, + { + "name": "customImageOSType", + "type": "pickList", + "label": "Base image OS", + "required": true, + "defaultValue": "windows", + "options": { + "windows": "Windows", + "linux": "Linux" + }, + "visibleRule": "baseImageSource = customVhd", + "groupName": "DeploymentInputs" + }, + { + "name": "packagePath", + "type": "filePath", + "label": "Deployment Package", + "required": true, + "helpMarkDown": "Specify the path for deployment package directory relative to $(System.DefaultWorkingDirectory). Supports minimatch pattern. Example path: FrontendWebApp/**/GalleryApp
Please note that this package will be copied to temporary virtual machine which Packer creates. If the package contains large number of files and/or the files are very large in size, the upload can take quite long time (possibly running into few hours). To optimize the upload time, please see if size of the package can be meaningfully reduced. Another alternative is to use an intermediary Azure storage account. Upload the package to a storage account prior to running this task. And for this task, use a package containing a script which will download the required package from the storage account.", + "groupName": "DeploymentInputs" + }, + { + "name": "deployScriptPath", + "type": "string", + "label": "Deployment script", + "required": true, + "helpMarkDown": "Specify the relative path to powershell script(for Windows) or shell script(for Linux) which deploys the package. This script should be contained in the package path selected above. Supports minimatch pattern. Example path: deploy/**/scripts/windows/deploy.ps1", + "groupName": "DeploymentInputs" + }, + { + "name": "deployScriptArguments", + "type": "string", + "label": "Deployment script arguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "Specify the arguments to be passed to deployment script.", + "groupName": "DeploymentInputs" + }, + { + "name": "additionalBuilderParameters", + "type": "multiLine", + "label": "Additional Builder parameters", + "required": false, + "defaultValue": "{\"vm_size\":\"Standard_D3_v2\"}", + "groupName": "Advanced", + "visibleRule": "templateType = builtin", + "helpMarkDown": "In auto generated Packer template mode the task creates a Packer template with an Azure builder. This builder is used to generate a machine image. You can add keys to the Azure builder to customize the generated Packer template. For example setting ssh_tty=true in case you are using a CentOS base image and you need to have a tty to run sudo.
To view/edit the additional parameters in a grid, click on “…” next to text box.", + "properties": { + "editorExtension": "ms.vss-services-azure.azure-servicebus-message-grid" + } + }, + { + "name": "skipTempFileCleanupDuringVMDeprovision", + "type": "boolean", + "label": "Skip temporary file cleanup during deprovision", + "defaultValue": true, + "groupName": "Advanced", + "visibleRule": "templateType = builtin", + "helpMarkDown": "During deprovisioning of VM, skip clean-up of temporary files uploaded to VM. Refer [here](https://www.packer.io/docs/builders/azure.html#skip_clean)" + }, + { + "name": "packerVersion", + "type": "string", + "label": "Packer Version", + "required": false, + "defaultValue": "", + "groupName": "Advanced", + "visibleRule": "templateType = custom", + "helpMarkDown": "Specify the version of Packer to install. This will work only with custom templates." + }, + { + "name": "imageUri", + "type": "string", + "label": "Image URL or Name", + "required": false, + "defaultValue": "", + "helpMarkDown": "Provide a name for the output variable which will store generated machine image VHD url for un-managed VM image or image name for managed VM image.", + "groupName": "Output" + }, + { + "name": "imageId", + "type": "string", + "label": "Azure Resource Id", + "required": false, + "defaultValue": "", + "helpMarkDown": "Provide a name for the output variable which will store the azure resource id for the newly created image. This is for managed images only.", + "groupName": "Output" + } + ], + "dataSourceBindings": [ + { + "target": "location", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureLocations2", + "resultTemplate": "{ \"Value\" : \"{{{name}}}\", \"DisplayValue\" : \"{{{displayName}}}\" }" + }, + { + "target": "storageAccountName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureRMStorageAccountByLocation", + "parameters": { + "location": "$(location)" + } + }, + { + "target": "azureResourceGroup", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureRMStorageAccountIdByName", + "parameters": { + "storageAccountName": "$(storageAccountName)" + }, + "resultTemplate": "{\"Value\":\"{{{ #extractResource resourceGroups}}}\",\"DisplayValue\":\"{{{ #extractResource resourceGroups}}}\"}" + } + ], + "sourceDefinitions": [], + "instanceNameFormat": "Build immutable image", + "execution": { + "Node10": { + "target": "./src//main.js" + }, + "Node16": { + "target": "./src//main.js", + "argumentFormat": "" + } + }, + "messages": { + "OSTypeNotSupported": "This OS type is not supported for image creation: %s. Please use either windows or linux.", + "CopyTemplateToTempFailed": "Could not copy built-in template from source %s to temp location %s", + "TaskNotFound": "Task.json file could not be found: %s", + "OriginalTemplateLocation": "Original template location: %s", + "CopyingTemplate": "Copying original template from %s to temporary location %s", + "TempTemplateLocation": "Copied template file to a temporary location: %s", + "CopySourceNotExists": "Source file path does not exist for copying: %s", + "CreatingDestinationDir": "Destination for copying does not exist. Creating: %s", + "CreatedDestinationDir": "Created destination directory for copying: %s", + "ExecutingPackerFix": "Running packer fix command", + "ExecutingPackerValidate": "Running packer validate command to ensure template is valid", + "ExecutingPackerBuild": "Running packer build command. Waiting for it to finish...", + "PackerBuildCompleted": "packer build completed.", + "ImageURIOutputVariableNotFound": "Could not get vhd image URI (unmanaged image) from packer execution. Output variable will not be set.", + "ImageIDOutputVariableNotFound": "Could not get managed image id from packer execution. Output variable will not be set. Note: This variable should not be used with un-managed VM images.", + "ManagedImageNameOutputVariableNotFound": "Could not get managed image name from packer execution. Output variable will not be set.", + "CustumTemplateOutputVariableNotFound": "Could not get managed image name or vhd image URI (unmanaged image) from packer execution. Output variable will not be set.", + "BuiltInTemplateNotFoundErrorMessagePathName": "Built-in template for OS type: %s ", + "CustomTemplateNotFoundErrorMessagePathName": "Custom template not found at location: %s", + "CouldNotDeleteTemporaryTemplateDirectory": "Could not delete temporary template directory %s. Please delete manually.", + "TaskParametersConstructorFailed": "Error happened while initializing task: %s.", + "PackerFixFailed": "Packer fix command failed with error : '%s'. This could happen if task does not support packer version.", + "PackerValidateFailed": "Packer validate command failed. This could happen if task does not support packer version.", + "ResolvedPathNotFound": "Not found any file matching pattern: %s under root folder: %s.", + "ResolvedDeployPackgePath": "Resolved deploy package path: %s.", + "ResolvedDeployScriptPath": "Resolved deploy script path: %s.", + "OSNotSupportedForRunningPacker": "OS is not supported for running packer.", + "InstallExplicitPackerVersion": "Packer version %s will be downloaded and installed for running task.", + "DownloadingPackerRequired": "Either packer is not installed or its version is less than %s. Version %s will be downloaded and installed for running task.", + "DownloadingPackerCompleted": "Packer installer downloaded successfully at path: %s.", + "ExtractingPackerCompleted": "Packer extracted successfully at path: %s.", + "CreatedStagingDirectory": "Created staging directory for keeping packer binary and templates: %s.", + "CouldNotDeleteStagingDirectory": "Could not delete staging directory %s. Please delete manually.", + "InstalledPackerVersion": "Current installed packer version is %s.", + "PackerToolBusy": "Packer tool seems to be busy. Retrying after 1 second...", + "ResolvingDeployPackageInput": "Resolving deploy package path.", + "ResolvingDeployScriptInput": "Resolving deploy script path.", + "ParsingAdditionalBuilderParameters": "Parsing additional builder parameters json.", + "ParsingTemplateFileContentFailed": "Unable to parse json content from template file %s with error: %s.", + "ParsingCustomTemplateParameters": "Parsing custom template parameters json.", + "GetArtifactItemsNotSupported": "Get artifact items not supported, invalid code path", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s", + "CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s", + "CreateManagedImageNotSupportedForVHDSource": "Creating managed image from a source VHD is not supported. You must set 'Base image source' input value to 'Gallery'.", + "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." + }, + "_buildConfigMapping": { + "Default": "1.236.0", + "Node20_229_6": "1.236.1" + } +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/task.loc.json b/_generated/PackerBuildV1/task.loc.json new file mode 100644 index 000000000000..ec19168c69a9 --- /dev/null +++ b/_generated/PackerBuildV1/task.loc.json @@ -0,0 +1,358 @@ +{ + "id": "845fd4f4-642d-4694-8514-047948a5a556", + "name": "PackerBuild", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/packer-build", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Deploy", + "releaseNotes": "ms-resource:loc.releaseNotes", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 236, + "Patch": 0 + }, + "demands": [], + "minimumAgentVersion": "2.0.0", + "groups": [ + { + "name": "AzureDetails", + "displayName": "ms-resource:loc.group.displayName.AzureDetails", + "isExpanded": true, + "visibleRule": "templateType = builtin" + }, + { + "name": "DeploymentInputs", + "displayName": "ms-resource:loc.group.displayName.DeploymentInputs", + "isExpanded": true, + "visibleRule": "templateType = builtin" + }, + { + "name": "Advanced", + "displayName": "ms-resource:loc.group.displayName.Advanced", + "isExpanded": false + }, + { + "name": "Output", + "displayName": "ms-resource:loc.group.displayName.Output", + "isExpanded": true + } + ], + "inputs": [ + { + "name": "templateType", + "type": "pickList", + "label": "ms-resource:loc.input.label.templateType", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.templateType", + "options": { + "builtin": "Auto generated", + "custom": "User provided" + }, + "defaultValue": "builtin" + }, + { + "name": "customTemplateLocation", + "type": "filePath", + "label": "ms-resource:loc.input.label.customTemplateLocation", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.customTemplateLocation", + "visibleRule": "templateType = custom" + }, + { + "name": "customTemplateParameters", + "type": "multiLine", + "label": "ms-resource:loc.input.label.customTemplateParameters", + "required": false, + "defaultValue": "{}", + "visibleRule": "templateType = custom", + "helpMarkDown": "ms-resource:loc.input.help.customTemplateParameters", + "properties": { + "editorExtension": "ms.vss-services-azure.azure-servicebus-message-grid" + } + }, + { + "name": "ConnectedServiceName", + "type": "connectedService:AzureRM", + "label": "ms-resource:loc.input.label.ConnectedServiceName", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.ConnectedServiceName", + "groupName": "AzureDetails" + }, + { + "name": "isManagedImage", + "type": "boolean", + "label": "ms-resource:loc.input.label.isManagedImage", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.isManagedImage", + "defaultValue": true, + "groupName": "AzureDetails" + }, + { + "name": "managedImageName", + "type": "string", + "label": "ms-resource:loc.input.label.managedImageName", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.managedImageName", + "visibleRule": "isManagedImage = true", + "groupName": "AzureDetails" + }, + { + "name": "location", + "type": "pickList", + "label": "ms-resource:loc.input.label.location", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.location", + "groupName": "AzureDetails" + }, + { + "name": "storageAccountName", + "type": "pickList", + "label": "ms-resource:loc.input.label.storageAccountName", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.storageAccountName", + "groupName": "AzureDetails" + }, + { + "name": "azureResourceGroup", + "type": "pickList", + "label": "ms-resource:loc.input.label.azureResourceGroup", + "helpMarkDown": "ms-resource:loc.input.help.azureResourceGroup", + "required": true, + "groupName": "AzureDetails" + }, + { + "name": "baseImageSource", + "type": "pickList", + "label": "ms-resource:loc.input.label.baseImageSource", + "required": true, + "defaultValue": "default", + "helpMarkDown": "ms-resource:loc.input.help.baseImageSource", + "options": { + "default": "Gallery", + "customVhd": "Custom" + }, + "groupName": "DeploymentInputs" + }, + { + "name": "baseImage", + "type": "pickList", + "label": "ms-resource:loc.input.label.baseImage", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.baseImage", + "properties": { + "EditableOptions": "True" + }, + "options": { + "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows": "Windows 2012-R2-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2016-Datacenter:windows": "Windows 2016-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2012-Datacenter:windows": "Windows 2012-Datacenter", + "MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:windows": "Windows 2008-R2-SP1", + "Canonical:UbuntuServer:14.04.4-LTS:linux": "Ubuntu 14.04.4-LTS", + "Canonical:UbuntuServer:16.04-LTS:linux": "Ubuntu 16.04-LTS", + "Canonical:UbuntuServer:18.04-LTS:linux": "Ubuntu 18.04-LTS", + "RedHat:RHEL:7.2:linux": "RHEL 7.2", + "RedHat:RHEL:6.8:linux": "RHEL 6.8", + "OpenLogic:CentOS:7.2:linux": "CentOS 7.2", + "OpenLogic:CentOS:6.8:linux": "CentOS 6.8", + "credativ:Debian:8:linux": "Debian 8", + "credativ:Debian:7:linux": "Debian 7", + "SUSE:openSUSE-Leap:42.2:linux": "openSUSE-Leap 42.2", + "SUSE:SLES:12-SP2:linux": "SLES 12-SP2", + "SUSE:SLES:11-SP4:linux": "SLES 11-SP4" + }, + "defaultValue": "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:windows", + "visibleRule": "baseImageSource = default", + "groupName": "DeploymentInputs" + }, + { + "name": "customImageUrl", + "type": "string", + "label": "ms-resource:loc.input.label.customImageUrl", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.customImageUrl", + "visibleRule": "baseImageSource = customVhd", + "groupName": "DeploymentInputs" + }, + { + "name": "customImageOSType", + "type": "pickList", + "label": "ms-resource:loc.input.label.customImageOSType", + "required": true, + "defaultValue": "windows", + "options": { + "windows": "Windows", + "linux": "Linux" + }, + "visibleRule": "baseImageSource = customVhd", + "groupName": "DeploymentInputs" + }, + { + "name": "packagePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.packagePath", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.packagePath", + "groupName": "DeploymentInputs" + }, + { + "name": "deployScriptPath", + "type": "string", + "label": "ms-resource:loc.input.label.deployScriptPath", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.deployScriptPath", + "groupName": "DeploymentInputs" + }, + { + "name": "deployScriptArguments", + "type": "string", + "label": "ms-resource:loc.input.label.deployScriptArguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.deployScriptArguments", + "groupName": "DeploymentInputs" + }, + { + "name": "additionalBuilderParameters", + "type": "multiLine", + "label": "ms-resource:loc.input.label.additionalBuilderParameters", + "required": false, + "defaultValue": "{\"vm_size\":\"Standard_D3_v2\"}", + "groupName": "Advanced", + "visibleRule": "templateType = builtin", + "helpMarkDown": "ms-resource:loc.input.help.additionalBuilderParameters", + "properties": { + "editorExtension": "ms.vss-services-azure.azure-servicebus-message-grid" + } + }, + { + "name": "skipTempFileCleanupDuringVMDeprovision", + "type": "boolean", + "label": "ms-resource:loc.input.label.skipTempFileCleanupDuringVMDeprovision", + "defaultValue": true, + "groupName": "Advanced", + "visibleRule": "templateType = builtin", + "helpMarkDown": "ms-resource:loc.input.help.skipTempFileCleanupDuringVMDeprovision" + }, + { + "name": "packerVersion", + "type": "string", + "label": "ms-resource:loc.input.label.packerVersion", + "required": false, + "defaultValue": "", + "groupName": "Advanced", + "visibleRule": "templateType = custom", + "helpMarkDown": "ms-resource:loc.input.help.packerVersion" + }, + { + "name": "imageUri", + "type": "string", + "label": "ms-resource:loc.input.label.imageUri", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.imageUri", + "groupName": "Output" + }, + { + "name": "imageId", + "type": "string", + "label": "ms-resource:loc.input.label.imageId", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.imageId", + "groupName": "Output" + } + ], + "dataSourceBindings": [ + { + "target": "location", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureLocations2", + "resultTemplate": "{ \"Value\" : \"{{{name}}}\", \"DisplayValue\" : \"{{{displayName}}}\" }" + }, + { + "target": "storageAccountName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureRMStorageAccountByLocation", + "parameters": { + "location": "$(location)" + } + }, + { + "target": "azureResourceGroup", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureRMStorageAccountIdByName", + "parameters": { + "storageAccountName": "$(storageAccountName)" + }, + "resultTemplate": "{\"Value\":\"{{{ #extractResource resourceGroups}}}\",\"DisplayValue\":\"{{{ #extractResource resourceGroups}}}\"}" + } + ], + "sourceDefinitions": [], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "Node10": { + "target": "./src//main.js" + }, + "Node16": { + "target": "./src//main.js", + "argumentFormat": "" + } + }, + "messages": { + "OSTypeNotSupported": "ms-resource:loc.messages.OSTypeNotSupported", + "CopyTemplateToTempFailed": "ms-resource:loc.messages.CopyTemplateToTempFailed", + "TaskNotFound": "ms-resource:loc.messages.TaskNotFound", + "OriginalTemplateLocation": "ms-resource:loc.messages.OriginalTemplateLocation", + "CopyingTemplate": "ms-resource:loc.messages.CopyingTemplate", + "TempTemplateLocation": "ms-resource:loc.messages.TempTemplateLocation", + "CopySourceNotExists": "ms-resource:loc.messages.CopySourceNotExists", + "CreatingDestinationDir": "ms-resource:loc.messages.CreatingDestinationDir", + "CreatedDestinationDir": "ms-resource:loc.messages.CreatedDestinationDir", + "ExecutingPackerFix": "ms-resource:loc.messages.ExecutingPackerFix", + "ExecutingPackerValidate": "ms-resource:loc.messages.ExecutingPackerValidate", + "ExecutingPackerBuild": "ms-resource:loc.messages.ExecutingPackerBuild", + "PackerBuildCompleted": "ms-resource:loc.messages.PackerBuildCompleted", + "ImageURIOutputVariableNotFound": "ms-resource:loc.messages.ImageURIOutputVariableNotFound", + "ImageIDOutputVariableNotFound": "ms-resource:loc.messages.ImageIDOutputVariableNotFound", + "ManagedImageNameOutputVariableNotFound": "ms-resource:loc.messages.ManagedImageNameOutputVariableNotFound", + "CustumTemplateOutputVariableNotFound": "ms-resource:loc.messages.CustumTemplateOutputVariableNotFound", + "BuiltInTemplateNotFoundErrorMessagePathName": "ms-resource:loc.messages.BuiltInTemplateNotFoundErrorMessagePathName", + "CustomTemplateNotFoundErrorMessagePathName": "ms-resource:loc.messages.CustomTemplateNotFoundErrorMessagePathName", + "CouldNotDeleteTemporaryTemplateDirectory": "ms-resource:loc.messages.CouldNotDeleteTemporaryTemplateDirectory", + "TaskParametersConstructorFailed": "ms-resource:loc.messages.TaskParametersConstructorFailed", + "PackerFixFailed": "ms-resource:loc.messages.PackerFixFailed", + "PackerValidateFailed": "ms-resource:loc.messages.PackerValidateFailed", + "ResolvedPathNotFound": "ms-resource:loc.messages.ResolvedPathNotFound", + "ResolvedDeployPackgePath": "ms-resource:loc.messages.ResolvedDeployPackgePath", + "ResolvedDeployScriptPath": "ms-resource:loc.messages.ResolvedDeployScriptPath", + "OSNotSupportedForRunningPacker": "ms-resource:loc.messages.OSNotSupportedForRunningPacker", + "InstallExplicitPackerVersion": "ms-resource:loc.messages.InstallExplicitPackerVersion", + "DownloadingPackerRequired": "ms-resource:loc.messages.DownloadingPackerRequired", + "DownloadingPackerCompleted": "ms-resource:loc.messages.DownloadingPackerCompleted", + "ExtractingPackerCompleted": "ms-resource:loc.messages.ExtractingPackerCompleted", + "CreatedStagingDirectory": "ms-resource:loc.messages.CreatedStagingDirectory", + "CouldNotDeleteStagingDirectory": "ms-resource:loc.messages.CouldNotDeleteStagingDirectory", + "InstalledPackerVersion": "ms-resource:loc.messages.InstalledPackerVersion", + "PackerToolBusy": "ms-resource:loc.messages.PackerToolBusy", + "ResolvingDeployPackageInput": "ms-resource:loc.messages.ResolvingDeployPackageInput", + "ResolvingDeployScriptInput": "ms-resource:loc.messages.ResolvingDeployScriptInput", + "ParsingAdditionalBuilderParameters": "ms-resource:loc.messages.ParsingAdditionalBuilderParameters", + "ParsingTemplateFileContentFailed": "ms-resource:loc.messages.ParsingTemplateFileContentFailed", + "ParsingCustomTemplateParameters": "ms-resource:loc.messages.ParsingCustomTemplateParameters", + "GetArtifactItemsNotSupported": "ms-resource:loc.messages.GetArtifactItemsNotSupported", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode", + "CouldNotFetchAccessTokenforMSIStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIStatusCode", + "CreateManagedImageNotSupportedForVHDSource": "ms-resource:loc.messages.CreateManagedImageNotSupportedForVHDSource", + "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" + }, + "_buildConfigMapping": { + "Default": "1.236.0", + "Node20_229_6": "1.236.1" + } +} \ No newline at end of file diff --git a/_generated/PackerBuildV1/tsconfig.json b/_generated/PackerBuildV1/tsconfig.json new file mode 100644 index 000000000000..875bb90cd697 --- /dev/null +++ b/_generated/PackerBuildV1/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} diff --git a/_generated/PackerBuildV1_Node20/package-lock.json b/_generated/PackerBuildV1_Node20/package-lock.json index 151fa54c2bfa..c1efdc461f15 100644 --- a/_generated/PackerBuildV1_Node20/package-lock.json +++ b/_generated/PackerBuildV1_Node20/package-lock.json @@ -72,6 +72,15 @@ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -196,6 +205,11 @@ "concat-map": "0.0.1" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -333,6 +347,33 @@ "safe-buffer": "^5.0.1" } }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, "form-data": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", @@ -368,6 +409,14 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -634,6 +683,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -647,6 +701,15 @@ "asap": "~2.0.6" } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -888,6 +951,15 @@ "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/_generated/PackerBuildV1_Node20/package.json b/_generated/PackerBuildV1_Node20/package.json index c2d6a7958a7c..1c825fb48f57 100644 --- a/_generated/PackerBuildV1_Node20/package.json +++ b/_generated/PackerBuildV1_Node20/package.json @@ -8,7 +8,8 @@ "azure-pipelines-task-lib": "^4.3.1", "azure-pipelines-tasks-azure-arm-rest": "3.221.2", "agent-base": "^6.0.2", - "decompress-zip": "^0.3.3" + "decompress-zip": "^0.3.3", + "extract-zip": "2.0.1" }, "devDependencies": { "typescript": "5.1.6" diff --git a/_generated/PackerBuildV1_Node20/src/utilities.ts b/_generated/PackerBuildV1_Node20/src/utilities.ts index ae34c77e12d0..91a7adefeee3 100644 --- a/_generated/PackerBuildV1_Node20/src/utilities.ts +++ b/_generated/PackerBuildV1_Node20/src/utilities.ts @@ -5,7 +5,7 @@ var fs = require('fs'); import * as os from "os"; import * as path from "path"; import * as stream from "stream"; -var DecompressZip = require('decompress-zip'); +import * as extract from 'extract-zip' import * as tl from "azure-pipelines-task-lib/task"; // copy source file to destination folder. destination folder will be created if it does not exists, otherwise its contents will be overwritten. @@ -53,17 +53,11 @@ export async function unzip(zipLocation, unzipLocation): Promise { if(tl.exist(unzipLocation)) { tl.rmRF(unzipLocation); } - - var unzipper = new DecompressZip(zipLocation); - tl.debug('extracting ' + zipLocation + ' to ' + unzipLocation); - unzipper.on('error', err => reject(err)); - unzipper.on('extract', log => { - tl.debug('extracted ' + zipLocation + ' to ' + unzipLocation + ' Successfully'); - resolve(unzipLocation); - }); - - unzipper.extract({ - path: unzipLocation + tl.debug(`Using extract-zip package for extracting archive`); + extract(zipLocation, { dir: unzipLocation }).then(() => { + resolve("true"); + }).catch((error) => { + reject(error); }); }); diff --git a/_generated/PackerBuildV1_Node20/task.json b/_generated/PackerBuildV1_Node20/task.json index b3127c27269a..b515364e612f 100644 --- a/_generated/PackerBuildV1_Node20/task.json +++ b/_generated/PackerBuildV1_Node20/task.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, - "Patch": 2 + "Minor": 236, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.0.0", @@ -356,7 +356,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "1.231.0", - "Node20_229_6": "1.231.2" + "Default": "1.236.0", + "Node20_229_6": "1.236.1" } } \ No newline at end of file diff --git a/_generated/PackerBuildV1_Node20/task.loc.json b/_generated/PackerBuildV1_Node20/task.loc.json index 00307d565b8e..3c400f8cb31f 100644 --- a/_generated/PackerBuildV1_Node20/task.loc.json +++ b/_generated/PackerBuildV1_Node20/task.loc.json @@ -14,8 +14,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, - "Patch": 2 + "Minor": 236, + "Patch": 1 }, "demands": [], "minimumAgentVersion": "2.0.0", @@ -356,7 +356,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "1.231.0", - "Node20_229_6": "1.231.2" + "Default": "1.236.0", + "Node20_229_6": "1.236.1" } } \ No newline at end of file