Saltstack + New Relic:cmd.run返回"失败:此处不允许映射值;"错误

时间:2017-02-25 03:50:23

标签: newrelic salt-stack

我正在为SaltStack创建一个配方,用于在minion上安装New Relic Infrastructure监控。我试图使用" cmd.run"选项与我的支柱文件中的变量一起使用。

当我尝试部署时,我收到此错误:失败:此处不允许映射值;第3行。我正在使用的食谱在这里:

create-newrelic-config:
    cmd.run:
        - name: echo "license_key: {{pillar.newrelic.license_key}}" | sudo tee -a /etc/newrelic-infra.yml
        - user: root
        - group: root

返回:

out: project-django-support-01:
out:     Data failed to compile:
out: ----------
out:     Rendering SLS 'base:packages.newrelic' failed: mapping values are not allowed here; line 3
out: 
out: ---
out: create-newrelic-config:
out:     cmd.run:
out:         - name: echo "license_key: 000000000000000000000000000" | sudo tee -a /etc/newrelic-infra.yml    <======================
out:         - user: root
out:         - group: root
out: 
out: enable-newrelic-gpg:
out:     cmd.run:
out: [...]
out: ---

我想知道我是否使用了错误的cmd.run函数语法?

供参考 - 虽然我不认为它适用于此处 - 这些是我尝试复制的安装说明:https://docs.newrelic.com/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-linux

1 个答案:

答案 0 :(得分:2)

通常,您可以使用cmd.run完成许多任务 - 但事实上,salt通常会提供更适合的state

在这种情况下,您可能希望使用file.managed

state.sls

/etc/newrelic.yml:
  file.managed:
    - user: root
    - group: root
    - mode: 644  # pick a mask that fits your setup.
    - contents_pillar: newrelic:license_key

pillar.sls

newrelic:
  license_key: |
      license_key: 1234567890abcdefghijklmnopqrstuvwxyz1234

此方法使用contents_pillar指定文件内容。在你的支柱文件中,license_key出现两次 - 首先是从状态引用它的支柱键,第二个是newrelic的文件内容。这可能有点令人困惑。