Salt-stack:在管理文件公式中替换/添加minion名称到文件

Rod*_*ade 3 managed amazon-ec2 newrelic salt-stack

我正在使用New Relic监视我的Salt托管的EC2服务器,我试图在newrelic-sysmond confic文件中插入"hostname = minion-name",因此它们显示在New Relic的仪表板中,具有可重新调整的名称,而不是EC2默认为"ip-123-133 ......".

我使用salt-cloud旋转我的实例,然后应用以下状态(通过顶层文件)以运行New Relic sysmond:

newrelic-repo:
  pkg:
    - installed
    - require:
      - pkgrepo: <my private repo defined elsewhere, just convenient rpm storage>

newrelic-sysmond:
  pkg:
    - installed
    - require:
      - pkg: newrelic-repo
  service:
    - running
    - watch:
      - file: /etc/newrelic/nrsysmond.cfg

/etc/newrelic/nrsysmond.cfg:
  file.managed:
    - source: salt://newrelic/nrsysmond.cfg
    - user: newrelic
    - mode: 744
    - require:
      - pkg: newrelic-sysmond
Run Code Online (Sandbox Code Playgroud)

关键是:/etc/newrelic/nrsysmond.cfg托管文件是一个带有我个人帐户密钥的版本,New Relic设置所需,所以我的所有机器都是一样的.

有没有办法让我hostname=my_placeholder在那个文件中有类似的东西,然后在我的sls配置中,以便当状态被应用my_placeholder成为奴才名称?

通过states.file doc(http://docs.saltstack.com/ref/states/all/salt.states.file.html)挖掘我觉得这是可能的,但我缺少一些基础知识来计算它因为我刚刚开始用盐.主要是我认为我只需要一个关于如何引用包含minion名称的变量/ grain的方式,以及正在使用的默认值/上下文的示例.

小智 11

首先,您必须启用此配置文件的模板:

/etc/newrelic/nrsysmond.cfg:
  file.managed:
    (...)
    - template: jinja
Run Code Online (Sandbox Code Playgroud)

然后将此文件视为jinja模板:

hostname={{ grains.id }} 
Run Code Online (Sandbox Code Playgroud)

小兵的名字可在grains.id.(你可以跑去salt-call grains.items查看可用的谷物.如果你需要更灵活地分配变量,请阅读有关支柱的信息).