问题描述
我试图通过 pam 模块限制调用 state.apply
仅针对特定的 SLS 文件。
external_auth:
pam:
myuser:
- '@runner':
- jobs.list_job
- '*':
- test.ping
- 'state.apply':
args:
- 'path/to/sls'
当我通过 CherryPy API 调用 API 时,我得到 401。
curl http://sat_master/run -H 'content-type: application/json' \
-d [{"tgt":"target","arg":["path/to/sls"],"kwarg":{"pillar":{"foo1":"bar1","foo2":"bar2"}},"client":"local_async","fun":"state.apply","username":"myuser","password":"<passwrod>","eauth":"pam"}]
我也尝试过:
external_auth:
pam:
myuser:
- '@runner':
- jobs.list_job
- '*':
- test.ping
- 'state.apply':
args:
- '.*'
external_auth:
pam:
myuser:
- '@runner':
- jobs.list_job
- '*':
- test.ping
- 'state.apply':
args:
- '.*'
kwargs:
'.*' : '.*'
如果我不指定 args
它可以工作:
external_auth:
pam:
myuser:
- '@runner':
- jobs.list_job
- '*':
- test.ping
- state.apply
如何正确做?
解决方法
args
字段应该是函数对象的字段。 IE。 :
错误:
'*':
- state.apply:
args:
- 'path/to/sls'
JSON 等价物
{
"*": [
{
"state.apply": null,"args": [
"path/to/sls"
]
}
]
}
正确:
'*':
- state.apply:
args:
- 'path/to/sls'
JSON 等价物
{
"*": [
{
"state.apply": {
"args": [
"path/to/sls"
]
}
}
]
}