Kubernetes の YAML サポートを備えた Vim

ノート。 翻訳。: 元の記事は、以前 CoreOS や Heptio などの企業で働いていた VMware のアーキテクトである Josh Rosso によって書かれました。彼は Kubernetes alb-ingress-controller の共著者でもあります。 著者は、クラウドネイティブの勝利の時代でも vim を好む「昔ながらの」オペレーション エンジニアにとって非常に役立つ小さなレシピを共有します。

Kubernetes の YAML サポートを備えた Vim

vim で Kubernetes の YAML マニフェストを作成しますか? この仕様の次のフィールドをどこに置くべきかを理解するのに数え切れないほどの時間を費やしましたか? あるいは、違いを簡単に思い出してもらえると嬉しいかもしれません args и command? 良いニュースがあります! Vim はリンクしやすい yaml言語サーバー自動完了、検証、その他の便利な機能を利用できます。 この記事では、このために言語サーバー クライアントをセットアップする方法について説明します。

(元記事も ビデオはありますか、著者が資料の内容を話し、実演します。)

言語サーバー

言語サーバー (言語サーバー) 特別なプロトコルを使用して相互に対話するエディターと IDE にプログラミング言語の機能について話す - 言語サーバープロトコル (LSP)。 これは、XNUMX つの実装で一度に多くのエディタ/IDE にデータを提供できるため、優れたアプローチです。 私はすでに持っています 私が書きましたゴプル - Golang の言語サーバー - およびそれをどのように使用できるか 活力。 Kubernetes の YAML でオートコンプリートを取得する手順も同様です。

Kubernetes の YAML サポートを備えた Vim

vim が上記の方法で動作するには、言語サーバー クライアントをインストールする必要があります。 私が知っているXNUMXつの方法は次のとおりです 言語クライアント-neovim и coc.vim。 記事の中で考察していきます coc.vim - これは現在最も人気のあるプラグインです。 経由でインストールできます 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 言語サーバー) には、node.js がインストールされている必要があります。

curl -sL install-node.now.sh/lts | bash

coc.vim 構成済み、サーバー拡張機能をインストールする coc-yaml vim から:

:CocInstall coc-yaml

Kubernetes の YAML サポートを備えた Vim

最後に、おそらく構成から始めることになるでしょう。 coc-vim、提示されました 例として。 特に、それは組み合わせを活性化します +スペース オートコンプリートを呼び出します。

yaml 言語サーバー検出のセットアップ

その coc yaml- language-server を使用できる場合は、YAML ファイルを編集するときに Kubernetes からスキーマをロードするように要求する必要があります。 これは編集によって行われます 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 で構成された他の組み合わせ) は、現在のコンテキストに従って利用可能なフィールドとドキュメントを表示する必要があります。

Kubernetes の YAML サポートを備えた Vim
ここで働きます+スペースを設定したため inoremap <silent><expr> <c-space> coc#refresh()。 まだこれを行っていない場合は、次を参照してください coc.nvim の README 構成例については、

Kubernetes API バージョンの選択

この記事の執筆時点では、yaml- language-server には Kubernetes 1.14.0 スキーマが同梱されています。 スキーマを動的に選択する方法が見つからなかったので、 対応する GitHub の問題。 幸いなことに、言語サーバーは typescript で記述されているため、手動でバージョンを変更するのは非常に簡単です。 これを行うには、ファイルを見つけるだけです 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 の図には、 スタートアッププローブ:

Kubernetes の YAML サポートを備えた Vim

サマリー

この機会が私と同じようにあなたにも喜んでいただけることを願っています。 ハッピー YAMLing! この記事で言及されているユーティリティについて理解を深めるために、次のリポジトリを必ずチェックしてください。

翻訳者からの追伸

そしてそれがあります ビクベ, vim-kubernetes и ヴィムクベクトル.

私たちのブログもお読みください:

出所: habr.com

コメントを追加します