我希望执行Salt状态的时候并不总是在另一个状态发生更改时发生,但仅适用于特定的更改。这看起来像我必须使onchanges
/onchanges_in
取决于具体的变化。根据已更改的内容制作salt'onchanges`必需条件
The respective bug report已关闭,称“现在状态已完全解决,州可以访问正在运行的运行字典和低状态”。但是,我没有找到任何文件,也没有任何关于“运行字典”的解释。
所以我想这个问题也可以改写为“我如何访问onchanges
必要条件中的'运行字典'?”,但我愿意接受针对原始问题的任何解决方案。谢谢你的帮助!
更新:注释问一个具体的例子,所以这里是我的使用情况:由于大多数国家的模块,user.present
既可以现有的(用户)对象的更新域或创建一个新的。然后,我想运行第二个状态模块,当且仅当特定字段已更改和/或刚创建对象时。在Ansible中,为了比较,我想register
a variable并通过它访问模块的结果。
那么,我为什么要这样做呢?
本质上,我想在Linux上创建用户帐户,并让他们能够设置自己的密码(通过SSH密钥登录时)。 user.present
支持empty_password
为此目的,但它不与enforce_password
很好地发挥。这意味着在手动设置密码后,重复的状态运行将再次清除该密码。有人甚至可以认为这是Salt中的一个错误,但不同的user.present
字段之间的相互作用是错综复杂且有争议的。
我的解决方案是先创建帐户,然后运行module.run
状态,然后执行shadow.del_password
。这是通过onchanges_in
必要条件实现的。但是,不应该为任何更改而触发删除密码,但只有在创建用户帐户时才会触发,这也是我的状态仅触摸密码的唯一情况。否则,将用户添加到组中将会清除密码。为此,我想我将不得不查看user.present
更改的详细信息。
Create user account for dummy:
user.present:
- name: dummy
- gid_from_name: True
- remove_groups: False
# TODO: This should be made more specific
- onchanges_in:
- module: Allow dummy to set a password
Allow dummy to set a password:
module.run:
- name: shadow.del_password
- m_name: dummy
# Make sure that this is not executed accidentally if no `onchanges_in` is present
- onchanges: []
- require:
- user: Create user account for dummy
请你把这个问题更具体的写你想要解决(什么样的变化的问题,什么样的行动?) – ahus1
@ ahus1我已经添加了一个详细的用例示例。 – F30