Octelium documentation · Latest
Programmatic Access to APIs
Octelium APIs are all developed as gRPC. Currently the Golang implementation is officially supported and it uses the same compiled code in the Octelium project. Here is a simple example:
1package main
2
3import (
4 "context"
5 "crypto/tls"
6 "fmt"
7 "io"
8 "net/http"
9 "os"
10
11 "github.com/octelium/octelium/apis/clusterv1"
12 "github.com/octelium/octelium/apis/corev1"
13 "github.com/octelium/octelium/apis/userv1"
14 "github.com/octelium/octelium/octelium-go"
15)
16
17func main() {
18 if err := doMain(context.Background()); err != nil {
19 panic(err)
20 }
21}
22
23func doMain(ctx context.Context) error {
24 octeliumC, err := octelium.NewClient(ctx, &octelium.ClientConfig{
25 Domain: "example.com",
26 AuthToken: os.Getenv("OCTELIUM_AUTH_TOKEN"),
27 })
28 if err != nil {
29 return err
30 }
31
32 defer octeliumC.Close()
33
34 grpcConn, err := octeliumC.GetGRPCClient(ctx)
35 if err != nil {
36 return err
37 }
38
39 {
40 c := userv1.NewMainServiceClient(grpcConn)
41
42 itemList, err := c.GetStatus(ctx, &userv1.GetStatusRequest{})
43 if err != nil {
44 return err
45 }
46
47 fmt.Printf("%+v\n", itemList)
48 }
49
50 {
51 c := corev1.NewMainServiceClient(grpcConn)
52
53 itemList, err := c.ListService(ctx, &corev1.ListServiceOptions{})
54 if err != nil {
55 return err
56 }
57
58 fmt.Printf("%+v\n", itemList)
59 }
60
61 {
62 c := clusterv1.NewMainServiceClient(grpcConn)
63
64 cc, err := c.GetClusterConfig(ctx, &clusterv1.GetClusterConfigRequest{})
65 if err != nil {
66 return err
67 }
68
69 fmt.Printf("%+v\n", cc)
70 }
71
72 {
73 accessToken, err := octeliumC.GetAccessToken(ctx)
74 if err != nil {
75 return err
76 }
77
78 req, err := http.NewRequest("GET", "https://nginx.octelium.org", nil)
79 if err != nil {
80 return err
81 }
82
83 req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
84 req.Header.Set("Content-Type", "application/json")
85
86 httpC := &http.Client{
87 Transport: &http.Transport{
88 TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
89 },
90 }
91
92 resp, err := httpC.Do(req)
93 if err != nil {
94 return err
95 }
96 defer resp.Body.Close()
97
98 res, err := io.ReadAll(resp.Body)
99 if err != nil {
100 return err
101 }
102 fmt.Println(string(res))
103 }
104
105 return nil
106}