状态 ID 是否需要在不同的 .sls 文件中是唯一的?

Do state IDs need to be unique across different .sls files?

假设我有两个单独的 .sls 文件,它们定义相同的状态 ID -- 可能是一些非常常见的东西,比如 conf 文件。进一步假设它们都应用于同一个 minion,如下所示:

# salt/app1/init.sls
conf-file:
  file.managed:
    - name: /etc/app1.conf
    - source: salt://app1/files/app1.conf.jinja

# salt/app2/init.sls
conf-file:
  file.managed:
    - name: /etc/app2.conf
    - source: salt://app2/files/app2.conf.jinja

# salt/top.sls
base:
  minion1:
    - app1
    - app2

这是一个错误吗?状态 ID 是否只需要在它们自己的 .sls 文件中是唯一的,或者它们是否需要在应用于给定 minion 的所有文件中是唯一的?

(上下文:为了避免 ID 冲突,我习惯性地在所有状态 ID 前加上状态名称前缀,例如 app1-conf-file。在向同事描述该模式时,我意识到我不知道确定是否有必要。)

是的,它们需要在执行上下文中是唯一的。这意味着如果您绝对确定它们永远不会 运行 在一起,您可以拥有两个具有相同 ID 的状态。

我建议您添加一个有意义的前缀以避免任何可能的冲突。

文档中的引用 https://docs.saltstack.com/en/latest/ref/states/highstate.html#id-declaration

ID declaration

[...]

Must be unique across entire state tree. If the same ID declaration is used twice, only the first one matched will be used. All subsequent ID declarations with the same name will be ignored.

实际上这不是真的,在 2019.2 上它会引发错误“检测到冲突的 ID,SLS ID 需要全局唯一”