我正在尝试学习 Ansible。我正在创建一个实例并将文件上传到其中,我想放入 ec2 实例的文件存储在 S3 中,但它一直说 c2 内的目标不存在,但它确实存在.
这是失败的,在此之前的所有其他事情,包括创建实例都工作正常:
- name: Deploy war file
aws_s3:
bucket: "{{ war_bucket }}"
object: "{{ war_file }}"
dest: "{{ war_deploy_path }}/{{ war_file }}"
mode: get
overwrite: no
register: war_downloaded
这就是我声明变量的方式:
war_file: file.war
war_bucket: ansible-bucket
war_deploy_path: /opt/folder/file.war
这是我得到的错误:
[Errno 2] No such file or directory: '/opt/folder/file.war.1f1ccA91'
为什么要添加这个奇怪的代码“1f1cA91”?是不是造成了问题?
更新:我尝试将目的地从“{{ war_deploy_path }}/{{ war_file }}”更改为“{{ war_deploy_path }}”,但同样的问题仍然存在,现在只有错误[Errno 2] No such file or directory: '/opt/folder.Ac2926c3'
。
重要更新 2:好的,所以为了测试,我决定在我的本地机器上创建相同的路径,令我惊讶的是,这个脚本实际上是在我的本地机器上运行它而不是 ec2 实例大声笑,所以现在,我如何让它在 ec2 实例 xD 上运行。
在 ansible 中创建一个主机,然后在同一个 playbook 中处理它是可能的,但需要对清单文件进行一些动态更改并重新读取 playbook 中的清单。
首先,在您的库存文件中添加一个占位符,例如:
其次,在您的剧本中,您将需要两个部分,一个用于运行本地作业,第二个用于针对您从第一部分创建的主机运行。在第一部分中,您将创建主机,然后将主机 IP 添加到您在上面创建的清单中。然后你会告诉 ansible 用命令重新读取清单,
meta
然后等待主机提出pause
命令。这是一个例子:然后你在同一个剧本中创建另一个条目来复制你的文件。默认情况下,我没有在我的主机上安装 pip,所以补充说以防万一你在同一条船上:
如果您仍然感到困惑,这是完整的剧本:
参考
Ansible 元模块
PS我只测试了这个建筑一个主机,如果你建造多个你的里程可能会有所不同。