<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Getting Started with the Strata Cloud Manager Terraform Provider in Strata Cloud Manager</title>
    <link>https://live.paloaltonetworks.com/t5/strata-cloud-manager/getting-started-with-the-strata-cloud-manager-terraform-provider/m-p/1255994#M144</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this guide, we will walk through the end-to-end process of setting up and managing your infrastructure as code using the &lt;STRONG&gt;Strata Cloud Manager (SCM) Terraform Provider&lt;/STRONG&gt;. We will begin with the prerequisites—creating a service account and securely configuring your provider block—before initializing your Terraform workspace.&lt;/P&gt;
&lt;P data-path-to-node="3"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-path-to-node="4"&gt;Once the foundation is set, we will explore the core lifecycle operations: Create, Read, Update, and Delete (CRUD). You will learn how to deploy resources individually or in bulk, as well as how to manage and destroy them safely. Finally, we will cover how to bring existing infrastructure under Terraform management using an import command, and we will wrap up with a troubleshooting section to help you resolve common issues.&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Create a Service Account&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To get started with creating your Terraform Environment, you must first create a Service Account. This account will provide the &lt;/SPAN&gt;&lt;STRONG&gt;Client ID&lt;/STRONG&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;STRONG&gt;Client Secret&lt;/STRONG&gt;&lt;SPAN&gt; required for Terraform to authenticate and provision your resources securely.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To create a service account, follow these steps:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Navigate to &lt;/SPAN&gt;&lt;STRONG&gt;System Settings &amp;gt; Identity &amp;amp; Access Management&lt;/STRONG&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click on &lt;/SPAN&gt;&lt;STRONG&gt;Add Identity&lt;/STRONG&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Select &lt;/SPAN&gt;&lt;STRONG&gt;Service Account&lt;/STRONG&gt;&lt;SPAN&gt; as Identity Type, and complete the required fields. Then, click &lt;/SPAN&gt;&lt;STRONG&gt;Next&lt;/STRONG&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image23.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71645iA4165B588719D8C4/image-size/large?v=v2&amp;amp;px=999" role="button" title="image23.png" alt="image23.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Download and &lt;STRONG style="font-family: inherit;"&gt;Save&lt;/STRONG&gt;&lt;SPAN&gt; the Client Credentials. Click &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Next&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image9.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71646i9893D2A45A3E6D08/image-size/large?v=v2&amp;amp;px=999" role="button" title="image9.png" alt="image9.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Assign a &lt;STRONG style="font-family: inherit;"&gt;role&lt;/STRONG&gt;&lt;SPAN&gt; to your service account, ensuring you grant only the minimum &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;permissions&lt;/STRONG&gt;&lt;SPAN&gt; necessary for your needs. Then, click &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Submit&lt;/STRONG&gt;&lt;SPAN&gt;.&lt;/SPAN&gt; &lt;BR /&gt;&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image8.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71648i89BB2DBFD40DA28D/image-size/large?v=v2&amp;amp;px=999" role="button" title="image8.png" alt="image8.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;&lt;BR /&gt;Provider Block Configuration&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Create a &lt;/SPAN&gt;&lt;SPAN&gt;provider.tf&lt;/SPAN&gt;&lt;SPAN&gt; file in your local project directory.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Copy the Configuration Block from the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/1.0.9" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.​​ This defines the provider source and version, while providing a placeholder for your connection details.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2026-06-10 at 5.27.06 PM.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71654iEDAE6797F5FE4AA5/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2026-06-10 at 5.27.06 PM.png" alt="Screenshot 2026-06-10 at 5.27.06 PM.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Paste the block into your &lt;SPAN&gt;provider.tf&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; file.&lt;BR /&gt; &lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image10.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71649i76C2C3AD09F5FEAB/image-size/large?v=v2&amp;amp;px=999" role="button" title="image10.png" alt="image10.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;&lt;BR /&gt;Populate the SCM Provider Block&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Next, populate the SCM Provider Block with your specific environment details:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;host: The SCM API endpoint.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;client_id: Your Service Account ID.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;client_secret: Your Service Account Secret.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;tsg_id: Your Tenant Service Group ID.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="markup"&gt;provider "scm" {
 host          = "api.sase.paloaltonetworks.com"
 client_id     = "&amp;lt;YOUR_CLIENT_ID&amp;gt;"
 client_secret = "&amp;lt;YOUR_CLIENT_SECRET&amp;gt;"
 scope         = "tsg_id:&amp;lt;YOUR_TSG_ID&amp;gt;"
}&lt;/LI-CODE&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Workplace Initialization&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once your provider is configured, save the file and run &lt;/SPAN&gt;&lt;SPAN&gt;terraform init&lt;/SPAN&gt;&lt;SPAN&gt; to initialize your Terraform workspace for execution. This command:&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Performs &lt;/SPAN&gt;&lt;STRONG&gt;Plugin Discovery&lt;/STRONG&gt;&lt;SPAN&gt; by identifying required providers (e.g., SCM), downloading the necessary binaries, and storing them in the .terraform/ folder.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Sets up the &lt;/SPAN&gt;&lt;STRONG&gt;Backend&lt;/STRONG&gt;&lt;SPAN&gt; by initializing the state storage (local or remote) and validating communication with the backend.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Installs &lt;/SPAN&gt;&lt;STRONG&gt;Modules&lt;/STRONG&gt;&lt;SPAN&gt; by downloading and caching all external modules defined in the code.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;With your environment now initialized, you’re ready to begin building your infrastructure. Consult the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry Documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; for supported resources, schema definitions, and code examples to help you write your Terraform configuration.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Next, we’ll walk through the core CRUD operations, starting with resource creation.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;CREATE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Deploying infrastructure with Terraform is purely &lt;/SPAN&gt;&lt;STRONG&gt;declarative&lt;/STRONG&gt;&lt;SPAN&gt;: you define what your security environment should look like, and Terraform figures out how to build it.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method A: Individual Resource Deployment&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;This method uses a single, dedicated Terraform resource block to explicitly define the exact configuration of one specific object:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Define the Component:&lt;/STRONG&gt;&lt;SPAN&gt; Create a dedicated resource block (for example, scm_tunnel_interface) in your .tf file, and populate it with the required attributes according to the schema outlined in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Provider&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;# Creating a New Folder
resource "scm_folder" "scm_new_folder" {
 name        = "TF-Slide-Demo"
 parent      = "ngfw-shared"
 description = "Managed by Terraform"
}

# Creating a Tunnel Interface
resource "scm_tunnel_interface" "scm_tunnel_interface" {
 name    = "$Tunnel-Interface"
 comment = "Managed by Terraform"
 folder  = scm_folder.scm_new_folder.name

 ip = [
   {
     name = "200.20.20.100/32"
   }
 ]
}
&lt;/LI-CODE&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview the Execution Plan:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan &lt;/SPAN&gt;&lt;SPAN&gt;to preview the changes Terraform will make. This command compares your configuration with the current state of your infrastructure and produces a detailed execution plan.&amp;nbsp;&lt;/SPAN&gt;In the output, you’ll see the expected final state of each resource, along with a clear breakdown of what Terraform intends to create, update, or remove:&amp;nbsp;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#339966"&gt;&lt;SPAN&gt;+&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be created&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#FFFF00"&gt;&lt;SPAN&gt;~&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be modified&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#FF0000"&gt;&lt;SPAN&gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be deleted &lt;/SPAN&gt;&lt;/P&gt;
&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image6.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71650i67F7D47B94CB2FD0/image-size/large?v=v2&amp;amp;px=999" role="button" title="image6.png" alt="image6.png" /&gt;&lt;/span&gt;&lt;BR /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="font-family: inherit;"&gt;Provision to SCM:&lt;/STRONG&gt;&lt;SPAN&gt; Execute&lt;/SPAN&gt;&lt;SPAN&gt; terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to instantly push the finalized configuration directly to SCM.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image7.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71651i9924BB13C4904C2C/image-size/large?v=v2&amp;amp;px=999" role="button" title="image7.png" alt="image7.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method B: Bulk Creation&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Provisioning multiple resources of the same type can quickly become tedious, whether configuring them via the UI or writing separate Terraform blocks for each one. Instead, you can streamline your workflow by leveraging a single, repeatable resource block. By pointing Terraform to an external data source (like a CSV file), it will automatically loop through your data and generate a new resource for each item. This allows you to scale effortlessly without cluttering your configuration files.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create an External Data Source:&lt;/STRONG&gt;&lt;SPAN&gt; Create an external data source file (e.g., tags.csv) containing the individual objects you want to provision.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;In this guide, we will use a CSV file as the data source. When using a CSV, your column headers act as the exact keys for your Terraform configuration. Terraform parses each row into a map of key-value pairs, which can then be referenced within your resource block using each.value.&amp;lt;header_name&amp;gt;.&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Folder&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Color&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;ENV-PROD&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Green&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;ENV-DEV&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Yellow&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;DATA-SENSITIVE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Red&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;TEAM-NETWORK&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;White&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;DEPT-FINANCE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Lavender&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;APP-DATABASE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Orange&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;TIER-FRONTEND&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Blue&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;EC-COMPLIANT&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Maroon&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;GEO-US-EAST&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Cyan&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;PROJECT-PHOENIX&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Purple&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Load the CSV in Terraform:&lt;/STRONG&gt;&lt;SPAN&gt; To load the CSV file into Terraform,&lt;/SPAN&gt; &lt;SPAN&gt;use a &lt;/SPAN&gt;&lt;SPAN&gt;locals&lt;/SPAN&gt;&lt;SPAN&gt; block combined with two built-in functions: &lt;/SPAN&gt;&lt;SPAN&gt;file()&lt;/SPAN&gt;&lt;SPAN&gt; to read the raw text, and &lt;/SPAN&gt;&lt;SPAN&gt;csvdecode()&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to parse it into a list objects Terraform can natively understand.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;locals {
 tags = csvdecode(file("${path.module}/csv_files/tags.csv"))
}
&lt;/LI-CODE&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Construct the Repeatable Resource Block: &lt;/STRONG&gt;&lt;SPAN&gt;In your configuration file, write a single resource block utilizing &lt;/SPAN&gt;&lt;SPAN&gt;for_each&lt;/SPAN&gt;&lt;SPAN&gt; to loop over the decoded data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;The name column serves as the unique key, so Terraform can track each resource individually. Each attribute is populated using each.value.&amp;lt;column_header&amp;gt;. Here, each.value represents the current row being processed, so each attribute directly maps to a column in your data source.&lt;BR /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;LI-CODE lang="markup"&gt;# Creating Tags
resource "scm_tag" "scm_tags" {
 for_each   = { for tag in local.tags : tag.name =&amp;gt; tag }
 folder     = each.value.folder
 name       = each.value.name
 color      = each.value.color

 depends_on = [ scm_folder.scm_new_folder ]
}
​&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Preview the Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;to preview the changes Terraform will make. In the output, you will see the expected final state of each resource, with all variables resolved from the input data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image11.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71652i4E0E21D27650F9CF/image-size/large?v=v2&amp;amp;px=999" role="button" title="image11.png" alt="image11.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Provision to SCM:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to push the finalized configuration directly to SCM.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image26.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71653i550B95523CEF247C/image-size/large?v=v2&amp;amp;px=999" role="button" title="image26.png" alt="image26.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Scale With Ease:&lt;/STRONG&gt;&lt;SPAN&gt; To add more resources later, simply append new items to your external data source. When you re-run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;, Terraform will instantly detect and provision the new entries without requiring you to alter a single line of your .tf scripts&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;READ&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Use Terraform Data Sources to securely pull live configuration data directly from your SCM environment without leaving your code editor. This approach provides several key benefits:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Increase Visibility:&lt;/STRONG&gt;&lt;SPAN&gt; Gain immediate, formatted visibility into your existing infrastructure directly within your codebase.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Enable Dynamic Inputs:&lt;/STRONG&gt;&lt;SPAN&gt; Leverage the retrieved output, such as Object IDs, as dynamic variables to feed into other resource blocks for complex builds.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Detect Configuration Drift:&lt;/STRONG&gt;&lt;SPAN&gt; Compare this live data against your expected state to easily identify unmanaged resources or manual changes made directly in the UI.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;Ultimately, integrating Data Sources into your workflow ensures your deployments remain accurate, highly scalable, and perfectly synchronized with the real-time state of your network.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Consult the Registry:&lt;/STRONG&gt;&lt;SPAN&gt; Search for the data source you need in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Official Terraform Registry.&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt; For this example, we'll use scm_tunnel_interface_list.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_0-1781137863287.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71655iA8406B3F474611C0/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_0-1781137863287.png" alt="ariqbal_0-1781137863287.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure the Data Source:&lt;/STRONG&gt;&lt;SPAN&gt; Copy the data source block from the registry documentation and paste it into your configuration file. It includes the data source and an output block to display the retrieved data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;Update the folder argument to match your target SCM folder, and adjust the output block to surface the specific fields you need.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;LI-CODE lang="markup"&gt;# Fetch a list of all tunnel interfaces
data "scm_tunnel_interface_list" "all_tunnel_interfaces" {
 folder = "TF-Slide-Demo"
}

# Output the raw list of all tunnel interfaces
output "scm_tunnel_interface_list" {
 description = "A list of all tunnel interfaces from the 'TF-Slide-Demo' folder."
 value       = { for interface in data.scm_tunnel_interface_list.all_tunnel_interfaces.data : interface.name =&amp;gt; interface }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Execute the Code:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to display the output.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_1-1781137939391.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71656i1F24382148B98E85/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_1-1781137939391.png" alt="ariqbal_1-1781137939391.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once a resource is managed by Terraform, updating it is straightforward: simply modify the attributes in your .tf file and apply the changes. This allows you to seamlessly push updates to your environment—for example, to correct a misconfiguration or adjust a policy—without disrupting your wider infrastructure.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Edit the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Open your .tf configuration files and modify the specific resource attributes you need to change (e.g., fixing the IP address of a tunnel interface).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Run the &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan&lt;/SPAN&gt;&lt;SPAN&gt; command and look for the tilde symbol (&lt;/SPAN&gt;&lt;FONT color="#FFFF00"&gt;&lt;SPAN&gt;~&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;) in the output. This symbol indicates that Terraform will intelligently modify the existing resource in-place rather than completely destroying and recreating it.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_2-1781138119378.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71657i22B9E85D13F77739/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_2-1781138119378.png" alt="ariqbal_2-1781138119378.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Apply the Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Execute &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to securely push the updates to your live SCM environment.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_3-1781138144276.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71658i08FD5F1508DA1935/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_3-1781138144276.png" alt="ariqbal_3-1781138144276.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;DELETE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To remove a resource, such as an outdated security rule, from your live environment, delete its configuration block from your Terraform script and run terraform apply. Terraform will intelligently reconcile the change, deleting only what was removed while leaving the rest of your infrastructure unchanged.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Remove the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Open your .tf file and delete the resource block(s) you wish to destroy in your live environment.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview the Deletion:&lt;/STRONG&gt;&lt;SPAN&gt; Run terraform plan to verify what Terraform intends to destroy. Resources flagged for deletion are marked with a red minus sign (&lt;/SPAN&gt;&lt;FONT color="#FF0000"&gt;&lt;SPAN&gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_4-1781138174281.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71659iDAA83523D7E35457/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_4-1781138174281.png" alt="ariqbal_4-1781138174281.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Apply the Change:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; Run terraform apply to remove the resource(s) from your SCM environment.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_6-1781138225071.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71661i1F7EA01506F63640/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_6-1781138225071.png" alt="ariqbal_6-1781138225071.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;FONT style="font-family: inherit;" color="#FF0000"&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN&gt; To decommission an entire environment at once, use terraform destroy. This&amp;nbsp; will systematically remove every resource tracked in your state file, leaving&amp;nbsp; a clean slate.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;IMPORT&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;When a resource is created outside of Terraform, such as a snippet object using the SCM UI, it exists in your live environment but remains completely invisible to Terraform. This gap leads to configuration drift, where your declared configuration no longer matches the actual infrastructure, increasing the risk of unexpected changes during future deployments.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt; command resolves this by bringing existing resources under Terraform management, aligning your state with reality and reestablishing your configuration as the single source of truth.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To import an object from SCM into your Terraform state, you will need its Unique ID. You can retrieve this ID using two different methods: natively through a Terraform Data Source, or by querying the API using Postman.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method A: Using a Terraform Data Source&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Using a data source is the native way to fetch information about existing infrastructure directly within Terraform.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create the Configuration File:&lt;/STRONG&gt;&lt;SPAN&gt; In your Terraform workspace, create a new file (e.g., scm_snippet_list.tf)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Consult the Registry:&lt;/STRONG&gt;&lt;SPAN&gt; Search for the data source you need in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Official Terraform Registry.&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; For this example, we'll use&amp;nbsp; scm_snippet_list.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_9-1781138369156.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71664iEB02A657B96F05F1/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_9-1781138369156.png" alt="ariqbal_9-1781138369156.png" /&gt;&lt;/span&gt;&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure the Data Source:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Copy the data source block from the registry documentation and paste it into your configuration file. It includes the data source and an output block to display the retrieved data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_10-1781138425357.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71665i38CCFF08501957FF/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_10-1781138425357.png" alt="ariqbal_10-1781138425357.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;STRONG style="font-family: inherit;"&gt;Tip:&lt;/STRONG&gt;&lt;SPAN&gt; You can increase the &lt;/SPAN&gt;&lt;SPAN&gt;limit = 10&lt;/SPAN&gt;&lt;SPAN&gt; value if you have a large number of snippets and need to retrieve more results.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Execute the Code:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to display the output.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_11-1781138475285.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71666iDD3A677D1155566B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_11-1781138475285.png" alt="ariqbal_11-1781138475285.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Copy the ID:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Once the command completes, locate your target snippet within the output and copy the corresponding ID value.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_12-1781138498637.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71667i5AC7FA88932EC6C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_12-1781138498637.png" alt="ariqbal_12-1781138498637.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method B: Using Postman&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;If you prefer to find the ID outside of Terraform, you can query the API directly using a tool, like Postman.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create a New Request:&lt;/STRONG&gt;&lt;SPAN&gt; Open Postman and create a new HTTP request. Set the HTTP method to &lt;/SPAN&gt;&lt;STRONG&gt;GET&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_13-1781138523333.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71668i6BFE042497042753/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_13-1781138523333.png" alt="ariqbal_13-1781138523333.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Enter the Endpoint:&lt;/STRONG&gt; In the URL field, enter the API endpoint used to retrieve the desired object. For full details on available endpoints, refer to the &lt;A style="font-family: inherit; background-color: #ffffff;" href="https://pan.dev/scm/docs/home/" target="_blank"&gt;SCM API Documentation&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_15-1781138588973.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71670iBED94CD13CE30E10/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_15-1781138588973.png" alt="ariqbal_15-1781138588973.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure Authorization:&lt;/STRONG&gt;&lt;SPAN&gt; Navigate to the &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Authorization Tab&lt;/STRONG&gt;&lt;SPAN&gt; and enter your Bearer Token to authenticate your request.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_14-1781138543305.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71669i087B3CFDD40FA390/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_14-1781138543305.png" alt="ariqbal_14-1781138543305.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Send the Request:&lt;/STRONG&gt;&lt;SPAN&gt; Click the &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Send&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; button to execute the API call.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_16-1781138615090.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71671i9F42DC05712725F1/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_16-1781138615090.png" alt="ariqbal_16-1781138615090.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Copy the ID:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Review the returned JSON response, locate the target snippet in the list, and copy its corresponding ID value.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_17-1781138634367.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71672iCD6FCD655475E2CF/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_17-1781138634367.png" alt="ariqbal_17-1781138634367.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV id="tinyMceEditorariqbal_23" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Perform the Import Command&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once you have the ID, you're ready to bring the resource into your Terraform state.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Prepare the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; Create an empty resource block in your .tf file to serve as a placeholder.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_20-1781138704389.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71675i91F60025E3F57910/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_20-1781138704389.png" alt="ariqbal_20-1781138704389.png" /&gt;&lt;/span&gt;&lt;STRONG style="font-family: inherit;"&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;STRONG style="font-family: inherit;"&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Execute Import Command:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform import [Resource Type].[Resource Name] [Scope Name]:::[ID of Object] &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;to pull the existing object into your state.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_19-1781138694773.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71674i6A77DC251C2D259B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_19-1781138694773.png" alt="ariqbal_19-1781138694773.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Common Issues and Helpful Tips&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Common Errors:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;401 Unauthorized:&lt;/STRONG&gt;&lt;SPAN&gt; Your credentials could not be verified. Double-check that your Client ID, Client Secret, and TSG ID) are correct in your provider configuration,&amp;nbsp; and confirm the service account is active in your tenant.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;403 Forbidden:&lt;/STRONG&gt;&lt;SPAN&gt; The service account lacks the required role. Check tenant IAM permissions.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Resource Already Exists:&lt;/STRONG&gt;&lt;SPAN&gt; Terraform is attempting to create a resource that already exists in SCM. This typically happens when a resource was created outside of Terraform. Use &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt; to bring it under Terraform management rather than recreating &amp;nbsp; it.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Attribute Errors&lt;/STRONG&gt;&lt;SPAN&gt;: Occurs when a value in your .tf file is invalid or unsupported by the provider, such as a missing required argument or an out-of-range value. Refer to the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry Documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; to verify valid attributes and acceptable values.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tips:&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Run &lt;/STRONG&gt;&lt;STRONG&gt;terraform plan&lt;/STRONG&gt;&lt;STRONG&gt; Before &lt;/STRONG&gt;&lt;STRONG&gt;terraform apply&lt;/STRONG&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;The plan output shows exactly what Terraform intends to create, update, or&amp;nbsp; destroy before any changes are made.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Use &lt;/STRONG&gt;&lt;STRONG&gt;terraform fmt&lt;/STRONG&gt;&lt;STRONG&gt; to Keep your Code Clean:&lt;/STRONG&gt;&lt;SPAN&gt; Running &lt;/SPAN&gt;&lt;SPAN&gt;terraform fmt&lt;/SPAN&gt;&lt;SPAN&gt; automatically formats your .tf files. Consistent formatting makes code easier to read, review, and collaborate on.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Use depends_on to Control Resource Order: &lt;/STRONG&gt;&lt;SPAN&gt;If a resource depends on another being created first, such as a security rule&amp;nbsp; referencing an address object, use depends_on to explicitly declare that relationship and prevent race conditions during apply.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Ex. &lt;/SPAN&gt;&lt;SPAN&gt;depends_on = [scm_address_object.my_address]&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Remove a Resource from State Without Deleting It:&lt;/STRONG&gt;&lt;SPAN&gt; If you want Terraform to stop managing a resource without deleting it from your live environment, use: &lt;/SPAN&gt;&lt;SPAN&gt;terraform state rm &amp;lt;resource_type&amp;gt;.&amp;lt;resource_name&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;. This command removes the resource only from Terraform’s state file. The actual resource in SCM remains unchanged and continues to exist in your environment. It is simply no longer tracked or managed by Terraform.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Don't Edit the State File Manually: &lt;/STRONG&gt;&lt;SPAN&gt;The .tfstate file is Terraform's source of truth. Editing it by hand can corrupt your state and cause unpredictable behavior. Use Terraform CLI&amp;nbsp; commands (e.g., &lt;/SPAN&gt;&lt;SPAN&gt;terraform state rm&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt;) to manage state safely.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
    <pubDate>Thu, 11 Jun 2026 01:19:41 GMT</pubDate>
    <dc:creator>ariqbal</dc:creator>
    <dc:date>2026-06-11T01:19:41Z</dc:date>
    <item>
      <title>Getting Started with the Strata Cloud Manager Terraform Provider</title>
      <link>https://live.paloaltonetworks.com/t5/strata-cloud-manager/getting-started-with-the-strata-cloud-manager-terraform-provider/m-p/1255994#M144</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this guide, we will walk through the end-to-end process of setting up and managing your infrastructure as code using the &lt;STRONG&gt;Strata Cloud Manager (SCM) Terraform Provider&lt;/STRONG&gt;. We will begin with the prerequisites—creating a service account and securely configuring your provider block—before initializing your Terraform workspace.&lt;/P&gt;
&lt;P data-path-to-node="3"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-path-to-node="4"&gt;Once the foundation is set, we will explore the core lifecycle operations: Create, Read, Update, and Delete (CRUD). You will learn how to deploy resources individually or in bulk, as well as how to manage and destroy them safely. Finally, we will cover how to bring existing infrastructure under Terraform management using an import command, and we will wrap up with a troubleshooting section to help you resolve common issues.&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Create a Service Account&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To get started with creating your Terraform Environment, you must first create a Service Account. This account will provide the &lt;/SPAN&gt;&lt;STRONG&gt;Client ID&lt;/STRONG&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;STRONG&gt;Client Secret&lt;/STRONG&gt;&lt;SPAN&gt; required for Terraform to authenticate and provision your resources securely.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To create a service account, follow these steps:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Navigate to &lt;/SPAN&gt;&lt;STRONG&gt;System Settings &amp;gt; Identity &amp;amp; Access Management&lt;/STRONG&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Click on &lt;/SPAN&gt;&lt;STRONG&gt;Add Identity&lt;/STRONG&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Select &lt;/SPAN&gt;&lt;STRONG&gt;Service Account&lt;/STRONG&gt;&lt;SPAN&gt; as Identity Type, and complete the required fields. Then, click &lt;/SPAN&gt;&lt;STRONG&gt;Next&lt;/STRONG&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image23.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71645iA4165B588719D8C4/image-size/large?v=v2&amp;amp;px=999" role="button" title="image23.png" alt="image23.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Download and &lt;STRONG style="font-family: inherit;"&gt;Save&lt;/STRONG&gt;&lt;SPAN&gt; the Client Credentials. Click &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Next&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image9.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71646i9893D2A45A3E6D08/image-size/large?v=v2&amp;amp;px=999" role="button" title="image9.png" alt="image9.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Assign a &lt;STRONG style="font-family: inherit;"&gt;role&lt;/STRONG&gt;&lt;SPAN&gt; to your service account, ensuring you grant only the minimum &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;permissions&lt;/STRONG&gt;&lt;SPAN&gt; necessary for your needs. Then, click &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Submit&lt;/STRONG&gt;&lt;SPAN&gt;.&lt;/SPAN&gt; &lt;BR /&gt;&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image8.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71648i89BB2DBFD40DA28D/image-size/large?v=v2&amp;amp;px=999" role="button" title="image8.png" alt="image8.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;&lt;BR /&gt;Provider Block Configuration&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Create a &lt;/SPAN&gt;&lt;SPAN&gt;provider.tf&lt;/SPAN&gt;&lt;SPAN&gt; file in your local project directory.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Copy the Configuration Block from the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/1.0.9" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.​​ This defines the provider source and version, while providing a placeholder for your connection details.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2026-06-10 at 5.27.06 PM.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71654iEDAE6797F5FE4AA5/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2026-06-10 at 5.27.06 PM.png" alt="Screenshot 2026-06-10 at 5.27.06 PM.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;Paste the block into your &lt;SPAN&gt;provider.tf&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; file.&lt;BR /&gt; &lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image10.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71649i76C2C3AD09F5FEAB/image-size/large?v=v2&amp;amp;px=999" role="button" title="image10.png" alt="image10.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;&lt;BR /&gt;Populate the SCM Provider Block&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Next, populate the SCM Provider Block with your specific environment details:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;host: The SCM API endpoint.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;client_id: Your Service Account ID.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;client_secret: Your Service Account Secret.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;tsg_id: Your Tenant Service Group ID.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="markup"&gt;provider "scm" {
 host          = "api.sase.paloaltonetworks.com"
 client_id     = "&amp;lt;YOUR_CLIENT_ID&amp;gt;"
 client_secret = "&amp;lt;YOUR_CLIENT_SECRET&amp;gt;"
 scope         = "tsg_id:&amp;lt;YOUR_TSG_ID&amp;gt;"
}&lt;/LI-CODE&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Workplace Initialization&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once your provider is configured, save the file and run &lt;/SPAN&gt;&lt;SPAN&gt;terraform init&lt;/SPAN&gt;&lt;SPAN&gt; to initialize your Terraform workspace for execution. This command:&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Performs &lt;/SPAN&gt;&lt;STRONG&gt;Plugin Discovery&lt;/STRONG&gt;&lt;SPAN&gt; by identifying required providers (e.g., SCM), downloading the necessary binaries, and storing them in the .terraform/ folder.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Sets up the &lt;/SPAN&gt;&lt;STRONG&gt;Backend&lt;/STRONG&gt;&lt;SPAN&gt; by initializing the state storage (local or remote) and validating communication with the backend.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Installs &lt;/SPAN&gt;&lt;STRONG&gt;Modules&lt;/STRONG&gt;&lt;SPAN&gt; by downloading and caching all external modules defined in the code.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;With your environment now initialized, you’re ready to begin building your infrastructure. Consult the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry Documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; for supported resources, schema definitions, and code examples to help you write your Terraform configuration.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Next, we’ll walk through the core CRUD operations, starting with resource creation.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;CREATE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Deploying infrastructure with Terraform is purely &lt;/SPAN&gt;&lt;STRONG&gt;declarative&lt;/STRONG&gt;&lt;SPAN&gt;: you define what your security environment should look like, and Terraform figures out how to build it.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method A: Individual Resource Deployment&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;This method uses a single, dedicated Terraform resource block to explicitly define the exact configuration of one specific object:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Define the Component:&lt;/STRONG&gt;&lt;SPAN&gt; Create a dedicated resource block (for example, scm_tunnel_interface) in your .tf file, and populate it with the required attributes according to the schema outlined in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Provider&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;# Creating a New Folder
resource "scm_folder" "scm_new_folder" {
 name        = "TF-Slide-Demo"
 parent      = "ngfw-shared"
 description = "Managed by Terraform"
}

# Creating a Tunnel Interface
resource "scm_tunnel_interface" "scm_tunnel_interface" {
 name    = "$Tunnel-Interface"
 comment = "Managed by Terraform"
 folder  = scm_folder.scm_new_folder.name

 ip = [
   {
     name = "200.20.20.100/32"
   }
 ]
}
&lt;/LI-CODE&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview the Execution Plan:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan &lt;/SPAN&gt;&lt;SPAN&gt;to preview the changes Terraform will make. This command compares your configuration with the current state of your infrastructure and produces a detailed execution plan.&amp;nbsp;&lt;/SPAN&gt;In the output, you’ll see the expected final state of each resource, along with a clear breakdown of what Terraform intends to create, update, or remove:&amp;nbsp;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#339966"&gt;&lt;SPAN&gt;+&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be created&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#FFFF00"&gt;&lt;SPAN&gt;~&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be modified&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;FONT color="#FF0000"&gt;&lt;SPAN&gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; indicates resources that will be deleted &lt;/SPAN&gt;&lt;/P&gt;
&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image6.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71650i67F7D47B94CB2FD0/image-size/large?v=v2&amp;amp;px=999" role="button" title="image6.png" alt="image6.png" /&gt;&lt;/span&gt;&lt;BR /&gt;
&lt;P class="lia-indent-padding-left-60px"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="font-family: inherit;"&gt;Provision to SCM:&lt;/STRONG&gt;&lt;SPAN&gt; Execute&lt;/SPAN&gt;&lt;SPAN&gt; terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to instantly push the finalized configuration directly to SCM.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image7.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71651i9924BB13C4904C2C/image-size/large?v=v2&amp;amp;px=999" role="button" title="image7.png" alt="image7.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method B: Bulk Creation&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Provisioning multiple resources of the same type can quickly become tedious, whether configuring them via the UI or writing separate Terraform blocks for each one. Instead, you can streamline your workflow by leveraging a single, repeatable resource block. By pointing Terraform to an external data source (like a CSV file), it will automatically loop through your data and generate a new resource for each item. This allows you to scale effortlessly without cluttering your configuration files.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create an External Data Source:&lt;/STRONG&gt;&lt;SPAN&gt; Create an external data source file (e.g., tags.csv) containing the individual objects you want to provision.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;In this guide, we will use a CSV file as the data source. When using a CSV, your column headers act as the exact keys for your Terraform configuration. Terraform parses each row into a map of key-value pairs, which can then be referenced within your resource block using each.value.&amp;lt;header_name&amp;gt;.&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Folder&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Name&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;STRONG&gt;Color&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;ENV-PROD&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Green&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;ENV-DEV&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Yellow&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;DATA-SENSITIVE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Red&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;TEAM-NETWORK&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;White&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;DEPT-FINANCE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Lavender&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;APP-DATABASE&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Orange&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;TIER-FRONTEND&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Blue&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;EC-COMPLIANT&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Maroon&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;GEO-US-EAST&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Cyan&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;SCM-TF-Demo&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;PROJECT-PHOENIX&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD class="lia-align-center"&gt;
&lt;P&gt;&lt;SPAN&gt;Purple&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Load the CSV in Terraform:&lt;/STRONG&gt;&lt;SPAN&gt; To load the CSV file into Terraform,&lt;/SPAN&gt; &lt;SPAN&gt;use a &lt;/SPAN&gt;&lt;SPAN&gt;locals&lt;/SPAN&gt;&lt;SPAN&gt; block combined with two built-in functions: &lt;/SPAN&gt;&lt;SPAN&gt;file()&lt;/SPAN&gt;&lt;SPAN&gt; to read the raw text, and &lt;/SPAN&gt;&lt;SPAN&gt;csvdecode()&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to parse it into a list objects Terraform can natively understand.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;locals {
 tags = csvdecode(file("${path.module}/csv_files/tags.csv"))
}
&lt;/LI-CODE&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Construct the Repeatable Resource Block: &lt;/STRONG&gt;&lt;SPAN&gt;In your configuration file, write a single resource block utilizing &lt;/SPAN&gt;&lt;SPAN&gt;for_each&lt;/SPAN&gt;&lt;SPAN&gt; to loop over the decoded data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;The name column serves as the unique key, so Terraform can track each resource individually. Each attribute is populated using each.value.&amp;lt;column_header&amp;gt;. Here, each.value represents the current row being processed, so each attribute directly maps to a column in your data source.&lt;BR /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;LI-CODE lang="markup"&gt;# Creating Tags
resource "scm_tag" "scm_tags" {
 for_each   = { for tag in local.tags : tag.name =&amp;gt; tag }
 folder     = each.value.folder
 name       = each.value.name
 color      = each.value.color

 depends_on = [ scm_folder.scm_new_folder ]
}
​&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Preview the Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;to preview the changes Terraform will make. In the output, you will see the expected final state of each resource, with all variables resolved from the input data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image11.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71652i4E0E21D27650F9CF/image-size/large?v=v2&amp;amp;px=999" role="button" title="image11.png" alt="image11.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Provision to SCM:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to push the finalized configuration directly to SCM.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image26.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71653i550B95523CEF247C/image-size/large?v=v2&amp;amp;px=999" role="button" title="image26.png" alt="image26.png" /&gt;&lt;/span&gt;
&lt;P&gt; &lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Scale With Ease:&lt;/STRONG&gt;&lt;SPAN&gt; To add more resources later, simply append new items to your external data source. When you re-run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;, Terraform will instantly detect and provision the new entries without requiring you to alter a single line of your .tf scripts&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;READ&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Use Terraform Data Sources to securely pull live configuration data directly from your SCM environment without leaving your code editor. This approach provides several key benefits:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Increase Visibility:&lt;/STRONG&gt;&lt;SPAN&gt; Gain immediate, formatted visibility into your existing infrastructure directly within your codebase.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Enable Dynamic Inputs:&lt;/STRONG&gt;&lt;SPAN&gt; Leverage the retrieved output, such as Object IDs, as dynamic variables to feed into other resource blocks for complex builds.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Detect Configuration Drift:&lt;/STRONG&gt;&lt;SPAN&gt; Compare this live data against your expected state to easily identify unmanaged resources or manual changes made directly in the UI.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;Ultimately, integrating Data Sources into your workflow ensures your deployments remain accurate, highly scalable, and perfectly synchronized with the real-time state of your network.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Consult the Registry:&lt;/STRONG&gt;&lt;SPAN&gt; Search for the data source you need in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Official Terraform Registry.&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt; For this example, we'll use scm_tunnel_interface_list.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_0-1781137863287.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71655iA8406B3F474611C0/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_0-1781137863287.png" alt="ariqbal_0-1781137863287.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure the Data Source:&lt;/STRONG&gt;&lt;SPAN&gt; Copy the data source block from the registry documentation and paste it into your configuration file. It includes the data source and an output block to display the retrieved data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;Update the folder argument to match your target SCM folder, and adjust the output block to surface the specific fields you need.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;LI-CODE lang="markup"&gt;# Fetch a list of all tunnel interfaces
data "scm_tunnel_interface_list" "all_tunnel_interfaces" {
 folder = "TF-Slide-Demo"
}

# Output the raw list of all tunnel interfaces
output "scm_tunnel_interface_list" {
 description = "A list of all tunnel interfaces from the 'TF-Slide-Demo' folder."
 value       = { for interface in data.scm_tunnel_interface_list.all_tunnel_interfaces.data : interface.name =&amp;gt; interface }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Execute the Code:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to display the output.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_1-1781137939391.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71656i1F24382148B98E85/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_1-1781137939391.png" alt="ariqbal_1-1781137939391.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;UPDATE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once a resource is managed by Terraform, updating it is straightforward: simply modify the attributes in your .tf file and apply the changes. This allows you to seamlessly push updates to your environment—for example, to correct a misconfiguration or adjust a policy—without disrupting your wider infrastructure.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Edit the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Open your .tf configuration files and modify the specific resource attributes you need to change (e.g., fixing the IP address of a tunnel interface).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Run the &lt;/SPAN&gt;&lt;SPAN&gt;terraform plan&lt;/SPAN&gt;&lt;SPAN&gt; command and look for the tilde symbol (&lt;/SPAN&gt;&lt;FONT color="#FFFF00"&gt;&lt;SPAN&gt;~&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;) in the output. This symbol indicates that Terraform will intelligently modify the existing resource in-place rather than completely destroying and recreating it.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_2-1781138119378.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71657i22B9E85D13F77739/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_2-1781138119378.png" alt="ariqbal_2-1781138119378.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Apply the Changes:&lt;/STRONG&gt;&lt;SPAN&gt; Execute &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to securely push the updates to your live SCM environment.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_3-1781138144276.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71658i08FD5F1508DA1935/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_3-1781138144276.png" alt="ariqbal_3-1781138144276.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;DELETE&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To remove a resource, such as an outdated security rule, from your live environment, delete its configuration block from your Terraform script and run terraform apply. Terraform will intelligently reconcile the change, deleting only what was removed while leaving the rest of your infrastructure unchanged.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Remove the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Open your .tf file and delete the resource block(s) you wish to destroy in your live environment.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Preview the Deletion:&lt;/STRONG&gt;&lt;SPAN&gt; Run terraform plan to verify what Terraform intends to destroy. Resources flagged for deletion are marked with a red minus sign (&lt;/SPAN&gt;&lt;FONT color="#FF0000"&gt;&lt;SPAN&gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;).&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_4-1781138174281.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71659iDAA83523D7E35457/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_4-1781138174281.png" alt="ariqbal_4-1781138174281.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Apply the Change:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; Run terraform apply to remove the resource(s) from your SCM environment.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_6-1781138225071.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71661i1F7EA01506F63640/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_6-1781138225071.png" alt="ariqbal_6-1781138225071.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;FONT style="font-family: inherit;" color="#FF0000"&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN&gt; To decommission an entire environment at once, use terraform destroy. This&amp;nbsp; will systematically remove every resource tracked in your state file, leaving&amp;nbsp; a clean slate.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;IMPORT&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;When a resource is created outside of Terraform, such as a snippet object using the SCM UI, it exists in your live environment but remains completely invisible to Terraform. This gap leads to configuration drift, where your declared configuration no longer matches the actual infrastructure, increasing the risk of unexpected changes during future deployments.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt; command resolves this by bringing existing resources under Terraform management, aligning your state with reality and reestablishing your configuration as the single source of truth.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;To import an object from SCM into your Terraform state, you will need its Unique ID. You can retrieve this ID using two different methods: natively through a Terraform Data Source, or by querying the API using Postman.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method A: Using a Terraform Data Source&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Using a data source is the native way to fetch information about existing infrastructure directly within Terraform.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create the Configuration File:&lt;/STRONG&gt;&lt;SPAN&gt; In your Terraform workspace, create a new file (e.g., scm_snippet_list.tf)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Consult the Registry:&lt;/STRONG&gt;&lt;SPAN&gt; Search for the data source you need in the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Official Terraform Registry.&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; For this example, we'll use&amp;nbsp; scm_snippet_list.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_9-1781138369156.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71664iEB02A657B96F05F1/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_9-1781138369156.png" alt="ariqbal_9-1781138369156.png" /&gt;&lt;/span&gt;&lt;BR /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure the Data Source:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Copy the data source block from the registry documentation and paste it into your configuration file. It includes the data source and an output block to display the retrieved data.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_10-1781138425357.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71665i38CCFF08501957FF/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_10-1781138425357.png" alt="ariqbal_10-1781138425357.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;STRONG style="font-family: inherit;"&gt;Tip:&lt;/STRONG&gt;&lt;SPAN&gt; You can increase the &lt;/SPAN&gt;&lt;SPAN&gt;limit = 10&lt;/SPAN&gt;&lt;SPAN&gt; value if you have a large number of snippets and need to retrieve more results.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Execute the Code:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform apply&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; to display the output.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_11-1781138475285.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71666iDD3A677D1155566B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_11-1781138475285.png" alt="ariqbal_11-1781138475285.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Copy the ID:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Once the command completes, locate your target snippet within the output and copy the corresponding ID value.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_12-1781138498637.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71667i5AC7FA88932EC6C7/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_12-1781138498637.png" alt="ariqbal_12-1781138498637.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Method B: Using Postman&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;If you prefer to find the ID outside of Terraform, you can query the API directly using a tool, like Postman.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Create a New Request:&lt;/STRONG&gt;&lt;SPAN&gt; Open Postman and create a new HTTP request. Set the HTTP method to &lt;/SPAN&gt;&lt;STRONG&gt;GET&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_13-1781138523333.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71668i6BFE042497042753/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_13-1781138523333.png" alt="ariqbal_13-1781138523333.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Enter the Endpoint:&lt;/STRONG&gt; In the URL field, enter the API endpoint used to retrieve the desired object. For full details on available endpoints, refer to the &lt;A style="font-family: inherit; background-color: #ffffff;" href="https://pan.dev/scm/docs/home/" target="_blank"&gt;SCM API Documentation&lt;/A&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_15-1781138588973.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71670iBED94CD13CE30E10/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_15-1781138588973.png" alt="ariqbal_15-1781138588973.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG style="font-family: inherit;"&gt;Configure Authorization:&lt;/STRONG&gt;&lt;SPAN&gt; Navigate to the &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Authorization Tab&lt;/STRONG&gt;&lt;SPAN&gt; and enter your Bearer Token to authenticate your request.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_14-1781138543305.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71669i087B3CFDD40FA390/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_14-1781138543305.png" alt="ariqbal_14-1781138543305.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Send the Request:&lt;/STRONG&gt;&lt;SPAN&gt; Click the &lt;/SPAN&gt;&lt;STRONG style="font-family: inherit;"&gt;Send&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; button to execute the API call.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_16-1781138615090.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71671i9F42DC05712725F1/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_16-1781138615090.png" alt="ariqbal_16-1781138615090.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Copy the ID:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt; Review the returned JSON response, locate the target snippet in the list, and copy its corresponding ID value.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_17-1781138634367.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71672iCD6FCD655475E2CF/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_17-1781138634367.png" alt="ariqbal_17-1781138634367.png" /&gt;&lt;/span&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV id="tinyMceEditorariqbal_23" class="mceNonEditable lia-copypaste-placeholder"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;H4&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Perform the Import Command&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H4&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Once you have the ID, you're ready to bring the resource into your Terraform state.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Prepare the Configuration:&lt;/STRONG&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt; Create an empty resource block in your .tf file to serve as a placeholder.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_20-1781138704389.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71675i91F60025E3F57910/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_20-1781138704389.png" alt="ariqbal_20-1781138704389.png" /&gt;&lt;/span&gt;&lt;STRONG style="font-family: inherit;"&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;STRONG style="font-family: inherit;"&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG style="font-family: inherit;"&gt;Execute Import Command:&lt;/STRONG&gt;&lt;SPAN&gt; Run &lt;/SPAN&gt;&lt;SPAN&gt;terraform import [Resource Type].[Resource Name] [Scope Name]:::[ID of Object] &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;to pull the existing object into your state.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ariqbal_19-1781138694773.png" style="width: 999px;"&gt;&lt;img src="https://live.paloaltonetworks.com/t5/image/serverpage/image-id/71674i6A77DC251C2D259B/image-size/large?v=v2&amp;amp;px=999" role="button" title="ariqbal_19-1781138694773.png" alt="ariqbal_19-1781138694773.png" /&gt;&lt;/span&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;FONT color="#FF6600"&gt;&lt;STRONG&gt;Common Issues and Helpful Tips&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Common Errors:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;401 Unauthorized:&lt;/STRONG&gt;&lt;SPAN&gt; Your credentials could not be verified. Double-check that your Client ID, Client Secret, and TSG ID) are correct in your provider configuration,&amp;nbsp; and confirm the service account is active in your tenant.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;403 Forbidden:&lt;/STRONG&gt;&lt;SPAN&gt; The service account lacks the required role. Check tenant IAM permissions.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Resource Already Exists:&lt;/STRONG&gt;&lt;SPAN&gt; Terraform is attempting to create a resource that already exists in SCM. This typically happens when a resource was created outside of Terraform. Use &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt; to bring it under Terraform management rather than recreating &amp;nbsp; it.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Attribute Errors&lt;/STRONG&gt;&lt;SPAN&gt;: Occurs when a value in your .tf file is invalid or unsupported by the provider, such as a missing required argument or an out-of-range value. Refer to the &lt;/SPAN&gt;&lt;A href="https://registry.terraform.io/providers/PaloAltoNetworks/scm/latest/docs" target="_blank"&gt;&lt;SPAN&gt;SCM Terraform Registry Documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; to verify valid attributes and acceptable values.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tips:&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Run &lt;/STRONG&gt;&lt;STRONG&gt;terraform plan&lt;/STRONG&gt;&lt;STRONG&gt; Before &lt;/STRONG&gt;&lt;STRONG&gt;terraform apply&lt;/STRONG&gt;&lt;STRONG&gt;: &lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;The plan output shows exactly what Terraform intends to create, update, or&amp;nbsp; destroy before any changes are made.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Use &lt;/STRONG&gt;&lt;STRONG&gt;terraform fmt&lt;/STRONG&gt;&lt;STRONG&gt; to Keep your Code Clean:&lt;/STRONG&gt;&lt;SPAN&gt; Running &lt;/SPAN&gt;&lt;SPAN&gt;terraform fmt&lt;/SPAN&gt;&lt;SPAN&gt; automatically formats your .tf files. Consistent formatting makes code easier to read, review, and collaborate on.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Use depends_on to Control Resource Order: &lt;/STRONG&gt;&lt;SPAN&gt;If a resource depends on another being created first, such as a security rule&amp;nbsp; referencing an address object, use depends_on to explicitly declare that relationship and prevent race conditions during apply.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Ex. &lt;/SPAN&gt;&lt;SPAN&gt;depends_on = [scm_address_object.my_address]&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Remove a Resource from State Without Deleting It:&lt;/STRONG&gt;&lt;SPAN&gt; If you want Terraform to stop managing a resource without deleting it from your live environment, use: &lt;/SPAN&gt;&lt;SPAN&gt;terraform state rm &amp;lt;resource_type&amp;gt;.&amp;lt;resource_name&amp;gt;&lt;/SPAN&gt;&lt;SPAN&gt;. This command removes the resource only from Terraform’s state file. The actual resource in SCM remains unchanged and continues to exist in your environment. It is simply no longer tracked or managed by Terraform.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Don't Edit the State File Manually: &lt;/STRONG&gt;&lt;SPAN&gt;The .tfstate file is Terraform's source of truth. Editing it by hand can corrupt your state and cause unpredictable behavior. Use Terraform CLI&amp;nbsp; commands (e.g., &lt;/SPAN&gt;&lt;SPAN&gt;terraform state rm&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;terraform import&lt;/SPAN&gt;&lt;SPAN&gt;) to manage state safely.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Thu, 11 Jun 2026 01:19:41 GMT</pubDate>
      <guid>https://live.paloaltonetworks.com/t5/strata-cloud-manager/getting-started-with-the-strata-cloud-manager-terraform-provider/m-p/1255994#M144</guid>
      <dc:creator>ariqbal</dc:creator>
      <dc:date>2026-06-11T01:19:41Z</dc:date>
    </item>
  </channel>
</rss>

