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