Skip to content

Commit 9ff2b6b

Browse files
committed
[uk] Plugins - developer/tutorial-getter-plugin.mdx
Signed-off-by: Andrii Holovin <Andygol@users.noreply.github.com>
1 parent 1e17a3a commit 9ff2b6b

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
---
2+
title: "Посібник: Створення втулків Getter"
3+
sidebar_label: Створення втулків Getter
4+
---
5+
6+
import GetVersion from "@site/src/components/GetVersion";
7+
8+
Створіть команду `helm system-info`, яка виводить інформацію про систему.
9+
10+
## Subprocess Runtime
11+
12+
Створімо втулок Getter, який виконується в Subprocess.
13+
14+
### Передумови {#prerequisites}
15+
16+
1. Встановіть останню версію Helm 4: **<GetVersion majorVersion="4" label={false} link={true} />**
17+
2. У терміналі створіть аліас `helm` для завантаженої версії. Команда `helm version --short` повинна показати правильну версію Helm у цьому терміналі.
18+
19+
### 1. Створіть теку для втулка {#1-create-plugin-directory}
20+
21+
Ви можете створити її в будь-якому місці вашої файлової системи. Наприклад:
22+
23+
```bash
24+
mkdir -p $HOME/code/helm/plugins/demo-getter
25+
cd $HOME/code/helm/plugins/demo-getter
26+
```
27+
28+
### 2. Створіть маніфест втулка {#2-create-plugin-manifest}
29+
30+
```yaml title="plugin.yaml" showLineNumbers
31+
apiVersion: v1
32+
type: getter/v1
33+
name: demo-getter
34+
version: 0.1.0
35+
runtime: subprocess
36+
config:
37+
protocols: ["demo"]
38+
runtimeConfig:
39+
protocolCommands:
40+
- protocols:
41+
- demo
42+
platformCommand:
43+
- command: get-demo.sh
44+
```
45+
46+
### 3. Створіть скрипт {#3-create-script}
47+
48+
Втулки Getter відповідають за отримання/завантаження упакованого артефакту, в даному випадку чарта, та повернення шляху до завантаженого пакета. Для демонстрації скористаймося утилітою вашої системи, щоб створити тимчасову теку (вона автоматично очищатиметься з часом), а також командами `helm create` та `helm package`, щоб створити демонстраційний пакет чарта в тимчасовій теці та повернути шлях до пакета:
49+
50+
```bash title="get-demo.sh" showLineNumbers
51+
#!/usr/bin/env sh
52+
set -e
53+
54+
URI=$@
55+
TMPDIR="$(mktemp -d)"
56+
57+
# створення фальшивого чарта для тестування з переданим базовим імʼям URL
58+
FILENAME=$(basename -- $URI)
59+
helm create $TMPDIR/$FILENAME 1>/dev/null
60+
helm package $TMPDIR/$FILENAME -d $TMPDIR 1>/dev/null
61+
# cat $FILENAME-0.1.0.tgz
62+
# щоб не потрібно було знати версію чарта
63+
rm -r $TMPDIR/$FILENAME 1>/dev/null
64+
cat $TMPDIR/$FILENAME-*
65+
```
66+
67+
Зробіть його виконуваним:
68+
69+
```bash
70+
chmod +x get-demo.sh
71+
```
72+
73+
### 4. Встановлення в режимі розробки та тестування {#4-install-in-dev-mode-and-test}
74+
75+
Встановлення втулка з вашої файлової системи відбувається в локальному режимі розробки. Це дозволяє обійти перевірку або підтвердження походження:
76+
77+
```bash
78+
% helm plugin install $HOME/code/helm/plugins/demo-getter
79+
Installing plugin from local directory (development mode)
80+
Installed plugin: demo-getter
81+
```
82+
83+
Як ми бачили в [посібнику з втулків CLI](/plugins/developer/tutorial-cli-plugin.mdx), встановлення в локальному режимі розробки створює символічне посилання з теки джерел вашого втулка до теки втулків. Тепер у вас встановлено два втулки:
84+
85+
```bash
86+
% ls -lah $(helm env HELM_PLUGINS)
87+
total 0
88+
drwxr-xr-x@ 4 r6by staff 160B Nov 10 04:04 .
89+
drwxr-xr-x@ 3 r6by staff 96B Jan 21 2025 ..
90+
lrwxr-xr-x 1 r6by staff 41B Nov 10 04:04 demo-getter -> /Users/r6by/code/helm/plugins/demo-getter
91+
lrwxr-xr-x 1 r6by staff 41B Nov 10 02:18 system-info -> /Users/r6by/code/helm/plugins/system-info
92+
```
93+
94+
На відміну від посібника втулків CLI, ви не побачите цей втулок у списку доступних команд за допомогою команди `helm help`. У списку команд CLI `helm` відображаються лише типи втулків CLI.
95+
96+
Але, як і для всіх типів втулків, ви можете переглянути детальну інформацію про встановлений втулок Getter за допомогою команди `helm plugin list`:
97+
98+
```bash
99+
% helm plugin list
100+
NAME VERSION TYPE APIVERSION PROVENANCE SOURCE
101+
demo-getter 0.1.0 getter/v1 v1 local dev unknown
102+
system-info 0.1.0 cli/v1 v1 local dev unknown
103+
```
104+
105+
Спробуймо. Маємо отримати шаблон YAML для чарту з назвою «example»:
106+
107+
```bash
108+
% helm template example demo://does-not-matter/example
109+
LOTS OF YAML, INCLUDING:
110+
---
111+
# Source: example/templates/tests/test-connection.yaml
112+
```
113+
114+
Що ви створили: демо-втулок Getter, що використовує середовище виконання Subprocess!
115+
116+
Далі створімо версію в середовищі виконання Wasm…
117+
118+
## Wasm Runtime
119+
120+
### Передумови {#prerequisites-1}
121+
122+
- Вимоги з [Subprocess Runtime](#subprocess-runtime)
123+
- Встановлений Go 1.25
124+
125+
Створіть власний протокол getter, який перетворює URL-адреси `demo://` на `https://`.
126+
127+
### 1. Налаштування репозиторію {#1-set-up-repository}
128+
129+
Створіть новий репозиторій на основі шаблону (або просто клонуйте): https://github.com/gjenkins8/helm-extism-plugin-template
130+
131+
### 2. Оновлення маніфесту втулка {#2-update-plugin-manifest}
132+
133+
Аналогічно до того ж кроку для Subprocess Getter, за винятком того, що ви будете робити це у власному клонованому репозиторії Git.
134+
135+
Зверніть увагу, що значення полів `runtime` та `runtimeConfig` зміняться для Wasm:
136+
137+
```yaml title="plugin.yaml" showLineNumbers
138+
apiVersion: v1
139+
type: getter/v1
140+
name: demo-getter
141+
version: 0.1.0
142+
runtime: extism/v1
143+
config:
144+
protocols: ["demo"]
145+
runtimeConfig:
146+
memory:
147+
maxPages: 16
148+
timeout: 30000
149+
```
150+
151+
### 3. Update `main.go` {#3-update-maingo}
152+
153+
Визначте вхідні/вихідні повідомлення втулків:
154+
155+
```go title="main.go" showLineNumbers
156+
package main
157+
158+
...
159+
160+
type InputMessage struct {
161+
URL string `json:"url"`
162+
Protocol string `json:"protocol"`
163+
}
164+
165+
type OutputMessage struct {
166+
Data []byte `json:"data"`
167+
}
168+
```
169+
170+
Замініть функцію `replaceMeImplementationGoesHere` фактичною логікою:
171+
172+
```go
173+
...
174+
175+
// Видаліть функцію `replaceMeImplementationGoesHere`.
176+
177+
func demoDownloader(input InputMessage) (*OutputMessage, error) {
178+
179+
// Перетворення demo:// на https://
180+
downloadURL := strings.Replace(input.URL, "demo://", "https://", 1)
181+
pdk.Log(pdk.LogLevelInfo, fmt.Sprintf("Converted %s to %s", input.URL, downloadURL))
182+
183+
// Завантаження вмісту
184+
resp, err := http.Get(downloadURL)
185+
if err != nil {
186+
return nil, fmt.Errorf("failed to download: %w", err)
187+
}
188+
defer resp.Body.Close()
189+
190+
// Читання та виведення вмісту
191+
data, _ := io.ReadAll(resp.Body)
192+
output := OutputMessage{Data: data}
193+
return &output, nil
194+
}
195+
196+
```
197+
198+
Оновіть функцію runPlugin, щоб замість цього викликати `demoDownloader`:
199+
200+
```go
201+
func runPlugin() error {
202+
...
203+
// Вилучим: output, err := replaceMeImplementationGoesHere(input)
204+
output, err := demoDownloader(input)
205+
```
206+
207+
### 4. Зирання WebAssembly {#4-build-webassembly}
208+
209+
```bash
210+
$ make build
211+
$ ls -la plugin.wasm
212+
```
213+
214+
### 5. Встановлення в режимі розробки та тестування {#5-install-in-dev-mode-and-test}
215+
216+
Те саме, що і крок Втулок CLI у Subprocess.
217+
218+
Що ви створили: втулок WebAssembly із виконанням у пісочниці та структурованою комунікацією через Extism PDK!
219+

0 commit comments

Comments
 (0)