笔记。 翻译。:原文由 Josh Rosso 撰写,他是 VMware 的架构师,曾在 CoreOS 和 Heptio 等公司工作,也是 Kubernetes alb-ingress-controller 的合著者。 作者分享了一个小窍门,对于即使在云原生时代也更喜欢 vim 的“老派”运维工程师来说非常有用。
在 vim 中为 Kubernetes 编写 YAML 清单? 花了无数时间试图弄清楚本规范中的下一个字段应该在哪里? 或者也许您会喜欢快速提醒差异 args
и command
? 有好消息! Vim 很容易链接到
(原文还
语言服务器
语言服务器 (语言服务器) 向编辑器和 IDE 谈论编程语言的功能,它们使用特殊的协议相互交互 -
为了让 vim 以上述方式工作,您需要安装语言服务器客户端。 我知道的两种方法是 coc.vim
- 这是目前最流行的插件。 您可以通过安装它
" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
开始 coc
(以及 yaml-language-server)将需要安装 node.js:
curl -sL install-node.now.sh/lts | bash
何时 coc.vim
配置完毕,安装服务器扩展 coc-yaml
来自维姆:
:CocInstall coc-yaml
最后,您很可能想从配置开始 coc-vim
, 呈现
设置 yaml 语言服务器检测
该 coc
可以使用 yaml-language-server,但在编辑 YAML 文件时需要要求从 Kubernetes 加载 schema。 这是通过编辑完成的 coc-config
:
:CocConfig
在配置中您需要添加 kubernetes
对于所有文件 yaml
。 我还使用语言服务器 golang
所以我的一般配置如下所示:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
}
kubernetes
— 一个保留字段,告诉语言服务器从定义的 URL 下载 Kubernetes 模式 yaml.schemas
可以扩展以支持其他方案 - 有关更多详细信息,请参阅
现在您可以创建 YAML 文件并开始使用自动完成功能。 紧迫 +空格 (或 vim 中配置的其他组合)应根据当前上下文显示可用字段和文档:
在这里工作+空格因为我配置了 inoremap <silent><expr> <c-space> coc#refresh()
。 如果您还没有这样做,请参阅
选择 Kubernetes API 版本
截至撰写本文时,yaml-language-server 附带 Kubernetes 1.14.0 模式。 我没有找到动态选择模式的方法,所以我打开 server.ts
.
要在您的计算机上检测它,只需使用 vim 打开 YAML 文件并使用以下命令查找进程即可 yaml-language-server
.
ps aux | grep -i yaml-language-server
joshrosso 2380 45.9 0.2 5586084 69324 ?? S 9:32PM 0:00.43 /usr/local/Cellar/node/13.5.0/bin/node /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js --node-ipc --node-ipc --clientProcessId=2379
joshrosso 2382 0.0 0.0 4399352 788 s001 S+ 9:32PM 0:00.00 grep -i yaml-language-server
我们的相关进程是进程 2380:这是 vim 在编辑 YAML 文件时使用的进程。
如您所见,该文件位于 /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js
。 只需通过更改值来编辑它 KUBERNETES_SCHEMA_URL
,例如,对于版本 1.17.0:
// old 1.14.0 schema
//exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/garethr/kubernetes-json-schema/master/v1.14.0-standalone-strict/all.json";
// new 1.17.0 schema in instrumenta repo
exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.17.0-standalone-strict/all.json";
取决于所使用的版本 coc-yaml
代码中变量的位置可能会有所不同。 另请注意,我将存储库从 garethr
上 instrumenta
. 看起来 garethr
切换到那里的支持电路。
要检查更改是否已生效,请查看是否出现以前 [在 Kubernetes 的早期版本中] 不存在的字段。 例如,在 K8s 1.14 的图中没有
总结
我希望这个机会让您和我一样高兴。 YAML 快乐! 请务必检查这些存储库,以更好地了解本文中提到的实用程序:
- coc-vim:
https://github.com/neoclide/coc.nvim ; - coc-yaml:
https://github.com/neoclide/coc-yaml .
译者PS
然后有
另请阅读我们的博客:
来源: habr.com