github.com/qiniu/go-sdk/v7@v7.27.0/examples/sandbox_lifecycle/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "os" 8 "time" 9 10 "github.com/qiniu/go-sdk/v7/sandbox" 11 ) 12 13 func main() { 14 apiKey := os.Getenv("QINIU_API_KEY") 15 if apiKey == "" { 16 log.Fatal("请设置 QINIU_API_KEY 环境变量") 17 } 18 19 apiURL := os.Getenv("QINIU_SANDBOX_API_URL") 20 21 c, err := sandbox.NewClient(&sandbox.Config{ 22 APIKey: apiKey, 23 Endpoint: apiURL, 24 }) 25 if err != nil { 26 log.Fatalf("创建客户端失败: %v", err) 27 } 28 29 ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) 30 defer cancel() 31 32 // 1. 列出模板,选取第一个可用模板 33 templates, err := c.ListTemplates(ctx, nil) 34 if err != nil { 35 log.Fatalf("列出模板失败: %v", err) 36 } 37 if len(templates) == 0 { 38 log.Fatal("没有可用模板") 39 } 40 41 var templateID string 42 for _, tmpl := range templates { 43 if tmpl.BuildStatus == sandbox.BuildStatusReady || tmpl.BuildStatus == sandbox.BuildStatusUploaded { 44 templateID = tmpl.TemplateID 45 break 46 } 47 } 48 if templateID == "" { 49 log.Fatal("没有构建成功的模板") 50 } 51 fmt.Printf("使用模板: %s\n", templateID) 52 53 // 2. 创建沙箱并等待就绪 54 timeout := int32(120) 55 sb, info, err := c.CreateAndWait(ctx, sandbox.CreateParams{ 56 TemplateID: templateID, 57 Timeout: &timeout, 58 }, sandbox.WithPollInterval(2*time.Second)) 59 if err != nil { 60 log.Fatalf("创建沙箱失败: %v", err) 61 } 62 fmt.Printf("沙箱已就绪: %s (状态: %s)\n", sb.ID(), info.State) 63 64 // 3. 沙箱详情(直接使用 CreateAndWait 返回的 info) 65 fmt.Printf("CPU: %d 核, 内存: %d MB\n", info.CPUCount, info.MemoryMB) 66 67 // 4. 检查运行状态 68 running, err := sb.IsRunning(ctx) 69 if err != nil { 70 log.Fatalf("检查状态失败: %v", err) 71 } 72 fmt.Printf("是否运行中: %v\n", running) 73 74 // 5. 更新超时时间 75 if err := sb.SetTimeout(ctx, 5*time.Minute); err != nil { 76 log.Fatalf("更新超时失败: %v", err) 77 } 78 fmt.Println("超时时间已更新为 5 分钟") 79 80 // 6. 延长存活时间(Refresh) 81 duration := 300 82 if err := sb.Refresh(ctx, sandbox.RefreshParams{ 83 Duration: &duration, 84 }); err != nil { 85 log.Fatalf("Refresh 失败: %v", err) 86 } 87 fmt.Println("沙箱存活时间已延长 300 秒") 88 89 // 7. 终止沙箱 90 if err := sb.Kill(ctx); err != nil { 91 log.Fatalf("终止沙箱失败: %v", err) 92 } 93 fmt.Printf("沙箱 %s 已终止\n", sb.ID()) 94 }