Skip to content

frostmoln_webserver_deployment (Resource) ​

Deploys static/PHP site content to a managed Apache or Nginx webserver instance. The provider runs the full deploy flow: it requests a presigned upload from the platform, uploads the local archive, starts the deploy with the archive checksum, and waits for the in-guest agent to verify, extract, and publish the release. A changed archive (detected via source_hash) triggers a new deploy. Destroying the resource only drops it from Terraform state — content already published on the instance is left in place (there is no "undeploy" API; destroy the instance to remove it).

Authoritative scope — who owns what on this resource, declared in internal/scopedecl and machine-checked against the schema.

Enacted and reconciled — every configurable attribute not listed below: the platform applies it, and a refresh reads the truth back.

Create-immutable — instance_id: the deployment belongs to its instance.

Observed, not enacted — deploy_id: platform-issued for each deploy the pipeline runs. status: the platform's deploy pipeline moves it. tags_all: keys set outside Terraform — in the portal, by the fm CLI, or stamped by the platform — appear only here and are kept on every apply, never removed.

Example Usage ​

terraform
# Deploy site content to a managed webserver instance.
#
# source_archive is a LOCAL filesystem path, read at plan time by the machine
# running Terraform at plan and apply time — it is not a bucket key or a URL.
# Terraform tracks the
# archive's content hash, so rebuilding site.tar.gz makes the next apply push a
# new deployment automatically.
#
# Destroying this resource only drops it from Terraform state; content already
# published on the instance stays live (there is no "undeploy" API — destroy the
# instance to remove it).
resource "frostmoln_webserver_deployment" "site" {
  instance_id    = frostmoln_nginx_instance.site.id
  source_archive = "${path.module}/site.tar.gz"

  # Resource tags: your own metadata for search and filtering. Merged with
  # the provider's default_tags; changing them updates in place.
  tags = {
    env = "prod"
  }
}

Schema ​

Required ​

  • instance_id (String) The ID of the Apache or Nginx webserver instance to deploy content to.
  • source_archive (String) Local filesystem path to the .tar.gz archive to deploy (the archive's top level becomes the site document root). The provider reads this file at plan and apply time; it is never uploaded to or returned by the API as-is — only its SHA-256 (source_hash) is tracked in state. Changing the file's contents changes source_hash and triggers a new deploy.

Optional ​

  • tags (Map of String) Resource tags on the deploy record this resource tracks (deploy_id): your own key/value metadata for search and filtering, stored by the platform only and never applied to the content or the instance. A new deploy (a changed archive) is created with them; changing only the tags updates the tracked deploy in place and deploys nothing. At most 32 keys including the tenant's default tags, which the platform merges in at create; a key is 1-64 bytes matching ^[a-zA-Z0-9]([a-zA-Z0-9._:/-]*[a-zA-Z0-9])?$, a value at most 256 bytes; keys beginning frostmoln_ or frostmoln- (any case) are reserved. Merged with the provider's default_tags on every write (a key set here wins). Holds only the keys this configuration sets; the full set is in tags_all.
  • timeouts (Block, Optional) (see below for nested schema)

Read-Only ​

  • deploy_id (String) The ID of the most recent content deploy for this instance.
  • id (String) Synthetic resource identifier (equal to instance_id — one deployment per instance).
  • source_hash (String) SHA-256 hex digest of source_archive, computed by the provider at plan time. It is the change driver: when the archive's bytes change, this hash changes and a new deploy runs. It is also sent to the deploy's start call so the in-guest agent can verify the upload.
  • status (String) Terminal status of the most recent deploy (succeeded once applied).
  • tags_all (Map of String) Every tag the platform holds on this resource: the provider's default_tags, this resource's own tags (which win on a shared key), and any key set outside Terraform — in the portal, by the fm CLI, or stamped by the platform. Keys set outside Terraform appear only here and are kept on every apply, never removed.

Nested Schema for timeouts ​

Optional:

  • create (String) How long the provider waits for the create operation to converge before giving up (e.g. "45m", "2h").
  • delete (String) How long the provider waits for the delete to complete before giving up (e.g. "30m").
  • update (String) How long the provider waits for an update (resize, in-place change) to converge before giving up (e.g. "30m").