2015-09-08 36 views
2

在一个可靠的角色中,我需要为一些路径定义常量,而不是用户在其剧本中更改。如何设置常量以扮演一个角色?

这里是我的需要:

的作用将有{{app_base_path}}变量(由用户可更换),然后我想设置2个常量:

  • app_instance_path:“{ {app_base_path}}/appinstance“
  • app_server_path:”{{app_instance_path}}/appserver“

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

什么是最好的方式来做到这一点?

谢谢。

回答

1

据我所知,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原样。

+0

感谢你的答案。这不完全是我所期望的,但检查是一个很酷的功能来强制一些路径。 –

+0

这些断言在实践中有多大用处?角色测试断言后,另一个角色或任务可能会轻松更改这些变量。 –

1

最后,我set_fact得到它,不幸的是,它似乎有一个非常低优先级的变量顺序,因此如果用户在他的剧本定义extra_vars我的角色执行可能会失败......