Terraform Commands

WHAT TO KNOW - Sep 21 - - Dev Community
<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Terraform Commands: A Comprehensive Guide
  </title>
  <link href="style.css" rel="stylesheet"/>
 </head>
 <body>
  <header>
   <h1>
    Terraform Commands: A Comprehensive Guide
   </h1>
  </header>
  <main>
   <section id="introduction">
    <h2>
     Introduction
    </h2>
    <p>
     In the ever-evolving landscape of cloud infrastructure management, automation has emerged as a crucial element for efficiency, consistency, and scalability. Terraform, an open-source infrastructure as code (IaC) tool, has gained widespread adoption for its ability to define and provision infrastructure resources across multiple cloud providers and on-premises environments.
    </p>
    <p>
     This comprehensive guide delves into the world of Terraform commands, providing an in-depth exploration of their syntax, functionality, and practical applications. We'll cover everything from basic commands to advanced features, enabling you to confidently navigate the realm of infrastructure automation with Terraform.
    </p>
   </section>
   <section id="key-concepts">
    <h2>
     Key Concepts, Techniques, and Tools
    </h2>
    <h3>
     Terraform Fundamentals
    </h3>
    <p>
     At its core, Terraform utilizes a declarative language called HashiCorp Configuration Language (HCL) to define infrastructure resources. HCL allows you to describe your desired infrastructure state in a human-readable format, making it easier to manage and understand. Terraform then translates this configuration into provider-specific API calls, ensuring consistent and reproducible infrastructure deployments.
    </p>
    <ul>
     <li>
      <b>
       Resources:
      </b>
      Building blocks of your infrastructure, such as virtual machines, storage volumes, networking components, and more. Each resource is defined by its type and attributes.
     </li>
     <li>
      <b>
       Providers:
      </b>
      Terraform plugins responsible for interacting with specific cloud providers or other services. They handle API calls, authentication, and resource management.
     </li>
     <li>
      <b>
       Modules:
      </b>
      Reusable blocks of Terraform code that encapsulate related resources and configurations, promoting code reusability and organization.
     </li>
     <li>
      <b>
       State:
      </b>
      A record of the current infrastructure managed by Terraform, stored locally or remotely. It tracks resource creation, modification, and deletion, ensuring accurate and efficient resource management.
     </li>
     <li>
      <b>
       Workspaces:
      </b>
      Independent environments within Terraform that allow you to manage multiple versions or configurations of your infrastructure simultaneously.
     </li>
    </ul>
    <h3>
     Tools and Frameworks
    </h3>
    <p>
     Beyond the core concepts, Terraform offers a range of tools and frameworks to enhance your workflow and collaboration:
    </p>
    <ul>
     <li>
      <b>
       Terraform Cloud/Terraform Enterprise:
      </b>
      SaaS and on-premises platforms, respectively, providing collaboration features, remote state management, and advanced workflows.
     </li>
     <li>
      <b>
       Terraform CLI:
      </b>
      The primary interface for interacting with Terraform, offering a wide range of commands for initialization, planning, and applying infrastructure changes.
     </li>
     <li>
      <b>
       Terraform Registry:
      </b>
      A centralized repository for sharing and discovering Terraform modules, providers, and other reusable components.
     </li>
     <li>
      <b>
       Terraform Provider SDK:
      </b>
      Allows developers to create custom providers for integrating with new services or platforms.
     </li>
    </ul>
   </section>
   <section id="practical-use-cases">
    <h2>
     Practical Use Cases and Benefits
    </h2>
    <p>
     Terraform's versatility makes it applicable across various industries and use cases. Here are some notable examples:
    </p>
    <ul>
     <li>
      <b>
       Cloud Infrastructure Deployment:
      </b>
      Provisioning and managing resources in major cloud providers such as AWS, Azure, Google Cloud, and more.
     </li>
     <li>
      <b>
       On-premises Infrastructure:
      </b>
      Configuring and managing physical and virtual infrastructure in data centers.
     </li>
     <li>
      <b>
       DevOps Automation:
      </b>
      Automating infrastructure setup, application deployments, and other DevOps tasks.
     </li>
     <li>
      <b>
       Security and Compliance:
      </b>
      Enforcing security configurations, implementing compliance requirements, and automating security audits.
     </li>
     <li>
      <b>
       Multi-cloud Management:
      </b>
      Managing and orchestrating resources across different cloud providers, enabling hybrid and multi-cloud strategies.
     </li>
     <li>
      <b>
       Kubernetes Deployment:
      </b>
      Provisioning and configuring Kubernetes clusters, deployments, and services.
     </li>
    </ul>
    <h3>
     Benefits of Terraform
    </h3>
    <p>
     Using Terraform offers numerous advantages:
    </p>
    <ul>
     <li>
      <b>
       Infrastructure as Code (IaC):
      </b>
      Defines infrastructure in code, promoting version control, collaboration, and repeatability.
     </li>
     <li>
      <b>
       Automation:
      </b>
      Automates infrastructure provisioning, reducing manual errors and increasing efficiency.
     </li>
     <li>
      <b>
       Scalability:
      </b>
      Handles complex infrastructure deployments with ease, facilitating scalability and growth.
     </li>
     <li>
      <b>
       Cloud-Agnostic:
      </b>
      Supports multiple cloud providers, enabling flexibility and portability.
     </li>
     <li>
      <b>
       Consistency:
      </b>
      Ensures consistent infrastructure deployments, reducing configuration drift and inconsistencies.
     </li>
     <li>
      <b>
       Documentation:
      </b>
      The configuration itself acts as documentation, simplifying infrastructure understanding and management.
     </li>
    </ul>
   </section>
   <section id="commands-guide">
    <h2>
     Terraform Commands: A Comprehensive Guide
    </h2>
    <p>
     This section provides a comprehensive breakdown of commonly used Terraform commands, covering their functionality and usage.
    </p>
    <div class="command-section">
     <h3>
      Initialization (terraform init)
     </h3>
     <p>
      The
      <code>
       terraform init
      </code>
      command is used to initialize a Terraform working directory. It performs the following tasks:
     </p>
     <ul>
      <li>
       Downloads and installs necessary plugins (providers).
      </li>
      <li>
       Initializes the Terraform state.
      </li>
      <li>
       Creates the required directories and files for the project.
      </li>
     </ul>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform init</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform init</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>Initializing the Terraform modules...
Installing the required plugins...
Initializing provider plugins...
Successfully initialized!</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Planning (terraform plan)
     </h3>
     <p>
      The
      <code>
       terraform plan
      </code>
      command creates an execution plan, outlining the changes that Terraform will make to your infrastructure. It compares the current state of your infrastructure with the configuration defined in your Terraform files and generates a detailed plan of actions.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform plan [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -out=PLAN_FILE
       </code>
       : Saves the execution plan to a file.
      </li>
      <li>
       <code>
        -input=FALSE
       </code>
       : Disables interactive input during planning.
      </li>
      <li>
       <code>
        -destroy
       </code>
       : Plans for resource destruction.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform plan -out=my-plan.txt</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Plan: 2 to add, 0 to change, 0 to destroy.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Applying Changes (terraform apply)
     </h3>
     <p>
      The
      <code>
       terraform apply
      </code>
      command executes the planned changes to your infrastructure. It uses the execution plan generated by
      <code>
       terraform plan
      </code>
      to create, update, or delete resources as defined.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform apply [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -input=FALSE
       </code>
       : Disables interactive input during application.
      </li>
      <li>
       <code>
        -auto-approve
       </code>
       : Automatically approves all changes without prompting for confirmation.
      </li>
      <li>
       <code>
        -target=RESOURCE_ADDRESS
       </code>
       : Applies changes to a specific resource.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform apply -auto-approve</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Applying changes:
...
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Destroying Resources (terraform destroy)
     </h3>
     <p>
      The
      <code>
       terraform destroy
      </code>
      command destroys all resources managed by Terraform. It will prompt you to confirm the destruction before proceeding.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform destroy [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -auto-approve
       </code>
       : Automatically confirms the destruction without prompting.
      </li>
      <li>
       <code>
        -target=RESOURCE_ADDRESS
       </code>
       : Destroys a specific resource.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform destroy -auto-approve</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Destroying resources:
...
Destroy complete! Resources: 2 destroyed.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Outputting Values (terraform output)
     </h3>
     <p>
      The
      <code>
       terraform output
      </code>
      command displays the values of output variables defined in your Terraform configuration. This is useful for retrieving information about your deployed resources, such as IP addresses, URLs, or other relevant attributes.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform output [NAME]</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform output public_ip</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>Value: 10.0.0.10
Type: TypeString</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Refreshing State (terraform refresh)
     </h3>
     <p>
      The
      <code>
       terraform refresh
      </code>
      command updates the Terraform state with the latest configuration and information from your infrastructure. This is useful for ensuring that your state file accurately reflects the current state of your resources, especially if changes have been made outside of Terraform.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform refresh [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -target=RESOURCE_ADDRESS
       </code>
       : Refreshes a specific resource.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform refresh</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Refreshing Terraform state...
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Showing State (terraform show)
     </h3>
     <p>
      The
      <code>
       terraform show
      </code>
      command displays the Terraform state in a human-readable format. This provides a comprehensive overview of the resources managed by Terraform, including their attributes, dependencies, and current state.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform show [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -target=RESOURCE_ADDRESS
       </code>
       : Shows information about a specific resource.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform show</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Terraform state:
...
Resources:
...
Outputs:
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Validating Configuration (terraform validate)
     </h3>
     <p>
      The
      <code>
       terraform validate
      </code>
      command checks your Terraform configuration for syntax errors and potential issues. It ensures that your configuration is well-formed and conforms to the HCL language specifications.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform validate</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform validate</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Configuration is valid!
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Importing Resources (terraform import)
     </h3>
     <p>
      The
      <code>
       terraform import
      </code>
      command allows you to import existing resources into Terraform's management. This is useful for bringing existing infrastructure under Terraform's control or for managing resources that were created outside of Terraform.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform import RESOURCE_TYPE RESOURCE_ADDRESS</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform import aws_instance.web_server i-0123456789abcdef0</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
aws_instance.web_server: Importing from ID "i-0123456789abcdef0"...
...
Successfully imported!</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Force-Applying Changes (terraform force-apply)
     </h3>
     <p>
      The
      <code>
       terraform force-apply
      </code>
      command allows you to apply changes even if Terraform detects that the changes are not planned or are considered destructive. This should be used with caution and only in cases where you are confident of the desired outcome.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform force-apply [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -target=RESOURCE_ADDRESS
       </code>
       : Force-applies changes to a specific resource.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform force-apply -target=aws_instance.web_server</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Force-applying changes:
...
Force apply complete! Resources: 1 changed.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Cleaning Up (terraform taint)
     </h3>
     <p>
      The
      <code>
       terraform taint
      </code>
      command marks a resource as tainted. A tainted resource will be destroyed and recreated on the next apply, effectively resetting it to its default state.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform taint RESOURCE_TYPE.RESOURCE_NAME</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform taint aws_instance.web_server</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Resource aws_instance.web_server has been tainted.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Removing Taints (terraform untaint)
     </h3>
     <p>
      The
      <code>
       terraform untaint
      </code>
      command removes a taint from a resource. Once untainted, the resource will no longer be destroyed and recreated on the next apply.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform untaint RESOURCE_TYPE.RESOURCE_NAME</code></pre>
     <h4>
      Example
     </h4>
     <pre><code>terraform untaint aws_instance.web_server</code></pre>
     <h4>
      Output
     </h4>
     <pre><code>...
Resource aws_instance.web_server has been untainted.
...</code></pre>
    </div>
    <div class="command-section">
     <h3>
      Generating Documentation (terraform docs)
     </h3>
     <p>
      The
      <code>
       terraform docs
      </code>
      command generates documentation for your Terraform configuration. This can be helpful for understanding the infrastructure defined in your Terraform files and for sharing information with others.
     </p>
     <h4>
      Syntax
     </h4>
     <pre><code>terraform docs [options]</code></pre>
     <h4>
      Options
     </h4>
     <ul>
      <li>
       <code>
        -out=OUTPUT_FILE
       </code>
       : Saves the generated documentation to a file.
      </li>
      <li>
       <code>
        -json
       </code>
       : Outputs documentation in JSON format.
      </li>
     </ul>
     <h4>
      Example
     </h4>
     <pre><code>terraform docs -out=my-docs.html</code></pre>
     <h4>
      Output
     </h4>
     <p>
      This command generates an HTML file with documentation for your Terraform configuration.
     </p>
    </div>
   </section>
   <section id="challenges-limitations">
    <h2>
     Challenges and Limitations
    </h2>
    <p>
     While Terraform is a powerful tool, it's important to be aware of potential challenges and limitations:
    </p>
    <ul>
     <li>
      <b>
       Learning Curve:
      </b>
      Terraform has a learning curve, especially for those new to IaC or cloud infrastructure management.
     </li>
     <li>
      <b>
       State Management:
      </b>
      Managing the Terraform state file can be challenging, especially in complex environments or with multiple teams working on the same infrastructure.
     </li>
     <li>
      <b>
       Provider Compatibility:
      </b>
      Not all cloud providers or services have comprehensive Terraform providers, limiting the scope of automation.
     </li>
     <li>
      <b>
       Resource Drift:
      </b>
      Changes made outside of Terraform can cause resource drift, leading to inconsistencies between the state and actual infrastructure.
     </li>
     <li>
      <b>
       Performance:
      </b>
      Large infrastructure deployments or complex configurations can impact performance, especially when using Terraform for the first time.
     </li>
     <li>
      <b>
       Security Considerations:
      </b>
      Terraform's configuration files and state data may contain sensitive information, requiring proper security measures to protect them.
     </li>
    </ul>
    <h3>
     Overcoming Challenges
    </h3>
    <p>
     These challenges can be mitigated through:
    </p>
    <ul>
     <li>
      <b>
       Comprehensive Training:
      </b>
      Invest in training and resources to learn Terraform effectively.
     </li>
     <li>
      <b>
       Remote State Management:
      </b>
      Utilize Terraform Cloud/Enterprise or other remote state management tools to simplify state management.
     </li>
     <li>
      <b>
       Custom Providers:
      </b>
      Develop custom providers for services not supported by official providers.
     </li>
     <li>
      <b>
       Regular Refreshing:
      </b>
      Regularly refresh your Terraform state to ensure it remains synchronized with your infrastructure.
     </li>
     <li>
      <b>
       Performance Optimization:
      </b>
      Optimize your Terraform configuration and leverage caching mechanisms for improved performance.
     </li>
     <li>
      <b>
       Security Best Practices:
      </b>
      Implement strong security measures for your Terraform configuration files and state data.
     </li>
    </ul>
   </section>
   <section id="comparison-alternatives">
    <h2>
     Comparison with Alternatives
    </h2>
    <p>
     Terraform is not the only IaC tool available. Here's a comparison with other popular alternatives:
    </p>
    <table>
     <thead>
      <tr>
       <th>
        Tool
       </th>
       <th>
        Language
       </th>
       <th>
        Strengths
       </th>
       <th>
        Weaknesses
       </th>
      </tr>
     </thead>
     <tbody>
      <tr>
       <td>
        Terraform
       </td>
       <td>
        HashiCorp Configuration Language (HCL)
       </td>
       <td>
        <ul>
         <li>
          Extensive provider support
         </li>
         <li>
          Declarative approach
         </li>
         <li>
          Strong community and ecosystem
         </li>
        </ul>
       </td>
       <td>
        <ul>
         <li>
          Learning curve for HCL
         </li>
         <li>
          State management complexity in large environments
         </li>
        </ul>
       </td>
      </tr>
      <tr>
       <td>
        Ansible
       </td>
       <td>
        YAML, Jinja2 templating
       </td>
       <td>
        <ul>
         <li>
          Procedural approach
         </li>
         <li>
          Wide variety of modules and roles
         </li>
        </ul>
       </td>
       <td>
        <ul>
         <li>
          Less declarative than Terraform
         </li>
         <li>
          Can be complex to manage in large deployments
         </li>
        </ul>
       </td>
      </tr>
      <tr>
       <td>
        CloudFormation (AWS)
       </td>
       <td>
        YAML, JSON
       </td>
       <td>
        <ul>
         <li>
          Native to AWS
         </li>
         <li>
          Extensive resource support
         </li>
        </ul>
       </td>
       <td>
        <ul>
         <li>
          Limited to AWS
         </li>
         <li>
          Less flexible and extensible than Terraform
         </li>
        </ul>
       </td>
      </tr>
      <tr>
       <td>
        Pulumi
       </td>
       <td>
        JavaScript, Python, Go, TypeScript
       </td>
       <td>
        <ul>
         <li>
          Uses familiar programming languages
         </li>
         <li>
          Supports multiple cloud providers
         </li>
        </ul>
       </td>
       <td>
        <ul>
         <li>
          More complex to learn and use
         </li>
         <li>
          Smaller community than Terraform
         </li>
        </ul>
       </td>
      </tr>
     </tbody>
    </table>
    <h3>
     When to Choose Terraform
    </h3>
    <p>
     Terraform is a good choice for:
    </p>
    <ul>
     <li>
      <b>
       Multi-cloud deployments:
      </b>
      When you need to manage infrastructure across multiple cloud providers.
     </li>
     <li>
      <b>
       Large-scale deployments:
      </b>
      Terraform can handle complex infrastructure with a high number of resources.
     </li>
     <li>
      <b>
       Collaborative projects:
      </b>
      Its declarative approach and strong community make it suitable for large teams.
     </li>
    </ul>
   </section>
   <section id="conclusion">
    <h2>
     Conclusion
    </h2>
    <p>
     Terraform commands are the foundation of infrastructure automation with Terraform, empowering you to define, provision, and manage your infrastructure declaratively and consistently. By understanding the syntax, functionality, and best practices associated with these commands, you can unlock the full potential of Terraform for building, deploying, and managing your infrastructure efficiently and reliably.
    </p>
    <p>
     As you continue your journey with Terraform, explore advanced features, such as modules, variables, and outputs, to further enhance your automation capabilities. Embrace the IaC paradigm, utilize the rich ecosystem of providers and modules, and stay abreast of the latest Terraform developments to optimize your infrastructure management and unleash the full power of this versatile tool.
    </p>
   </section>
   <section id="call-to-action">
    <h2>
     Call to Action
    </h2>
    <p>
     Ready to dive into the world of Terraform? Get started today by:
    </p>
    <ul>
     <li>
      <b>
       Downloading Terraform:
      </b>
      Visit the official website to download the latest version for your operating system.
     </li>
     <li>
      <b>
       Exploring the Documentation:
      </b>
      Refer to the extensive Terraform documentation for in-depth tutorials, examples, and guides.
     </li>
     <li>
      <b>
       Building Your First Infrastructure:
      </b>
      Start with a simple project to familiarize yourself with Terraform's core commands and features.
     </li>
     <li>
      <b>
       Joining the Community:
      </b>
      Engage with the thriving Terraform community on forums, social media, and the official website.
     </li>
    </ul>
    <p>
     As you progress, consider exploring advanced topics such as:
    </p>
    <ul>
     <li>
      <b>
       Terraform Modules:
      </b>
      Creating reusable blocks of code for consistent infrastructure patterns.
     </li>
     <li>
      <b>
       Terraform Variables:
      </b>
      Parameterizing your configuration for flexibility and customization.
     </li>
     <li>
      <b>
       Terraform Outputs:
      </b>
      Extracting valuable information from your deployed infrastructure.
     </li>
     <li>
      <b>
       Terraform Cloud/Enterprise:
      </b>
      Leveraging these platforms for enhanced collaboration, state management, and workflow automation.
     </li>
    </ul>
    <p>
     Happy terraforming!
    </p>
   </section>
  </main>
  <footer>
   <p>
    © 2023, [Your Name/Company Name]
   </p>
  </footer>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

Please note:

  • This is a basic HTML structure for the article. You'll need to fill in the content, code snippets, and images.
  • The content needs to be written based on the provided outline.
  • You can further enhance the article by adding CSS for styling and JavaScript for interactive elements.
  • Remember to provide links to relevant resources like the Terraform documentation, GitHub repositories, and community forums.
  • Use images where appropriate to make the article visually appealing and illustrate concepts clearly.

To make this article truly comprehensive and informative, you'll need to provide the specific details and examples for each section as per the outline.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player