筆記。 翻譯。:原文由 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
而且還有
另請閱讀我們的博客:
來源: www.habr.com