我试图让盐安装和管理Jira。作为安装的一部分,Jira将自身安装为服务。问题是,它在安装过程中选择一个随机服务名称。
我需要能够管理服务状态。我找到了service.get_service_name()函数,让我按显示名称查找服务。我不确定如何在我的州内正确使用它。当我将它置于状态时,盐错误,因为它试图在安装jira之前获取服务名称并且服务存在。
我已经尝试重新安排事情以便在管理状态之前安装,但我尝试的一切都会导致错误。这是我的最后一次尝试:
jira:
pkg.installed:
- refresh: true
- require:
- file: C:\Users\ADMINI~1\AppData\Local\Temp\response.varfile
C:\Users\ADMINI~1\AppData\Local\Temp\response.varfile:
file.managed:
- source: salt://jira/response.varfile
include:
- jira
jira_service:
service.running:
- name: {{ salt['service.get_service_name']('Atlassian JIRA')['Atlassian JIRA'] }}
- require:
- pkg: jira
如果我手动安装jira,一切正常。在salt尝试解析服务部分之前,如何强制安装jira?
答案 0 :(得分:2)
您遇到的问题是jinja首先将文件呈现为yaml,然后Salt State编译器会评估所有单个状态。实际上,它确实在安装jira服务之前获取服务名称。
如果还没有安装jira,一种解决方法可能是让jinja不渲染jira_service部分。
{% if '<Jira name>' in salt['pkg.list_pkgs'] %}
jira_service:
service.running:
- name: {{ salt['service.get_service_name']('Atlassian JIRA')['Atlassian JIRA'] }}
- require:
- pkg: jira
{% endif %}
替换为您希望在'pkg.list_pkgs'中的名称。 这种尝试的缺点是第一个高状态不能确保服务正在运行。第二个高位状态应该有效,因为现在安装了Jira,Salt可以找到包名。