github.com/qiniu/go-sdk/v7@v7.27.0/examples/sandbox_pause_resume/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 templateID := "base" 34 timeout := int32(120) 35 sb, info, err := c.CreateAndWait(ctx, sandbox.CreateParams{ 36 TemplateID: templateID, 37 Timeout: &timeout, 38 }, sandbox.WithPollInterval(2*time.Second)) 39 if err != nil { 40 log.Fatalf("创建沙箱失败: %v", err) 41 } 42 fmt.Printf("沙箱已就绪: %s (状态: %s)\n", sb.ID(), info.State) 43 44 // 2. 暂停沙箱 45 fmt.Println("正在暂停沙箱...") 46 if err := sb.Pause(ctx); err != nil { 47 log.Fatalf("暂停失败: %v", err) 48 } 49 fmt.Println("沙箱已暂停") 50 51 // 3. 确认状态 52 detail, err := sb.GetInfo(ctx) 53 if err != nil { 54 log.Fatalf("获取详情失败: %v", err) 55 } 56 fmt.Printf("当前状态: %s\n", detail.State) 57 58 // 4. 恢复沙箱(通过 Connect) 59 fmt.Println("正在恢复沙箱...") 60 resumed, err := c.Connect(ctx, sb.ID(), sandbox.ConnectParams{ 61 Timeout: 120, 62 }) 63 if err != nil { 64 log.Fatalf("恢复失败: %v", err) 65 } 66 67 // 等待恢复就绪 68 readyInfo, err := resumed.WaitForReady(ctx, sandbox.WithPollInterval(2*time.Second)) 69 if err != nil { 70 log.Fatalf("等待就绪失败: %v", err) 71 } 72 fmt.Printf("沙箱已恢复: %s (状态: %s)\n", resumed.ID(), readyInfo.State) 73 74 // 5. 清理 75 if err := resumed.Kill(ctx); err != nil { 76 log.Fatalf("终止失败: %v", err) 77 } 78 fmt.Println("沙箱已终止") 79 }