使用 Ansible 将本地文件复制到远程 AWS EC2 实例
Copy local file to remote AWS EC2 instance with Ansible
我正在尝试使用 Packer 和 Ansible 构建 AWS AMI 来配置我的 AMI。我无法使用 Ansible 将一些本地文件复制到我新启动的 EC2 实例。我在 Ansible 中使用 copy
模块来执行此操作。这是我的 Ansible 代码的样子:
- 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 运行ning 所在的本地机器上。
对于我的主机文件,我只有 localhost
在里面,因为加壳器告诉 Ansible 它需要知道的关于在哪里 运行 Ansible 命令的一切。
我不确定从这里到哪里去或如何正确调试此错误,所以我希望得到一点帮助。
这是我的 Packer 脚本的样子:
{
"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
您正在使用 ansible-local provisioner,其中 运行 剧本直接针对目标("local" 在 HashiCorp 的产品中,如 Vagrant,Packet 用于描述配置机器的观点).
目标没有 /tmp/test.test
文件,因此出现错误。
您实际上想要 运行 使用常规 Ansible provisioner 的剧本。
我正在尝试使用 Packer 和 Ansible 构建 AWS AMI 来配置我的 AMI。我无法使用 Ansible 将一些本地文件复制到我新启动的 EC2 实例。我在 Ansible 中使用 copy
模块来执行此操作。这是我的 Ansible 代码的样子:
- 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 运行ning 所在的本地机器上。
对于我的主机文件,我只有 localhost
在里面,因为加壳器告诉 Ansible 它需要知道的关于在哪里 运行 Ansible 命令的一切。
我不确定从这里到哪里去或如何正确调试此错误,所以我希望得到一点帮助。
这是我的 Packer 脚本的样子:
{
"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
您正在使用 ansible-local provisioner,其中 运行 剧本直接针对目标("local" 在 HashiCorp 的产品中,如 Vagrant,Packet 用于描述配置机器的观点).
目标没有 /tmp/test.test
文件,因此出现错误。
您实际上想要 运行 使用常规 Ansible provisioner 的剧本。