Skip to content

Commit

Permalink
feat(api): api update (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
stainless-app[bot] committed Jan 23, 2025
1 parent c8a1811 commit 0274f77
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 17 deletions.
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
configured_endpoints: 17
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-901357ab068797fff926718b5f7f307dc332f52a1d494ee340352e50bc09b641.yml
configured_endpoints: 20
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-88eef6692dd2f29d0734587b0a255ce12fff9fa28b6c1d66d2b61364d2d0c311.yml
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func main() {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -202,7 +202,7 @@ _, err := client.VMs.New(context.TODO(), vms.VMNewParams{
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -248,7 +248,7 @@ client.VMs.New(
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -303,7 +303,7 @@ client.VMs.New(
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down
6 changes: 6 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ Response Types:
- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#StorageType">StorageType</a>
- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#Volume">Volume</a>

Methods:

- <code title="post /volumes">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeNewParams">VolumeNewParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /volumes/{volume_id}">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.Update">Update</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, volumeID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeUpdateParams">VolumeUpdateParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="delete /volumes/{volume_id}">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, volumeID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeDeleteParams">VolumeDeleteParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>

# Operations

Response Types:
Expand Down
16 changes: 8 additions & 8 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestUserAgentHeader(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -90,7 +90,7 @@ func TestRetryAfter(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -143,7 +143,7 @@ func TestDeleteRetryCountHeader(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -191,7 +191,7 @@ func TestOverwriteRetryCountHeader(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -238,7 +238,7 @@ func TestRetryAfterMs(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -279,7 +279,7 @@ func TestContextCancel(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -317,7 +317,7 @@ func TestContextCancelDelay(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down Expand Up @@ -361,7 +361,7 @@ func TestContextDeadline(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down
2 changes: 1 addition & 1 deletion usage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func TestUsage(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down
2 changes: 1 addition & 1 deletion vms/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ type VMNewParams struct {
CPU param.Field[CPUParam] `json:"cpu,required"`
Name param.Field[string] `json:"name,required"`
NeedPublicIP param.Field[bool] `json:"need_public_ip,required"`
OSImageID param.Field[int64] `json:"os_image_id,required"`
OSImageName param.Field[string] `json:"os_image_name,required"`
Ports param.Field[[]string] `json:"ports,required"`
// RAM details.
Ram param.Field[RamParam] `json:"ram,required"`
Expand Down
2 changes: 1 addition & 1 deletion vms/vm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func TestVMNewWithOptionalParams(t *testing.T) {
}),
Name: nirvana.F("my-vm"),
NeedPublicIP: nirvana.F(true),
OSImageID: nirvana.F(int64(1)),
OSImageName: nirvana.F("noble-2024-12-06"),
Ports: nirvana.F([]string{"22", "80", "443"}),
Ram: nirvana.F(vms.RamParam{
Size: nirvana.F(int64(2)),
Expand Down
68 changes: 68 additions & 0 deletions volumes/volume.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
package volumes

import (
"context"
"errors"
"fmt"
"net/http"

"github.com/nirvana-labs/nirvana-go/internal/apijson"
"github.com/nirvana-labs/nirvana-go/internal/param"
"github.com/nirvana-labs/nirvana-go/internal/requestconfig"
"github.com/nirvana-labs/nirvana-go/operations"
"github.com/nirvana-labs/nirvana-go/option"
)

Expand All @@ -26,6 +34,38 @@ func NewVolumeService(opts ...option.RequestOption) (r *VolumeService) {
return
}

// Create a Volume. Only data volumes can be created.
func (r *VolumeService) New(ctx context.Context, body VolumeNewParams, opts ...option.RequestOption) (res *operations.Operation, err error) {
opts = append(r.Options[:], opts...)
path := "volumes"
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}

// Update a Volume. Boot or data volumes can be updated.
func (r *VolumeService) Update(ctx context.Context, volumeID string, body VolumeUpdateParams, opts ...option.RequestOption) (res *operations.Operation, err error) {
opts = append(r.Options[:], opts...)
if volumeID == "" {
err = errors.New("missing required volume_id parameter")
return
}
path := fmt.Sprintf("volumes/%s", volumeID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPatch, path, body, &res, opts...)
return
}

// Delete a Volume. Boot or data volumes can be deleted.
func (r *VolumeService) Delete(ctx context.Context, volumeID string, body VolumeDeleteParams, opts ...option.RequestOption) (res *operations.Operation, err error) {
opts = append(r.Options[:], opts...)
if volumeID == "" {
err = errors.New("missing required volume_id parameter")
return
}
path := fmt.Sprintf("volumes/%s", volumeID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, body, &res, opts...)
return
}

// Storage type.
type StorageType string

Expand Down Expand Up @@ -66,3 +106,31 @@ func (r *Volume) UnmarshalJSON(data []byte) (err error) {
func (r volumeJSON) RawJSON() string {
return r.raw
}

type VolumeNewParams struct {
Size param.Field[int64] `json:"size,required"`
VMID param.Field[string] `json:"vm_id,required"`
// Storage type.
Type param.Field[StorageType] `json:"type"`
}

func (r VolumeNewParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}

type VolumeUpdateParams struct {
Size param.Field[int64] `json:"size,required"`
VMID param.Field[string] `json:"vm_id,required"`
}

func (r VolumeUpdateParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}

type VolumeDeleteParams struct {
VMID param.Field[string] `json:"vm_id,required"`
}

func (r VolumeDeleteParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
98 changes: 98 additions & 0 deletions volumes/volume_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

package volumes_test

import (
"context"
"errors"
"os"
"testing"

"github.com/nirvana-labs/nirvana-go"
"github.com/nirvana-labs/nirvana-go/internal/testutil"
"github.com/nirvana-labs/nirvana-go/option"
"github.com/nirvana-labs/nirvana-go/volumes"
)

func TestVolumeNewWithOptionalParams(t *testing.T) {
baseURL := "http://localhost:4010"
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
baseURL = envURL
}
if !testutil.CheckTestServer(t, baseURL) {
return
}
client := nirvana.NewClient(
option.WithBaseURL(baseURL),
option.WithAuthToken("My Auth Token"),
)
_, err := client.Volumes.New(context.TODO(), volumes.VolumeNewParams{
Size: nirvana.F(int64(100)),
VMID: nirvana.F("vm_id"),
Type: nirvana.F(volumes.StorageTypeNvme),
})
if err != nil {
var apierr *nirvana.Error
if errors.As(err, &apierr) {
t.Log(string(apierr.DumpRequest(true)))
}
t.Fatalf("err should be nil: %s", err.Error())
}
}

func TestVolumeUpdate(t *testing.T) {
baseURL := "http://localhost:4010"
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
baseURL = envURL
}
if !testutil.CheckTestServer(t, baseURL) {
return
}
client := nirvana.NewClient(
option.WithBaseURL(baseURL),
option.WithAuthToken("My Auth Token"),
)
_, err := client.Volumes.Update(
context.TODO(),
"volume_id",
volumes.VolumeUpdateParams{
Size: nirvana.F(int64(100)),
VMID: nirvana.F("vm_id"),
},
)
if err != nil {
var apierr *nirvana.Error
if errors.As(err, &apierr) {
t.Log(string(apierr.DumpRequest(true)))
}
t.Fatalf("err should be nil: %s", err.Error())
}
}

func TestVolumeDelete(t *testing.T) {
baseURL := "http://localhost:4010"
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
baseURL = envURL
}
if !testutil.CheckTestServer(t, baseURL) {
return
}
client := nirvana.NewClient(
option.WithBaseURL(baseURL),
option.WithAuthToken("My Auth Token"),
)
_, err := client.Volumes.Delete(
context.TODO(),
"volume_id",
volumes.VolumeDeleteParams{
VMID: nirvana.F("vm_id"),
},
)
if err != nil {
var apierr *nirvana.Error
if errors.As(err, &apierr) {
t.Log(string(apierr.DumpRequest(true)))
}
t.Fatalf("err should be nil: %s", err.Error())
}
}

0 comments on commit 0274f77

Please sign in to comment.