繁体   English   中英

通过 AWS SSM 执行 Ansible 剧本时出现 AnsibleFileNotFound 错误

[英]AnsibleFileNotFound error during Ansible playbook execution via AWS SSM

我压缩了一个 Ansible 剧本和一个配置文件,将 .zip 文件推送到 S3,然后我从 AWS SSM 触发了 Ansible 剧本。

我收到AnsibleFileNotFound错误: AnsibleFileNotFound: Could not find or access '/path/to/my_file.txt' on the Ansible Controller.

这是我的剧本:

- name: Copies a configuration file to a machine.
  hosts: 127.0.0.1
  connection: local
  tasks:
    - name: Copy the configuration file.  
      copy:
        src: /path/to/my_file.txt
        dest: /etc/my_file.txt
        owner: root
        group: root
        mode: '0644'
      become: true

my_file.txt存在于我上传到 S3 的 .zip 文件中,并且我已经验证它正在被提取(通过 AWS SSM 输出)。 为什么我不能复制那个文件? 我需要做什么才能让 Ansible 将此文件保存到目标机器上的/etc/

编辑:

  • 使用remote_src: true是有意义的,因为 .zip 文件可能被 AWS SSM 解压到目标机器上的某个地方。 问题是它被解压到一个随机的临时目录,所以无论如何都找不到该文件。
  • 我尝试了几种不同的绝对路径 - 我假设此处的路径与 .zip 根相关。

这里的解决方案有点可怕:

  1. .zip 文件被提取到机器的临时目录中,该目录具有随机名称,在 AWS SSM 执行之前不知道该名称。
  2. remote_src必须为true 是的,这是您上传到 S3 的文件,但 Ansible 还不够聪明,无法在这种情况下知道这一点。
  3. 如果您将配置文件与剧本捆绑在一起,则必须使用相对于剧本的路径。
  4. 必须插入该相对路径。

所以使用src: "{{ playbook_dir | dirname }}/path/to/my_file.txt"解决了这种情况下的问题。

请注意,如果配置文件包含机密,则不应使用此方法,但我不确定当您将它与 Ansible 结合使用时,AWS SSM 为此类场景提供了何种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM