Documentation ¶
Index ¶
- type AKSAsset
- type Asset
- type AssetShared
- type Assets
- type Azure
- type Config
- type ConfigStep
- type DockerAsset
- type DockerLayerAsset
- type EKSAsset
- type EntitlementLabel
- type EntitlementValue
- type Entitlements
- type GCPProvider
- type GKEAsset
- type GitHubAsset
- type GithubContent
- type GithubFile
- type HelmAsset
- type HelmFetch
- type HelmIntro
- type HelmValues
- type HelmValuesReadmeSource
- type Image
- type InlineAsset
- type KubectlApply
- type Kustomize
- type KustomizeIntro
- type License
- type Lifecycle
- type LocalAsset
- type LocalHelmOpts
- type Message
- type Meta
- type Release
- type ReleaseMetadata
- type Render
- type ShipAppMetadata
- type Spec
- type Step
- type StepDetails
- type StepShared
- type Terraform
- type TerraformAsset
- type Unfork
- type Utilization
- type ValuesFrom
- type ValuesFromLifecycle
- type WebAsset
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AKSAsset ¶ added in v0.16.0
type AKSAsset struct { Azure `json:",inline" yaml:",inline" hcl:",inline"` ClusterName string `json:"cluster_name" yaml:"cluster_name" hcl:"cluster_name"` KubernetesVersion string `json:"kubernetes_version" yaml:"kubernetes_version" hcl:"kubernetes_version"` PublicKey string `json:"public_key" yaml:"public_key" hcl:"public_key"` NodeCount string `json:"node_count" yaml:"node_count" hcl:"node_count"` NodeType string `json:"node_type" yaml:"node_type" hcl:"node_type"` DiskGB string `json:"disk_gb" yaml:"disk_gb" hcl:"disk_gb"` }
AKSAsset
type Asset ¶
type Asset struct { Inline *InlineAsset `json:"inline,omitempty" yaml:"inline,omitempty" hcl:"inline,omitempty"` Docker *DockerAsset `json:"docker,omitempty" yaml:"docker,omitempty" hcl:"docker,omitempty"` DockerLayer *DockerLayerAsset `json:"dockerlayer,omitempty" yaml:"dockerlayer,omitempty" hcl:"dockerlayer,omitempty"` GitHub *GitHubAsset `json:"github,omitempty" yaml:"github,omitempty" hcl:"github,omitempty"` Web *WebAsset `json:"web,omitempty" yaml:"web,omitempty" hcl:"web,omitempty"` Helm *HelmAsset `json:"helm,omitempty" yaml:"helm,omitempty" hcl:"helm,omitempty"` Local *LocalAsset `json:"local,omitempty" yaml:"local,omitempty" hcl:"local,omitempty"` Terraform *TerraformAsset `json:"terraform,omitempty" yaml:"terraform,omitempty" hcl:"terraform,omitempty"` AmazonEKS *EKSAsset `json:"amazon_eks,omitempty" yaml:"amazon_eks,omitempty" hcl:"amazon_eks,omitempty"` GoogleGKE *GKEAsset `json:"google_gke,omitempty" yaml:"google_gke,omitempty" hcl:"google_gke,omitempty"` AzureAKS *AKSAsset `json:"azure_aks,omitempty" yaml:"azure_aks,omitempty" hcl:"azure_aks,omitempty"` }
Asset is a spec to generate one or more deployment assets
type AssetShared ¶
type AssetShared struct { string `json:"dest,omitempty" yaml:"dest,omitempty" hcl:"dest,omitempty"` Mode os.FileMode `json:"mode,omitempty" yaml:"mode,omitempty" hcl:"mode,omitempty"` Description string `json:"description,omitempty" yaml:"description,omitempty" hcl:"description,omitempty"` When string `json:"when,omitempty" yaml:"when,omitempty" hcl:"when,omitempty"` }Dest
AssetShared is attributes common to all assets
type Assets ¶
type Assets struct {
V1 []Asset `json:"v1,omitempty" yaml:"v1,omitempty" hcl:"v1,omitempty"`
}
Assets is the top level assets object
type Azure ¶ added in v0.16.0
type Azure struct { TenantID string `json:"tenant_id" yaml:"tenant_id" hcl:"tenant_id"` SubscriptionID string `json:"subscription_id" yaml:"subscription_id" hcl:"subscription_id"` ServicePrincipalID string `json:"service_principal_id" yaml:"service_principal_id" hcl:"service_principal_id"` ServicePrincipalSecret string `json:"service_principal_secret" yaml:"service_principal_secret" hcl:"service_principal_secret"` ResourceGroupName string `json:"resource_group_name" yaml:"resource_group_name" hcl:"resource_group_name"` Location string `json:"location" yaml:"location" hcl:"location"` }
type Config ¶
type Config struct {
V1 []libyaml.ConfigGroup `json:"v1,omitempty" yaml:"v1,omitempty" hcl:"v1,omitempty"`
}
Config is the top level config object
type ConfigStep ¶
type ConfigStep struct {
}func (*ConfigStep) Shared ¶
func (c *ConfigStep) Shared() *StepShared
func (ConfigStep) ShortName ¶
func (c ConfigStep) ShortName() string
type DockerAsset ¶
type DockerAsset struct { Image string `json:"image" yaml:"image" hcl:"image"` Source string `json:"source" yaml:"source" hcl:"source"` }
DockerAsset is an asset that declares a docker image
type DockerLayerAsset ¶
type DockerLayerAsset struct { DockerAsset `json:",inline" yaml:",inline" hcl:",inline"` Layer string `json:"layer" yaml:"layer" hcl:"layer"` }
DockerLayerAsset is an asset that will unpack a docker layer at `dest`
type EKSAsset ¶
type EKSAsset struct { ClusterName string `json:"cluster_name,omitempty" yaml:"cluster_name,omitempty" hcl:"cluster_name,omitempty"` Region string `json:"region,omitempty" yaml:"region,omitempty" hcl:"region,omitempty"` CreatedVPC *amazoneks.EKSCreatedVPC `json:"created_vpc,omitempty" yaml:"created_vpc,omitempty" hcl:"created_vpc,omitempty"` ExistingVPC *amazoneks.EKSExistingVPC `json:"existing_vpc,omitempty" yaml:"existing_vpc,omitempty" hcl:"existing_vpc,omitempty"` AutoscalingGroups []amazoneks.EKSAutoscalingGroup `json:"autoscaling_groups,omitempty" yaml:"autoscaling_groups,omitempty" hcl:"autoscaling_groups,omitempty"` }
EKSAsset
type EntitlementLabel ¶ added in v0.47.0
EntitlementLabel is a single entitlement label
type EntitlementValue ¶ added in v0.24.0
type EntitlementValue struct { Key string `json:"key"` Value string `json:"value"` Labels []EntitlementLabel `json:"labels"` }
EntitlementValue is a single entitlement value
type Entitlements ¶ added in v0.24.0
type Entitlements struct { Meta Meta `json:"meta"` Serialized string `json:"serialized"` Signature string `json:"signature"` Values []EntitlementValue `json:"values,omitempty"` Utilizations []Utilization `json:"utilizations,omitempty"` }
Entitlements is a signed object containing entitlments info+metadata
type GCPProvider ¶
type GCPProvider struct { Credentials string `json:"credentials,omitempty" yaml:"credentials,omitempty" hcl:"credentials,omitempty"` Project string `json:"project,omitempty" yaml:"project,omitempty" hcl:"project,omitempty"` Region string `json:"region,omitempty" yaml:"region,omitempty" hcl:"region,omitempty"` }
type GKEAsset ¶
type GKEAsset struct { GCPProvider `json:",inline" yaml:",inline" hcl:",inline"` // ClusterName required ClusterName string `json:"cluster_name" yaml:"cluster_name" hcl:"cluster_name"` Zone string `json:"zone,omitempty" yaml:"zone,omitempty" hcl:"zone,omitempty"` InitialNodeCount string `json:"initial_node_count,omitempty" yaml:"initial_node_count,omitempty" hcl:"initial_node_count,omitempty"` MachineType string `json:"machine_type,omitempty" yaml:"machine_type,omitempty" hcl:"machine_type,omitempty"` AdditionalZones string `json:"additional_zones,omitempty" yaml:"additional_zones,omitempty" hcl:"additional_zones,omitempty"` MinMasterVersion string `json:"min_master_version,omitempty" yaml:"min_master_version,omitempty" hcl:"min_master_version,omitempty"` }
GKEAsset
type GitHubAsset ¶
type GitHubAsset struct { Repo string `json:"repo" yaml:"repo" hcl:"repo"` Ref string `json:"ref" yaml:"ref" hcl:"ref"` Path string `json:"path" yaml:"path" hcl:"path"` Source string `json:"source" yaml:"source" hcl:"source"` Proxy bool `json:"proxy" yaml:"proxy" hcl:"proxy"` StripPath string `json:"strip_path" yaml:"strip_path" hcl:"strip_path"` }
GitHubAsset is an asset whose contents are specified directly in the Spec
type GithubContent ¶
type GithubContent struct { Repo string `json:"repo" yaml:"repo" hcl:"repo" meta:"repo"` Path string `json:"path" yaml:"path" hcl:"path" meta:"path"` Ref string `json:"ref" yaml:"ref" hcl:"ref" meta:"ref"` Files []GithubFile `json:"files" yaml:"files" hcl:"files" meta:"files"` }
func (GithubContent) String ¶ added in v0.29.0
func (g GithubContent) String() string
Not using json.Marshal because I want to omit the file data, and don't feel like writing a custom marshaller
type GithubFile ¶
type GithubFile struct { Name string `json:"name" yaml:"name" hcl:"name" meta:"name"` Path string `json:"path" yaml:"path" hcl:"path" meta:"path"` Sha string `json:"sha" yaml:"sha" hcl:"sha" meta:"sha"` Size int64 `json:"size" yaml:"size" hcl:"size" meta:"size"` Data string `json:"data" yaml:"data" hcl:"data" meta:"data"` }
GithubFile
func (GithubFile) String ¶ added in v0.29.0
func (file GithubFile) String() string
type HelmAsset ¶
type HelmAsset struct { Values map[string]interface{} `json:"values" yaml:"values" hcl:"values"` HelmOpts []string `json:"helm_opts" yaml:"helm_opts" hcl:"helm_opts"` // GitHub references a github asset from which to pull the chart GitHub *GitHubAsset `json:"github,omitempty" yaml:"github,omitempty" hcl:"github,omitempty"` // HelmFetch pulls a chart as 'helm fetch' would HelmFetch *HelmFetch `json:"helm_fetch,omitempty" yaml:"helm_fetch,omitempty" hcl:"helm_fetch,omitempty"` // Local is an escape hatch, most impls will use github or some sort of ChartMuseum thing Local *LocalHelmOpts `json:"local,omitempty" yaml:"local,omitempty" hcl:"local,omitempty"` ValuesFrom *ValuesFrom `json:"values_from,omitempty" yaml:"values_from,omitempty" hcl:"values_from,omitempty"` Upstream string `json:"upstream,omitempty" yaml:"upstream,omitempty" hcl:"upstream,omitempty"` }
HelmAsset is an asset that declares a helm chart on github
type HelmIntro ¶
type HelmIntro struct { IsUpdate bool }
HelmIntro is a lifecycle step to render persisted README.md in the .ship folder
func (*HelmIntro) Shared ¶
func (h *HelmIntro) Shared() *StepShared
type HelmValues ¶
type HelmValues struct { Path string `json:"path,omitempty" yaml:"path,omitempty" hcl:"path,omitempty"` Readme *HelmValuesReadmeSource `json:"readme,omitempty" yaml:"readme,omitempty" hcl:"readme,omitempty"` }
HelmValues is a lifecycle step to render persisted values.yaml in the .ship folder and save user input changes to values.yaml
func (*HelmValues) Shared ¶
func (h *HelmValues) Shared() *StepShared
func (*HelmValues) ShortName ¶
func (h *HelmValues) ShortName() string
type HelmValuesReadmeSource ¶ added in v0.47.0
type HelmValuesReadmeSource struct {
Contents string `json:"contents,omitempty" yaml:"contents,omitempty" hcl:"contents,omitempty"`
}
A HelmValuesReadmeSource tells ship how to populate the readme file for the helm values editor. if not provided, ship will use the default behavior of pulling the readme from the root of the default target chart
type Image ¶
type Image struct { URL string `json:"url" yaml:"url" hcl:"url" meta:"url"` Source string `json:"source" yaml:"source" hcl:"source" meta:"source"` AppSlug string `json:"appSlug" yaml:"appSlug" hcl:"appSlug" meta:"appSlug"` ImageKey string `json:"imageKey" yaml:"imageKey" hcl:"imageKey" meta:"imageKey"` }
Image
type InlineAsset ¶
type InlineAsset struct { Contents string `json:"contents" yaml:"contents" hcl:"contents"` }
InlineAsset is an asset whose contents are specified directly in the Spec
type KubectlApply ¶
type KubectlApply struct { Path string `json:"path,omitempty" yaml:"path,omitempty" hcl:"path,omitempty"` Kubeconfig string `json:"kubeconfig,omitempty" yaml:"kubeconfig,omitempty" hcl:"kubeconfig,omitempty"` }
KubectlApply is a lifeycle step to execute `apply` for a kubeconfig asset
func (*KubectlApply) Shared ¶
func (k *KubectlApply) Shared() *StepShared
func (*KubectlApply) ShortName ¶
func (k *KubectlApply) ShortName() string
type Kustomize ¶
type Kustomize struct { Base string `json:"base,omitempty" yaml:"base,omitempty" hcl:"base,omitempty"` Dest string `json:"dest,omitempty" yaml:"dest,omitempty" hcl:"dest,omitempty"` Overlay string `json:"overlay,omitempty" yaml:"overlay,omitempty" hcl:"overlay,omitempty"` }
Kustomize is a lifecycle step to generate overlays for generated assets. It does not take a kustomization.yml, rather it will generate one in the .ship/ folder
func (*Kustomize) OverlayPath ¶ added in v0.16.0
func (*Kustomize) Shared ¶
func (k *Kustomize) Shared() *StepShared
func (*Kustomize) TempRenderPath ¶ added in v0.47.0
type KustomizeIntro ¶
type KustomizeIntro struct {
}KustomizeIntro is a lifeycle step to display an informative intro page for kustomize
func (*KustomizeIntro) Shared ¶
func (k *KustomizeIntro) Shared() *StepShared
func (*KustomizeIntro) ShortName ¶
func (k *KustomizeIntro) ShortName() string
type License ¶ added in v0.47.0
type License struct { ID string `json:"id" yaml:"id" hcl:"id" meta:"id"` Assignee string `json:"assignee" yaml:"assignee" hcl:"assignee" meta:"assignee"` CreatedAt time.Time `json:"createdAt" yaml:"createdAt" hcl:"createdAt" meta:"created-at"` ExpiresAt time.Time `json:"expiresAt" yaml:"expiresAt" hcl:"expiresAt" meta:"expires-at"` Type string `json:"type" yaml:"type" hcl:"type" meta:"type"` }
type Lifecycle ¶
type Lifecycle struct {
V1 []Step `json:"v1,omitempty" yaml:"v1,omitempty" hcl:"v1,omitempty"`
}
A Lifecycle is the top-level lifecycle object
type LocalAsset ¶ added in v0.27.0
type LocalAsset struct { Path string `json:"path" yaml:"path" hcl:"path"` }
LocalAsset is an asset whose contents are on the local fs
type LocalHelmOpts ¶
type LocalHelmOpts struct {
ChartRoot string `json:"chart_root" yaml:"chart_root" hcl:"chart_root"`
}
LocalHelmOpts specifies a helm chart that should be templated using other assets that are already present at `ChartRoot`
type Message ¶
type Message struct { Contents string `json:"contents" yaml:"contents" hcl:"contents"` Level string `json:"level,omitempty" yaml:"level,omitempty" hcl:"level,omitempty"` }
Message is a lifeycle step to print a message
func (*Message) Shared ¶
func (m *Message) Shared() *StepShared
type Meta ¶ added in v0.24.0
type Meta struct { LastUpdated time.Time `json:"lastUpdated"` CustomerID string `json:"customerID"` }
Meta describes metadata about an entitlements payload
type Release ¶
type Release struct { Metadata ReleaseMetadata Spec Spec }
Release
func (*Release) FindRenderRoot ¶ added in v0.21.0
func (*Release) FindRenderStep ¶ added in v0.16.0
type ReleaseMetadata ¶
type ReleaseMetadata struct { ReleaseID string `json:"releaseId" yaml:"releaseId" hcl:"releaseId" meta:"release-id"` Sequence int64 `json:"sequence" yaml:"sequence" hcl:"sequence" meta:"sequence"` CustomerID string `json:"customerId" yaml:"customerId" hcl:"customerId" meta:"customer-id"` InstallationID string `json:"installation" yaml:"installation" hcl:"installation" meta:"installation-id"` ChannelID string `json:"channelId" yaml:"channelId" hcl:"channelId" meta:"channel-id"` AppSlug string `json:"appSlug" yaml:"appSlug" hcl:"appSlug" meta:"app-slug"` LicenseID string `json:"licenseId" yaml:"licenseId" hcl:"licenseId" meta:"license-id"` ChannelName string `json:"channelName" yaml:"channelName" hcl:"channelName" meta:"channel-name"` ChannelIcon string `json:"channelIcon" yaml:"channelIcon" hcl:"channelIcon" meta:"channel-icon"` Semver string `json:"semver" yaml:"semver" hcl:"semver" meta:"release-version"` ReleaseNotes string `json:"releaseNotes" yaml:"releaseNotes" hcl:"releaseNotes" meta:"release-notes"` Created string `json:"created" yaml:"created" hcl:"created" meta:"release-date"` Installed string `json:"installed" yaml:"installed" hcl:"installed" meta:"install-date"` RegistrySecret string `json:"registrySecret" yaml:"registrySecret" hcl:"registrySecret" meta:"registry-secret"` Images []Image `json:"images" yaml:"images" hcl:"images" meta:"images"` GithubContents []GithubContent `json:"githubContents" yaml:"githubContents" hcl:"githubContents" meta:"githubContents"` ShipAppMetadata ShipAppMetadata `json:"shipAppMetadata" yaml:"shipAppMetadata" hcl:"shipAppMetadata" meta:"shipAppMetadata"` Entitlements Entitlements `json:"entitlements" yaml:"entitlements" hcl:"entitlements" meta:"entitlements"` EntitlementSpec string `json:"entitlementSpec" yaml:"entitlementSpec" hcl:"entitlementSpec" meta:"entitlementSpec"` ConfigSpec string `json:"configSpec" yaml:"configSpec" hcl:"configSpec" meta:"configSpec"` CollectSpec string `json:"collectSpec" yaml:"collectSpec" hcl:"collectSpec" meta:"collectSpec"` AnalyzeSpec string `json:"analyzeSpec" yaml:"analyzeSpec" hcl:"analyzeSpec" meta:"analyzeSpec"` Type string `json:"type" yaml:"type" hcl:"type" meta:"type"` License License `json:"license" yaml:"license" hcl:"license" meta:"license"` }
ReleaseMetadata
func (ReleaseMetadata) ReleaseName ¶
func (r ReleaseMetadata) ReleaseName() string
type Render ¶
type Render struct { Root string `json:"root,omitempty" yaml:"root,omitempty" hcl:"root,omitempty"` Assets *Assets `json:"assets,omitempty" yaml:"assets,omitempty" hcl:"assets,omitempty"` }
Render is a lifeycle step to collect config and render assets
func (*Render) RenderRoot ¶ added in v0.21.0
func (*Render) Shared ¶
func (r *Render) Shared() *StepShared
type ShipAppMetadata ¶
type ShipAppMetadata struct { Description string `json:"description" yaml:"description" hcl:"description" meta:"description"` Version string `json:"version" yaml:"version" hcl:"version" meta:"version"` Icon string `json:"icon" yaml:"icon" hcl:"icon" meta:"icon"` Name string `json:"name" yaml:"name" hcl:"name" meta:"name"` Readme string `json:"readme" yaml:"readme" hcl:"readme" meta:"readme"` URL string `json:"url" yaml:"url" hcl:"url" meta:"url"` ContentSHA string `json:"contentSHA" yaml:"contentSHA" hcl:"contentSHA" meta:"contentSHA"` ReleaseNotes string `json:"releaseNotes" yaml:"releaseNotes" hcl:"releaseNotes" meta:"release-notes"` }
type Spec ¶
type Spec struct { Assets Assets `json:"assets" yaml:"assets" hcl:"asset"` Lifecycle Lifecycle `json:"lifecycle" yaml:"lifecycle" hcl:"lifecycle"` Config Config `json:"config" yaml:"config" hcl:"config"` }
Spec is the top level Ship document that defines an application
type Step ¶
type Step struct { Message *Message `json:"message,omitempty" yaml:"message,omitempty" hcl:"message,omitempty"` Config *ConfigStep `json:"config,omitempty" yaml:"config,omitempty" hcl:"config,omitempty"` Render *Render `json:"render,omitempty" yaml:"render,omitempty" hcl:"render,omitempty"` Terraform *Terraform `json:"terraform,omitempty" yaml:"terraform,omitempty" hcl:"terraform,omitempty"` Kustomize *Kustomize `json:"kustomize,omitempty" yaml:"kustomize,omitempty" hcl:"kustomize,omitempty"` Unfork *Unfork `json:"unfork,omitempty" yaml:"unfork,omitempty" hcl:"unfork,omitempty"` KustomizeIntro *KustomizeIntro `json:"kustomizeIntro,omitempty" yaml:"kustomizeIntro,omitempty" hcl:"kustomizeIntro,omitempty"` HelmIntro *HelmIntro `json:"helmIntro,omitempty" yaml:"helmIntro,omitempty" hcl:"helmIntro,omitempty"` HelmValues *HelmValues `json:"helmValues,omitempty" yaml:"helmValues,omitempty" hcl:"helmValues,omitempty"` KubectlApply *KubectlApply `json:"kubectlApply,omitempty" yaml:"kubectlApply,omitempty" hcl:"kubectlApply,omitempty"` }
Step represents vendor-customized configuration steps & messaging
func (Step) GetStep ¶
func (s Step) GetStep() StepDetails
func (Step) Shared ¶
func (s Step) Shared() *StepShared
type StepDetails ¶
type StepDetails interface { ShortName() string }
type StepShared ¶
type StepShared struct {}
type Terraform ¶
type Terraform struct { Path string `json:"path,omitempty" yaml:"path,omitempty" hcl:"path,omitempty"` When string `json:"when,omitempty" yaml:"when,omitempty" hcl:"when,omitempty"` }
Terraform is a lifeycle step to execute `apply` for a runbook's terraform asset
func (*Terraform) Shared ¶
func (t *Terraform) Shared() *StepShared
type TerraformAsset ¶
type TerraformAsset struct { // GitHub references a github asset from which to pull a terraform module GitHub *GitHubAsset `json:"github" yaml:"github" hcl:"github"` // Inline allows a vendor to specify a terraform module inline in ship Inline string `json:"inline,omitempty" yaml:"inline,omitempty" hcl:"inline,omitempty"` }
TerraformAsset
type Unfork ¶ added in v0.27.0
type Unfork struct { UpstreamBase string `json:"upstreamBase" yaml:"upstreamBase" hcl:"upstreamBase"` ForkedBase string `json:"forkedBase" yaml:"forkedBase" hcl:"forkedBase"` Dest string `json:"dest,omitempty" yaml:"dest,omitempty" hcl:"dest,omitempty"` Overlay string `json:"overlay,omitempty" yaml:"overlay,omitempty" hcl:"overlay,omitempty"` }
Unfork is a lifecycle step to generate patches and overlays for two generates assets that consist of raw K8S YAML
func (*Unfork) OverlayPath ¶ added in v0.27.0
func (*Unfork) Shared ¶ added in v0.27.0
func (u *Unfork) Shared() *StepShared
type Utilization ¶ added in v0.24.0
Utilization is a single utilization value
type ValuesFrom ¶
type ValuesFrom struct { Path string `json:"path,omitempty" yaml:"path,omitempty" hcl:"path,omitempty"` // SaveToState is used when a HelmValues step is not part of the lifecycle (e.g. Unfork) in order to save // the merged helm values to state. SaveToState bool `json:"save_to_state,omitempty" yaml:"save_to_state,omitempty" hcl:"save_to_state,omitempty"` }
type ValuesFromLifecycle ¶
type ValuesFromLifecycle struct{}
type WebAsset ¶
type WebAsset struct { Body string `json:"body" yaml:"body" hcl:"body"` BodyFormat string `json:"bodyFormat" yaml:"bodyFormat" hcl:"bodyFormat"` Headers map[string][]string `json:"headers" yaml:"headers" hcl:"headers"` Method string `json:"method" yaml:"method" hcl:"method"` URL string `json:"url" yaml:"url" hcl:"url"` }
WebAsset is an asset whose contents are specified by the HTML at the corresponding URL