Terraform Import

The Tailor Platform Terraform provider supports importing existing resources into your Terraform configuration, allowing you to bring resources that were created through the console or CLI.

Importing a single resource

You can import a single existing resource by adding a resource configuration block to your Terraform files and then running the terraform import command.

Example

Let's import an existing TailorDB Namespace into your Terraform configuration:

<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-function)">resource</span><span style="color: var(--shiki-color-text)"> &quot;tailor_tailordb&quot; &quot;example&quot; {</span></span>
<span><span style="color: var(--shiki-color-text)">    id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">&quot;trn:v1:workspace:&lt;workspace_id&gt;:tailordb:&lt;namespace&gt;&quot;</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span></span>

Then run:

<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">import</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">tailor_tailordb.example</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">trn:v1:workspace:</span><span style="color: var(--shiki-token-keyword)">&lt;</span><span style="color: var(--shiki-token-string)">workspace_i</span><span style="color: var(--shiki-color-text)">d</span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-token-string)">:tailordb:</span><span style="color: var(--shiki-token-keyword)">&lt;</span><span style="color: var(--shiki-token-string)">namespac</span><span style="color: var(--shiki-color-text)">e</span><span style="color: var(--shiki-token-keyword)">&gt;</span></span>
<span></span>

After importing, run terraform plan to verify and adjust the configuration to match the imported state.

Bulk Import existing workspace resources

You can also import all resources in a workspace by following these steps:

  1. Export existing resources:
<span><span style="color: var(--shiki-token-function)">tailorctl</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">workspace</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">export</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">--output</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&lt;</span><span style="color: var(--shiki-token-string)">your-director</span><span style="color: var(--shiki-color-text)">y</span><span style="color: var(--shiki-token-keyword)">&gt;</span></span>
<span></span>
  1. Create <your-directory>/provider.tf:
<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">  </span><span style="color: var(--shiki-token-function)">required_providers</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">    tailor </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">      source  </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">&quot;tailor-platform/tailor&quot;</span></span>
<span><span style="color: var(--shiki-color-text)">      version </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">&quot;&gt;= 1.1.1&quot;</span></span>
<span><span style="color: var(--shiki-color-text)">    }</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-token-function)">provider</span><span style="color: var(--shiki-color-text)"> &quot;tailor&quot; {}</span></span>
<span></span>
  1. Run terraform plan to generate and validate the imported resource configurations:
<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">plan</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">-generate-config-out=imported_resources.tf</span></span>
<span></span>

Review imported_resources.tf to ensure all resources are correctly imported.

Incremental Importing

Incremental importing allows you to gradually bring resources to your workspace comparing and importing only the resources not already tracked in your current state.

  1. Export current state to JSON:
<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">show</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">-json</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">existing.json</span></span>
<span></span>
  1. Export only resources not in the existing state:
<span><span style="color: var(--shiki-token-function)">tailorctl</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">workspace</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">export</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">--output</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&lt;</span><span style="color: var(--shiki-token-string)">your-director</span><span style="color: var(--shiki-color-text)">y</span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">--state</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">existing.json</span></span>
<span></span>

This will export the resources that are not in the existing.json file. Import the new resources using the Terraform import process.