让ansible角色作为其自身角色的一部分从外部位置检索其文件

让ansible角色作为其自身角色的一部分从外部位置检索其文件,ansible,Ansible,因此,我们在项目中遇到的一件事是,我们不希望将大文件存储在git repo中以供ansible角色使用,因为这会减慢克隆速度,git将文件限制在100MB 我们所做的是将文件存储在一个单独的内部位置,在那里我们的文件可以静态放置,并且没有大小限制。我们的角色是这样编写的,他们首先将这些静态文件拉到本地文件文件夹,然后像正常情况一样继续 i、 e。 角色/foo/tasks/main.yml - name: Create role's files directory file:

因此,我们在项目中遇到的一件事是,我们不希望将大文件存储在git repo中以供ansible角色使用,因为这会减慢克隆速度,git将文件限制在100MB

我们所做的是将文件存储在一个单独的内部位置,在那里我们的文件可以静态放置,并且没有大小限制。我们的角色是这样编写的,他们首先将这些静态文件拉到本地文件文件夹,然后像正常情况一样继续

i、 e。 角色/foo/tasks/main.yml

  - name: Create role's files directory
    file:
      path: "{{roles_files_directory}}"
      state: directory

  - name: Copy static foo to local
    get_url:
      url: "{{foo_static_gz}}"
      dest: "{{roles_files_directory}}/{{foo_gz}}"

  #....Do rest of the tasks...
roles_files_directory: "/some/path/roles/foo/files"
foo_static_gz: "https://internal.foo.tar.gz"
foo_gz: "foo.tar.gz"
角色/foo/vars/main.yml

  - name: Create role's files directory
    file:
      path: "{{roles_files_directory}}"
      state: directory

  - name: Copy static foo to local
    get_url:
      url: "{{foo_static_gz}}"
      dest: "{{roles_files_directory}}/{{foo_gz}}"

  #....Do rest of the tasks...
roles_files_directory: "/some/path/roles/foo/files"
foo_static_gz: "https://internal.foo.tar.gz"
foo_gz: "foo.tar.gz"
我发现最主要的问题是角色文件目录的硬编码路径。我更希望在运行ansible时动态查找路径,但我还没有找到关于该路径的文档。可能会出现此问题,因为不同的用户可能会将角色检查到不同的根路径。是否有人知道如何动态地了解角色路径,或者有其他模式来解决整个问题

编辑:


我发现实际上有一个{playbook_dir}}变量,它将返回/some/path,在这种情况下,它可能是动态的。在角色名可能更改的情况下仍然不安全,但这种情况很少发生,可以通过版本控制进行处理。

从命令行传递值如何

---

- hosts: '{{ hosts }}'
  remote_user: '{{ user }}'

  tasks:
     - ...

  ansible-playbook release.yml --extra-vars "hosts=vipers user=starbuck"

我只想添加另一个可能的解决方案:您可以尝试添加自定义factor

以下是官方文件的链接:


我发现这篇文章可能很有用:

不要认为这是可行的,因为剧本调用了许多角色,这些角色可以从用户的知识中抽象出来。角色应该完全自行处理,而不需要用户做额外的工作。这种方法不能扩展,也就是说dest必须是一条绝对路径。我同意允许本地下载的相对路径会很好。感谢您提到playbook_dir变量:这是迄今为止我拥有的最好的解决方案。