I am attempting to create a new ami using packer and ansible. I'm admittedly very new to both. (I have used fabric and puppet in the past.) I noticed that I was using an amazon linux base ami and decided to change to a centos image instead. This has brought along a few hurdles which I have overcome. However, I am now getting the following error. It seems odd that it is occurring after "Terminating the source AWS instance..."
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: No AMIs to cleanup
==> amazon-ebs: Deleting temporary security group...
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' errored: Script exited with non-zero exit status: 2
==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Script exited with non-zero exit status: 2
==> Builds finished but no artifacts were created.
The packer json is:
{
"variables": {
"ansible_staging_directory": "/tmp/packer-provisioner-ansible-local",
"role": "",
"aws_base_ami": "",
"aws_base_instance_type": "",
"aws_region": "",
"aws_vpc_id": "",
"aws_subnet": "",
"aws_ssh_user": "",
"company_version": "",
"additional_aws_users": "{{env `AWS_PROD_ID`}}",
"aws_access_key": "<redacted>",
"aws_secret_key": "<redacted>"
},
"builders": [{
"type": "amazon-ebs",
"region": "{{user `aws_region`}}",
"vpc_id": "{{user `aws_vpc_id`}}",
"subnet_id": "{{user `aws_subnet`}}",
"source_ami": "{{user `aws_base_ami`}}",
"instance_type": "{{user `aws_base_instance_type`}}",
"ssh_username": "{{user `aws_ssh_user`}}",
"ssh_pty": true,
"associate_public_ip_address": true,
"ami_users": "{{user `additional_aws_users`}}",
"ami_name": "company-{{user `role`}}-{{user `company_version`}} {{timestamp}}",
"tags": {
"Role": "company-{{user `role`}}",
"Version": "{{user `company_version`}}",
"Timestamp": "{{timestamp}}"
}
}],
"provisioners": [
{
"type": "shell",
"inline": "mkdir -p {{user `ansible_staging_directory`}}"
},
{
"type": "file",
"source": "../roles",
"destination": "{{user `ansible_staging_directory`}}"
},
{
"type": "file",
"source": "../files",
"destination": "{{user `ansible_staging_directory`}}"
},
{
"type": "shell",
"inline": [
"sudo yum -y update",
"sudo update-alternatives --set python /usr/bin/python2.7",
"sudo yum -y install emacs",
"sudo yum -y install telnet",
"sudo yum -y install epel-release",
"sudo yum -y install python-pip",
"sudo yum -y install gcc libffi-devel python-devel openssl-devel",
"sudo pip install ansible"
]
},
{
"type": "ansible-local",
"playbook_file": "packer-playbook.yml",
"group_vars": "../group_vars",
"extra_arguments": [
"-t {{user `role`}}",
"--extra-vars 'aws_access_key={{user `aws_access_key`}} aws_secret_key={{user `aws_secret_key`}}'"
]
}
]
}
The base image I am using is ami-d440a6e7.
Any guidance would be greatly appreciated. I have yet to be able to find exit code 2 or anything similar.
UPDATE
I have determined that by removing the line:
"sudo update-alternatives --set python /usr/bin/python2.7",
From the last shell provisioner it seems to complete that step and moves onto ansible. However, ansible fails as it is depending on python2.7
Ok, so it appears that by removing the
"sudo update-alternatives --set python /usr/bin/python2.7",
I was able to get past the above error and found that unusable was failing due to a couple of python dependencies that my ansible playbook checks for were named differently in the centos yum repo than they were in the amazon-linux repo. For example, python27-setuptools is just python-setuptools and python27-Cython is just Cython.
Thanks all for your help and guidance!