From 43b73bf18f90869fb9da769a9c47deae9b3c9cdc Mon Sep 17 00:00:00 2001 From: Anouar Aissaoui Date: Sat, 26 Nov 2022 00:55:52 +0100 Subject: [PATCH 1/5] docs(durable-objects): add durable objects to examples --- examples/resources/cloudflare_worker_script/resource.tf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/resources/cloudflare_worker_script/resource.tf b/examples/resources/cloudflare_worker_script/resource.tf index e0722129a8..3d3a7531a4 100644 --- a/examples/resources/cloudflare_worker_script/resource.tf +++ b/examples/resources/cloudflare_worker_script/resource.tf @@ -37,4 +37,9 @@ resource "cloudflare_worker_script" "my_script" { name = "MY_BUCKET" bucket_name = "MY_BUCKET_NAME" } + + durable_object_binding { + name = "MY_DURABLE_OBJECT" + class_name = "MyDurableObject" + } } From 9569f6771f532ec0fbc70aea3f739438d873442e Mon Sep 17 00:00:00 2001 From: Anouar Aissaoui Date: Sat, 26 Nov 2022 03:14:39 +0100 Subject: [PATCH 2/5] test(durable-objects): add test for durable object binding --- examples/resources/cloudflare_worker_script/resource.tf | 2 +- .../provider/resource_cloudflare_workers_script_test.go | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/resources/cloudflare_worker_script/resource.tf b/examples/resources/cloudflare_worker_script/resource.tf index 3d3a7531a4..db9bc5332f 100644 --- a/examples/resources/cloudflare_worker_script/resource.tf +++ b/examples/resources/cloudflare_worker_script/resource.tf @@ -40,6 +40,6 @@ resource "cloudflare_worker_script" "my_script" { durable_object_binding { name = "MY_DURABLE_OBJECT" - class_name = "MyDurableObject" + class_name = "DurableObjectExample" } } diff --git a/internal/provider/resource_cloudflare_workers_script_test.go b/internal/provider/resource_cloudflare_workers_script_test.go index c5874f8c58..e4b14d6887 100644 --- a/internal/provider/resource_cloudflare_workers_script_test.go +++ b/internal/provider/resource_cloudflare_workers_script_test.go @@ -14,6 +14,7 @@ import ( const ( scriptContent1 = `addEventListener('fetch', event => {event.respondWith(new Response('test 1'))});` scriptContent2 = `addEventListener('fetch', event => {event.respondWith(new Response('test 2'))});` + scriptContent3 = `export class DurableObjectExample {constructor(state, env) {} async fetch(request) {return new Response("Hello World");}}` moduleContent = `export default { fetch() { return new Response('Hello world'); }, };` encodedWasm = "AGFzbQEAAAAGgYCAgAAA" // wat source: `(module)`, so literally just an empty wasm module ) @@ -166,7 +167,12 @@ resource "cloudflare_worker_script" "%[1]s" { service = cloudflare_worker_script.%[1]s-service.name environment = "production" } -}`, rnd, scriptContent2, encodedWasm) + + durable_object_binding { + name = "MY_DURABLE_OBJECT" + class_name = "MyDurableObject" + } +}`, rnd, scriptContent3, encodedWasm) } func testAccCheckCloudflareWorkerScriptUploadModule(rnd string) string { From cc4794d5ec87451b250bcbef013051de1b5d13b2 Mon Sep 17 00:00:00 2001 From: Anouar Aissaoui Date: Sat, 26 Nov 2022 03:15:29 +0100 Subject: [PATCH 3/5] feat(durable-objects): add binding capability to worker script --- internal/provider/resource_cloudflare_workers_script.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/provider/resource_cloudflare_workers_script.go b/internal/provider/resource_cloudflare_workers_script.go index 4e77608a8e..4277862c90 100644 --- a/internal/provider/resource_cloudflare_workers_script.go +++ b/internal/provider/resource_cloudflare_workers_script.go @@ -112,6 +112,14 @@ func parseWorkerBindings(d *schema.ResourceData, bindings ScriptBindings) { BucketName: data["bucket_name"].(string), } } + + for _, rawData := range d.Get("durable_object_binding").(*schema.Set).List() { + data := rawData.(map[string]interface{}) + bindings[data["name"].(string)] = cloudflare.WorkerDurableObjectBinding{ + ScriptName: d.Get("name").(string), + ClassName: data["class_name"].(string), + } + } } func resourceCloudflareWorkerScriptCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { From e4b9394770804087555d1dd440b6c8fb17638112 Mon Sep 17 00:00:00 2001 From: Anouar Aissaoui Date: Sat, 26 Nov 2022 03:27:29 +0100 Subject: [PATCH 4/5] chore(durable-objects): add changelog entry --- .changelog/2059.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/2059.txt diff --git a/.changelog/2059.txt b/.changelog/2059.txt new file mode 100644 index 0000000000..5217aba6dc --- /dev/null +++ b/.changelog/2059.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/cloudflare_worker_script: add support for durable objects bindings +``` From d6aae7436f5121daedc4e327a7b92e6318be871f Mon Sep 17 00:00:00 2001 From: Anouar Aissaoui Date: Mon, 28 Nov 2022 09:53:40 +0100 Subject: [PATCH 5/5] fix(durable-objects): correct mismatch on tests and examples --- examples/resources/cloudflare_worker_script/resource.tf | 2 +- internal/provider/resource_cloudflare_workers_script_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/resources/cloudflare_worker_script/resource.tf b/examples/resources/cloudflare_worker_script/resource.tf index db9bc5332f..3d3a7531a4 100644 --- a/examples/resources/cloudflare_worker_script/resource.tf +++ b/examples/resources/cloudflare_worker_script/resource.tf @@ -40,6 +40,6 @@ resource "cloudflare_worker_script" "my_script" { durable_object_binding { name = "MY_DURABLE_OBJECT" - class_name = "DurableObjectExample" + class_name = "MyDurableObject" } } diff --git a/internal/provider/resource_cloudflare_workers_script_test.go b/internal/provider/resource_cloudflare_workers_script_test.go index e4b14d6887..ae48e2861e 100644 --- a/internal/provider/resource_cloudflare_workers_script_test.go +++ b/internal/provider/resource_cloudflare_workers_script_test.go @@ -14,7 +14,7 @@ import ( const ( scriptContent1 = `addEventListener('fetch', event => {event.respondWith(new Response('test 1'))});` scriptContent2 = `addEventListener('fetch', event => {event.respondWith(new Response('test 2'))});` - scriptContent3 = `export class DurableObjectExample {constructor(state, env) {} async fetch(request) {return new Response("Hello World");}}` + scriptContent3 = `export class MyDurableObject {constructor(state, env) {} async fetch(request) {return new Response("Hello World");}}` moduleContent = `export default { fetch() { return new Response('Hello world'); }, };` encodedWasm = "AGFzbQEAAAAGgYCAgAAA" // wat source: `(module)`, so literally just an empty wasm module )