Openshift:如何以非交互方式编辑scc?

时间:2017-02-18 02:03:26

标签: openshift openshift-origin

我正在尝试使用openshift / minishift,我发现自己必须运行:

oc edit scc privileged

并添加:

- system:serviceaccount:default:router

所以我可以暴露豆荚。有没有办法在脚本中执行此操作?

我知道oc adm有一些政策操纵命令,但我无法弄清楚如何添加这一行。

3 个答案:

答案 0 :(得分:3)

您可以使用oc patch命令和类型json来实现它。下面的代码段将在第0个元素之前向数组添加新项。您可以尝试使用假的“bla”值等。

oc patch scc privileged --type=json -p '[{"op": "add", "path": "/users/0", "value":"system:serviceaccount:default:router"}]'

--type=json会将提供的补丁解释为jsonpatch操作。不幸的是oc patch --help没有为json补丁类型提供任何示例。幸运的是,示例用法可以在kubernetes docs中找到:kubectl patch

答案 1 :(得分:0)

我找到了sed Here的示例管道,并将其修改为ruby,以便我可以轻松编辑数据结构。

oc get scc privileged -o json |\ 
ruby -rjson -e 'i = JSON.load(STDIN.read); i["users"].push "system:serviceaccount:default:router"; puts i.to_json ' |\
oc replace scc -f -

这是quick and dirty script开始使用minishift

答案 2 :(得分:0)

从命令行添加和删除用户到SCC的最简单方法是使用oc adm policy命令:

oc adm policy add-scc-to-user <scc_name> <user_name>

有关详细信息,请参阅this section

因此,对于您的具体用例,它将是:

oc adm policy add-scc-to-user privileged system:serviceaccount:default:router

我很惊讶它的需要。我通常使用“oc cluster up”,但是使用最近的minishift进行测试,它已经开箱即用:

$ minishift start
$ eval $(minishift oc-env)
$ oc login -u system:admin
$ oc get scc privileged -o yaml | grep system:serviceaccount:default:router
- system:serviceaccount:default:router

$ minishift version
minishift v1.14.0+1ec5877
$ oc version
openshift v3.7.1+a8deba5-34