跳至主要內容

分享與複製

範本有兩個識別碼,它們回答的是不同的問題。

識別碼形式何時改變回答什麼
id一個 UUID永不改變「這是哪一筆範本資料?」
hash_idth_ 後面接一段十六進位摘要啟動配方變動時「這究竟是哪一份配方?」

id 代表那一筆資料。hash_id 是決定實際啟動內容的那些欄位的內容雜湊,所以兩個配方完全相同的範本仍會得到不同的雜湊 —— 因為資料本身的識別也被算了進去 —— 而同一筆資料在做過表面性的編輯後仍保有原本的雜湊。

雜湊涵蓋的範圍

在雜湊內不在雜湊內
imagetagreponamedescription
launch_modeargs_stronstartreadme、連結
envportsconstraintsvisibility、排序順序
jupyter_diruse_jupyter_lab私有登錄庫密碼
registry_useruse_count、時間戳記

替範本改名、重寫它的 readme、把它從私有翻成公開:雜湊不動。改一個連接埠、一個環境變數項目、啟動時指令碼或映像檔:雜湊當場重新產生。

重新產生的雜湊會弄壞你已經分享出去的連結

舊的雜湊不再屬於任何範本,所以用它建出來的釘選連結會回傳 TEMPLATE_NOT_FOUND。編輯配方之後,請重新複製釘選連結並再傳一次。

分享

在範本卡片或詳細資料上按 分享 會提供兩種連結。

連結形式行為
推薦/templates?t=<id>跟著範本走。收到的人永遠看到你最新的編輯內容。
釘選/templates?h=<hash_id>指名某一份確切的配方,你一改動它就會失效。

兩種連結都會在收件人的範本庫中開啟範本詳細資料,他們可以從那裡啟動或複製它。兩者本身都不授予存取權:收件人必須原本就看得到該範本。也就是說,它得是 system 範本、public 範本,或由他們所屬組織擁有的範本。把私有範本的連結傳給組織外的人,他們只會拿到 404。

以雜湊查詢範本

釘選連結只是包在一個端點外面的殼:

curl "$SUPERHEAT_API/v1/templates/by-hash/th_9f2c…" \
-H "Authorization: Bearer $SUPERHEAT_KEY"

它回傳的物件與 GET /v1/templates/{id} 相同,套用相同的可見性規則與相同的機密值遮蔽;當雜湊比不到任何你看得到的範本時,回傳 404 TEMPLATE_NOT_FOUND

這是達成可重現性的工具。把 hash_id 連同訓練任務一起記下來,之後查詢時要嘛回傳你當初用的那份確切配方,要嘛告訴你它已經改過了 —— 這比無聲地交給你一個不同的環境有用得多。

複製

複製是你以無法編輯的範本為基礎繼續開發的方式:精選的 system 範本,或另一個組織的公開範本。

curl -X POST "$SUPERHEAT_API/v1/templates/$TEMPLATE_ID/duplicate" \
-H "Authorization: Bearer $SUPERHEAT_KEY"

副本會立即建立,而且:

  • 屬於你目前的組織,並記錄你為建立者
  • 一律是 private,不論來源是什麼
  • 命名為 <source name> (copy),若該名稱已被使用則為 (copy 2)(copy 3),依此類推
  • 帶有全新的 id 與全新的 hash_id,啟動次數從零開始
  • 原封不動複製映像檔、啟動模式、引數、啟動時指令碼、連接埠與限制條件

當來源不是你的時,有兩樣東西刻意不會被複製:

不會複製的項目原因
機密環境變數值你從來就沒有讀取它們的權限;副本中的值會是空白的,而 secret 旗標保持不變。
私有登錄庫的使用者名稱與密碼原因相同。請在副本上重新輸入你自己的憑證。

複製你的組織已經擁有的範本則會保留這兩者,因為並沒有揭露任何新的東西。

常見的工作流程

  1. 找一個接近你需求的精選範本。
  2. 複製它。
  3. 編輯副本 —— 換掉映像檔標籤、加上連接埠、寫一段啟動時指令碼。
  4. 啟動它,確認可以運作,然後把釘選連結分享給你的團隊。
  5. 當你改動配方時,重新分享一次連結。

刪除範本不會影響已經用它部署出來的執行個體,也不會使任何東西失效,除了範本庫中的項目與它的連結。