Skip to content

Commit 4c3af00

Browse files
committed
Hotfix for packer task
1 parent 7c3d119 commit 4c3af00

27 files changed

+632
-50
lines changed

Tasks/PackerBuild/DefaultTemplates/custom.linux.template.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
"script_arguments": "{{env `script_arguments`}}",
1414
"package_path": "{{env `package_path`}}",
1515
"package_name": "{{env `package_name`}}",
16-
"capture_name_prefix": "{{env `capture_name_prefix`}}"
16+
"capture_name_prefix": "{{env `capture_name_prefix`}}",
17+
"skip_clean": "{{env `skip_clean`}}"
1718
},
1819
"builders": [{
1920
"type": "azure-arm",
@@ -62,6 +63,7 @@
6263
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
6364
"inline": [
6465
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
65-
]
66+
],
67+
"skip_clean": "{{user `skip_clean`}}"
6668
}]
6769
}

Tasks/PackerBuild/DefaultTemplates/default.linux.template.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"script_arguments": "",
1616
"package_path": "",
1717
"package_name": "",
18-
"capture_name_prefix": ""
18+
"capture_name_prefix": "",
19+
"skip_clean":""
1920
},
2021
"builders": [{
2122
"type": "azure-arm",
@@ -66,6 +67,7 @@
6667
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
6768
"inline": [
6869
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
69-
]
70+
],
71+
"skip_clean": "{{user `skip_clean`}}"
7072
}]
7173
}

Tasks/PackerBuild/Strings/resources.resjson/en-US/resources.resjson

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"loc.releaseNotes": "- Works with Xplat agents (Windows, Linux or OSX)\n- Supports building images for both Windows and Linux. These images can be used to deploy Azure Virtual machine scale set.",
77
"loc.group.displayName.AzureDetails": "Azure Details",
88
"loc.group.displayName.DeploymentInputs": "Deployment Inputs",
9+
"loc.group.displayName.Advanced": "Advanced",
910
"loc.group.displayName.Output": "Output",
1011
"loc.input.label.templateType": "Packer template",
1112
"loc.input.help.templateType": "Select whether you want the task to auto generate Packer template or use custom template provided by you.",
@@ -32,6 +33,10 @@
3233
"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",
3334
"loc.input.label.deployScriptArguments": "Deployment script arguments",
3435
"loc.input.help.deployScriptArguments": "Specify the arguments to be passed to deployment script.",
36+
"loc.input.label.additionalBuilderParameters": "Additional Builder parameters",
37+
"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.<br/>However certain keys like builder type, access_key etc that are set by taking user input in the task cannot be overridden by adding keys here. To view/edit the additional parameters in a grid, click on “…” next to textbox.",
38+
"loc.input.label.skipTempFileCleanupDuringVMDeprovision": "Skip temporary file cleanup during deprovision",
39+
"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)",
3540
"loc.input.label.imageUri": "Image URL",
3641
"loc.input.help.imageUri": "Provide a name for the output variable which will store generated machine image url.",
3742
"loc.messages.OSTypeNotSupported": "This OS type is not supported for image creation: %s. Please use either windows or linux.",
@@ -52,7 +57,7 @@
5257
"loc.messages.CustomTemplateNotFoundErrorMessagePathName": "Custom template not found at location: %s",
5358
"loc.messages.CouldNotDeleteTemporaryTemplateDirectory": "Could not delete temporary template directory %s. Please delete manually.",
5459
"loc.messages.TaskParametersConstructorFailed": "Error happened while initializing task: %s.",
55-
"loc.messages.PackerFixFailed": "Packer fix command failed. This could happen if task does not support packer version.",
60+
"loc.messages.PackerFixFailed": "Packer fix command failed with error : '%s'. This could happen if task does not support packer version.",
5661
"loc.messages.PackerValidateFailed": "Packer validate command failed. This could happen if task does not support packer version.",
5762
"loc.messages.ResolvedPathNotFound": "Not found any file matching pattern: %s under rool folder: %s.",
5863
"loc.messages.ResolvedDeployPackgePath": "Resolved deploy package path: %s.",
@@ -63,5 +68,11 @@
6368
"loc.messages.ExtractingPackerCompleted": "Packer extracted successfully at path: %s.",
6469
"loc.messages.CreatedStagingDirectory": "Created staging directory for keeping packer binary and templates: %s.",
6570
"loc.messages.CouldNotDeleteStagingDirectory": "Could not delete staging directory %s. Please delete manually.",
66-
"loc.messages.InstalledPackerVersion": "Current installed packer version is %s."
71+
"loc.messages.InstalledPackerVersion": "Current installed packer version is %s.",
72+
"loc.messages.AdditionalParameterIgnored": "Additional parameter key '%s' already exists in builder '%s'. New value will be ignored.",
73+
"loc.messages.PackerToolBusy": "Packer tool seems to be busy. Retrying after 1 second...",
74+
"loc.messages.ResolvingDeployPackageInput": "Resolving deploy package path.",
75+
"loc.messages.ResolvingDeployScriptInput": "Resolving deploy script path.",
76+
"loc.messages.ParsingAdditionalBuilderParameters": "Parsing additional builder parameters json.",
77+
"loc.messages.ParsingTemplateFileContentFailed": "Unable to parse json content from template file %s with error: %s."
6778
}

Tasks/PackerBuild/Tests/L0.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ describe('PackerBuild Suite', function() {
220220
process.env["__packer_fix_fails__"] = "true";
221221
let tp = path.join(__dirname, 'L0WindowsFail.js');
222222
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
223-
tr.run();
223+
tr.run();
224+
process.env["__packer_fix_fails__"] = "false";
224225

225226
assert(tr.failed, 'task should have failed');
226227
assert(tr.invokedToolCount == 2, 'should not invoke packer validate and build commands. actual: ' + tr.invokedToolCount);
@@ -229,8 +230,7 @@ describe('PackerBuild Suite', function() {
229230
done();
230231
});
231232

232-
it('should fail if packer validate exits with non zero code', (done:MochaDone) => {
233-
process.env["__packer_fix_fails__"] = "false";
233+
it('should fail if packer validate exits with non zero code', (done:MochaDone) => {
234234
process.env["__packer_validate_fails__"] = "true";
235235
let tp = path.join(__dirname, 'L0WindowsFail.js');
236236
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
@@ -354,7 +354,7 @@ describe('PackerBuild Suite', function() {
354354
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
355355
tr.run();
356356

357-
assert(tr.invokedToolCount == 3, 'should have invoked tool thrice. actual: ' + tr.invokedToolCount);
357+
assert(tr.invokedToolCount == 4, 'should have invoked tool 4 times. actual: ' + tr.invokedToolCount);
358358
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
359359
assert(tr.succeeded, 'task should have succeeded');
360360
assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded");
@@ -376,7 +376,7 @@ describe('PackerBuild Suite', function() {
376376
process.env["__packer_exists__"] = "false";
377377
process.env["__lower_version__"] = "false";
378378

379-
assert(tr.invokedToolCount == 4, 'should have invoked tool four times. actual: ' + tr.invokedToolCount);
379+
assert(tr.invokedToolCount == 5, 'should have invoked tool 5 times. actual: ' + tr.invokedToolCount);
380380
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
381381
assert(tr.succeeded, 'task should have succeeded');
382382
assert(tr.stdout.indexOf("loc_mock_DownloadingPackerRequired") != -1, "should show message that packer will be downloaded");
@@ -430,6 +430,17 @@ describe('PackerBuild Suite', function() {
430430
done();
431431
});
432432

433+
it('Should add additional parameters to builder section in builtin template', (done:MochaDone) => {
434+
let tp = path.join(__dirname, 'L0WindowsBuiltinTemplateAdditionalParameters.js');
435+
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
436+
tr.run();
437+
438+
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
439+
assert(tr.stdout.indexOf("writing to file F:\\somedir\\tempdir\\100\\default.windows.template-builderUpdated.json content: {\"builders\":[{\"type\":\"azure-arm\",\"ssh_pty\":\"true\"}]}") != -1, "additional parameters should be written to updated template file");
440+
assert(tr.succeeded, 'task should have succeeded');
441+
done();
442+
});
443+
433444
} else {
434445
it('Runs successfully for linux template', (done:MochaDone) => {
435446
let tp = path.join(__dirname, 'L0Linux.js');
@@ -575,5 +586,16 @@ describe('PackerBuild Suite', function() {
575586
assert(tr.stdout.indexOf("rmRF /tmp/tempdir/100") != -1, "rmRF should be called on temp template folder");
576587
done();
577588
});
589+
590+
it('Should add additional parameters to builder section in builtin template', (done:MochaDone) => {
591+
let tp = path.join(__dirname, 'L0LinuxBuiltinTemplateAdditionalParameters.js');
592+
let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp);
593+
tr.run();
594+
595+
assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr');
596+
assert(tr.stdout.indexOf("writing to file /tmp/tempdir/100/default.linux.template-builderUpdated.json content: {\"builders\":[{\"type\":\"azure-arm\",\"ssh_pty\":\"true\"}]}") != -1, "additional parameters should be written to updated template file");
597+
assert(tr.succeeded, 'task should have succeeded');
598+
done();
599+
});
578600
}
579601
});

Tasks/PackerBuild/Tests/L0CustomTemplate.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tr.setInput('templateType', 'custom');
99
tr.setInput('customTemplateLocation', 'C:\\custom.template.json');
1010
tr.setInput('imageUri', 'imageUri');
1111
tr.setInput('imageStorageAccount', 'imageStorageAccount');
12+
tr.setInput("additionalBuilderParameters", "{}");
1213

1314
process.env["RELEASE_RELEASENAME"] = "Release-1";
1415

Tasks/PackerBuild/Tests/L0Linux.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ tr.setInput('deployScriptArguments', "\"subdir 1\" false");
1919
tr.setInput('ConnectedServiceName', 'AzureRMSpn');
2020
tr.setInput('imageUri', 'imageUri');
2121
tr.setInput('imageStorageAccount', 'imageStorageAccount');
22+
tr.setInput("additionalBuilderParameters", "{}");
23+
tr.setInput("skipTempFileCleanupDuringVMDeprovision", "true");
2224

2325
process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal";
2426
process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId";
@@ -49,23 +51,23 @@ let a: any = <any>{
4951
"code": 0,
5052
"stdout": "{ \"some-key\": \"some-value\" }"
5153
},
52-
"packer validate -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId /tmp/tempdir/100/default.linux.template-fixed.json": {
54+
"packer validate -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var skip_clean=true -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId /tmp/tempdir/100/default.linux.template-fixed.json": {
5355
"code": 0,
5456
"stdout": "Executed Successfully"
5557
},
56-
"packer build -force -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId /tmp/tempdir/100/default.linux.template-fixed.json": {
58+
"packer build -force -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var skip_clean=true -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId /tmp/tempdir/100/default.linux.template-fixed.json": {
5759
"code": process.env["__packer_build_fails__"] === "true" ? 1 : 0,
5860
"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",
5961
},
6062
"packer fix -validate=false \\tmp\\tempdir\\100\\default.linux.template.json": {
6163
"code": 0,
6264
"stdout": "Executed Successfully"
6365
},
64-
"packer validate -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId \\tmp\\tempdir\\100\\default.linux.template-fixed.json": {
66+
"packer validate -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var skip_clean=true -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId \\tmp\\tempdir\\100\\default.linux.template-fixed.json": {
6567
"code": 0,
6668
"stdout": "Executed Successfully"
6769
},
68-
"packer build -force -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId \\tmp\\tempdir\\100\\default.linux.template-fixed.json": {
70+
"packer build -force -var resource_group=testrg -var storage_account=teststorage -var image_publisher=Canonical -var image_offer=UbuntuServer -var image_sku=14.04.4-LTS -var location=South India -var capture_name_prefix=Release-1 -var skip_clean=true -var script_relative_path=dir3/somedir/deploy.sh -var package_path=/tmp/dir1/somedir/dir2 -var package_name=dir2 -var script_arguments=\"subdir 1\" false -var subscription_id=sId -var client_id=spId -var client_secret=spKey -var tenant_id=tenant -var object_id=oId \\tmp\\tempdir\\100\\default.linux.template-fixed.json": {
6971
"code": process.env["__packer_build_fails__"] === "true" ? 1 : 0,
7072
"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",
7173
}

0 commit comments

Comments
 (0)