ייבוא מ-Hasura¶
Provisa יכולה להמיר מטא-דאטה קיים של Hasura ל-config.yaml של Provisa, תוך שמירה על טבלאות מעוקבות, קשרים, הרשאות וסכמות מרוחקות.
ייבוא אינטראקטיבי (Admin ← Import Hasura Config)¶
משטח הניהול מריץ את אותם ממירים, כך שהייבוא לא דורש גישת shell ולא מחזור קובץ תצורה
הלוך-ושוב. נדרשת יכולת org_settings; הייבוא נוחת בארגון שבו הסשן פועל.
- העלאה. בחרו תיקיית מטא-דאטה מכווצת (zip) של Hasura v2, פרויקט DDN מכווץ, ייצוא מטא-דאטה
מאוחד (
.yaml/.json, כולל המעטפת{resource_version, metadata}שה-API של המטא-דאטה מחזיר), או.hmlבודד. השאירו את הפורמט על זיהוי אוטומטי אלא אם ההעלאה מעורפלת. - מיפוי תחומים (אופציונלי). כל זוג ממפה סכמת v2 או תת-גרף DDN לתחום Provisa; כל מה שלא ממופה שומר על שמו המקורי.
- המרה ותצוגה מקדימה. השרת ממיר ומחזיר ספירות, אזהרות ממיר, ואת התצורה שנוצרה. שום דבר לא נכתב בשלב הזה.
- סקירה ועריכה. התצורה ניתנת לעריכה במקום — פרטי חיבור, שמות תחומים, שמות תפקידים. מה שמיישמים הוא מה שמוצג.
- החלה. החלפת השכבה הסמנטית הקיימת מוחקת כל מקור, טבלה, תפקיד וכלל שאינם בתצורה; אם לא מסומן, הייבוא מתמזג לתוך מה שיש לארגון. ההחלה טוענת את התצורה ובונה מחדש את הסכמות של הארגון.
נקודות קצה: POST /admin/import/hasura/preview וגם POST /admin/import/hasura/apply.
Hasura v2¶
ייצוא מטא-דאטה¶
מתוך קונסולת Hasura שלכם או ה-CLI:
או השתמשו ב-API של Hasura:
curl -X POST http://localhost:8080/v1/metadata \
-H "X-Hasura-Admin-Secret: <secret>" \
-d '{"type":"export_metadata","args":{}}' \
> metadata.json
המרה¶
ממיר ה-v2 קורא תיקיית מטא-דאטה של Hasura (הפריסה שמופקת על ידי hasura metadata export, או הפריסה השטוחה tables.yaml / actions.yaml) וכותב תצורת Provisa:
השמיטו את -o כדי לכתוב את התצורה ל-stdout.
דגלים:
| דגל | מטרה |
|---|---|
-o, --output |
נתיב YAML לפלט (ברירת מחדל: stdout) |
--source-overrides |
קובץ YAML עם דריסות חיבור לפי מקור (host, port, credentials) |
--domain-map |
מיפויי סכמה-לתחום כזוגות SCHEMA=DOMAIN |
--auth-env-file |
קובץ .env עם תצורת אימות; ממיר JWT/JWK, סוד מנהל, ומיפוי claims |
--dry-run |
פירוק ואימות בלי לכתוב פלט |
מה מומר¶
| מושג Hasura | מקבילה ב-Provisa |
|---|---|
| טבלה מעוקבת | tables[] עם publish: true |
| קשר אובייקט (Object relationship) | relationships[] עם cardinality: many-to-one. קשר שמוצהר רק לפי עמודת FK (foreign_key_constraint_on: artist_id) אינו נוקב ביעד בייצוא; הממיר פותר אותו דרך קשר המערך ההפוך, ומשמיט אותו עם אזהרת [relationships] כשאין כזה. (REQ-1680) |
| קשר מערך (Array relationship) | relationships[] עם cardinality: one-to-many |
| הרשאת Select | נראות תפקיד + מסנן RLS. משתנה session-variable (X-Hasura-User-Id) הופך ל-current_setting('provisa.user_id'), שהבקשה קושרת מזהה המשתמש של הזהות ומה-claims שלה בזמן השאילתה. (REQ-1682) |
| הרשאת עמודה | visible_to / writable_by |
| הרשאת Insert/update/delete | writable_by של Mutation + RLS |
| סכמה מרוחקת | רישום מקור graphql_remote בתוספת טבלה נחתת אחת לכל שדה שורש Query שה-SDL של התפקיד חושף; עמודה נראית לכל תפקיד שה-SDL שלו חושף אותה, ארגומנט שורש שאינו null הופך לעמודת סינון-מקורי (native-filter) _nf_, שדות מקוננים נקובים באזהרה. (REQ-1681) |
| שדה מחושב | רשומת functions[] עם kind: query |
חיבורים ותחומים בלשונית הייבוא¶
הייצוא נוקב את מסדי הנתונים שלו לפי משתנה סביבה, כך שאחרי ההמרה הראשונה הלשונית מציגה כל מקור SQL עם החיבור שההמרה ניחשה. מלאו את המארח (host), הפורט, מסד הנתונים, שם המשתמש והסיסמה, והמירו שוב; רק השדות ששיניתם נוסעים הלאה, כדריסות מקור. שורות התחום מכסות כל סכמה, תת-גרף וסכמה מרוחקת שההעלאה נושאת; כל אחת היא בורר על פני התחומים הקיימים של הארגון שגם מקבל שם מוקלד, מסומן "תחום חדש" כשהוא לא תואם אף אחד. ההחלה מתמזגת לתוך מה שכבר יש לארגון אלא אם תיבת ההחלפה מסומנת. (REQ-1687)
הטיפוסים מגיעים מהמקור בתצוגה המקדימה¶
ייצוא Hasura נוקב עמודות בלי טיפוסים, וטבלה מעוקבת ללא הרשאה לא נוקבת עמודות כלל. התצוגה המקדימה רצה עם חיבורי המקור שסיפקתם, כך שהיא קוראת את information_schema.columns של כל מקור SQL בר-הגעה: כל עמודה לא-מטופסת מקבלת את הטיפוס של המקור ממופה לאוצר המילים של ה-IR, וטבלה ללא עמודות לוקחת כל עמודה שיש למקור, נראית ל-org_admin בלבד, מכיוון ש-Hasura חשפה אותה לאף תפקיד אחר. מקור שהתצוגה המקדימה לא יכולה להגיע אליו מדווח כאזהרת [sources] והעמודות שלו נשארות לא-מטופסות עד שתסיימו לפני ההחלה. (REQ-1691, REQ-1684)
מגבלות¶
- Actions מומרות אוטומטית: פעולות מטפל-HTTP הופכות ל-Mutations של
webhooks[]; פעולות עם מטפל שאינו HTTP (מסד נתונים) הופכות ל-placeholder שלfunctions[]ופולטות אזהרה לסקירת המטפל - Event triggers מומרים לתצורת
event_triggersלכל טבלה (פעולות, כתובת webhook, מדיניות ניסיון חוזר) ופולטים אזהרה שמציינת נאמנות מוגבלת - סכמות מרוחקות מומרות לרשומות מקור
graphql_remoteונוחתות כטבלאות מתוך ה-SDL של הרשאות התפקיד; סכמה מרוחקת ללא הרשאות לא נוחתת דבר, מכיוון שהייצוא לא נושא כל הצהרה אחרת על צורתה (REQ-1681) - פונקציות SQL מותאמות אישית דורשות סקירה — מקרים פשוטים מומרים לרשומות
functions[], מקרים מורכבים דורשים עבודה ידנית - Cron triggers מומרים לרשומות תצורת
scheduler, תוך שמירה על ביטוי ה-cron ודגל ההפעלה
Hasura DDN (v3)¶
איתור פרויקט ה-HML¶
ממיר ה-DDN קורא ישירות את תיקיית פרויקט ה-DDN של קבצי .hml — אין צורך בשלב build של supergraph. רכיב התיקייה הראשון תחת שורש הפרויקט נלקח כשם תת-הגרף; קבצים תחת globals/ משויכים לתת-הגרף globals.
המרה¶
השמיטו את -o כדי לכתוב את התצורה ל-stdout.
דגלים:
| דגל | מטרה |
|---|---|
-o, --output |
נתיב YAML לפלט (ברירת מחדל: stdout) |
--source-overrides |
קובץ YAML עם דריסות חיבור לפי מקור |
--domain-map |
מיפויי תת-גרף-לתחום כזוגות SUBGRAPH=DOMAIN |
--aggregates-output |
נתיב פלט לקובץ הצד (sidecar) של ביטויי צבירה (ברירת מחדל: <output>-aggregates.yaml) |
--dry-run |
פירוק ואימות בלי לכתוב פלט |
מטא-דאטה מסוג AggregateExpression נשמר בקובץ צד *-aggregates.yaml.
מה מומר¶
| מושג DDN | מקבילה ב-Provisa |
|---|---|
| מודל תת-גרף | tables[] תחת מקור |
| קשר | relationships[] |
| כלל הרשאה | מסנן RLS |
| Command | Mutation של webhook או View |
| Connector | רשומת מקור עם פרטי חיבור |
מגבלות¶
- מחברי Lambda (פונקציות TypeScript/Python) דורשים הגדרת webhook ידנית
- תוספי מחזור חיים (Lifecycle plugins) אין להם מקבילה ישירה
- מצבי אימות DDN ממופים לספקי אימות של Provisa אך נתיבי claim של JWT עשויים לדרוש התאמה
אחרי הייבוא¶
- סקרו את
config.yamlשנוצר — שימו לב ל-warningsמהממיר - אמתו פרטי גישה לחיבור (הממיר משתמש בערכי placeholder)
- הפעילו את Provisa ואמתו שהטבלאות מופיעות ב-Explorer
- הריצו את שאילתות ה-GraphQL הקיימות שלכם — הסכמה תואמת לתבניות נפוצות
- הגישו שאילתות לאישור דרך ה-Admin API או ה-UI לפני הפעלת ממשל בסביבת ייצור