当服务具有随机名称时,使用Salt管理服务

时间:2014-05-30 22:35:09

标签: jira jinja2 salt-stack

我试图让盐安装和管理Jira。作为安装的一部分,Jira将自身安装为服务。问题是,它在安装过程中选择一个随机服务名称。

我需要能够管理服务状态。我找到了service.get_service_name()函数,让我按显示名称查找服务。我不确定如何在我的州内正确使用它。当我将它置于状态时,盐错误,因为它试图在安装jira之前获取服务名称并且服务存在。

我已经尝试重新安排事情以便在管理状态之前安装,但我尝试的一切都会导致错误。这是我的最后一次尝试:

JIRA / init.sls

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

JIRA / jira_service.sls

include:
  - jira

jira_service:
  service.running:
    - name: {{ salt['service.get_service_name']('Atlassian JIRA')['Atlassian JIRA'] }}
    - require:
      - pkg: jira

如果我手动安装jira,一切正常。在salt尝试解析服务部分之前,如何强制安装jira?

1 个答案:

答案 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可以找到包名。