2017-02-21 55 views
0

我正在尝试使用Packer和Ansible构建AWS AMI来配置我的AMI。我被困在能够使用Ansible将一些本地文件复制到我最近创建的EC2实例。我正在使用Ansible中的copy模块来执行此操作。这里是我的Ansible代码如下所示:使用Ansible将本地文件复制到远程AWS EC2实例

- name: Testing copy of the local remote file 
     copy: 
     src: /tmp/test.test 
     dest: /tmp 

这是我得到的错误:

amazon-ebs: TASK [Testing copy of the local remote file] *********************************** 

amazon-ebs: fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '/tmp/test.test' in expected paths."} 

我已经验证该文件存在/tmp/test.test从Ansible运行我的本地机器上。

对于我的主文件,我只有localhost,因为打包者告诉Ansible它需要知道在哪里运行Ansible命令。

我不知道该从哪里走,或者如何正确调试这个错误,所以我希望有一点帮助。

这里是我的帕克脚本如下:

{ 
    "variables": { 
    "aws_access_key": "{{env `access_key`}}", 
    "aws_secret_key": "{{env `secret_key`}}" 
    }, 
    "builders": [{ 
    "type": "amazon-ebs", 
    "access_key": "{{user `aws_access_key`}}", 
    "secret_key": "{{user `aws_secret_key`}}", 
    "region": "us-east-1", 
    "source_ami": "ami-116d857a", 
    "instance_type": "t2.micro", 
    "ssh_username": "admin", 
    "ami_name": "generic_jenkins_image", 
    "ami_description": "Testing AMI building with Packer", 
    "vpc_id": "xxxxxxxx", 
    "subnet_id": "xxxxxxxx", 
    "associate_public_ip_address": "true", 
    "tags": {"Environment" : "Dev", "Product": "SharedOperations"} 
    }], 
    "provisioners": [ 
    { 
     "type": "shell", 
     "inline": [ 
     "sleep 30", 
     "sudo rm -f /var/lib/dpkg/lock", 
     "sudo apt-get update -y --fix-missing", 
     "sudo apt-get -y install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev gcc build-essential python-pip", 
     "sudo pip install ansible" 
     ] 
    }, 
    { 
     "type": "ansible-local", 
     "playbook_file": "ansible/main.yml" 
    } 
    ] 
} 

这是我的整个Ansible文件:

--- 
- hosts: all 
    sudo: yes 
    tasks: 
    - name: Testing copy of the local remote file 
     copy: 
     src: /tmp/test.test 
     dest: /tmp 
+0

@techraf不是100%确定它为什么给出这个地址,但我知道那就是EC2实例。我运行了一些其他命令(如用户创建)来确保我的Ansible脚本实际上是在远程主机上执行的,而不是在本地主机上执行的。 –

+0

唯一能想到的就是Packer只是将我的Ansible脚本推送到新铸造的EC2实例,然后运行它。在这种情况下,这个文件移动当然会失败,因为它不存在。尽管如此,我并不是100%确定的,因为我不完全确定这是如何工作的。 –

回答

2

您正在使用ansible-local provisioner直接运行在目标的剧本(“本地”的HashiCorp的诸如Vagrant,Packet等产品用于描述供应机器的观点)。

目标没有/tmp/test.test文件,因此您会收到错误消息。

您实际上想要使用常规的Ansible provisioner来运行剧本。

+0

在您指出我出于某种原因忽略的显而易见的'127.0.0.1'地址后,我就明白了这一点。我猜想我想使用[Ansible Remote](https://www.packer.io/docs/provisioners/ansible.html)预配置...谢谢! –

相关问题