Vim có hỗ trợ YAML cho Kubernetes

Ghi chú. bản dịch.: Bài viết gốc được viết bởi Josh Rosso, một kiến ​​trúc sư tại VMware, người trước đây từng làm việc tại các công ty như CoreOS và Heptio, đồng thời cũng là đồng tác giả của bộ điều khiển Kubernetes alb-ingress-controller. Tác giả chia sẻ một công thức nhỏ có thể rất hữu ích cho các kỹ sư vận hành “trường phái cũ”, những người thích vim ngay cả trong thời đại của đám mây chiến thắng.

Vim có hỗ trợ YAML cho Kubernetes

Viết bảng kê khai YAML cho Kubernetes trong vim? Bạn đã dành vô số thời gian để cố gắng tìm ra trường tiếp theo nên ở đâu trong thông số kỹ thuật này? Hoặc có thể bạn sẽ đánh giá cao lời nhắc nhở nhanh về sự khác biệt args и command? Có tin tốt! Vim rất dễ liên kết đến máy chủ ngôn ngữ yamlđể có được sự hoàn thành tự động, xác nhận và các tiện ích khác. Trong bài viết này, chúng tôi sẽ nói về cách thiết lập máy khách máy chủ ngôn ngữ cho việc này.

(Bài viết gốc cũng có video không, nơi tác giả nói chuyện và trình bày nội dung của tài liệu.)

Máy chủ ngôn ngữ

Máy chủ ngôn ngữ (máy chủ ngôn ngữ) nói về khả năng của các ngôn ngữ lập trình đối với các biên tập viên và IDE mà chúng tương tác với nhau bằng một giao thức đặc biệt - Giao thức máy chủ ngôn ngữ (LSP). Đây là một cách tiếp cận tuyệt vời vì nó cho phép một lần triển khai cung cấp dữ liệu cho nhiều biên tập viên/IDE cùng một lúc. tôi đã tôi đã viết về gopls - máy chủ ngôn ngữ cho Golang - và cách sử dụng nó trong khí lực. Các bước để tự động hoàn thành trong YAML cho Kubernetes cũng tương tự.

Vim có hỗ trợ YAML cho Kubernetes

Để vim hoạt động theo cách được mô tả, bạn sẽ cần cài đặt máy khách máy chủ ngôn ngữ. Hai phương pháp tôi biết là Ngôn ngữClient-neovim и coc.vim. Trong bài viết tôi sẽ xem xét coc.vim - Đây là plugin phổ biến nhất hiện nay. Bạn có thể cài đặt nó thông qua cắm 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'}

Để bắt đầu coc (và do đó, máy chủ ngôn ngữ yaml) sẽ yêu cầu cài đặt node.js:

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

Khi coc.vim đã định cấu hình, cài đặt phần mở rộng máy chủ coc-yaml từ vim:

:CocInstall coc-yaml

Vim có hỗ trợ YAML cho Kubernetes

Cuối cùng, rất có thể bạn sẽ muốn bắt đầu với việc cấu hình coc-vim, trình bày như một ví dụ. Đặc biệt, nó kích hoạt sự kết hợp +không gian để gọi tự động hoàn thành.

Thiết lập tính năng phát hiện máy chủ ngôn ngữ yaml

Đó coc có thể sử dụng máy chủ ngôn ngữ yaml, nó cần được yêu cầu tải lược đồ từ Kubernetes khi chỉnh sửa tệp YAML. Điều này được thực hiện bằng cách chỉnh sửa coc-config:

:CocConfig

Trong cấu hình, bạn sẽ cần thêm kubernetes cho tất cả các tập tin yaml. Ngoài ra tôi còn sử dụng máy chủ ngôn ngữ cho golangvì vậy cấu hình chung của tôi trông như thế này:

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes — một trường dành riêng yêu cầu máy chủ ngôn ngữ tải xuống lược đồ Kubernetes từ URL được xác định trong hằng số này. yaml.schemas có thể được mở rộng để hỗ trợ các chương trình bổ sung - để biết thêm chi tiết, xem tài liệu liên quan.

Bây giờ bạn có thể tạo tệp YAML và bắt đầu sử dụng tính năng tự động hoàn thành. Nhấn +không gian (hoặc kết hợp khác được định cấu hình trong vim) sẽ hiển thị các trường và tài liệu có sẵn theo ngữ cảnh hiện tại:

Vim có hỗ trợ YAML cho Kubernetes
Hoạt động ở đây +dấu cách vì tôi đã định cấu hình inoremap <silent><expr> <c-space> coc#refresh(). Nếu bạn chưa làm điều này, hãy xem coc.nvim README để biết cấu hình ví dụ.

Chọn phiên bản API Kubernetes

Tại thời điểm viết bài này, yaml-lingu-server đi kèm với các lược đồ Kubernetes 1.14.0. Tôi không tìm được cách chọn động một lược đồ, vì vậy tôi đã mở vấn đề GitHub tương ứng. May mắn thay, vì máy chủ ngôn ngữ được viết bằng bản thảo nên việc thay đổi phiên bản theo cách thủ công khá dễ dàng. Để làm điều này, chỉ cần tìm tập tin server.ts.

Để phát hiện nó trên máy của bạn, chỉ cần mở tệp YAML bằng vim và tìm quy trình với 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

Quy trình liên quan đối với chúng tôi là quy trình 2380: đó là quy trình mà vim sử dụng khi chỉnh sửa tệp YAML.

Như bạn có thể dễ dàng thấy, tập tin nằm ở /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Chỉ cần chỉnh sửa nó bằng cách thay đổi giá trị KUBERNETES_SCHEMA_URL, ví dụ: đối với phiên bản 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";

Tùy thuộc vào phiên bản được sử dụng coc-yaml Vị trí của biến trong mã có thể khác nhau. Cũng xin lưu ý rằng tôi đã thay đổi kho lưu trữ từ garethr trên instrumenta. Có vẻ như garethr chuyển sang mạch hỗ trợ ở đó.

Để kiểm tra xem thay đổi đã có hiệu lực hay chưa, hãy xem liệu một trường có xuất hiện mà trước đó không có [trong các phiên bản trước của Kubernetes] hay không. Ví dụ: trong sơ đồ dành cho K8s 1.14 không có khởi độngThăm dò:

Vim có hỗ trợ YAML cho Kubernetes

Tóm tắt thông tin

Tôi hy vọng cơ hội này sẽ làm hài lòng bạn nhiều như tôi đã làm. Chúc bạn YAMLing vui vẻ! Hãy nhớ kiểm tra các kho lưu trữ này để hiểu rõ hơn về các tiện ích được đề cập trong bài viết:

Tái bút từ người dịch

Và có vikube, vim-kubernetes и vimkubectl.

Đọc thêm trên blog của chúng tôi:

Nguồn: www.habr.com

Thêm một lời nhận xét