diff --git a/examples/basic/main.pkl b/examples/basic/main.pkl index f4ddbff..ef59bcd 100644 --- a/examples/basic/main.pkl +++ b/examples/basic/main.pkl @@ -11,12 +11,10 @@ import "@proxmox/proxmox.pkl" forma { new formae.Stack { - label = "default" description = "Default stack for example resources" } new formae.Target { - label = "my-target" namespace = "PROXMOX" // Add your provider-specific configuration here // For typed config, create a Config class in your schema: @@ -27,7 +25,6 @@ forma { } new example.ExampleResource { - label = "my-resource" name = "My Example Resource" description = "This is an example resource" region = "us-east-1" diff --git a/proxmox.go b/proxmox.go index df43183..959dbc5 100644 --- a/proxmox.go +++ b/proxmox.go @@ -67,7 +67,7 @@ func (p *Plugin) LabelConfig() plugin.LabelConfig { return plugin.LabelConfig{ // Default JSONPath query to extract label from resources // Example for tagged resources: $.Tags[?(@.Key=='Name')].Value - DefaultQuery: "$.name", + DefaultQuery: "$.hostname", // Override for specific resource types ResourceOverrides: map[string]string{ @@ -256,7 +256,6 @@ func (p *Plugin) Update(ctx context.Context, req *resource.UpdateRequest) (*reso if prior == nil { p.Create(ctx, &resource.CreateRequest{ ResourceType: req.ResourceType, - Label: req.Label, Properties: req.DesiredProperties, TargetConfig: req.TargetConfig, }) diff --git a/proxmox_test.go b/proxmox_test.go index 0a7972a..cb564bf 100644 --- a/proxmox_test.go +++ b/proxmox_test.go @@ -4,8 +4,10 @@ import ( "context" "encoding/json" "io" + "log" "net/http" "strconv" + "strings" "testing" "time" @@ -39,7 +41,6 @@ func TestCreate(t *testing.T) { req := &resource.CreateRequest{ ResourceType: "PROXMOX::Service::LXC", - Label: "test-create", Properties: propertiesJSON, TargetConfig: testTargetConfig(), } @@ -163,6 +164,8 @@ func TestList(t *testing.T) { }) require.NoError(t, err, "ListRequest should not return an error") + log.Printf("Received Ids: %s", strings.Join(result.NativeIDs, ", ")) + require.Contains(t, result.NativeIDs, "200", "List should include created LXC") } diff --git a/schema/pkl/proxmox.pkl b/schema/pkl/proxmox.pkl index f4108f4..f782ba1 100644 --- a/schema/pkl/proxmox.pkl +++ b/schema/pkl/proxmox.pkl @@ -6,7 +6,7 @@ import "@formae/formae.pkl" type = "PROXMOX::Service::LXC" identifier = "$.vmid" } -class ExampleResource extends formae.Resource { +class LXC extends formae.Resource { fixed hidden type: String = "PROXMOX::Service::LXC" @formae.FieldHint { createOnly = true } @@ -16,7 +16,7 @@ class ExampleResource extends formae.Resource { ostemplate: String @formae.FieldHint {} - name: String + hostname: String @formae.FieldHint {} description: String = "No description" diff --git a/testdata/PklProject b/testdata/PklProject index cb1abbc..3f5c785 100644 --- a/testdata/PklProject +++ b/testdata/PklProject @@ -7,6 +7,6 @@ dependencies { // Formae schema - fetched from public registry ["formae"] { - uri = "package://hub.platform.engineering/plugins/pkl/schema/pkl/formae/formae@0.80.0" + uri = "package://hub.platform.engineering/plugins/pkl/schema/pkl/formae/formae@0.80.1" } } diff --git a/testdata/resource-replace.pkl b/testdata/resource-replace.pkl index 9c86c32..7adfdda 100644 --- a/testdata/resource-replace.pkl +++ b/testdata/resource-replace.pkl @@ -1,50 +1,35 @@ /* - * Conformance Test: Replace Resource + * Conformance Test: Create Resource * - * This file modifies a createOnly field to trigger resource replacement. - * Changes from resource.pkl: - * - region: changed from "us-east-1" to "us-west-2" - * - * The region field has createOnly=true, so formae should delete the - * existing resource and create a new one with the new region. + * This file defines the initial resource state for conformance testing. + * The conformance test harness will apply this file first. */ amends "@formae/forma.pkl" import "@formae/formae.pkl" import "@proxmox/proxmox.pkl" -local stackName = "plugin-sdk-test-stack" local testRunID = read("env:FORMAE_TEST_RUN_ID") +local stackName = "conformance-test-\(testRunID)" forma { new formae.Stack { label = stackName - description = "Plugin SDK conformance test stack" } new formae.Target { - label = "example-target" - namespace = "PROXMOX" - config = new Mapping { - ["region"] = "us-west-2" // CHANGED to match resource + label = "target" + config = new proxmox.Config { + url: "https://proxmox.mid:8006" + node: proxmox } } - new example.ExampleResource { - label = "plugin-sdk-test-resource" - name = "formae-plugin-sdk-test-\(testRunID)" - description = "Test resource for plugin SDK conformance tests" - region = "us-west-2" // CHANGED - triggers replacement - - endpoint = new example.Endpoint { - url = "https://api.example.com" - port = 8080 - protocol = "https" - } - - tags = new Listing { - new example.Tag { key = "Environment"; value = "test" } - new example.Tag { key = "ManagedBy"; value = "formae" } - } + new proxmox.LXC { + label = "test-lxc" + vmid = "220" + hostname = "test-lxc" + description = "some other description" + ostemplate = "local:vztmpl/alpine-3.22-default_20250617_amd64.tar.xz" } } diff --git a/testdata/resource-update.pkl b/testdata/resource-update.pkl index d5e5083..9290ffa 100644 --- a/testdata/resource-update.pkl +++ b/testdata/resource-update.pkl @@ -1,54 +1,35 @@ /* - * Conformance Test: Update Resource (in-place) + * Conformance Test: Create Resource * - * This file modifies mutable fields to trigger an in-place update. - * Changes from resource.pkl: - * - name: added "-updated" suffix - * - description: changed text - * - endpoint.port: changed from 8080 to 9090 - * - tags: added a new tag - * - * These fields do NOT have createOnly=true, so formae should update - * the resource in place without replacement. + * This file defines the initial resource state for conformance testing. + * The conformance test harness will apply this file first. */ amends "@formae/forma.pkl" import "@formae/formae.pkl" import "@proxmox/proxmox.pkl" -local stackName = "plugin-sdk-test-stack" local testRunID = read("env:FORMAE_TEST_RUN_ID") +local stackName = "conformance-test-\(testRunID)" forma { new formae.Stack { label = stackName - description = "Plugin SDK conformance test stack" } new formae.Target { - label = "example-target" - namespace = "PROXMOX" - config = new Mapping { - ["region"] = "us-east-1" + label = "target" + config = new proxmox.Config { + url: "https://proxmox.mid:8006" + node: proxmox } } - new example.ExampleResource { - label = "plugin-sdk-test-resource" - name = "formae-plugin-sdk-test-\(testRunID)-updated" // CHANGED - description = "Test resource - UPDATED" // CHANGED - region = "us-east-1" // unchanged (createOnly) - - endpoint = new example.Endpoint { - url = "https://api.example.com" - port = 9090 // CHANGED from 8080 - protocol = "https" - } - - tags = new Listing { - new example.Tag { key = "Environment"; value = "test" } - new example.Tag { key = "ManagedBy"; value = "formae" } - new example.Tag { key = "UpdatedAt"; value = "conformance-test" } // ADDED - } + new proxmox.LXC { + label = "test-lxc" + vmid = "210" + hostname = "test-lxc" + description = "some other description" + ostemplate = "local:vztmpl/alpine-3.22-default_20250617_amd64.tar.xz" } } diff --git a/testdata/resource.pkl b/testdata/resource.pkl index 1b14920..f199d5c 100644 --- a/testdata/resource.pkl +++ b/testdata/resource.pkl @@ -9,41 +9,29 @@ import "@formae/formae.pkl" import "@proxmox/proxmox.pkl" -local stackName = "plugin-sdk-test-stack" -// Read the test run ID from environment variable set by the test harness -// This ensures consistent naming within a test run but unique names between runs local testRunID = read("env:FORMAE_TEST_RUN_ID") +local stackName = "conformance-test-\(testRunID)" forma { new formae.Stack { label = stackName - description = "Plugin SDK conformance test stack" + description = "" } new formae.Target { - label = "example-target" + label = "target" namespace = "PROXMOX" - // TODO: Add your provider-specific configuration config = new Mapping { - ["region"] = "us-east-1" + ["url"] = "https://proxmox.mid:8006" + ["node"] = "proxmox" } } - new example.ExampleResource { - label = "plugin-sdk-test-resource" - name = "formae-plugin-sdk-test-\(testRunID)" - description = "Test resource for plugin SDK conformance tests" - region = "us-east-1" - - endpoint = new example.Endpoint { - url = "https://api.example.com" - port = 8080 - protocol = "https" - } - - tags = new Listing { - new example.Tag { key = "Environment"; value = "test" } - new example.Tag { key = "ManagedBy"; value = "formae" } - } + new proxmox.LXC { + label = "test-lxc" + vmid = "210" + hostname = "test-lxc" + description = "no description provided" + ostemplate = "local:vztmpl/alpine-3.22-default_20250617_amd64.tar.xz" } }