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
我希望你能帮助我解决我一直遇到的一个相当令人沮丧的问题。我一直在尝试从一些配置文件中删除静态配置,并使用 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