2017-02-21 50 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)預配置...謝謝! –

相關問題