Skip to content

Commit

Permalink
feat: add coder_script
Browse files Browse the repository at this point in the history
See coder/coder#9287

I decided to drop the `agent` portion from the name. It seemed inconsistent
with `coder_app`.
  • Loading branch information
kylecarbs committed Sep 7, 2023
1 parent f0da725 commit 8eae93d
Show file tree
Hide file tree
Showing 11 changed files with 125 additions and 16 deletions.
2 changes: 0 additions & 2 deletions docs/data-sources/git_auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,3 @@ EOF
### Read-Only

- `access_token` (String) The access token returned by the git authentication provider. This can be used to pre-authenticate command-line tools.


2 changes: 0 additions & 2 deletions docs/data-sources/parameter.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,3 @@ Optional:
- `min` (Number) The minimum of a number parameter.
- `monotonic` (String) Number monotonicity, either increasing or decreasing.
- `regex` (String) A regex for the input parameter to match against.


2 changes: 0 additions & 2 deletions docs/data-sources/provisioner.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,3 @@ Use this data source to get information about the Coder provisioner.
- `arch` (String) The architecture of the host. This exposes `runtime.GOARCH` (see https://pkg.go.dev/runtime#pkg-constants).
- `id` (String) The ID of this resource.
- `os` (String) The operating system of the host. This exposes `runtime.GOOS` (see https://pkg.go.dev/runtime#pkg-constants).


2 changes: 0 additions & 2 deletions docs/data-sources/workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,3 @@ resource "kubernetes_pod" "dev" {
- `owner_oidc_access_token` (String) A valid OpenID Connect access token of the workspace owner. This is only available if the workspace owner authenticated with OpenID Connect. If a valid token cannot be obtained, this value will be an empty string.
- `start_count` (Number) A computed count based on "transition" state. If "start", count will equal 1.
- `transition` (String) Either "start" or "stop". Use this to start/stop resources with "count".


2 changes: 0 additions & 2 deletions docs/resources/agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,3 @@ resource "kubernetes_pod" "dev" {
- `id` (String) The ID of this resource.
- `init_script` (String) Run this script on startup of an instance to initialize the agent.
- `token` (String, Sensitive) Set the environment variable "CODER_AGENT_TOKEN" with this token to authenticate an agent.


2 changes: 0 additions & 2 deletions docs/resources/agent_instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,3 @@ resource "coder_agent_instance" "dev" {
### Read-Only

- `id` (String) The ID of this resource.


2 changes: 0 additions & 2 deletions docs/resources/app.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,3 @@ Required:
- `interval` (Number) Duration in seconds to wait between healthcheck requests.
- `threshold` (Number) Number of consecutive heathcheck failures before returning an unhealthy status.
- `url` (String) HTTP address used determine the application readiness. A successful health check is a HTTP response code less than 500 returned before healthcheck.interval seconds.


2 changes: 0 additions & 2 deletions docs/resources/metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,3 @@ Optional:
Read-Only:

- `is_null` (Boolean)


33 changes: 33 additions & 0 deletions docs/resources/script.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "coder_script Resource - terraform-provider-coder"
subcategory: ""
description: |-
Use this resource to run a script from an agent.
---

# coder_script (Resource)

Use this resource to run a script from an agent.



<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `agent_id` (String) The "id" property of a "coder_agent" resource to associate with.
- `script` (String) The script to run.

### Optional

- `login_before_ready` (Boolean) This option defines whether or not the user can (by default) login to the workspace before it is ready. Ready means that e.g. the script is done and has exited. When enabled, users may see an incomplete workspace when logging in.
- `run_on_start` (Boolean) This option defines whether or not the script should run when the agent starts.
- `run_on_stop` (Boolean) This option defines whether or not the script should run when the agent stops.
- `schedule` (String) The schedule to run the script on. This is a cron expression.
- `timeout` (Number) Time in seconds until the agent lifecycle status is marked as timed out, this happens when the script has not completed (exited) in the given time.

### Read-Only

- `id` (String) The ID of this resource.
1 change: 1 addition & 0 deletions provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ func New() *schema.Provider {
"coder_agent_instance": agentInstanceResource(),
"coder_app": appResource(),
"coder_metadata": metadataResource(),
"coder_script": scriptResource(),
},
}
}
Expand Down
91 changes: 91 additions & 0 deletions provider/script.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package provider

import (
"context"

"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

func scriptResource() *schema.Resource {
return &schema.Resource{
Description: "Use this resource to run a script from an agent.",
CreateContext: func(ctx context.Context, rd *schema.ResourceData, i interface{}) diag.Diagnostics {
rd.SetId(uuid.NewString())
return nil
},
ReadContext: schema.NoopContext,
DeleteContext: schema.NoopContext,
Schema: map[string]*schema.Schema{
"agent_id": {
Type: schema.TypeString,
Description: `The "id" property of a "coder_agent" resource to associate with.`,
ForceNew: true,
Required: true,
},
"display_name": {
Type: schema.TypeString,
Description: "The display name of the script to display logs in the dashboard.",
ForceNew: true,
Required: true,
},
"log_path": {
Type: schema.TypeString,
Description: "The path of a file to write the logs to. If relative, it will be appended to tmp.",
ForceNew: true,
Optional: true,
},
"icon": {
Type: schema.TypeString,
ForceNew: true,
Optional: true,
Description: "A URL to an icon that will display in the dashboard. View built-in " +
"icons here: https://github.com/coder/coder/tree/main/site/static/icon. Use a " +
"built-in icon with `data.coder_workspace.me.access_url + \"/icon/<path>\"`.",
},
"source": {
ForceNew: true,
Type: schema.TypeString,
Required: true,
Description: "The script to run.",
},
"cron": {
ForceNew: true,
Type: schema.TypeString,
Optional: true,
Description: "The cron schedule to run the script on. This is a cron expression.",
},
"start_blocks_login": {
Type: schema.TypeBool,
Default: false,
ForceNew: true,
Optional: true,
Description: "This option defines whether or not the user can (by default) login to the workspace before this script completes running on start. When enabled, users may see an incomplete workspace when logging in.",
},
"run_on_start": {
Type: schema.TypeBool,
Default: false,
ForceNew: true,
Optional: true,
Description: "This option defines whether or not the script should run when the agent starts.",
},
"run_on_stop": {
Type: schema.TypeBool,
Default: false,
ForceNew: true,
Optional: true,
Description: "This option defines whether or not the script should run when the agent stops.",
},
"timeout": {
Type: schema.TypeInt,
Default: 0,
ForceNew: true,
Optional: true,
Description: "Time in seconds until the agent lifecycle status is marked as timed out, this happens when the script has not completed (exited) in the given time.",
ValidateFunc: validation.IntAtLeast(1),
},
},
}
}

0 comments on commit 8eae93d

Please sign in to comment.