【问题标题】:How to set constants in an ansible role?如何在 ansible 角色中设置常量?
【发布时间】:2015-12-03 18:28:12
【问题描述】:

在 ansible 角色中,我需要为某些路径定义常量,用户在他们的剧本中无法更改。

这是我的需要:

角色将有一个 {{app_base_path}} 变量(可由用户更改),然后我想设置 2 个常量:

  • app_instance_path: "{{app_base_path}}/appinstance"
  • app_server_path: "{{app_instance_path}}/appserver"

我在我的任务中需要多次使用每个值,所以我不能只为它设置一个变量

最好的方法是什么?

谢谢。

【问题讨论】:

    标签: variables constants ansible role


    【解决方案1】:

    最后,我用 set_fact 得到了它,不幸的是,它似乎在变量顺序上的优先级很低,所以如果用户在他的剧本中定义了 extra_vars,我的角色执行可能会失败......

    【讨论】:

      【解决方案2】:

      据我所知,ansible 没有常量。

      您可以执行以下操作:
      在文件<rolname>/defaults/main.yml

      ---
      # Don't change this variables
      app_instance_path: "{{ app_base_path }}/appinstance"
      app_server_path: "{{ app_instance_path }}/appserver"
      

      并在<rolename>/tasks/main.yml 文件中添加一个断言任务:

      ---
      # ...
      - name: Check some constants
        assert:
          that:
            - "app_instance_path == app_base_path + '/appinstance'"
            - "app_server_path == app_instance_path + '/appserver'"
      

      您还可以为用户记录更多内容,以仅设置 app_base_path 并保持 app_instance_pathapp_server_path 不变。

      【讨论】:

      • 感谢您的回答。这不是我所期望的,但检查是一个很酷的功能来强制一些路径。
      • 这些断言在实践中有多大用处?在角色测试断言后,另一个角色或任务可能会轻松更改这些变量。
      猜你喜欢
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2015-07-31
      相关资源
      最近更新 更多