https://github.com/apecloud/kb-cloud-client-go
Golang client for the KubeBlocks Cloud API
https://github.com/apecloud/kb-cloud-client-go
Last synced: 8 months ago
JSON representation
Golang client for the KubeBlocks Cloud API
- Host: GitHub
- URL: https://github.com/apecloud/kb-cloud-client-go
- Owner: apecloud
- License: apache-2.0
- Created: 2024-10-21T03:07:36.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-06T09:53:03.000Z (about 1 year ago)
- Last Synced: 2024-11-06T10:34:18.591Z (about 1 year ago)
- Language: Go
- Size: 819 KB
- Stars: 3
- Watchers: 4
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Support: SUPPORT.md
Awesome Lists containing this project
README
# kb-cloud-client-go
This repository contains a Go API client for the KubeBlocks Cloud API.
## Requirements
* Go 1.22+
## Installation
```bash
go get github.com/apecloud/kb-cloud-client-go
```
## Layout
The client library contains the following packages:
### The KubeBlocks Cloud API Client
The main API client is located in the `api/kbcloud` directory. Import it with:
```go
import "github.com/apecloud/kb-cloud-client-go/api/kbcloud"
```
### The Admin API Client
The admin API client is located in the `api/kbcloud/admin` directory. Import it with:
```go
import "github.com/apecloud/kb-cloud-client-go/api/kbcloud/admin"
```
### The Data API Client
The data API client is located in the `api/kbcloud/data` directory. Import it with:
```go
import "github.com/apecloud/kb-cloud-client-go/api/kbcloud/data"
```
## Authentication
The client supports authentication via API Key & Secret. The recommended way is to use environment variables with NewDefaultContext:
```go
// Use environment variables:
// KB_CLOUD_API_KEY_NAME - API key name
// KB_CLOUD_API_KEY_SECRET - API key secret
// KB_CLOUD_SITE - Optional site configuration
ctx := common.NewDefaultContext(context.Background())
```
You can also configure authentication directly through context:
### API Key & Secret via Context
```go
ctx := context.WithValue(
context.Background(),
common.ContextDigestAuth,
common.DigestAuth{
UserName: os.Getenv("KB_CLOUD_API_KEY_NAME"),
Password: os.Getenv("KB_CLOUD_API_KEY_SECRET"),
},
)
```
## Getting Started
For complete examples, check out the [examples](./examples) directory.
Here's an example using API key authentication:
```go
package main
import (
"context"
"fmt"
"os"
"github.com/apecloud/kb-cloud-client-go/api/common"
"github.com/apecloud/kb-cloud-client-go/api/kbcloud"
)
func main() {
// Set up authentication context
ctx := context.WithValue(
context.Background(),
common.ContextDigestAuth,
common.DigestAuth{
UserName: os.Getenv("KB_CLOUD_API_KEY_NAME"),
Password: os.Getenv("KB_CLOUD_API_KEY_SECRET"),
},
)
// Optional: Set site configuration
ctx = context.WithValue(
ctx,
common.ContextServerVariables,
map[string]string{"site": os.Getenv("KB_CLOUD_SITE")},
)
orgName := "my-org"
client := common.NewAPIClient(configuration)
fmt.Println("Listing environments...")
api := kbcloud.NewEnvironmentApi(client)
envs, resp, err := api.ListEnvironment(ctx, orgName)
if err != nil {
log.Fatalf("Error listing environments: %v\nResponse: %v", err, resp)
}
fmt.Printf("Environments: %+v\n\n", envs)
}
```
### Configuration Options
#### Environment Variables
The client supports the following environment variables:
```bash
# Authentication
KB_CLOUD_API_KEY_NAME=your-api-key-name
KB_CLOUD_API_KEY_SECRET=your-api-key-secret
# Site configuration
KB_CLOUD_SITE=https://api-test.apecloud.com
# HTTP proxy settings
HTTP_PROXY=http://proxy.example.com:8080
HTTPS_PROXY=http://proxy.example.com:8080
```
#### Server Configuration
Configure server URL and variables:
```go
configuration := common.NewConfiguration()
// Set server URL
configuration.Host = "api.example.com"
// Set server variables
configuration.ServerVariables = map[string]string{
"site": os.Getenv("KB_CLOUD_SITE"),
}
// Or use context to set server variables
ctx := context.WithValue(
context.Background(),
common.ContextServerVariables,
map[string]string{"site": os.Getenv("KB_CLOUD_SITE")},
)
```
#### Debug Mode
Enable debug logging:
```go
configuration := common.NewConfiguration()
configuration.Debug = true
```
#### Retry Configuration
Configure retry behavior:
```go
configuration := common.NewConfiguration()
// Configure retry settings
configuration.RetryConfiguration = common.RetryConfiguration{
EnableRetry: true, // Enable/disable retry
MaxRetries: 3, // Maximum number of retries
RetryInterval: 2, // Base retry interval in seconds
MaxRetryInterval: 30, // Maximum retry interval in seconds
BackOffBase: 2, // Exponential backoff base
RequestTimeout: 30, // Request timeout in seconds
}
```
#### HTTP Client Configuration
Configure HTTP client:
```go
configuration := common.NewConfiguration()
// Custom HTTP client
configuration.HTTPClient = &http.Client{
Timeout: time.Second * 30,
Transport: &http.Transport{
MaxIdleConns: 10,
MaxIdleConnsPerHost: 10,
IdleConnTimeout: 30 * time.Second,
},
}
// Skip TLS verification (not recommended for production)
ctx := context.WithValue(
context.Background(),
common.ContextInsecureSkipVerify,
true,
)
```
#### User Agent
Configure custom user agent:
```go
configuration := common.NewConfiguration()
configuration.UserAgent = "MyApp/1.0.0"
```
#### Default Headers
Add default headers to all requests:
```go
configuration := common.NewConfiguration()
configuration.AddDefaultHeader("Custom-Header", "value")
```
## Development
### Generate API Client
To regenerate the API client code:
```bash
./generate.sh
```
## Contributing
We welcome contributions! Please feel free to submit a Pull Request.
## Acknowledgments
This project's generator is inspired by and built upon the work from [Datadog's API client generator](https://github.com/DataDog/datadog-api-client-go). We are grateful to Datadog for their excellent work and open source contributions.
## License
This library is distributed under the Apache 2.0 license found in the [LICENSE](./LICENSE) file.