Vim با پشتیبانی YAML برای Kubernetes

توجه داشته باشید. ترجمهمقاله اصلی توسط جاش روسو، معمار VMware نوشته شده است که قبلاً در شرکت‌هایی مانند CoreOS و Heptio کار می‌کرده و همچنین یکی از نویسندگان کنترلر Kubernetes alb-ingress است. نویسنده دستور العمل کوچکی را به اشتراک می‌گذارد که می‌تواند برای مهندسین عملیات «مدرسه قدیمی» که vim را حتی در دوران بومی ابر پیروز ترجیح می‌دهند بسیار مفید باشد.

Vim با پشتیبانی YAML برای Kubernetes

نوشتن YAML مانیفست برای Kubernetes در vim؟ ساعت های بی شماری را صرف تلاش کرده اید تا بفهمید فیلد بعدی در این مشخصات کجا باید باشد؟ یا شاید از یادآوری سریع تفاوت قدردانی کنید args и command? خبر خوبی هست! پیوند دادن به Vim آسان است yaml-language-serverبرای دریافت تکمیل خودکار، اعتبار سنجی و سایر امکانات. در این مقاله در مورد چگونگی راه اندازی یک کلاینت سرور زبان برای این کار صحبت خواهیم کرد.

(مقاله اصلی نیز آیا یک ویدیو وجود دارد، جایی که نویسنده صحبت می کند و محتوای مطالب را نشان می دهد.)

سرور زبان

سرورهای زبان (سرورهای زبان) در مورد قابلیت های زبان های برنامه نویسی برای ویرایشگرها و IDE ها صحبت کنید، که برای آنها با استفاده از یک پروتکل خاص با یکدیگر تعامل دارند - پروتکل سرور زبان (LSP). این یک رویکرد عالی است زیرا به یک پیاده سازی اجازه می دهد تا داده ها را به چندین ویرایشگر/IDE به طور همزمان ارائه دهد. من قبلا نوشت در گوپل ها - یک سرور زبان برای Golang - و نحوه استفاده از آن نیرو. مراحل دریافت تکمیل خودکار در YAML برای Kubernetes مشابه است.

Vim با پشتیبانی YAML برای Kubernetes

برای اینکه vim به روش توصیف شده کار کند، باید یک کلاینت سرور زبان نصب کنید. دو روشی که من می شناسم این است LanguageClient-neovim и coc.vim. در مقاله ای که در نظر خواهم گرفت coc.vim - این محبوب ترین افزونه در حال حاضر است. می توانید آن را از طریق نصب کنید vim-plug:

" 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 از vim:

:CocInstall coc-yaml

Vim با پشتیبانی YAML برای Kubernetes

در نهایت، به احتمال زیاد می خواهید با پیکربندی شروع کنید coc-vim، ارایه شده به عنوان مثال. به ویژه، این ترکیب را فعال می کند +فضا برای فراخوانی تکمیل خودکار

راه اندازی تشخیص یامل-زبان-سرور

که coc می تواند از yaml-language-server استفاده کند، باید از آن خواسته شود که طرحواره را از Kubernetes در هنگام ویرایش فایل های YAML بارگیری کند. این کار با ویرایش انجام می شود coc-config:

:CocConfig

در پیکربندی باید اضافه کنید kubernetes برای همه فایل ها yaml. من علاوه بر این از یک سرور زبان برای golangبنابراین پیکربندی کلی من به این صورت است:

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

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

kubernetes - یک فیلد رزرو شده که به سرور زبان می‌گوید طرح Kubernetes را از URL تعریف شده دانلود کند این ثابت. yaml.schemas را می توان برای پشتیبانی از طرح های اضافی گسترش داد - برای جزئیات بیشتر، نگاه کنید اسناد مربوطه.

اکنون می توانید یک فایل YAML ایجاد کنید و از تکمیل خودکار استفاده کنید. فشار دادن +فضا (یا ترکیب دیگری که در vim پیکربندی شده است) باید فیلدها و اسناد موجود را مطابق با زمینه فعلی نشان دهد:

Vim با پشتیبانی YAML برای Kubernetes
اینجا کار می کند +space چون پیکربندی کردم inoremap <silent><expr> <c-space> coc#refresh(). اگر این کار را نکرده اید، ببینید coc.nvim README برای پیکربندی نمونه

انتخاب نسخه Kubernetes API

از زمان نوشتن این مقاله، سرور زبان یامل با طرحواره‌های Kubernetes 1.14.0 ارسال می‌شود. من راهی برای انتخاب پویا یک طرحواره پیدا نکردم، بنابراین باز کردم مشکل مربوط به GitHub. خوشبختانه، از آنجایی که سرور زبان به صورت تایپی نوشته شده است، تغییر دستی نسخه بسیار آسان است. برای انجام این کار، فقط فایل را پیدا کنید server.ts.

برای شناسایی آن در دستگاه خود، به سادگی فایل YAML را با vim باز کنید و فرآیند را با آن پیدا کنید 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 هیچ وجود نداشت راه اندازی پروب:

Vim با پشتیبانی YAML برای Kubernetes

خلاصه

امیدوارم این فرصت شما را نیز مانند من خوشحال کند. YAMLing مبارک! برای درک بهتر ابزارهای ذکر شده در مقاله، حتما این مخازن را بررسی کنید:

PS از مترجم

و وجود دارد ویکوبه, vim-kubernetes и vimkubectl.

در وبلاگ ما نیز بخوانید:

منبع: www.habr.com

اضافه کردن نظر