diff --git a/.stats.yml b/.stats.yml
index b9a817c..53aaa4e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,2 +1,2 @@
-configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-6aab21baffe1788ef3489dedfb817e9425a87edc3955e0b9cf720cca4302d7a3.yml
+configured_endpoints: 20
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-2b25d79eca57a37c23952533aa8514885103b3c8af056890c68291262b0c5d5c.yml
diff --git a/api.md b/api.md
index e72e6d1..afcb9ec 100644
--- a/api.md
+++ b/api.md
@@ -18,6 +18,7 @@ Params Types:
Response Types:
- vms.CPU
+- vms.OsImage
- vms.Ram
- vms.VM
- vms.VMList
@@ -32,6 +33,10 @@ Methods:
## OsImages
+Methods:
+
+- client.VMs.OsImages.List(ctx context.Context) ([]vms.OsImage, error)
+
# VPCs
Response Types:
diff --git a/vms/osimage.go b/vms/osimage.go
index 7ab1852..20575d7 100644
--- a/vms/osimage.go
+++ b/vms/osimage.go
@@ -3,6 +3,10 @@
package vms
import (
+ "context"
+ "net/http"
+
+ "github.com/nirvana-labs/nirvana-go/internal/requestconfig"
"github.com/nirvana-labs/nirvana-go/option"
)
@@ -24,3 +28,11 @@ func NewOsImageService(opts ...option.RequestOption) (r *OsImageService) {
r.Options = opts
return
}
+
+// List all OS Images
+func (r *OsImageService) List(ctx context.Context, opts ...option.RequestOption) (res *[]OsImage, err error) {
+ opts = append(r.Options[:], opts...)
+ path := "vms/os_images"
+ err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
+ return
+}
diff --git a/vms/osimage_test.go b/vms/osimage_test.go
new file mode 100644
index 0000000..1ec89f9
--- /dev/null
+++ b/vms/osimage_test.go
@@ -0,0 +1,36 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+package vms_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"
+)
+
+func TestOsImageList(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.VMs.OsImages.List(context.TODO())
+ 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())
+ }
+}
diff --git a/vms/vm.go b/vms/vm.go
index bcb5270..1bf94af 100644
--- a/vms/vm.go
+++ b/vms/vm.go
@@ -121,6 +121,30 @@ func (r CPUParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
+type OsImage struct {
+ CreatedAt string `json:"created_at,required"`
+ DisplayName string `json:"display_name,required"`
+ Name string `json:"name,required"`
+ JSON osImageJSON `json:"-"`
+}
+
+// osImageJSON contains the JSON metadata for the struct [OsImage]
+type osImageJSON struct {
+ CreatedAt apijson.Field
+ DisplayName apijson.Field
+ Name apijson.Field
+ raw string
+ ExtraFields map[string]apijson.Field
+}
+
+func (r *OsImage) UnmarshalJSON(data []byte) (err error) {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+func (r osImageJSON) RawJSON() string {
+ return r.raw
+}
+
// RAM details.
type Ram struct {
// RAM size