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

时间:2015-03-31 22:52:50

标签: ansible

因此,我们在项目中遇到的一件事是,我们不希望将我们的大文件存储在我们的git repo中以用于我们的ansible角色,因为它减慢了克隆速度(并且git将文件限制为100 mb)。

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

即。 角色/富/任务/ 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...

角色/富/瓦尔/ main.yml

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&#34 ;,在这种情况下可能足够动态。对于角色名称可能会发生变化的情况仍然不安全,但这种情况很少发生,可以通过版本控制来处理。

2 个答案:

答案 0 :(得分:0)

如何从命令行传递值?

---

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

  tasks:
     - ...

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

http://docs.ansible.com/playbooks_variables.html#passing-variables-on-the-command-line

答案 1 :(得分:0)

我只想添加另一种可能的解决方案:您可以尝试添加自定义“facter”。

以下是官方文档的链接:http://docs.ansible.com/setup_module.html

我发现这篇文章可能很有用:http://serverascode.com/2015/01/27/ansible-custom-facts.html