feat: Add backend API support for resource metadata (#3242)

* Initial support for metadata in provisioner API and Terraform provisioner

* add support for nullable metadata fields

* handle metadata fields in provisionerd and API
This commit is contained in:
David Wahler
2022-08-01 16:53:05 -05:00
committed by GitHub
parent 877519232c
commit 8a2811210a
24 changed files with 1231 additions and 214 deletions
@@ -0,0 +1,35 @@
terraform {
required_providers {
coder = {
source = "coder/coder"
version = "0.4.4"
}
}
}
resource "coder_agent" "main" {
os = "linux"
arch = "amd64"
}
resource "null_resource" "about" {}
resource "coder_metadata" "about_info" {
resource_id = null_resource.about.id
item {
key = "hello"
value = "world"
}
item {
key = "null"
}
item {
key = "empty"
value = ""
}
item {
key = "secret"
value = "squirrel"
sensitive = true
}
}
@@ -0,0 +1,21 @@
digraph {
compound = "true"
newrank = "true"
subgraph "root" {
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
"[root] coder_metadata.about_info (expand)" [label = "coder_metadata.about_info", shape = "box"]
"[root] null_resource.about (expand)" [label = "null_resource.about", shape = "box"]
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
"[root] provider[\"registry.terraform.io/hashicorp/null\"]" [label = "provider[\"registry.terraform.io/hashicorp/null\"]", shape = "diamond"]
"[root] coder_agent.main (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] coder_metadata.about_info (expand)" -> "[root] null_resource.about (expand)"
"[root] coder_metadata.about_info (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] null_resource.about (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"]"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_agent.main (expand)"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_metadata.about_info (expand)"
"[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)" -> "[root] null_resource.about (expand)"
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -0,0 +1,293 @@
{
"format_version": "1.1",
"terraform_version": "1.2.6",
"planned_values": {
"root_module": {
"resources": [
{
"address": "coder_agent.main",
"mode": "managed",
"type": "coder_agent",
"name": "main",
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"arch": "amd64",
"auth": "token",
"dir": null,
"env": null,
"os": "linux",
"startup_script": null
},
"sensitive_values": {}
},
{
"address": "coder_metadata.about_info",
"mode": "managed",
"type": "coder_metadata",
"name": "about_info",
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"item": [
{
"key": "hello",
"sensitive": false,
"value": "world"
},
{
"key": "null",
"sensitive": false,
"value": null
},
{
"key": "empty",
"sensitive": false,
"value": ""
},
{
"key": "secret",
"sensitive": true,
"value": "squirrel"
}
]
},
"sensitive_values": {
"item": [
{},
{},
{},
{}
]
}
},
{
"address": "null_resource.about",
"mode": "managed",
"type": "null_resource",
"name": "about",
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"triggers": null
},
"sensitive_values": {}
}
]
}
},
"resource_changes": [
{
"address": "coder_agent.main",
"mode": "managed",
"type": "coder_agent",
"name": "main",
"provider_name": "registry.terraform.io/coder/coder",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"arch": "amd64",
"auth": "token",
"dir": null,
"env": null,
"os": "linux",
"startup_script": null
},
"after_unknown": {
"id": true,
"init_script": true,
"token": true
},
"before_sensitive": false,
"after_sensitive": {}
}
},
{
"address": "coder_metadata.about_info",
"mode": "managed",
"type": "coder_metadata",
"name": "about_info",
"provider_name": "registry.terraform.io/coder/coder",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"item": [
{
"key": "hello",
"sensitive": false,
"value": "world"
},
{
"key": "null",
"sensitive": false,
"value": null
},
{
"key": "empty",
"sensitive": false,
"value": ""
},
{
"key": "secret",
"sensitive": true,
"value": "squirrel"
}
]
},
"after_unknown": {
"id": true,
"item": [
{
"is_null": true
},
{
"is_null": true
},
{
"is_null": true
},
{
"is_null": true
}
],
"resource_id": true
},
"before_sensitive": false,
"after_sensitive": {
"item": [
{},
{},
{},
{}
]
}
}
},
{
"address": "null_resource.about",
"mode": "managed",
"type": "null_resource",
"name": "about",
"provider_name": "registry.terraform.io/hashicorp/null",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"triggers": null
},
"after_unknown": {
"id": true
},
"before_sensitive": false,
"after_sensitive": {}
}
}
],
"configuration": {
"provider_config": {
"coder": {
"name": "coder",
"full_name": "registry.terraform.io/coder/coder",
"version_constraint": "0.4.4"
},
"null": {
"name": "null",
"full_name": "registry.terraform.io/hashicorp/null"
}
},
"root_module": {
"resources": [
{
"address": "coder_agent.main",
"mode": "managed",
"type": "coder_agent",
"name": "main",
"provider_config_key": "coder",
"expressions": {
"arch": {
"constant_value": "amd64"
},
"os": {
"constant_value": "linux"
}
},
"schema_version": 0
},
{
"address": "coder_metadata.about_info",
"mode": "managed",
"type": "coder_metadata",
"name": "about_info",
"provider_config_key": "coder",
"expressions": {
"item": [
{
"key": {
"constant_value": "hello"
},
"value": {
"constant_value": "world"
}
},
{
"key": {
"constant_value": "null"
}
},
{
"key": {
"constant_value": "empty"
},
"value": {
"constant_value": ""
}
},
{
"key": {
"constant_value": "secret"
},
"sensitive": {
"constant_value": true
},
"value": {
"constant_value": "squirrel"
}
}
],
"resource_id": {
"references": [
"null_resource.about.id",
"null_resource.about"
]
}
},
"schema_version": 0
},
{
"address": "null_resource.about",
"mode": "managed",
"type": "null_resource",
"name": "about",
"provider_config_key": "null",
"schema_version": 0
}
]
}
},
"relevant_attributes": [
{
"resource": "null_resource.about",
"attribute": [
"id"
]
}
]
}
@@ -0,0 +1,21 @@
digraph {
compound = "true"
newrank = "true"
subgraph "root" {
"[root] coder_agent.main (expand)" [label = "coder_agent.main", shape = "box"]
"[root] coder_metadata.about_info (expand)" [label = "coder_metadata.about_info", shape = "box"]
"[root] null_resource.about (expand)" [label = "null_resource.about", shape = "box"]
"[root] provider[\"registry.terraform.io/coder/coder\"]" [label = "provider[\"registry.terraform.io/coder/coder\"]", shape = "diamond"]
"[root] provider[\"registry.terraform.io/hashicorp/null\"]" [label = "provider[\"registry.terraform.io/hashicorp/null\"]", shape = "diamond"]
"[root] coder_agent.main (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] coder_metadata.about_info (expand)" -> "[root] null_resource.about (expand)"
"[root] coder_metadata.about_info (expand)" -> "[root] provider[\"registry.terraform.io/coder/coder\"]"
"[root] null_resource.about (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"]"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_agent.main (expand)"
"[root] provider[\"registry.terraform.io/coder/coder\"] (close)" -> "[root] coder_metadata.about_info (expand)"
"[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)" -> "[root] null_resource.about (expand)"
"[root] root" -> "[root] provider[\"registry.terraform.io/coder/coder\"] (close)"
"[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/null\"] (close)"
}
}
@@ -0,0 +1,92 @@
{
"format_version": "1.0",
"terraform_version": "1.2.6",
"values": {
"root_module": {
"resources": [
{
"address": "coder_agent.main",
"mode": "managed",
"type": "coder_agent",
"name": "main",
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"arch": "amd64",
"auth": "token",
"dir": null,
"env": null,
"id": "33d1fa51-2987-43da-8f07-53131af520f2",
"init_script": "",
"os": "linux",
"startup_script": null,
"token": "5acee40a-6f4f-4e38-92a8-98b057d4945f"
},
"sensitive_values": {}
},
{
"address": "coder_metadata.about_info",
"mode": "managed",
"type": "coder_metadata",
"name": "about_info",
"provider_name": "registry.terraform.io/coder/coder",
"schema_version": 0,
"values": {
"id": "5b828eb0-938f-4fba-8599-701dce975627",
"item": [
{
"is_null": false,
"key": "hello",
"sensitive": false,
"value": "world"
},
{
"is_null": true,
"key": "null",
"sensitive": false,
"value": ""
},
{
"is_null": false,
"key": "empty",
"sensitive": false,
"value": ""
},
{
"is_null": false,
"key": "secret",
"sensitive": true,
"value": "squirrel"
}
],
"resource_id": "6511007151682544728"
},
"sensitive_values": {
"item": [
{},
{},
{},
{}
]
},
"depends_on": [
"null_resource.about"
]
},
{
"address": "null_resource.about",
"mode": "managed",
"type": "null_resource",
"name": "about",
"provider_name": "registry.terraform.io/hashicorp/null",
"schema_version": 0,
"values": {
"id": "6511007151682544728",
"triggers": null
},
"sensitive_values": {}
}
]
}
}
}