SaltStack - mine.get 能够从 master 获取 mine_function 数据,但不能在 .sls 或 jinja 变量中

SaltStack - mine.get is able to grab mine_function data from master, but not in .sls or jinja variable

我希望你能帮助我解决我一直遇到的一个相当令人沮丧的问题。我一直在尝试从一些配置文件中删除静态配置,并使用 Salt-Stack 将其移动到 Pillar/Mine 数据。

除 1 项特定任务外,一切进展顺利。

这是从 3 个特定的 minions 获取数据(自定义粒度)以在 .sls(上下文)或其他 minions 的 jinja 文件(直接变量)中创建 3 个不同的变量,但我似乎无法让它工作.

(我的方案很灵活,因为我可以在状态文件或配置文件中的 jinja 变量中调用它。)

这是在 AWS EC2 实例上,但可以在我的实验室中从 AWS 复制出来。我需要的谷物是:“public_ipv4”,我不能在 salt runner 中使用 network.util 的原因是因为这是 NAT,并且盒子没有与 [=65 的第二个接口=] 分配给它的IP。 (无法更改)

Pillar 数据有效,我有一个 init.sls 用于地雷功能:

mine_functions:
  grains.item:
    - location
    - environment
    - roles
    - srvtype
    - instance
    - az
    - public_ipv4
    - fqdn
    - ipv4
    - ipv6

(还有自定义谷物:“public_ipv4”被 minion 调用,所以我知道这不是谷物本身不正确。)

当通过 master 使用下面的方法定位时,它会返回请求的信息:

my-minion:
    ----------
    minion-with-data-i-want-1:
        ----------
        az:
            c
        environment:
            dev
        fqdn:
            correct_fqdn
        instance:
            3
        ipv4:
            - Correct_local_ip
            - 127.0.0.1
        ipv6:
            - ::1
            - Correct_ip
        location:
            correct_location
        public_ipv4:
            Correct_public_ip
        roles:
            Correct_role
        srvtype:
            None

这里重点说明以上来自:

salt '*globbed_target*' mine.get '*minions-with-data-i-need-glob*' grains.item

这是大师的作品,但我无法通过索引或任何 args/kwargs 等方式挑出特定的颗粒

所以我将一些语法放入状态文件和一些 jinja 模板中,但我无法让它工作。以下是我到目前为止尝试过的一些方法:

金贾:

{% set ip1 = salt['mine.get']('*minion-with-data-i-need-glob*', 'grains.item')[7] %}

以上 returns 没有。

状态文件:

- context:
    - ip1: {{ salt['mine.get']('*minions-with-data-i-need-glob*', 'grains.item') }}

上面returns一个字典错误:

Context must be formed as a dict

运行 来自 apt.

的最新 salt-minion/master

我采取的步骤:

运行:salt '*' mine.update 每次更改后检查:salt '*' mine.valid 每次更改后显示。

感谢任何帮助。

这看起来你 运行 是一个经典问题。不知道您得到的 return 值是什么。

首先你的 {# set ip1 = salt['mine.get']('*minion-with-data-i-need-glob*', 'grains.item')[7] #} return 没什么,因为它是神社评论。 {% set ip1 = salt['mine.get']('*minion-with-data-i-need-glob*', 'grains.item') %}

您遇到的下一个问题是将列表传递给上下文。当它应该听取命令时。该错误甚至与我的无关。

试试这个

- context:
    ip1: {{ salt['mine.get']('*minions-with-data-i-need-glob*', 'grains.item') | json}}

接下来学习使用 slsutil.renderer 查看事物的渲染方式。比如salt minion slsutil.renderer salt://thing/init.sls default_renderer=jinja