Նշում. թարգմ.Բնօրինակ հոդվածը գրել է Ջոշ Ռոսսոն՝ VMware-ի ճարտարապետ, ով նախկինում աշխատել է այնպիսի ընկերություններում, ինչպիսիք են CoreOS-ը և Heptio-ն, և նաև Kubernetes alb-ingress-controller-ի համահեղինակն է: Հեղինակը կիսվում է մի փոքրիկ բաղադրատոմսով, որը կարող է շատ օգտակար լինել «հին դպրոցի» օպերացիոն ինժեներների համար, ովքեր նախընտրում են vim-ը նույնիսկ հաղթական ամպի հայրենի դարաշրջանում:
Kubernetes-ի համար YAML մանիֆեստներ գրել վիմում: Անհամար ժամեր եք ծախսել՝ փորձելով պարզել, թե որտեղ պետք է լինի հաջորդ դաշտը այս բնութագրում: Կամ գուցե դուք կգնահատեք տարբերության արագ հիշեցումը args и command? Լավ նորություն կա։ Vim-ին հեշտ է կապել yaml-language-serverավտոմատ լրացում, վավերացում և այլ հարմարություններ ստանալու համար: Այս հոդվածում մենք կխոսենք, թե ինչպես ստեղծել լեզվի սերվերի հաճախորդ դրա համար:
(Բնօրինակ հոդվածը նույնպես կա տեսանյութ, որտեղ հեղինակը խոսում և ցուցադրում է նյութի բովանդակությունը։)
Լեզվի սերվեր
Լեզուների սերվերներ (լեզու սերվերներ) Խոսեք ծրագրավորման լեզուների հնարավորությունների մասին խմբագիրներին և IDE-ներին, որոնց համար նրանք փոխազդում են միմյանց հետ՝ օգտագործելով հատուկ արձանագրություն. Լեզուների սերվերի արձանագրություն (LSP): Սա հիանալի մոտեցում է, քանի որ այն թույլ է տալիս մեկ իրականացմանը տվյալներ տրամադրել միանգամից բազմաթիվ խմբագիրների/IDE-ների: Ես արդեն ունեմ գրել է մոտ gopls - լեզվի սերվեր Golang-ի համար և ինչպես այն կարող է օգտագործվել եռանդ. Kubernetes-ի համար YAML-ում ավտոմատ լրացում ստանալու քայլերը նման են:
Որպեսզի 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
Ի վերջո, դուք, ամենայն հավանականությամբ, կցանկանաք սկսել կոնֆիգուրացիայից coc-vim, ներկայացված որպես օրինակ. Մասնավորապես, այն ակտիվացնում է համակցությունը +բացատ զանգահարել ավտոմատ լրացում:
Yaml-language-server-ի հայտնաբերման կարգավորում
Որ coc կարող է օգտագործել yaml-language-server, նրան պետք է խնդրել բեռնել սխեման Kubernetes-ից YAML ֆայլերը խմբագրելիս: Դա արվում է խմբագրման միջոցով coc-config:
:CocConfig
Կազմաձևում դուք պետք է ավելացնեք kubernetes բոլոր ֆայլերի համար yaml. Ես լրացուցիչ օգտագործում եմ լեզվի սերվեր golangԱյսպիսով, իմ ընդհանուր կազմաձևը հետևյալն է.
kubernetes — վերապահված դաշտ, որը թույլ է տալիս լեզվի սերվերին ներբեռնել Kubernetes սխեման նշված URL-ից այս հաստատունը. yaml.schemas կարող է ընդլայնվել՝ աջակցելու լրացուցիչ սխեմաներին - ավելի մանրամասն տե՛ս համապատասխան փաստաթղթեր.
Այժմ դուք կարող եք ստեղծել YAML ֆայլ և սկսել օգտագործել ավտոմատ լրացումը: Սեղմելով +բացատ (կամ այլ համակցություն, որը կազմաձևված է vim-ում) պետք է ցույց տա առկա դաշտերը և փաստաթղթերը՝ համաձայն ընթացիկ համատեքստի.
+Space-ն աշխատում է այստեղ, քանի որ ես կարգավորել եմ inoremap <silent><expr> <c-space> coc#refresh(). Եթե դուք չեք արել սա, տես coc.nvim README օրինակի կոնֆիգուրացիայի համար:
Ընտրելով Kubernetes API տարբերակը
Այս գրելու պահին yaml-language-server-ը առաքվում է Kubernetes 1.14.0 սխեմաներով: Ես չգտա սխեմա դինամիկ ընտրելու միջոց, ուստի բացեցի համապատասխան GitHub խնդիրը. Բարեբախտաբար, քանի որ լեզվի սերվերը գրված է տպագրական գրությամբ, բավականին հեշտ է ձեռքով փոխել տարբերակը։ Դա անելու համար պարզապես գտեք ֆայլը server.ts.
Ձեր մեքենայի վրա այն հայտնաբերելու համար պարզապես բացեք YAML ֆայլը vim-ով և գտեք գործընթացը 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-ի դիագրամում չկար startupProbe:
Ամփոփում
Հուսով եմ, որ այս հնարավորությունը ձեզ հաճելի կլինի նույնքան, որքան ինձ: Շնորհավոր ՅԱՄԼինգ: Համոզվեք, որ ստուգեք այս պահեստները՝ հոդվածում նշված կոմունալ ծառայություններն ավելի լավ հասկանալու համար.