Vim مع دعم YAML لـ Kubernetes

ملحوظة perev. : كتب المقال الأصلي جوش روسو ، مهندس من VMware الذي عمل سابقًا لشركات مثل CoreOS و Heptio ، بالإضافة إلى مؤلف مشارك لـ Kubernetes alb-ingress-controller. يشارك المؤلف وصفة صغيرة ، والتي يمكن أن تكون مفيدة جدًا لمهندسي الصيانة "المدرسة القديمة" الذين يفضلون vim حتى في عصر السحابة المنتصرة الأصلية.



كتابة قوائم YAML لـ Kubernetes في فيم؟ أمضيت ساعات لا تحصى في محاولة معرفة أين يجب أن يكون الحقل التالي في هذه المواصفات؟ أو ربما عليك أن تكون سعيدا مع تذكير سريع للفرقargsوcommand؟ هناك أخبار جيدة! من السهل ربط Vim بخادم yaml-language-serverللحصول على الإكمال التلقائي والتحقق من الصحة ووسائل الراحة الأخرى. في هذه المقالة ، سنتحدث عن كيفية تكوين عميل خادم اللغة لهذا.

(تحتوي المقالة الأصلية أيضًا على مقطع فيديو يتحدث فيه المؤلف ويوضح محتويات المواد.)

خادم اللغة


تتحدث خوادم اللغة ( خوادم اللغة) عن إمكانات لغات البرمجة للمحررين و IDEs ، والتي يتفاعلون فيما بينهم باستخدام بروتوكول خاص - بروتوكول خادم اللغة (LSP). يعد هذا نهجًا رائعًا: فهو يسمح بتنفيذ واحد لتوفير العديد من المحررين / IDEs في وقت واحد. لقد كتبت بالفعل عن gopls - خادم اللغة لـ Golang - وكيف يمكن استخدامه في 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) ، ستحتاج إلى تثبيت node.js مثبتًا:

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

عند coc.vimالتهيئة ، قم بتثبيت ملحق الخادم coc-yamlمن vim:

:CocInstall coc-yaml



أخيرًا ، ستحتاج على الأرجح إلى البدء في التهيئة coc-vimالمقدمة كمثال . على وجه الخصوص ، ينشط تركيبة <Ctrl> + مساحة لاستدعاء الإكمال التلقائي.

تكوين اكتشاف خادم لغة yaml


ل cocاستخدام YAML باللغة خادم، عليك أن تسأل عنه لتحميل البرنامج من 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 والبدء في استخدام الإكمال التلقائي. يؤدي الضغط على <Ctrl> + مسافة (أو تركيبة أخرى تم تكوينها في vim) إلى إظهار الحقول والوثائق المتاحة وفقًا للسياق الحالي: تعمل


<Ctrl> + space هنا ، لأنني قمت بتكوينها inoremap <silent><expr> <c-space> coc#refresh(). إذا لم تقم بذلك ، فراجع coc.nvim README للحصول على مثال للتهيئة.

اختيار إصدار Kubernetes API


في وقت كتابة هذا التقرير ، تم شحن خادم لغة yaml مع مخططات 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 :



ملخص


آمل أن تكون هذه الفرصة قد أسعدتني ليس أقل منك. YAML'ing سعيدة! تأكد من التحقق من هذه المستودعات لفهم الأدوات المساعدة المذكورة في المقالة بشكل أفضل:


ملاحظة من المترجم


وهناك vikube و vim-kubernetes و vimkubectl .

اقرأ أيضا في مدونتنا:


All Articles