2 min read | by Jordi Prats
If we use shell scripts as provisioners with packer errors can be confusing:
==> amazon-ebs: Terminating the source AWS instance... ==> amazon-ebs: Cleaning up any extra volumes... ==> amazon-ebs: No volumes to clean up, skipping ==> amazon-ebs: Deleting temporary security group... ==> amazon-ebs: Deleting temporary keypair... Build 'amazon-ebs' errored: Error removing temporary script at /tmp/script_9722.sh! ==> Some builds didn't complete successfully and had errors: --> amazon-ebs: Error removing temporary script at /tmp/script_9722.sh! ==> Builds finished but no artifacts were created.
We can tell there is an error, but it's hard to tell what's going on
If it is executed as script as follows:
(...) "provisioners": [ { "type": "shell", "script": "/opt/provisioners/example_script.sh" }], (...)
We can change it to inline adding the -x flag to enable further verbosity:
(...) "provisioners": [ { "type": "shell", "inline": ["/bin/bash -x /opt/provisioners/example_script.sh"] }], (...)
So we can get a more detailed error:
==> amazon-ebs: Provisioning with shell script: /tmp/packer-shell069763962 amazon-ebs: /bin/bash: /opt/provisioners/example_script.sh: No such file or directory ==> amazon-ebs: Terminating the source AWS instance... ==> amazon-ebs: Cleaning up any extra volumes... ==> amazon-ebs: No volumes to clean up, skipping ==> amazon-ebs: Deleting temporary security group... ==> amazon-ebs: Deleting temporary keypair... Build 'amazon-ebs' errored: Script exited with non-zero exit status: 127.Allowed exit codes are: [0] ==> Some builds didn't complete successfully and had errors: --> amazon-ebs: Script exited with non-zero exit status: 127.Allowed exit codes are: [0] ==> Builds finished but no artifacts were created.
By adding executing the script explicitly with bash with the -x flag we will make sure it will print commands and their arguments as they are executed. For example, if we run the following shell script with the -x flag:
#!/bin/bash echo first example echo third $(echo second)
We will be able to see the actual execution like follows:
$ bash -x test.sh + echo first example first example ++ echo second + echo third second third second
Posted on 26/01/2022