-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_test.go
134 lines (118 loc) · 3.27 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package gosdk_test
import (
"context"
"fmt"
"log/slog"
"os"
"github.com/nebius/gosdk"
"github.com/nebius/gosdk/auth"
compute "github.com/nebius/gosdk/proto/nebius/compute/v1"
)
// This example demonstrates how to create and configure a new [gosdk.SDK] instance with logging and credentials,
// then retrieve a list of compute instances using the gosdk API.
//
// After usage, the SDK instance should be closed.
//
// Note: Be sure to replace `creds` with appropriate credentials.
func ExampleSDK() {
ctx := context.Background()
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
var creds gosdk.Credentials // define your credentials (see other examples)
sdk, err := gosdk.New(
ctx,
gosdk.WithLogger(logger),
gosdk.WithCredentials(creds),
)
if err != nil {
return // fmt.Errorf("create gosdk: %w", err)
}
defer func() {
errX := sdk.Close()
if errX != nil {
logger.ErrorContext(ctx, "failed to close sdk", slog.Any("error", errX))
}
}()
list, err := sdk.Services().Compute().V1().Instance().List(ctx, &compute.ListInstancesRequest{
ParentId: "my-parent",
})
if err != nil {
return // fmt.Errorf("list instances: %w", err)
}
for _, instance := range list.GetItems() {
fmt.Println(instance.GetMetadata().GetId())
}
}
// This examples demonstrates using the [gosdk.WithExplicitInit] option
// to separate [gosdk.SDK] construction ([gosdk.New]) from IO operations performed during [gosdk.SDK.Init].
// This allows for explicit control over initialization timing.
func ExampleSDK_Init() {
ctx := context.Background()
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
var creds gosdk.Credentials // define your credentials (see other examples)
sdk, err := gosdk.New(
ctx,
gosdk.WithLogger(logger),
gosdk.WithCredentials(creds),
gosdk.WithExplicitInit(true),
)
if err != nil {
return // fmt.Errorf("create gosdk: %w", err)
}
defer func() {
errX := sdk.Close()
if errX != nil {
logger.ErrorContext(ctx, "failed to close sdk", slog.Any("error", errX))
}
}()
err = sdk.Init(ctx)
if err != nil {
return // fmt.Errorf("init gosdk: %w", err)
}
}
func ExampleCredentials_useIAMToken() {
ctx := context.Background()
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
sdk, err := gosdk.New(
ctx,
gosdk.WithLogger(logger),
gosdk.WithCredentials(
gosdk.IAMToken(os.Getenv("MY_ENV")),
),
)
if err != nil {
return // fmt.Errorf("create gosdk: %w", err)
}
defer func() {
errX := sdk.Close()
if errX != nil {
logger.ErrorContext(ctx, "failed to close sdk", slog.Any("error", errX))
}
}()
}
func ExampleCredentials_useServiceAccount() {
ctx := context.Background()
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
// you can find more ways to create a service account in the auth package
serviceAccount := auth.NewPrivateKeyFileParser(
nil, // or you can set up your own fs, eg: `os.DirFS("."),`
"private/key/file/path",
"public-key-id",
"service-account-id",
)
sdk, err := gosdk.New(
ctx,
gosdk.WithLogger(logger),
gosdk.WithCredentials(
gosdk.ServiceAccountReader(serviceAccount),
),
)
if err != nil {
return // fmt.Errorf("create gosdk: %w", err)
}
defer func() {
errX := sdk.Close()
if errX != nil {
logger.ErrorContext(ctx, "failed to close sdk", slog.Any("error", errX))
}
}()
}