如何在Saltstack状态下引用插槽



我可以使用Saltstack Slot直接设置值。我需要的是使用内联值。

我的目标是使用reg.present为特定用户设置密钥,例如:

HKUStudentSoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall!NoAddRemovePrograms:
reg.present:
- name: HKU__slot__:salt:user.getUserSid(Student)SoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall!NoAddRemovePrograms

它不起作用,因为我没有按照需要把Sid安装到位。我试着弄清楚,但我被卡住了。以下是我试图抓住它。

所以,这很有效:

echo variable:
cmd.run:
- env:
- myuid: __slot__:salt:user.getUserSid(Student)
- name: Get-Item -Path Env:myuid
- shell: powershell

这不是:

echo direct:
cmd.run:
- name: echo __slot__:salt:user.getUserSid(Student)

==============================================

编辑:

正如OrangeDog在评论中指出的那样,不可能用任何字符串来预先设置插槽,所以后者不起作用。

我试着按照建议使用Jinja,状态如下:

{% set uid = __slot__:salt:user.getUserSid(Student) %}
echo with jinja:
cmd.run:
- name:  echo {{ uid }}
- shell: powershell

这不起作用,这是错误:

----------
Rendering SLS 'base:echo' failed: Jinja syntax error: expected token 'end of statement block', got ':'; line 17
---
[...]   
{% set uid = __slot__:salt:user.getUserSid(Student) %}    <======================
echo with jinja:
cmd.run:
- name:  echo {{ uid }}
- shell: powershell
---

现在,我认为没有机会在这里使用金贾。据我所知,Jinja模板是在状态执行之前呈现的——根据文档。所以我猜测它是在计算slot之前执行的,所以Jinja试图将值__slot__:salt:user.getUserSid(Student)分配给uid变量,而不是计算slot并将结果分配给uid

==============================================

编辑:最终可行的解决方案,感谢@OrangeDog对其他陷入困境的人的支持:

{% set uid = salt["user.getUserSid"]("Student") %}
HKUStudnetSoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall!NoAddRemovePrograms:
reg.present:
- name: HKU{{ uid }}SoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall!NoAddRemovePrograms

它在您在问题中链接的文档中。

您可以使用~将文本附加到槽结果中,但不能进行前置。

如果您真的需要使用slot,那么您可以编写一个自定义执行模块来返回所需的完整字符串。否则,只需使用jinja:

{% set SID = salt["user.getUserSid"]("Student") %}

最新更新