【问题标题】:How to override role's file on Ansible?如何覆盖 Ansible 上的角色文件?
【发布时间】:2014-11-25 00:24:32
【问题描述】:

我在我的剧本中使用zzet.rbenv role。它有一个files/default-gems 文件,将其复制到预配系统。

我需要我的剧本来检查myplaybook/files/default-gems 并使用它如果它存在,否则使用zzet.rbenv/files/default-gems

我该怎么做?

【问题讨论】:

    标签: provisioning ansible ansible-playbook


    【解决方案1】:

    经过一些研究和试验/错误。我发现 Ansible 无法检查角色之间是否存在文件。这是由于角色依赖(角色本身)将扩展为需要它的依赖的方式,使其成为剧本的一部分。没有任何任务可以让您区分 my_role/files/my_file.txtrequired_role/files/my_file.txt

    解决问题的一种方法(我认为最简单和最干净的方法)是:

    1. my_role 中添加一个变量,其中包含我要使用的文件的路径(覆盖默认路径)
    2. 添加一个任务(与使用默认文件的任务相同)检查上述变量是否已定义并使用它运行任务

    示例

    required_role

    # Existing task
    - name: some task
      copy: src=roles_file.txt dest=some/directory/file.txt
      when: my_file_path is not defined
    
    # My custom task
    - name: my custom task (an alteration of the above task)
      copy: src={{ my_file_path }} dest=/some/directory/file.txt
      when: my_file_path is defined
    

    我的角色

    #... existing code 
    my_file_path: "path/to/my/file"
    

    正如 Ramon de la Fuente 所述:此解决方案已被 zzet.rbenv repo 接受:)

    【讨论】:

    • 这行得通,但是如果您所依赖的角色中的哪些任务也使用该文件,这将是一个问题。您的解决方案是一个可靠的解决方案,但我建议向角色所有者发送拉取请求,以便原始角色可以具有可变路径名。这样可以让星系角色更加灵活。
    • 哦,我看到这个角色现在支持这个了:github.com/andradei/ansible-rbenv-role/commit/… Nice :-)
    猜你喜欢
    • 2017-10-03
    • 2020-09-15
    • 1970-01-01
    • 2018-01-29
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多