{"id":12958,"date":"2026-05-03T08:42:24","date_gmt":"2026-05-03T08:42:24","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=12958"},"modified":"2026-05-03T08:42:26","modified_gmt":"2026-05-03T08:42:26","slug":"templating-in-terraform-using-template_file-with-sample-program","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/templating-in-terraform-using-template_file-with-sample-program\/","title":{"rendered":"Terraform Tutorials: Templating in Terraform"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><br>Top 10 Templating Engines Across Major Programming Languages<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>#<\/th><th>Templating Engine<\/th><th>Programming Language<\/th><th>Common Framework \/ Ecosystem<\/th><th>Typical Real Use<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Jinja2<\/td><td>Python<\/td><td>Flask, Ansible<\/td><td>HTML generation, configuration templates, automation scripts<\/td><\/tr><tr><td>2<\/td><td>Django Templates (DTL)<\/td><td>Python<\/td><td>Django<\/td><td>Web page rendering in Django applications<\/td><\/tr><tr><td>3<\/td><td>Go Templates (<code>text\/template<\/code>, <code>html\/template<\/code>)<\/td><td>Go<\/td><td>Helm, Terraform tools, Kubernetes<\/td><td>YAML\/HTML templating, Helm charts, infra configs<\/td><\/tr><tr><td>4<\/td><td>Handlebars<\/td><td>JavaScript<\/td><td>Node.js, Express<\/td><td>Dynamic HTML rendering in web applications<\/td><\/tr><tr><td>5<\/td><td>Mustache<\/td><td>Multi-language<\/td><td>Node.js, Java, Ruby, Go<\/td><td>Logic-less templating for config and UI rendering<\/td><\/tr><tr><td>6<\/td><td>EJS (Embedded JavaScript)<\/td><td>JavaScript<\/td><td>Express.js<\/td><td>Server-side HTML rendering<\/td><\/tr><tr><td>7<\/td><td>Twig<\/td><td>PHP<\/td><td>Symfony, Drupal<\/td><td>HTML rendering in PHP frameworks<\/td><\/tr><tr><td>8<\/td><td>Blade<\/td><td>PHP<\/td><td>Laravel<\/td><td>Web UI rendering in Laravel apps<\/td><\/tr><tr><td>9<\/td><td>Thymeleaf<\/td><td>Java<\/td><td>Spring Boot<\/td><td>Server-side HTML templates for Java apps<\/td><\/tr><tr><td>10<\/td><td>Velocity \/ FreeMarker<\/td><td>Java<\/td><td>Apache, Spring<\/td><td>Email templates, config generation, UI rendering<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>In Terraform, the template process refers to the process of using a template engine to dynamically generate configuration files or values based on a set of input parameters.<\/p>\n\n\n\n<p>Terraform supports various template engines, including Go&#8217;s <code>text\/template<\/code> and <code>html\/template<\/code>, as well as the Jinja2 template engine. These template engines enable you to write dynamic templates with placeholders for values that will be replaced by actual values at runtime.<\/p>\n\n\n\n<p>The template process in Terraform involves the following steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Define a template file: Create a template file with placeholders for the values that will be replaced at runtime.<\/li>\n\n\n\n<li>Define variables: Define input variables that will be used to replace the placeholders in the template file.<\/li>\n\n\n\n<li>Use the template engine: Use the <code>templatefile()<\/code> function or <code>template_file<\/code> data source to render the template and generate the final output.<\/li>\n\n\n\n<li>Use the output: Use the generated output in your Terraform configuration, such as passing it to a resource as a value.<\/li>\n<\/ol>\n\n\n\n<p>The template process is useful for generating dynamic configuration files, such as cloud-init scripts, Kubernetes manifests, and shell scripts, among others. It enables you to generate configuration files based on the specific needs of your environment, without having to hard-code the values in your Terraform configuration.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"693\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/04\/image-49.png\" alt=\"\" class=\"wp-image-33270\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/04\/image-49.png 880w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/04\/image-49-300x236.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/04\/image-49-768x605.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Example &#8211; 1<\/h2>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/8b2a6720c116417637c963a3111af865.js\"><\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Example 2<\/h2>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/7d5b9948bb3b857fd94fa028393ff961.js\"><\/script>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\"><\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">List 10 real use case where i can use Template template_file of Terrraform<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Cloud-init Configuration:<\/strong> You can use Terraform&#8217;s <code>template_file<\/code> data source to create cloud-init configuration files for your virtual machines or instances.<\/li>\n\n\n\n<li><strong>Nginx Configuration: <\/strong>With <code>template_file<\/code>, you can create an Nginx configuration file to customize the web server based on your specific needs.<\/li>\n\n\n\n<li><strong>DNS Records: <\/strong>Use <code>template_file<\/code> to create custom DNS records and add them to your DNS server configuration files.<\/li>\n\n\n\n<li><strong>Configuration Files for Services:<\/strong> <code>template_file<\/code> can be used to generate configuration files for various services such as Apache, MySQL, Postgres, etc.<\/li>\n\n\n\n<li><strong>SSL\/TLS Certificates<\/strong>: You can use <code>template_file<\/code> to generate SSL\/TLS certificate configuration files for various web servers.<\/li>\n\n\n\n<li><strong>Bash Scripts:<\/strong> Use <code>template_file<\/code> to generate bash scripts to automate repetitive tasks such as backing up files or deploying code.<\/li>\n\n\n\n<li><strong>User Data for EC2 Instances:<\/strong> With <code>template_file<\/code>, you can create EC2 instance user data scripts to configure your instances when they launch.<\/li>\n\n\n\n<li><strong>Load Balancer Configuration:<\/strong> You can use <code>template_file<\/code> to create load balancer configuration files for services like AWS Elastic Load Balancer (ELB) or NGINX.<\/li>\n\n\n\n<li><strong>Kubernetes Manifests:<\/strong> <code>template_file<\/code> can be used to create Kubernetes manifest files for deploying applications to a Kubernetes cluster.<\/li>\n\n\n\n<li><strong>Database Configuration Files: <\/strong>Use <code>template_file<\/code> to generate database configuration files for various databases like MongoDB, Redis, Cassandra, etc.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Here is a <strong>basic 1-page tutorial<\/strong> for <strong>templating in Terraform<\/strong> using a simple <strong>Hello World example<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Basic Templating in Terraform \u2014 Hello World Tutorial<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is Templating in Terraform?<\/h2>\n\n\n\n<p>Templating in Terraform allows you to <strong>insert dynamic values into files<\/strong> such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configuration files<\/li>\n\n\n\n<li>Scripts<\/li>\n\n\n\n<li>YAML \/ JSON<\/li>\n\n\n\n<li>Application configs<\/li>\n<\/ul>\n\n\n\n<p>Terraform commonly uses:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">templatefile()\n<\/code><\/span><\/pre>\n\n\n<p>function to process templates.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Basic Flow of Terraform Templates<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Values (variables)\n        \u2193\nTemplate file (.tftpl)\n        \u2193\ntemplatefile() <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span>\n        \u2193\n<span class=\"hljs-title\">Rendered<\/span> <span class=\"hljs-title\">Output<\/span> <span class=\"hljs-title\">File<\/span>\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Example: Hello World Template in Terraform<\/h1>\n\n\n\n<p>Goal:<\/p>\n\n\n\n<p>Generate a file that prints:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello Rajesh, Welcome to Terraform Templates!\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Step 1 \u2014 Create Template File<\/h1>\n\n\n\n<p>Create file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">hello<\/span><span class=\"hljs-selector-class\">.tftpl<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello ${name}, Welcome to Terraform Templates!\n<\/code><\/span><\/pre>\n\n\n<p>Here:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">${name}\n<\/code><\/span><\/pre>\n\n\n<p>means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Insert value of <strong>name<\/strong> variable.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Step 2 \u2014 Create Terraform File<\/h1>\n\n\n\n<p>Create file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">main<\/span><span class=\"hljs-selector-class\">.tf<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">terraform {\n  required_version = <span class=\"hljs-string\">\"&gt;= 1.0\"<\/span>\n}\n\n<span class=\"hljs-comment\"># Step 1 \u2014 Define variable<\/span>\nvariable <span class=\"hljs-string\">\"name\"<\/span> {\n  <span class=\"hljs-keyword\">default<\/span> = <span class=\"hljs-string\">\"Rajesh\"<\/span>\n}\n\n<span class=\"hljs-comment\"># Step 2 \u2014 Generate output file using template<\/span>\nresource <span class=\"hljs-string\">\"local_file\"<\/span> <span class=\"hljs-string\">\"hello_output\"<\/span> {\n\n  filename = <span class=\"hljs-string\">\"hello.txt\"<\/span>\n\n  content = templatefile(\n    <span class=\"hljs-string\">\"${path.module}\/hello.tftpl\"<\/span>,\n    {\n      name = <span class=\"hljs-keyword\">var<\/span>.name\n    }\n  )\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Step 3 \u2014 Initialize Terraform<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">terraform init\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Step 4 \u2014 Apply Terraform<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">terraform apply\n<\/code><\/span><\/pre>\n\n\n<p>Type:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">yes\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Step 5 \u2014 Check Output File<\/h1>\n\n\n\n<p>Terraform will create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">hello<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Content:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello Rajesh, Welcome to Terraform Templates!\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Understanding Key Components<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>.tftpl<\/code><\/td><td>Template file<\/td><\/tr><tr><td><code>${name}<\/code><\/td><td>Variable placeholder<\/td><\/tr><tr><td><code>templatefile()<\/code><\/td><td>Processes template<\/td><\/tr><tr><td><code>local_file<\/code><\/td><td>Writes output file<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Minimal Multi-Line Template Example<\/h1>\n\n\n\n<p>Template:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">hello<\/span><span class=\"hljs-selector-class\">.tftpl<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello ${name}\n\nEnvironment: ${env}\n\nWelcome to Terraform templating!\n<\/code><\/span><\/pre>\n\n\n<p>Terraform:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">variable <span class=\"hljs-string\">\"env\"<\/span> {\n  <span class=\"hljs-keyword\">default<\/span> = <span class=\"hljs-string\">\"dev\"<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello Rajesh\n\nEnvironment: dev\n\nWelcome to Terraform templating!\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Real-World Uses of Terraform Templates<\/h1>\n\n\n\n<p>Terraform templates are commonly used for:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Use Case<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>Generate config files<\/td><td>nginx.conf<\/td><\/tr><tr><td>Create cloud-init scripts<\/td><td>VM startup scripts<\/td><\/tr><tr><td>Build Kubernetes YAML<\/td><td>Deployment manifests<\/td><\/tr><tr><td>Create JSON configs<\/td><td>IAM policies<\/td><\/tr><tr><td>Produce environment files<\/td><td>.env files<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Summary<\/h1>\n\n\n\n<p>Basic Terraform templating workflow:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">1. <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">template<\/span> <span class=\"hljs-selector-tag\">file<\/span> (<span class=\"hljs-selector-class\">.tftpl<\/span>)\n2. <span class=\"hljs-selector-tag\">Define<\/span> <span class=\"hljs-selector-tag\">variables<\/span>\n3. <span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">templatefile<\/span>()\n4. <span class=\"hljs-selector-tag\">Generate<\/span> <span class=\"hljs-selector-tag\">output<\/span> <span class=\"hljs-selector-tag\">file<\/span>\n5. <span class=\"hljs-selector-tag\">Review<\/span> <span class=\"hljs-selector-tag\">rendered<\/span> <span class=\"hljs-selector-tag\">content<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Core syntax:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">${variable_name}\n<\/code><\/span><\/pre>\n\n\n<p>This is the <strong>basic foundation of Terraform templating<\/strong>, widely used in <strong>cloud-init scripts, configuration generation, and Kubernetes manifests<\/strong> in real DevOps projects.<\/p>\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_76241\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_98109\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_76241\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>\n\n\n<p>Here is a <strong>1-page basic tutorial<\/strong> on <strong>templating in Go<\/strong> with a simple <strong>Hello World example<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Basic Use of Templating in Go \u2014 Hello World Tutorial<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is Templating in Go?<\/h2>\n\n\n\n<p>Templating in Go allows you to <strong>insert dynamic values into text output<\/strong> such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTML pages<\/li>\n\n\n\n<li>Configuration files<\/li>\n\n\n\n<li>Logs<\/li>\n\n\n\n<li>YAML\/JSON files<\/li>\n<\/ul>\n\n\n\n<p>Go provides two built-in templating packages:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Package<\/th><th>Used For<\/th><\/tr><\/thead><tbody><tr><td><code>text\/template<\/code><\/td><td>Text output (configs, logs, CLI output)<\/td><\/tr><tr><td><code>html\/template<\/code><\/td><td>HTML output (web pages, UI rendering)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Basic Flow of Go Templates<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Values (data)\n        \u2193\nTemplate file (.tmpl)\n        \u2193\nInterpolation {{ }}\n        \u2193\nRendered Output\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Example: Hello World Using <code>text\/template<\/code><\/h1>\n\n\n\n<p>This example prints:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello Rajesh, Welcome to Go Templates!\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Create Template File<\/h2>\n\n\n\n<p>Create file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">hello<\/span><span class=\"hljs-selector-class\">.tmpl<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello {{.Name}}, Welcome to Go Templates!\n<\/code><\/span><\/pre>\n\n\n<p>Here:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">{{.Name}}\n<\/code><\/span><\/pre>\n\n\n<p>means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Insert value of <strong>Name<\/strong> from data.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Create Go Program<\/h2>\n\n\n\n<p>Create file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">main<\/span><span class=\"hljs-selector-class\">.go<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package main\n\n<span class=\"hljs-keyword\">import<\/span> (\n\t<span class=\"hljs-string\">\"os\"<\/span>\n\t<span class=\"hljs-string\">\"text\/template\"<\/span>\n)\n\n<span class=\"hljs-comment\">\/\/ Step 1 \u2014 Define structure for values<\/span>\ntype User struct {\n\tName string\n}\n\nfunc main() {\n\n\t<span class=\"hljs-comment\">\/\/ Step 2 \u2014 Provide values<\/span>\n\t<span class=\"hljs-attr\">data<\/span> := User{\n\t\t<span class=\"hljs-attr\">Name<\/span>: <span class=\"hljs-string\">\"Rajesh\"<\/span>,\n\t}\n\n\t<span class=\"hljs-comment\">\/\/ Step 3 \u2014 Load template file<\/span>\n\t<span class=\"hljs-attr\">tmpl<\/span> := template.Must(\n\t\ttemplate.ParseFiles(<span class=\"hljs-string\">\"hello.tmpl\"<\/span>),\n\t)\n\n\t<span class=\"hljs-comment\">\/\/ Step 4 \u2014 Execute template<\/span>\n\ttmpl.Execute(os.Stdout, data)\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Run the Program<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">go<\/span> <span class=\"hljs-selector-tag\">run<\/span> <span class=\"hljs-selector-tag\">main<\/span><span class=\"hljs-selector-class\">.go<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Output<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Hello Rajesh, Welcome to Go Templates!\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Understanding the Syntax<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Syntax<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>{{.Name}}<\/code><\/td><td>Access field Name<\/td><\/tr><tr><td><code>{{.}}<\/code><\/td><td>Access full data<\/td><\/tr><tr><td><code>{{range}}<\/code><\/td><td>Loop through list<\/td><\/tr><tr><td><code>{{if}}<\/code><\/td><td>Conditional logic<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Example: Hello Multiple Users (List Example)<\/h1>\n\n\n\n<p>Template:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Users:\n\n{{range .}}\nHello {{.Name}}\n{{end}}\n<\/code><\/span><\/pre>\n\n\n<p>Go Code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">users := &#91;]User{\n\t{<span class=\"hljs-attr\">Name<\/span>: <span class=\"hljs-string\">\"Rajesh\"<\/span>},\n\t{<span class=\"hljs-attr\">Name<\/span>: <span class=\"hljs-string\">\"Amit\"<\/span>},\n\t{<span class=\"hljs-attr\">Name<\/span>: <span class=\"hljs-string\">\"Neha\"<\/span>},\n}\n\ntmpl.Execute(os.Stdout, users)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Users:\n\nHello Rajesh\nHello Amit\nHello Neha\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">When to Use <code>html\/template<\/code><\/h1>\n\n\n\n<p>Use <code>html\/template<\/code> when generating <strong>web pages<\/strong>.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\"html\/template\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It automatically:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Escapes HTML<\/li>\n\n\n\n<li>Prevents XSS attacks<\/li>\n\n\n\n<li>Secures web output<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Real-World Uses of Go Templates<\/h1>\n\n\n\n<p>Go templates are widely used in:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>Usage<\/th><\/tr><\/thead><tbody><tr><td>Helm<\/td><td>Kubernetes YAML templating<\/td><\/tr><tr><td>Docker tools<\/td><td>Config generation<\/td><\/tr><tr><td>Terraform ecosystem tools<\/td><td>File generation<\/td><\/tr><tr><td>Web servers<\/td><td>HTML rendering<\/td><\/tr><tr><td>DevOps automation<\/td><td>Config templating<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Summary<\/h1>\n\n\n\n<p>Basic Go templating steps:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">1. <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">template<\/span> <span class=\"hljs-selector-tag\">file<\/span> (<span class=\"hljs-selector-class\">.tmpl<\/span>)\n2. <span class=\"hljs-selector-tag\">Provide<\/span> <span class=\"hljs-selector-tag\">data<\/span> (<span class=\"hljs-selector-tag\">struct<\/span> <span class=\"hljs-selector-tag\">or<\/span> <span class=\"hljs-selector-tag\">list<\/span>)\n3. <span class=\"hljs-selector-tag\">Parse<\/span> <span class=\"hljs-selector-tag\">template<\/span>\n4. <span class=\"hljs-selector-tag\">Execute<\/span> <span class=\"hljs-selector-tag\">template<\/span>\n5. <span class=\"hljs-selector-tag\">Get<\/span> <span class=\"hljs-selector-tag\">output<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Core syntax:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">{{.FieldName}}\n<\/code><\/span><\/pre>\n\n\n<p>That is the <strong>foundation of Go templating<\/strong>, and it is exactly the same concept used in <strong>Helm charts, Kubernetes configs, and many DevOps tools<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Top 10 Templating Engines Across Major Programming Languages # Templating Engine Programming Language Common Framework \/ Ecosystem Typical Real Use 1 Jinja2 Python Flask, Ansible HTML generation,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5129],"tags":[],"class_list":["post-12958","post","type-post","status-publish","format-standard","hentry","category-terraform"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/12958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=12958"}],"version-history":[{"count":9,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/12958\/revisions"}],"predecessor-version":[{"id":75340,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/12958\/revisions\/75340"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=12958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=12958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=12958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}