Amazon ec2 终止具有非零退出状态的源后封隔器失败:2

Amazon ec2 终止具有非零退出状态的源后封隔器失败:2,amazon-ec2,ansible,amazon-ami,packer,Amazon Ec2,Ansible,Amazon Ami,Packer,我正在尝试使用packer和ansible创建一个新的ami。无可否认,我对这两个人都很陌生。(我以前使用过fabric和puppet。)我注意到我使用的是amazon linux base ami,于是决定改为centos映像。这带来了一些我已经克服的障碍。然而,我现在得到以下错误。奇怪的是,它发生在“终止源AWS实例…”之后 打包器json是: { "variables": { "ansible_staging_directory": "/tmp/packer-pro

我正在尝试使用packer和ansible创建一个新的ami。无可否认,我对这两个人都很陌生。(我以前使用过fabric和puppet。)我注意到我使用的是amazon linux base ami,于是决定改为centos映像。这带来了一些我已经克服的障碍。然而,我现在得到以下错误。奇怪的是,它发生在“终止源AWS实例…”之后

打包器json是:

{
    "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`}}'"
            ]
        }
    ]
}

从最后一个shell provisioner开始,它似乎完成了这一步,并转到ansible。然而,ansible失败了,因为它依赖于python2.7,所以它似乎是通过删除

"sudo update-alternatives --set python /usr/bin/python2.7",
我能够克服上述错误,并发现由于我的ansible playbook检查的两个python依赖项在centos yum repo中的命名与在amazon linux repo中的命名不同,因此无法使用。例如,python27 setuptools就是python setuptools,python27 Cython就是Cython

谢谢大家的帮助和指导

谢谢你的帖子。 这将指导我在尝试运行某些脚本(vmware tools安装)时解决几乎类似的问题

问题是我在vmtools脚本rum之前运行清理脚本,这意味着某些必需的文件已经丢失

vmware-iso: tar: /tmp/VMwareTools-*.tar: Cannot open: No such file or directory
vmware-iso: tar: Error is not recoverable: exiting now
==>vmware iso:正在停止虚拟机。。。 ==>vmware iso:正在删除输出目录。。。 生成“vmware iso”错误:脚本退出,退出状态为非零:2

以下是我的provisioner脚本:

provisioners": [
  "execute_command": "echo 'rhel' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
  "scripts": [
    "scripts/common/metadata.sh",
    "scripts/centos/networking.sh",
    "scripts/common/sshd.sh",
    "scripts/rhel-ec/rhel-user.sh",
    "scripts/rhel-ec/vmtools.sh",
    "scripts/rhel-ec/cleanup.sh",
    "scripts/centos/cleanup.sh",
    "scripts/common/minimize.sh"
  ],
  "type": "shell"
}
],


解决办法是安排我的脚本。这意味着在cleanup.sh运行之前先运行vmtools.sh脚本。

使用
PACKER\u LOG=1 PACKER build启用调试选项
,您获得的任何额外信息都可以帮助您进行故障排除吗?谢谢@BMW!我添加了“-debug”(我想也是这样吗?),并且能够走得更远一些。请参阅上面我的编辑。也许您不应该删除
updatealternations
步骤,而应该确保它在安装python后运行。
vmware-iso: tar: /tmp/VMwareTools-*.tar: Cannot open: No such file or directory
vmware-iso: tar: Error is not recoverable: exiting now
provisioners": [
  "execute_command": "echo 'rhel' | {{.Vars}} sudo -S -E sh -eux '{{.Path}}'",
  "scripts": [
    "scripts/common/metadata.sh",
    "scripts/centos/networking.sh",
    "scripts/common/sshd.sh",
    "scripts/rhel-ec/rhel-user.sh",
    "scripts/rhel-ec/vmtools.sh",
    "scripts/rhel-ec/cleanup.sh",
    "scripts/centos/cleanup.sh",
    "scripts/common/minimize.sh"
  ],
  "type": "shell"
}