To generate a JSON file from .tfvars file

0

Hi AWS, I have to generate a JSON file from a .tfvars file using Terraform. I am providing the content for input.tfvars file here:

SomoeotherVar = "some value"
Outerwear = {
samovar = "this"
Othervar = "this_2"
input_json = {
    "Sample_02":{
       "class":"Tenant",
       "defaultRouteDomain":0,
       "Application_2":{
          "class":"Application",
          "template":"http",
          "serviceMain":{
             "class":"Service_HTTP",
             "virtualAddresses":[
                "10.2.2.10"
             ],
             "pool":"web_pool2"
          },
          "web_pool2":{
             "class":"Pool",
             "monitors":[
                "http"
             ],
             "members":[
                {
                   "servicePort":80,
                   "serverAddresses":[
                      "192.2.1.100",
                      "192.2.1.110"
                   ]
                }
             ]
          }
       }
    },
    "Sample_03":{
       "class":"Tenant",
       "defaultRouteDomain":0,
       "Application_3":{
          "class":"Application",
          "template":"http",
          "serviceMain":{
             "class":"Service_HTTP",
             "virtualAddresses":[
                "10.1.2.10"
             ],
             "pool":"web_pool3"
          },
          "web_pool3":{
             "class":"Pool",
             "monitors":[
                "http"
             ],
             "members":[
                {
                   "servicePort":80,
                   "serverAddresses":[
                      "192.3.1.100",
                      "192.3.1.110"
                   ]
                }
             ]
          }
       }
    }
  }
}

The resulting JSON is having a set of Static and Dynamic Blocks and it looks like this:

{
    "class": "AS3",         //Satatic
    "action": "deploy",     //Satatic
    "persist": true,        //Satatic
    "declaration": {          //Satatic
       "class": "ADC",        //Satatic
       "schemaVersion": "3.37.0",          //Satatic
       "id": "example-declaration-tenant5",          //Satatic
       "label":"Sample Tenant5",          //Satatic
       "remark": "Tenant5 test for AS3",          //Satatic
       
       "Tenant5": {           //Satatic
          "class": "Tenant",          //Satatic
          "Shared": {    //Static Block
             "class": "Application",          //Satatic
             "template": "shared",        //Satatic
 
             "as3-tenant5-test": {   //Dynamic Block  Application #1
                 "remark": "as3-tenant5-test",  //Dynamic Block
                 "class": "Service_HTTP", //Dynamic Block
                 "iRules": [//Dynamic Block
                     "AS3-TEST3-IRULE"   //Dynamic Block. listo of rules defined here will have a subsequent config definition like line #77
                 ],
                 "profileTCP": {  //Dynamic Block
                     "bigip": "/Tenant5/tcp"
                 },
                 "profileHTTP": {  //Dynamic Block.  
                     "use": "http_hsts_xf1"  //Dynamic Block.  http_hsts_xf1 will be further defined as line #98
                 },
                  
                 "virtualAddresses": [  //Dynamic Block
                     "${VIP_ADDRESS}"
                 ],
                 "virtualPort": 80,  //Dynamic Block
                 "pool": "pool30",                //Dynamic Block
                 "snat": "none"  //Dynamic Block
             },
             
             "as3-tenant5-test2": {
                 "remark": "as3-tenant5-test2",                 
                 "class": "Service_HTTP",
                 "iRules": [
                     "AS3-TEST3-IRULE"
                 ],
                 "profileTCP": {
                     "bigip": "/Tenant5/tcp"
                 },
                 "virtualAddresses": [
                     "${VIP_ADDRESS_2}"
                 ],
                 "virtualPort": 80,
                 "pool": "pool30",
                 "snat": "none"
             },
 
             "as3-tenant5-test3": {   //Dynamic Block
                 "remark": "as3-tenant5-test3", //Dynamic Block
                 "class": "Service_HTTPS",  //Dynamic Block.
                  "iRules": [
                       "AS3-TEST3-IRULE"
                 ],
                 "profileTCP": {
                     "bigip": "/Tenant5/tcp"
                 },
                 "virtualAddresses": [
                     "3.3.3.3"
                 ],
                 "virtualPort": 443,
                 "snat": "auto",
                 "pool": "pool30",
                 },     
            
                 "serverTLS": "webtls",  //Dynamic  Block.  THis will further be defined in webtls block like line #154
                 "redirect80": false     //Dynamic  Block
             },
 
             "AS3-TEST3-IRULE": {  //Dynamic Block 
                 "class": "iRule",
                 "iRule": "when HTTP_REQUEST { HTTP::respond 200 content {<html><head><title>Hi team</title</head><body><h1>Hello team!</h1></body></html> }}"
              },
 
             "pool30": {  //Dynamic Block
                 "class": "Pool",
                 "monitors": [
                     "http"
                 ],
                 "members": [
                 {
                     "servicePort": 8080,
                      "serverAddresses": [
                         "3.3.3.200",
                         "3.3.3.201"
                       ]
                 }
                 ]
             },
             
             "http_hsts_xf1": {  Dynamic Block
                     "class": "HTTP_Profile",
                     "knownMethods": [
                         "CONNECT",
                         "DELETE",
                         "GET",
                         "HEAD",
                         "LOCK",
                         "OPTIONS",
                         "POST",
                         "PROPFIND",
                         "PUT",
                         "TRACE",
                         "UNLOCK"
                     ],
                     "maxHeaderCount": 64,
                     "maxHeaderSize": 32768,
                     "maxRequests": 0,
                     "pipelineAction": "allow",
                     "truncatedRedirects": false,
                     "unknownMethodAction": "allow",
                     "hstsIncludeSubdomains": false,
                     "hstsPeriod": 31536000,
                     "hstsInsert": true,
                     "xForwardedFor": true,
                     "multiplexTransformations": true,
                     "proxyType": "reverse",
                     "rewriteRedirects": "none",
                     "requestChunking": "sustain",
                     "responseChunking": "sustain",
                     "serverHeaderValue": "BigIP",
                     "viaRequest": "preserve",
                     "viaResponse": "preserve"
                 },
             
             
              "aes_128-256_cipher-rules": {  //Dynamic Block
                     "class": "Cipher_Rule",
                     "cipherSuites": [
                         "ECDHE-ECDSA-AES256-GCM-SHA384",
                         "ECDHE-RSA-AES256-GCM-SHA384",
                         "ECDHE-RSA-AES256-SHA384",
                         "ECDHE-RSA-AES256-CBC-SHA",
                         "ECDHE-ECDSA-AES128-GCM-SHA256",
                         "ECDHE-RSA-AES128-GCM-SHA256",
                         "ECDHE-RSA-AES128-SHA256",
                         "ECDHE-RSA-AES128-CBC-SHA",
                         "AES256-GCM-SHA384",
                         "AES256-SHA256",
                         "AES256-SHA",
                         "AES128-GCM-SHA256",
                         "AES128-SHA256",
                         "AES128-SHA"
                     ]
                 },
             
             "webtls": {  //Dynamci Rule
                 "class": "TLS_Server",  
                 "certificates": [
                   {
                     "certificate": "webcert"
                   }
                 ],
                "ciphers": "ECDHE-A384:ECDHE-RSA-AES256-SHA384-SHA",
                     "renegotiationEnabled": false,
                     "class": "TLS_Server",
                     "tls1_0Enabled": false,
                     "tls1_1Enabled": false,
                     "tls1_2Enabled": true,
                     "tls1_3Enabled": false,
                     "singleUseDhEnabled": false,
                     "insertEmptyFragmentsEnabled": false
             },
             
             "webcert": {  //Dynamic Block.  Will need your help on passing the certs in a secure mannaer
                 "class": "Certificate",
                 "remark": "in practice we recommend using a passphrase",
                 "certificate": "-----BEGIN CERt-----\nJc\n-----END CERTIFICATE-----",
                 "privateKey": " RSA PRIVATE KEY-----",
                 "passphrase": {
                   "ciphertext": "==",
                   "protected": ""
                 }
             }
         }
 
    }    

The JSON is generated using manually just for demonstration purpose how it should look like and based on that I want to modify my input.tfvars file. So if I have to summarise what exactly I need is:

  1. To create an input.vars file based on the JSON I provided above.
  2. Once the input.tfvars file is created I need to generate a JSON file out of it.
profile picture
asked 24 days ago64 views
No Answers

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions