Vim με υποστήριξη YAML για Kubernetes

Σημείωση. μετάφρ.: Το αρχικό άρθρο γράφτηκε από τον Josh Rosso, έναν αρχιτέκτονα της VMware που εργάστηκε στο παρελθόν σε εταιρείες όπως η CoreOS και η Heptio, και είναι επίσης ο συν-συγγραφέας του Kubernetes alb-ingress-controller. Ο συγγραφέας μοιράζεται μια μικρή συνταγή που μπορεί να είναι πολύ χρήσιμη για τους μηχανικούς επιχειρήσεων «παλιού σχολείου» που προτιμούν το vim ακόμη και στην εποχή του νικηφόρου νέφους.

Vim με υποστήριξη YAML για Kubernetes

Γράψτε τη δήλωση YAML για το Kubernetes στο vim; Ξοδέψατε αμέτρητες ώρες προσπαθώντας να καταλάβετε πού πρέπει να είναι το επόμενο πεδίο σε αυτήν την προδιαγραφή; Ή ίσως θα εκτιμήσετε μια γρήγορη υπενθύμιση της διαφοράς args и command? Υπάρχουν καλά νέα! Το Vim είναι εύκολο να συνδεθεί yaml-language-serverγια να λάβετε αυτόματη ολοκλήρωση, επικύρωση και άλλες ευκολίες. Σε αυτό το άρθρο θα μιλήσουμε για το πώς να ρυθμίσετε έναν πελάτη διακομιστή γλώσσας για αυτό.

(Το αρχικό άρθρο επίσης υπάρχει βίντεο, όπου ο συγγραφέας μιλά και επιδεικνύει το περιεχόμενο του υλικού.)

Διακομιστής γλώσσας

Διακομιστές γλωσσών (διακομιστές γλώσσας) μιλήστε για τις δυνατότητες των γλωσσών προγραμματισμού σε συντάκτες και IDE, για τις οποίες αλληλεπιδρούν μεταξύ τους χρησιμοποιώντας ένα ειδικό πρωτόκολλο - Πρωτόκολλο διακομιστή γλώσσας (LSP). Αυτή είναι μια εξαιρετική προσέγγιση επειδή επιτρέπει σε μία υλοποίηση να παρέχει δεδομένα σε πολλούς συντάκτες/IDE ταυτόχρονα. Έχω ήδη έγραψε για gopls - ένας διακομιστής γλώσσας για το Golang - και πώς μπορεί να χρησιμοποιηθεί ζωτικότης. Τα βήματα για τη λήψη αυτόματης συμπλήρωσης στο YAML για το Kubernetes είναι παρόμοια.

Vim με υποστήριξη YAML για Kubernetes

Για να λειτουργήσει το vim με τον τρόπο που περιγράφεται, θα χρειαστεί να εγκαταστήσετε έναν πελάτη διακομιστή γλώσσας. Οι δύο μέθοδοι που γνωρίζω είναι LanguageClient-neovim и κοκ.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, παρουσιάζεται ως παράδειγμα. Συγκεκριμένα, ενεργοποιεί τον συνδυασμό +διάστημα για να καλέσετε την αυτόματη συμπλήρωση.

Ρύθμιση εντοπισμού yaml-language-server

Ότι 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

Από τη σύνταξη αυτού του κειμένου, ο διακομιστής γλώσσας 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 δεν υπήρχε startupProbe:

Vim με υποστήριξη YAML για Kubernetes

Περίληψη

Ελπίζω αυτή η ευκαιρία να σας ευχαριστήσει όσο και εμένα. Καλό YAMLing! Βεβαιωθείτε ότι έχετε ελέγξει αυτά τα αποθετήρια για να κατανοήσετε καλύτερα τα βοηθητικά προγράμματα που αναφέρονται στο άρθρο:

ΥΓ από τον μεταφραστή

Και υπάρχει vikube, vim-kubernetes и vimkubectl.

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο