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  }