Merge pull request #152 from opentffoundation/opentf-website-placeholder

Change terraform website mentions and links to be placeholder
This commit is contained in:
RLRabinowitz 2023-08-27 15:35:37 +03:00 committed by GitHub
commit 816c801fb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 42 additions and 60 deletions

View File

@ -4,5 +4,5 @@
url_docker_registry_dockerhub = "https://hub.docker.com/r/hashicorp/terraform" url_docker_registry_dockerhub = "https://hub.docker.com/r/hashicorp/terraform"
url_docker_registry_ecr = "https://gallery.ecr.aws/hashicorp/terraform" url_docker_registry_ecr = "https://gallery.ecr.aws/hashicorp/terraform"
url_license = "https://github.com/placeholderplaceholderplaceholder/opentf/blob/main/LICENSE" url_license = "https://github.com/placeholderplaceholderplaceholder/opentf/blob/main/LICENSE"
url_project_website = "https://www.terraform.io" url_project_website = "https://www.placeholderplaceholderplaceholder.io"
url_source_repository = "https://github.com/hashicorp/terraform" url_source_repository = "https://github.com/hashicorp/terraform"

View File

@ -4,7 +4,7 @@ This directory contains some documentation about the OpenTF Core codebase,
aimed at readers who are interested in making code contributions. aimed at readers who are interested in making code contributions.
If you're looking for information on _using_ OpenTF, please instead refer If you're looking for information on _using_ OpenTF, please instead refer
to [the main OpenTF CLI documentation](https://www.terraform.io/docs/cli/index.html). to [the main OpenTF CLI documentation](https://www.placeholderplaceholderplaceholder.io/docs/cli/index.html).
## OpenTF Core Architecture Documents ## OpenTF Core Architecture Documents
@ -21,7 +21,7 @@ to [the main OpenTF CLI documentation](https://www.terraform.io/docs/cli/index.h
SDK and so wish to conform to them. SDK and so wish to conform to them.
(If you are planning to write a new provider using the _official_ SDK then (If you are planning to write a new provider using the _official_ SDK then
please refer to [the Extend documentation](https://www.terraform.io/docs/extend/index.html) please refer to [the Extend documentation](https://www.placeholderplaceholderplaceholder.io/docs/extend/index.html)
instead; it presents similar information from the perspective of the SDK instead; it presents similar information from the perspective of the SDK
API, rather than the plugin wire protocol.) API, rather than the plugin wire protocol.)

View File

@ -41,7 +41,7 @@ object that describes an action to be taken.
An _operation_ consists of: An _operation_ consists of:
* The action to be taken (e.g. "plan", "apply"). * The action to be taken (e.g. "plan", "apply").
* The name of the [workspace](https://www.terraform.io/docs/state/workspaces.html) * The name of the [workspace](https://www.placeholderplaceholderplaceholder.io/docs/state/workspaces.html)
where the action will be taken. where the action will be taken.
* Root module input variables to use for the action. * Root module input variables to use for the action.
* For the "plan" operation, a path to the directory containing the configuration's root module. * For the "plan" operation, a path to the directory containing the configuration's root module.
@ -50,7 +50,7 @@ An _operation_ consists of:
"force" flag, etc. "force" flag, etc.
The operation is then passed to the currently-selected The operation is then passed to the currently-selected
[backend](https://www.terraform.io/docs/backends/index.html). Each backend name [backend](https://www.placeholderplaceholderplaceholder.io/docs/backends/index.html). Each backend name
corresponds to an implementation of corresponds to an implementation of
[`backend.Backend`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/backend#Backend), using a [`backend.Backend`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/backend#Backend), using a
mapping table in mapping table in
@ -129,7 +129,7 @@ allowing OpenTF to interpret them at a more appropriate time.
## State Manager ## State Manager
A _state manager_ is responsible for storing and retrieving snapshots of the A _state manager_ is responsible for storing and retrieving snapshots of the
[OpenTF state](https://www.terraform.io/docs/language/state/index.html) [OpenTF state](https://www.placeholderplaceholderplaceholder.io/docs/language/state/index.html)
for a particular workspace. Each manager is an implementation of for a particular workspace. Each manager is an implementation of
some combination of interfaces in some combination of interfaces in
[the `statemgr` package](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/states/statemgr), [the `statemgr` package](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/states/statemgr),
@ -145,7 +145,7 @@ The implementation
[`statemgr.Filesystem`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/states/statemgr#Filesystem) is used [`statemgr.Filesystem`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/states/statemgr#Filesystem) is used
by default (by the `local` backend) and is responsible for the familiar by default (by the `local` backend) and is responsible for the familiar
`terraform.tfstate` local file that most OpenTF users start with, before `terraform.tfstate` local file that most OpenTF users start with, before
they switch to [remote state](https://www.terraform.io/docs/language/state/remote.html). they switch to [remote state](https://www.placeholderplaceholderplaceholder.io/docs/language/state/remote.html).
Other implementations of `statemgr.Full` are used to implement remote state. Other implementations of `statemgr.Full` are used to implement remote state.
Each of these saves and retrieves state via a remote network service Each of these saves and retrieves state via a remote network service
appropriate to the backend that creates it. appropriate to the backend that creates it.
@ -206,7 +206,7 @@ important examples include:
* [`ProviderTransformer`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/terraform#ProviderTransformer), * [`ProviderTransformer`](https://pkg.go.dev/github.com/placeholderplaceholderplaceholder/opentf/internal/terraform#ProviderTransformer),
which associates each resource or resource instance with exactly one which associates each resource or resource instance with exactly one
provider configuration (implementing provider configuration (implementing
[the inheritance rules](https://www.terraform.io/docs/language/modules/develop/providers.html)) [the inheritance rules](https://www.placeholderplaceholderplaceholder.io/docs/language/modules/develop/providers.html))
and then creates "happens after" edges to ensure that the providers are and then creates "happens after" edges to ensure that the providers are
initialized before taking any actions with the resources that belong to initialized before taking any actions with the resources that belong to
them. them.

View File

@ -20,7 +20,7 @@ their behaviors in a way comparable to the resource instance behaviors.
This is developer-oriented documentation rather than user-oriented This is developer-oriented documentation rather than user-oriented
documentation. See documentation. See
[the main OpenTF documentation](https://www.terraform.io/docs) for [the main OpenTF documentation](https://www.placeholderplaceholderplaceholder.io/docs) for
information on existing planning behaviors and other behaviors as viewed from information on existing planning behaviors and other behaviors as viewed from
an end-user perspective. an end-user perspective.

View File

@ -10,7 +10,7 @@ the SDK's API.
---- ----
**If you want to write a plugin for OpenTF, please refer to **If you want to write a plugin for OpenTF, please refer to
[Extending OpenTF](https://www.terraform.io/docs/extend/index.html) instead.** [Extending OpenTF](https://www.placeholderplaceholderplaceholder.io/docs/extend/index.html) instead.**
This documentation is for those who are developing _OpenTF SDKs_, rather This documentation is for those who are developing _OpenTF SDKs_, rather
than those implementing plugins. than those implementing plugins.

View File

@ -63,7 +63,7 @@ The key-value pairs representing nested block types have values based on
The MessagePack serialization of an attribute value depends on the value of the The MessagePack serialization of an attribute value depends on the value of the
`type` field of the corresponding `Schema.Attribute` message. The `type` field is `type` field of the corresponding `Schema.Attribute` message. The `type` field is
a compact JSON serialization of a a compact JSON serialization of a
[OpenTF type constraint](https://www.terraform.io/docs/configuration/types.html), [OpenTF type constraint](https://www.placeholderplaceholderplaceholder.io/docs/configuration/types.html),
which consists either of a single which consists either of a single
string value (for primitive types) or a two-element array giving a type kind string value (for primitive types) or a two-element array giving a type kind
and a type argument. and a type argument.
@ -212,7 +212,7 @@ The properties representing nested block types have property values based on
The JSON serialization of an attribute value depends on the value of the `type` The JSON serialization of an attribute value depends on the value of the `type`
field of the corresponding `Schema.Attribute` message. The `type` field is field of the corresponding `Schema.Attribute` message. The `type` field is
a compact JSON serialization of a a compact JSON serialization of a
[OpenTF type constraint](https://www.terraform.io/docs/configuration/types.html), [OpenTF type constraint](https://www.placeholderplaceholderplaceholder.io/docs/configuration/types.html),
which consists either of a single which consists either of a single
string value (for primitive types) or a two-element array giving a type kind string value (for primitive types) or a two-element array giving a type kind
and a type argument. and a type argument.

View File

@ -379,7 +379,7 @@ func (b *Backend) Configure(obj cty.Value) tfdiags.Diagnostics {
AssumeRoleExternalID: stringAttr(obj, "external_id"), AssumeRoleExternalID: stringAttr(obj, "external_id"),
AssumeRolePolicy: stringAttr(obj, "assume_role_policy"), AssumeRolePolicy: stringAttr(obj, "assume_role_policy"),
AssumeRoleSessionName: stringAttr(obj, "session_name"), AssumeRoleSessionName: stringAttr(obj, "session_name"),
CallerDocumentationURL: "https://www.terraform.io/docs/language/settings/backends/s3.html", CallerDocumentationURL: "https://www.placeholderplaceholderplaceholder.io/docs/language/settings/backends/s3.html",
CallerName: "S3 Backend", CallerName: "S3 Backend",
CredsFilename: stringAttr(obj, "shared_credentials_file"), CredsFilename: stringAttr(obj, "shared_credentials_file"),
DebugLogging: logging.IsDebugOrHigher(), DebugLogging: logging.IsDebugOrHigher(),

View File

@ -16,7 +16,7 @@ import (
// The tests in this file run through different scenarios recommended in our // The tests in this file run through different scenarios recommended in our
// "Running Terraform in Automation" guide: // "Running Terraform in Automation" guide:
// https://www.terraform.io/guides/running-terraform-in-automation.html // https://www.placeholderplaceholderplaceholder.io/guides/running-terraform-in-automation.html
// TestPlanApplyInAutomation runs through the "main case" of init, plan, apply // TestPlanApplyInAutomation runs through the "main case" of init, plan, apply
// using the specific command line options suggested in the guide. // using the specific command line options suggested in the guide.

View File

@ -345,7 +345,7 @@ func (c *ImportCommand) Synopsis() string {
} }
const importCommandInvalidAddressReference = `For information on valid syntax, see: const importCommandInvalidAddressReference = `For information on valid syntax, see:
https://www.terraform.io/docs/cli/state/resource-addressing.html` https://www.placeholderplaceholderplaceholder.io/docs/cli/state/resource-addressing.html`
const importCommandMissingResourceFmt = `[reset][bold][red]Error:[reset][bold] resource address %q does not exist in the configuration.[reset] const importCommandMissingResourceFmt = `[reset][bold][red]Error:[reset][bold] resource address %q does not exist in the configuration.[reset]

View File

@ -864,7 +864,7 @@ func (c *InitCommand) getProviders(ctx context.Context, config *configs.Config,
if thirdPartySigned { if thirdPartySigned {
c.Ui.Info(fmt.Sprintf("\nPartner and community providers are signed by their developers.\n" + c.Ui.Info(fmt.Sprintf("\nPartner and community providers are signed by their developers.\n" +
"If you'd like to know more about provider signing, you can read about it here:\n" + "If you'd like to know more about provider signing, you can read about it here:\n" +
"https://www.terraform.io/docs/cli/plugins/signing.html")) "https://www.placeholderplaceholderplaceholder.io/docs/cli/plugins/signing.html"))
} }
}, },
} }

View File

@ -984,7 +984,7 @@ the error above and try again.
const errTFCMigrateNotYetImplemented = ` const errTFCMigrateNotYetImplemented = `
Migrating state from Terraform Cloud to another backend is not yet implemented. Migrating state from Terraform Cloud to another backend is not yet implemented.
Please use the API to do this: https://www.terraform.io/docs/cloud/api/state-versions.html Please use the API to do this: https://www.placeholderplaceholderplaceholder.io/docs/cloud/api/state-versions.html
` `
const errInteractiveInputDisabled = ` const errInteractiveInputDisabled = `
@ -1007,7 +1007,7 @@ configuration (e.g. production, staging, development), Terraform Cloud workspace
across all configurations used within an organization. A typical strategy to start with is across all configurations used within an organization. A typical strategy to start with is
<COMPONENT>-<ENVIRONMENT>-<REGION> (e.g. networking-prod-us-east, networking-staging-us-east). <COMPONENT>-<ENVIRONMENT>-<REGION> (e.g. networking-prod-us-east, networking-staging-us-east).
For more information on workspace naming, see https://www.terraform.io/docs/cloud/workspaces/naming.html For more information on workspace naming, see https://www.placeholderplaceholderplaceholder.io/docs/cloud/workspaces/naming.html
When migrating existing workspaces from the backend %[1]q to Terraform Cloud, would you like to When migrating existing workspaces from the backend %[1]q to Terraform Cloud, would you like to
rename your workspaces? Enter 1 or 2. rename your workspaces? Enter 1 or 2.

View File

@ -30,15 +30,6 @@ type VersionOutput struct {
ProviderSelections map[string]string `json:"provider_selections"` ProviderSelections map[string]string `json:"provider_selections"`
} }
// VersionCheckInfo is the return value for the VersionCheckFunc callback
// and tells the Version command information about the latest version
// of Terraform.
type VersionCheckInfo struct {
Outdated bool
Latest string
Alerts []string
}
func (c *VersionCommand) Help() string { func (c *VersionCommand) Help() string {
helpText := ` helpText := `
Usage: opentf [global options] version [options] Usage: opentf [global options] version [options]
@ -53,8 +44,6 @@ Options:
} }
func (c *VersionCommand) Run(args []string) int { func (c *VersionCommand) Run(args []string) int {
var outdated bool
var latest string
var versionString bytes.Buffer var versionString bytes.Buffer
args = c.Meta.process(args) args = c.Meta.process(args)
var jsonOutput bool var jsonOutput bool
@ -136,13 +125,6 @@ func (c *VersionCommand) Run(args []string) int {
c.Ui.Output(str) c.Ui.Output(str)
} }
} }
if outdated {
c.Ui.Output(fmt.Sprintf(
"\nYour version of OpenTF is out of date! The latest version\n"+
"is %s. You can update by downloading from https://www.terraform.io/downloads.html",
latest))
}
} }
return 0 return 0

View File

@ -96,7 +96,7 @@ func (r *ResourceAddress) String() string {
// HasResourceSpec returns true if the address has a resource spec, as // HasResourceSpec returns true if the address has a resource spec, as
// defined in the documentation: // defined in the documentation:
// //
// https://www.terraform.io/docs/cli/state/resource-addressing.html // https://www.placeholderplaceholderplaceholder.io/docs/cli/state/resource-addressing.html
// //
// In particular, this returns false if the address contains only // In particular, this returns false if the address contains only
// a module path, thus addressing the entire module. // a module path, thus addressing the entire module.

View File

@ -2018,7 +2018,7 @@ func TestEnsureProviderVersions(t *testing.T) {
beepProvider: getproviders.MustParseVersionConstraints(">= 1.0.0"), beepProvider: getproviders.MustParseVersionConstraints(">= 1.0.0"),
}, },
WantErr: `some providers could not be installed: WantErr: `some providers could not be installed:
- example.com/foo/beep: the local package for example.com/foo/beep 1.0.0 doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.terraform.io/language/provider-checksum-verification`, - example.com/foo/beep: the local package for example.com/foo/beep 1.0.0 doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.placeholderplaceholderplaceholder.io/language/provider-checksum-verification`,
WantEvents: func(inst *Installer, dir *Dir) map[addrs.Provider][]*testInstallerEventLogItem { WantEvents: func(inst *Installer, dir *Dir) map[addrs.Provider][]*testInstallerEventLogItem {
return map[addrs.Provider][]*testInstallerEventLogItem{ return map[addrs.Provider][]*testInstallerEventLogItem{
noProvider: { noProvider: {
@ -2064,7 +2064,7 @@ func TestEnsureProviderVersions(t *testing.T) {
Error string Error string
}{ }{
"1.0.0", "1.0.0",
`the local package for example.com/foo/beep 1.0.0 doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.terraform.io/language/provider-checksum-verification`, `the local package for example.com/foo/beep 1.0.0 doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.placeholderplaceholderplaceholder.io/language/provider-checksum-verification`,
}, },
}, },
}, },

View File

@ -120,7 +120,7 @@ func installFromLocalArchive(ctx context.Context, meta getproviders.PackageMeta,
) )
} else if !matches { } else if !matches {
return authResult, fmt.Errorf( return authResult, fmt.Errorf(
"the current package for %s %s doesn't match any of the checksums previously recorded in the dependency lock file; for more information: https://www.terraform.io/language/provider-checksum-verification", "the current package for %s %s doesn't match any of the checksums previously recorded in the dependency lock file; for more information: https://www.placeholderplaceholderplaceholder.io/language/provider-checksum-verification",
meta.Provider, meta.Version, meta.Provider, meta.Version,
) )
} }
@ -210,7 +210,7 @@ func installFromLocalDir(ctx context.Context, meta getproviders.PackageMeta, tar
) )
} else if !matches { } else if !matches {
return authResult, fmt.Errorf( return authResult, fmt.Errorf(
"the local package for %s %s doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.terraform.io/language/provider-checksum-verification", "the local package for %s %s doesn't match any of the checksums previously recorded in the dependency lock file (this might be because the available checksums are for packages targeting different platforms); for more information: https://www.placeholderplaceholderplaceholder.io/language/provider-checksum-verification",
meta.Provider, meta.Version, meta.Provider, meta.Version,
) )
} }

View File

@ -1,6 +1,6 @@
# Terraform Documentation # Terraform Documentation
This directory contains the portions of [the Terraform website](https://www.terraform.io/) that pertain to the core functionality, excluding providers and the overall configuration. This directory contains the portions of [the Terraform website](https://www.placeholderplaceholderplaceholder.io/) that pertain to the core functionality, excluding providers and the overall configuration.
The website uses the files in this directory in conjunction with The website uses the files in this directory in conjunction with
[the `terraform-website` repository](https://github.com/hashicorp/terraform-website). The `terraform-website` repository brings all of the documentation together and contains the scripts for testing and building the entire site. [the `terraform-website` repository](https://github.com/hashicorp/terraform-website). The `terraform-website` repository brings all of the documentation together and contains the scripts for testing and building the entire site.

View File

@ -22,13 +22,13 @@ The following example loads the Terraform website and validates that it returns
```hcl ```hcl
check "health_check" { check "health_check" {
data "http" "terraform_io" { data "http" "placeholderplaceholderplaceholder_io" {
url = "https://www.terraform.io" url = "https://www.placeholderplaceholderplaceholder.io"
} }
assert { assert {
condition = data.http.terraform_io.status_code == 200 condition = data.http.placeholderplaceholderplaceholder_io.status_code == 200
error_message = "${data.http.terraform_io.url} returned an unhealthy status code" error_message = "${data.http.placeholderplaceholderplaceholder_io.url} returned an unhealthy status code"
} }
} }
``` ```
@ -39,7 +39,7 @@ You can use any data source from any provider as a scoped data source within a `
A `check` block can optionally contain a nested (a.k.a. scoped) data source. This `data` block behaves like an external [data source](/terraform/language/data-sources), except you can not reference it outside its enclosing `check` block. Additionally, if a scoped data source's provider raises any errors, they are masked as warnings and do not prevent Terraform from continuing operation execution. A `check` block can optionally contain a nested (a.k.a. scoped) data source. This `data` block behaves like an external [data source](/terraform/language/data-sources), except you can not reference it outside its enclosing `check` block. Additionally, if a scoped data source's provider raises any errors, they are masked as warnings and do not prevent Terraform from continuing operation execution.
You can use a scoped data source to validate the status of a piece of infrastructure outside of the usual Terraform resource lifecycle. [In the above example](#checks-syntax), if the `terraform_io` data source fails to load, you receive a warning instead of a blocking error, which would occur if you declared this data source outside of a `check` block. You can use a scoped data source to validate the status of a piece of infrastructure outside of the usual Terraform resource lifecycle. [In the above example](#checks-syntax), if the `placeholderplaceholderplaceholder_io` data source fails to load, you receive a warning instead of a blocking error, which would occur if you declared this data source outside of a `check` block.
#### Meta-Arguments #### Meta-Arguments
@ -100,8 +100,8 @@ You can often use postconditions interchangeably with check blocks to validate r
For example, you can [rewrite the above `check` block example](#checks-syntax) to use a postcondition instead. The below code uses a `postcondition` block to validate that the Terraform website returns the expected status code of `200`. For example, you can [rewrite the above `check` block example](#checks-syntax) to use a postcondition instead. The below code uses a `postcondition` block to validate that the Terraform website returns the expected status code of `200`.
```hcl ```hcl
data "http" "terraform_io" { data "http" "placeholderplaceholderplaceholder_io" {
url = "https://www.terraform.io" url = "https://www.placeholderplaceholderplaceholder.io"
lifecycle { lifecycle {
postcondition { postcondition {

View File

@ -221,13 +221,13 @@ The following example uses a check block with an assertion to verify the Terrafo
```hcl ```hcl
check "health_check" { check "health_check" {
data "http" "terraform_io" { data "http" "placeholderplaceholderplaceholder_io" {
url = "https://www.terraform.io" url = "https://www.placeholderplaceholderplaceholder.io"
} }
assert { assert {
condition = data.http.terraform_io.status_code == 200 condition = data.http.placeholderplaceholderplaceholder_io.status_code == 200
error_message = "${data.http.terraform_io.url} returned an unhealthy status code" error_message = "${data.http.placeholderplaceholderplaceholder_io.url} returned an unhealthy status code"
} }
} }
``` ```

View File

@ -36,13 +36,13 @@ The `plantimestamp` function is not available within the Terraform console.
``` ```
```terraform ```terraform
check "terraform_io_certificate" { check "placeholderplaceholderplaceholder_io_certificate" {
data "tls_certificate" "terraform_io" { data "tls_certificate" "placeholderplaceholderplaceholder_io" {
url = "https://www.terraform.io/" url = "https://www.placeholderplaceholderplaceholder.io/"
} }
assert { assert {
condition = timecmp(plantimestamp(), data.tls_certificate.terraform_io.certificates[0].not_after) < 0 condition = timecmp(plantimestamp(), data.tls_certificate.placeholderplaceholderplaceholder_io.certificates[0].not_after) < 0
error_message = "terraform.io certificate has expired" error_message = "terraform.io certificate has expired"
} }
} }

View File

@ -40,10 +40,10 @@ Use the namespace keywords where possible, to make the intent more obvious to
a future reader: a future reader:
``` ```
> uuidv5("dns", "www.terraform.io") > uuidv5("dns", "www.placeholderplaceholderplaceholder.io")
a5008fae-b28c-5ba5-96cd-82b4c53552d6 a5008fae-b28c-5ba5-96cd-82b4c53552d6
> uuidv5("url", "https://www.terraform.io/") > uuidv5("url", "https://www.placeholderplaceholderplaceholder.io/")
9db6f67c-dd95-5ea0-aa5b-e70e5c5f7cf5 9db6f67c-dd95-5ea0-aa5b-e70e5c5f7cf5
> uuidv5("oid", "1.3.6.1.4") > uuidv5("oid", "1.3.6.1.4")
@ -58,7 +58,7 @@ UUIDs, and in some special cases it may be more appropriate to use the
UUID form: UUID form:
``` ```
> uuidv5("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.terraform.io") > uuidv5("6ba7b810-9dad-11d1-80b4-00c04fd430c8", "www.placeholderplaceholderplaceholder.io")
a5008fae-b28c-5ba5-96cd-82b4c53552d6 a5008fae-b28c-5ba5-96cd-82b4c53552d6
``` ```