From 728bf709cf8f623936ad0376ce924ab9b936924d Mon Sep 17 00:00:00 2001 From: ManInDark <61268856+ManInDark@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:24:43 +0100 Subject: [PATCH] feat: add onboot --- proxmox.go | 8 ++++++++ proxmox_test.go | 13 +++++++++---- schema/pkl/proxmox.pkl | 3 +++ testdata/resource-update.pkl | 1 + types.go | 2 ++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/proxmox.go b/proxmox.go index fc2bfb8..b7287df 100644 --- a/proxmox.go +++ b/proxmox.go @@ -131,6 +131,9 @@ func (p *Plugin) Create(ctx context.Context, req *resource.CreateRequest) (*reso if props.Description != "" { urlparams.Add("description", props.Description) } + if props.OnBoot != 0 { + urlparams.Add("onboot", strconv.Itoa(props.OnBoot)) + } _, err = authenticatedRequest(http.MethodPost, config.URL+"/api2/json/nodes/"+config.NODE+"/lxc", createAuthorizationString(username, token), urlparams) @@ -178,6 +181,7 @@ func (p *Plugin) Read(ctx context.Context, req *resource.ReadRequest) (*resource err = json.Unmarshal(data, &props) if err != nil { + log.Println("Error unmarshaling json: ", data) return &resource.ReadResult{ ErrorCode: resource.OperationErrorCodeInvalidRequest, }, err @@ -191,6 +195,7 @@ func (p *Plugin) Read(ctx context.Context, req *resource.ReadRequest) (*resource Description: lxcdata.Description, Cores: lxcdata.Cores, Memory: lxcdata.Memory, + OnBoot: lxcdata.OnBoot, } propsJSON, err := json.Marshal(properties) @@ -284,6 +289,9 @@ func (p *Plugin) Update(ctx context.Context, req *resource.UpdateRequest) (*reso "memory": {strconv.Itoa(desir.Memory)}, "description": {desir.Description}, } + if prior.OnBoot != desir.OnBoot { + urlparams.Add("onboot", strconv.Itoa(desir.OnBoot)) + } _, err = authenticatedRequest("PUT", config.URL+"/api2/json/nodes/"+config.NODE+"/lxc/"+desir.VMID+"/config", createAuthorizationString(username, token), urlparams) diff --git a/proxmox_test.go b/proxmox_test.go index 11ee157..1c155c1 100644 --- a/proxmox_test.go +++ b/proxmox_test.go @@ -78,7 +78,7 @@ func TestRead(t *testing.T) { plugin := &Plugin{} req := &resource.ReadRequest{ - NativeID: strconv.Itoa(120), + NativeID: strconv.Itoa(200), ResourceType: "PROXMOX::Service::LXC", TargetConfig: testTargetConfig(), } @@ -95,12 +95,14 @@ func TestRead(t *testing.T) { require.NoError(t, err, "json should be parsable") require.NoError(t, err, "Properties should be valid JSON") - require.Equal(t, "ntfy", props["hostname"], "hostname should match") - require.Equal(t, strconv.Itoa(120), props["vmid"], "vmid should match") + require.Equal(t, "testlxc", props["hostname"], "hostname should match") + require.Equal(t, strconv.Itoa(200), props["vmid"], "vmid should match") const core_num float64 = 1 require.Equal(t, core_num, props["cores"], "cores should match") - const mem_num float64 = 192 + const mem_num float64 = 512 require.Equal(t, mem_num, props["memory"], "memory should match") + const onboot float64 = 0 + require.Equal(t, onboot, props["onboot"], "memory should match") } func TestUpdate(t *testing.T) { @@ -123,6 +125,7 @@ func TestUpdate(t *testing.T) { "ostemplate": "local:vztmpl/alpine-3.22-default_20250617_amd64.tar.xz", "cores": 2, "memory": 1024, + "onboot": 1, }) req := &resource.UpdateRequest{ @@ -153,6 +156,8 @@ func TestUpdate(t *testing.T) { require.Equal(t, core_num, props["cores"], "cores should have changed") const mem_num float64 = 1024 require.Equal(t, mem_num, props["memory"], "memory should have changed") + const onboot float64 = 1 + require.Equal(t, onboot, props["onboot"], "onboot should have changed") } func TestList(t *testing.T) { diff --git a/schema/pkl/proxmox.pkl b/schema/pkl/proxmox.pkl index 0636082..4230efb 100644 --- a/schema/pkl/proxmox.pkl +++ b/schema/pkl/proxmox.pkl @@ -40,4 +40,7 @@ class LXC extends formae.Resource { @formae.FieldHint {} memory: Int + @formae.FieldHint {} + onboot: Int = 0 + } diff --git a/testdata/resource-update.pkl b/testdata/resource-update.pkl index ec05247..28f5303 100644 --- a/testdata/resource-update.pkl +++ b/testdata/resource-update.pkl @@ -33,5 +33,6 @@ forma { ostemplate = "local:vztmpl/alpine-3.22-default_20250617_amd64.tar.xz" cores = 2 memory = 1024 + onboot = 1 } } diff --git a/types.go b/types.go index b106a2b..58dcde6 100644 --- a/types.go +++ b/types.go @@ -14,6 +14,7 @@ type LXCProperties struct { OSTemplate string `json:"ostemplate,omitempty"` Cores int `json:"cores"` Memory int `json:"memory"` + OnBoot int `json:"onboot"` } type ReadRequest struct { @@ -71,6 +72,7 @@ type StatusLXCConfig struct { Swap int `json:"swap"` Description string `json:"description"` Digest string `json:"digest"` + OnBoot int `json:"onboot"` } type StatusLXCConfigResponse struct {