[{"data":1,"prerenderedAt":1717},["ShallowReactive",2],{"navigation":3,"hamburger-docs-nav":125,"doc-configuration,infrastructure-as-code,terraform":163,"/docs/configuration/infrastructure-as-code/terraform-surround":1675,"docs-nav":1679},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Docs","/docs","docs",[9,45],{"title":10,"path":11,"stem":12,"children":13},"Introduction","/docs/getting-started","docs/00.getting-started/index",[14,15,19],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Quickstart","/docs/getting-started/quickstart","docs/00.getting-started/00.quickstart",{"title":20,"path":21,"stem":22,"children":23,"page":44},"Core Concepts","/docs/getting-started/core-concepts","docs/00.getting-started/core-concepts",[24,28,32,36,40],{"title":25,"path":26,"stem":27},"What is an Organisation?","/docs/getting-started/core-concepts/what-is-an-org","docs/00.getting-started/core-concepts/01.what-is-an-org",{"title":29,"path":30,"stem":31},"What is a Service?","/docs/getting-started/core-concepts/what-is-a-service","docs/00.getting-started/core-concepts/02.what-is-a-service",{"title":33,"path":34,"stem":35},"Routing Traffic","/docs/getting-started/core-concepts/routing-traffic","docs/00.getting-started/core-concepts/03.routing-traffic",{"title":37,"path":38,"stem":39},"Securing your content","/docs/getting-started/core-concepts/securing-content","docs/00.getting-started/core-concepts/04.securing-content",{"title":41,"path":42,"stem":43},"Invalidating Cache","/docs/getting-started/core-concepts/invalidating-cache","docs/00.getting-started/core-concepts/05.invalidating-cache",false,{"title":10,"path":46,"stem":47,"children":48},"/docs/configuration","docs/01.configuration/index",[49,50,99,116],{"title":10,"path":46,"stem":47},{"title":51,"path":52,"stem":53,"children":54,"page":44},"Configuration","/docs/configuration/configuration","docs/01.configuration/configuration",[55,59,63,67,71,75,79,83,87,91,95],{"title":56,"path":57,"stem":58},"Domains","/docs/configuration/configuration/domains","docs/01.configuration/configuration/00.domains",{"title":60,"path":61,"stem":62},"Origins","/docs/configuration/configuration/origins","docs/01.configuration/configuration/01.origins",{"title":64,"path":65,"stem":66},"General","/docs/configuration/configuration/general","docs/01.configuration/configuration/02.general",{"title":68,"path":69,"stem":70},"High Availability","/docs/configuration/configuration/high-availability","docs/01.configuration/configuration/03.high-availability",{"title":72,"path":73,"stem":74},"Query Parameters","/docs/configuration/configuration/query-parameters","docs/01.configuration/configuration/04.query-parameters",{"title":76,"path":77,"stem":78},"Headers","/docs/configuration/configuration/headers","docs/01.configuration/configuration/05.headers",{"title":80,"path":81,"stem":82},"Cookies","/docs/configuration/configuration/cookies","docs/01.configuration/configuration/06.cookies",{"title":84,"path":85,"stem":86},"Security","/docs/configuration/configuration/security","docs/01.configuration/configuration/07.security",{"title":88,"path":89,"stem":90},"Image Handling","/docs/configuration/configuration/image-handling","docs/01.configuration/configuration/08.image-handling",{"title":92,"path":93,"stem":94},"Overrides","/docs/configuration/configuration/overrides","docs/01.configuration/configuration/09.overrides",{"title":96,"path":97,"stem":98},"API Configuration Reference","/docs/configuration/configuration/api-configuration","docs/01.configuration/configuration/10.api-configuration",{"title":100,"path":101,"stem":102,"children":103,"page":44},"Global Configuration","/docs/configuration/global-configuration","docs/01.configuration/global-configuration",[104,108,112],{"title":105,"path":106,"stem":107},"Managing TLS Certificates","/docs/configuration/global-configuration/tls","docs/01.configuration/global-configuration/TLS",{"title":109,"path":110,"stem":111},"Log Exports","/docs/configuration/global-configuration/log-exports","docs/01.configuration/global-configuration/log-exports",{"title":113,"path":114,"stem":115},"Purge Tokens","/docs/configuration/global-configuration/purge-tokens","docs/01.configuration/global-configuration/purge-tokens",{"title":117,"path":118,"stem":119,"children":120,"page":44},"Infrastructure As Code","/docs/configuration/infrastructure-as-code","docs/01.configuration/infrastructure-as-code",[121],{"title":122,"path":123,"stem":124},"Terraform and OpenTofu","/docs/configuration/infrastructure-as-code/terraform","docs/01.configuration/infrastructure-as-code/terraform",[126],{"title":5,"path":6,"stem":7,"children":127,"page":44},[128,139],{"title":10,"path":11,"stem":12,"children":129},[130,131,132],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22,"children":133,"page":44},[134,135,136,137,138],{"title":25,"path":26,"stem":27},{"title":29,"path":30,"stem":31},{"title":33,"path":34,"stem":35},{"title":37,"path":38,"stem":39},{"title":41,"path":42,"stem":43},{"title":10,"path":46,"stem":47,"children":140},[141,142,155,160],{"title":10,"path":46,"stem":47},{"title":51,"path":52,"stem":53,"children":143,"page":44},[144,145,146,147,148,149,150,151,152,153,154],{"title":56,"path":57,"stem":58},{"title":60,"path":61,"stem":62},{"title":64,"path":65,"stem":66},{"title":68,"path":69,"stem":70},{"title":72,"path":73,"stem":74},{"title":76,"path":77,"stem":78},{"title":80,"path":81,"stem":82},{"title":84,"path":85,"stem":86},{"title":88,"path":89,"stem":90},{"title":92,"path":93,"stem":94},{"title":96,"path":97,"stem":98},{"title":100,"path":101,"stem":102,"children":156,"page":44},[157,158,159],{"title":105,"path":106,"stem":107},{"title":109,"path":110,"stem":111},{"title":113,"path":114,"stem":115},{"title":117,"path":118,"stem":119,"children":161,"page":44},[162],{"title":122,"path":123,"stem":124},{"id":164,"title":122,"body":165,"description":1670,"extension":1671,"meta":1672,"navigation":451,"path":123,"seo":1673,"stem":124,"__hash__":1674},"docs/docs/01.configuration/infrastructure-as-code/terraform.md",{"type":166,"value":167,"toc":1660},"minimark",[168,172,183,202,214,219,279,324,328,534,538,549,821,824,843,857,880,884,897,1237,1240,1245,1258,1262,1269,1424,1430,1434,1440,1537,1544,1548,1551,1596,1599,1615,1626,1630,1656],[169,170,171],"p",{},"The Varnish provider lets you manage your CDN setup as code. You describe services, domains, origins, settings, certificates and purge tokens in configuration files, and OpenTofu or Terraform creates and updates them for you.",[169,173,174,175,182],{},"The provider is open source and available at ",[176,177,181],"a",{"href":178,"rel":179},"https://github.com/varnish/terraform-provider-varnish",[180],"nofollow","github.com/varnish/terraform-provider-varnish",".",[184,185,188],"note",{"className":186},[187],"block",[169,189,190,191,196,197,182],{},"The provider is published in both the ",[176,192,195],{"href":193,"rel":194},"https://registry.terraform.io/providers/varnish/varnish/latest",[180],"Terraform Registry"," and the ",[176,198,201],{"href":199,"rel":200},"https://search.opentofu.org/provider/varnish/varnish",[180],"OpenTofu Registry",[169,203,204,205,209,210,213],{},"The examples on this page use ",[206,207,208],"code",{},"tofu",". With Terraform, run the same commands with ",[206,211,212],{},"terraform"," instead.",[215,216,218],"h2",{"id":217},"what-you-can-manage","What you can manage",[220,221,222,235],"table",{},[223,224,225],"thead",{},[226,227,228,232],"tr",{},[229,230,231],"th",{},"Resource",[229,233,234],{},"Description",[236,237,238,249,259,269],"tbody",{},[226,239,240,246],{},[241,242,243],"td",{},[206,244,245],{},"varnish_cdn_service",[241,247,248],{},"A CDN service with its domains, origins and settings",[226,250,251,256],{},[241,252,253],{},[206,254,255],{},"varnish_cdn_certificate",[241,257,258],{},"An uploaded TLS certificate",[226,260,261,266],{},[241,262,263],{},[206,264,265],{},"varnish_cdn_purge_token",[241,267,268],{},"A token that can only invalidate cached content",[226,270,271,276],{},[241,272,273],{},[206,274,275],{},"varnish_org_user",[241,277,278],{},"A user in your organization, from invite to member",[220,280,281,290],{},[223,282,283],{},[226,284,285,288],{},[229,286,287],{},"Data source",[229,289,234],{},[236,291,292,302,312],{},[226,293,294,299],{},[241,295,296],{},[206,297,298],{},"varnish_cdn_domain_dns",[241,300,301],{},"The DNS records a domain needs, and its verification status",[226,303,304,309],{},[241,305,306],{},[206,307,308],{},"varnish_cdn_wizard_templates",[241,310,311],{},"The configuration templates available to your organization",[226,313,314,319],{},[241,315,316],{},[206,317,318],{},"varnish_roles",[241,320,321,322],{},"The role names you can give to ",[206,323,275],{},[215,325,327],{"id":326},"getting-started","Getting started",[329,330,332,337,340,344,351,466,470,473,501,505,531],"steps",{"level":331},"4",[333,334,336],"h4",{"id":335},"create-an-api-access-token","Create an API access token",[169,338,339],{},"Create an API access token for your organization in the dashboard. The provider uses it for all requests. Treat it like a password.",[333,341,343],{"id":342},"configure-the-provider","Configure the provider",[169,345,346,347,350],{},"Create a ",[206,348,349],{},"main.tf"," file:",[352,353,358],"pre",{"className":354,"code":355,"filename":349,"language":356,"meta":357,"style":357},"language-hcl shiki shiki-themes material-theme-lighter github-light github-dark monokai","terraform {\n  required_providers {\n    varnish = {\n      source  = \"varnish/varnish\"\n      version = \"~> 0.1\"\n    }\n  }\n}\n\nprovider \"varnish\" {}\n","hcl","",[206,359,360,372,380,393,413,428,434,440,446,453],{"__ignoreMap":357},[361,362,365,368],"span",{"class":363,"line":364},"line",1,[361,366,212],{"class":367},"sKvfc",[361,369,371],{"class":370},"swvn1"," {\n",[361,373,375,378],{"class":363,"line":374},2,[361,376,377],{"class":367},"  required_providers",[361,379,371],{"class":370},[361,381,383,387,391],{"class":363,"line":382},3,[361,384,386],{"class":385},"ss--_","    varnish",[361,388,390],{"class":389},"sGXK2"," =",[361,392,371],{"class":370},[361,394,396,399,402,406,410],{"class":363,"line":395},4,[361,397,398],{"class":385},"      source",[361,400,401],{"class":389},"  =",[361,403,405],{"class":404},"siCPE"," \"",[361,407,409],{"class":408},"sLACW","varnish/varnish",[361,411,412],{"class":404},"\"\n",[361,414,416,419,421,423,426],{"class":363,"line":415},5,[361,417,418],{"class":385},"      version",[361,420,390],{"class":389},[361,422,405],{"class":404},[361,424,425],{"class":408},"~> 0.1",[361,427,412],{"class":404},[361,429,431],{"class":363,"line":430},6,[361,432,433],{"class":370},"    }\n",[361,435,437],{"class":363,"line":436},7,[361,438,439],{"class":370},"  }\n",[361,441,443],{"class":363,"line":442},8,[361,444,445],{"class":370},"}\n",[361,447,449],{"class":363,"line":448},9,[361,450,452],{"emptyLinePlaceholder":451},true,"\n",[361,454,456,459,463],{"class":363,"line":455},10,[361,457,458],{"class":367},"provider",[361,460,462],{"class":461},"s91G_"," \"varnish\"",[361,464,465],{"class":370}," {}\n",[333,467,469],{"id":468},"set-the-token","Set the token",[169,471,472],{},"Pass the token as an environment variable, so it never ends up in your files:",[352,474,479],{"className":475,"code":476,"filename":477,"language":478,"meta":357,"style":357},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","export VARNISH_ACCESS_TOKEN=\"\u003Cyour-access-token>\"\n","terminal","bash",[206,480,481],{"__ignoreMap":357},[361,482,483,487,490,493,496,499],{"class":363,"line":364},[361,484,486],{"class":485},"sTNss","export",[361,488,489],{"class":385}," VARNISH_ACCESS_TOKEN",[361,491,492],{"class":389},"=",[361,494,495],{"class":404},"\"",[361,497,498],{"class":408},"\u003Cyour-access-token>",[361,500,412],{"class":404},[333,502,504],{"id":503},"initialize","Initialize",[352,506,508],{"className":475,"code":507,"filename":477,"language":478,"meta":357,"style":357},"tofu init       # OpenTofu\nterraform init  # Terraform\n",[206,509,510,522],{"__ignoreMap":357},[361,511,512,515,518],{"class":363,"line":364},[361,513,208],{"class":514},"sR7ES",[361,516,517],{"class":408}," init",[361,519,521],{"class":520},"ss7Ak","       # OpenTofu\n",[361,523,524,526,528],{"class":363,"line":374},[361,525,212],{"class":514},[361,527,517],{"class":408},[361,529,530],{"class":520},"  # Terraform\n",[169,532,533],{},"This downloads the provider from the registry and verifies its signature.",[215,535,537],{"id":536},"create-a-service","Create a service",[169,539,540,541,544,545,548],{},"A service needs at least one ",[176,542,543],{"href":57},"domain"," and one ",[176,546,547],{"href":61},"origin",":",[352,550,552],{"className":354,"code":551,"filename":349,"language":356,"meta":357,"style":357},"resource \"varnish_cdn_service\" \"web\" {\n  domain {\n    fqdn = \"www.example.com\"\n    tls  = true\n  }\n\n  origin {\n    name       = \"default\"\n    host       = \"origin.example.com\"\n    port       = 443\n    enable_tls = true\n    is_default = true\n  }\n}\n\n# The DNS records to set at your DNS provider\ndata \"varnish_cdn_domain_dns\" \"www\" {\n  service_id = varnish_cdn_service.web.id\n  fqdn       = \"www.example.com\"\n}\n\noutput \"dns\" {\n  value = {\n    cname    = data.varnish_cdn_domain_dns.www.expected_cname\n    txt      = data.varnish_cdn_domain_dns.www.expected_txt\n    verified = data.varnish_cdn_domain_dns.www.verified\n  }\n}\n",[206,553,554,567,574,588,599,603,607,614,629,643,654,664,674,679,684,689,695,709,731,745,750,755,766,776,788,800,811,816],{"__ignoreMap":357},[361,555,556,559,562,565],{"class":363,"line":364},[361,557,558],{"class":367},"resource",[361,560,561],{"class":461}," \"varnish_cdn_service\"",[361,563,564],{"class":461}," \"web\"",[361,566,371],{"class":370},[361,568,569,572],{"class":363,"line":374},[361,570,571],{"class":367},"  domain",[361,573,371],{"class":370},[361,575,576,579,581,583,586],{"class":363,"line":382},[361,577,578],{"class":385},"    fqdn",[361,580,390],{"class":389},[361,582,405],{"class":404},[361,584,585],{"class":408},"www.example.com",[361,587,412],{"class":404},[361,589,590,593,595],{"class":363,"line":395},[361,591,592],{"class":385},"    tls",[361,594,401],{"class":389},[361,596,598],{"class":597},"sMTiH"," true\n",[361,600,601],{"class":363,"line":415},[361,602,439],{"class":370},[361,604,605],{"class":363,"line":430},[361,606,452],{"emptyLinePlaceholder":451},[361,608,609,612],{"class":363,"line":436},[361,610,611],{"class":367},"  origin",[361,613,371],{"class":370},[361,615,616,619,622,624,627],{"class":363,"line":442},[361,617,618],{"class":385},"    name",[361,620,621],{"class":389},"       =",[361,623,405],{"class":404},[361,625,626],{"class":408},"default",[361,628,412],{"class":404},[361,630,631,634,636,638,641],{"class":363,"line":448},[361,632,633],{"class":385},"    host",[361,635,621],{"class":389},[361,637,405],{"class":404},[361,639,640],{"class":408},"origin.example.com",[361,642,412],{"class":404},[361,644,645,648,650],{"class":363,"line":455},[361,646,647],{"class":385},"    port",[361,649,621],{"class":389},[361,651,653],{"class":652},"sYThS"," 443\n",[361,655,657,660,662],{"class":363,"line":656},11,[361,658,659],{"class":385},"    enable_tls",[361,661,390],{"class":389},[361,663,598],{"class":597},[361,665,667,670,672],{"class":363,"line":666},12,[361,668,669],{"class":385},"    is_default",[361,671,390],{"class":389},[361,673,598],{"class":597},[361,675,677],{"class":363,"line":676},13,[361,678,439],{"class":370},[361,680,682],{"class":363,"line":681},14,[361,683,445],{"class":370},[361,685,687],{"class":363,"line":686},15,[361,688,452],{"emptyLinePlaceholder":451},[361,690,692],{"class":363,"line":691},16,[361,693,694],{"class":520},"# The DNS records to set at your DNS provider\n",[361,696,698,701,704,707],{"class":363,"line":697},17,[361,699,700],{"class":367},"data",[361,702,703],{"class":461}," \"varnish_cdn_domain_dns\"",[361,705,706],{"class":461}," \"www\"",[361,708,371],{"class":370},[361,710,712,715,717,721,723,726,728],{"class":363,"line":711},18,[361,713,714],{"class":385},"  service_id",[361,716,390],{"class":389},[361,718,720],{"class":719},"squCx"," varnish_cdn_service",[361,722,182],{"class":389},[361,724,725],{"class":385},"web",[361,727,182],{"class":389},[361,729,730],{"class":385},"id\n",[361,732,734,737,739,741,743],{"class":363,"line":733},19,[361,735,736],{"class":385},"  fqdn",[361,738,621],{"class":389},[361,740,405],{"class":404},[361,742,585],{"class":408},[361,744,412],{"class":404},[361,746,748],{"class":363,"line":747},20,[361,749,445],{"class":370},[361,751,753],{"class":363,"line":752},21,[361,754,452],{"emptyLinePlaceholder":451},[361,756,758,761,764],{"class":363,"line":757},22,[361,759,760],{"class":367},"output",[361,762,763],{"class":461}," \"dns\"",[361,765,371],{"class":370},[361,767,769,772,774],{"class":363,"line":768},23,[361,770,771],{"class":385},"  value",[361,773,390],{"class":389},[361,775,371],{"class":370},[361,777,779,782,785],{"class":363,"line":778},24,[361,780,781],{"class":385},"    cname",[361,783,784],{"class":389},"    =",[361,786,787],{"class":719}," data.varnish_cdn_domain_dns.www.expected_cname\n",[361,789,791,794,797],{"class":363,"line":790},25,[361,792,793],{"class":385},"    txt",[361,795,796],{"class":389},"      =",[361,798,799],{"class":719}," data.varnish_cdn_domain_dns.www.expected_txt\n",[361,801,803,806,808],{"class":363,"line":802},26,[361,804,805],{"class":385},"    verified",[361,807,390],{"class":389},[361,809,810],{"class":719}," data.varnish_cdn_domain_dns.www.verified\n",[361,812,814],{"class":363,"line":813},27,[361,815,439],{"class":370},[361,817,819],{"class":363,"line":818},28,[361,820,445],{"class":370},[169,822,823],{},"Review the changes and apply them:",[352,825,827],{"className":475,"code":826,"filename":477,"language":478,"meta":357,"style":357},"tofu plan\ntofu apply\n",[206,828,829,836],{"__ignoreMap":357},[361,830,831,833],{"class":363,"line":364},[361,832,208],{"class":514},[361,834,835],{"class":408}," plan\n",[361,837,838,840],{"class":363,"line":374},[361,839,208],{"class":514},[361,841,842],{"class":408}," apply\n",[169,844,845,846,849,850,853,854,182],{},"The ",[206,847,848],{},"dns"," output shows the records your domain needs. Once they are in place, ",[206,851,852],{},"verified"," becomes ",[206,855,856],{},"true",[858,859,861],"tip",{"className":860},[187],[169,862,863,864,867,868,871,872,875,876,879],{},"To use an apex domain such as ",[206,865,866],{},"example.com",", set ",[206,869,870],{},"subdomain",", for example ",[206,873,874],{},"subdomain = \"www\"",". Wildcard domains such as ",[206,877,878],{},"*.example.com"," are supported too.",[215,881,883],{"id":882},"configure-settings","Configure settings",[169,885,845,886,889,890,893,894,548],{},[206,887,888],{},"settings"," attribute holds the same configuration as the dashboard. The fields follow the ",[176,891,892],{"href":97},"configuration reference",", written in ",[206,895,896],{},"snake_case",[352,898,900],{"className":354,"code":899,"filename":349,"language":356,"meta":357,"style":357},"resource \"varnish_cdn_service\" \"web\" {\n  # domain and origin blocks as above\n\n  settings = {\n    general = {\n      first_byte_timeout = \"10s\"\n    }\n\n    query_params = {\n      remove_query_parameters = { action = \"sort\" }\n    }\n\n    cookies = {\n      on_cookie = { action = \"remove\" }\n    }\n\n    security = {\n      https_redirect = true\n      hsts           = true\n    }\n\n    # Apply settings only to matching requests\n    overrides = [\n      {\n        name       = \"cache-images-long\"\n        extensions = [\"jpg\", \"png\", \"webp\"]\n        rules = [\n          { string_id = \"general.cacheableTTLOverride\", value = jsonencode(\"7d\") },\n        ]\n      },\n    ]\n  }\n}\n",[206,901,902,912,917,921,930,939,953,957,961,970,995,999,1003,1012,1034,1038,1042,1051,1060,1070,1074,1078,1083,1093,1098,1112,1151,1160,1207,1213,1221,1227,1232],{"__ignoreMap":357},[361,903,904,906,908,910],{"class":363,"line":364},[361,905,558],{"class":367},[361,907,561],{"class":461},[361,909,564],{"class":461},[361,911,371],{"class":370},[361,913,914],{"class":363,"line":374},[361,915,916],{"class":520},"  # domain and origin blocks as above\n",[361,918,919],{"class":363,"line":382},[361,920,452],{"emptyLinePlaceholder":451},[361,922,923,926,928],{"class":363,"line":395},[361,924,925],{"class":385},"  settings",[361,927,390],{"class":389},[361,929,371],{"class":370},[361,931,932,935,937],{"class":363,"line":415},[361,933,934],{"class":385},"    general",[361,936,390],{"class":389},[361,938,371],{"class":370},[361,940,941,944,946,948,951],{"class":363,"line":430},[361,942,943],{"class":385},"      first_byte_timeout",[361,945,390],{"class":389},[361,947,405],{"class":404},[361,949,950],{"class":408},"10s",[361,952,412],{"class":404},[361,954,955],{"class":363,"line":436},[361,956,433],{"class":370},[361,958,959],{"class":363,"line":442},[361,960,452],{"emptyLinePlaceholder":451},[361,962,963,966,968],{"class":363,"line":448},[361,964,965],{"class":385},"    query_params",[361,967,390],{"class":389},[361,969,371],{"class":370},[361,971,972,975,977,980,983,985,987,990,992],{"class":363,"line":455},[361,973,974],{"class":385},"      remove_query_parameters",[361,976,390],{"class":389},[361,978,979],{"class":370}," {",[361,981,982],{"class":385}," action",[361,984,390],{"class":389},[361,986,405],{"class":404},[361,988,989],{"class":408},"sort",[361,991,495],{"class":404},[361,993,994],{"class":370}," }\n",[361,996,997],{"class":363,"line":656},[361,998,433],{"class":370},[361,1000,1001],{"class":363,"line":666},[361,1002,452],{"emptyLinePlaceholder":451},[361,1004,1005,1008,1010],{"class":363,"line":676},[361,1006,1007],{"class":385},"    cookies",[361,1009,390],{"class":389},[361,1011,371],{"class":370},[361,1013,1014,1017,1019,1021,1023,1025,1027,1030,1032],{"class":363,"line":681},[361,1015,1016],{"class":385},"      on_cookie",[361,1018,390],{"class":389},[361,1020,979],{"class":370},[361,1022,982],{"class":385},[361,1024,390],{"class":389},[361,1026,405],{"class":404},[361,1028,1029],{"class":408},"remove",[361,1031,495],{"class":404},[361,1033,994],{"class":370},[361,1035,1036],{"class":363,"line":686},[361,1037,433],{"class":370},[361,1039,1040],{"class":363,"line":691},[361,1041,452],{"emptyLinePlaceholder":451},[361,1043,1044,1047,1049],{"class":363,"line":697},[361,1045,1046],{"class":385},"    security",[361,1048,390],{"class":389},[361,1050,371],{"class":370},[361,1052,1053,1056,1058],{"class":363,"line":711},[361,1054,1055],{"class":385},"      https_redirect",[361,1057,390],{"class":389},[361,1059,598],{"class":597},[361,1061,1062,1065,1068],{"class":363,"line":733},[361,1063,1064],{"class":385},"      hsts",[361,1066,1067],{"class":389},"           =",[361,1069,598],{"class":597},[361,1071,1072],{"class":363,"line":747},[361,1073,433],{"class":370},[361,1075,1076],{"class":363,"line":752},[361,1077,452],{"emptyLinePlaceholder":451},[361,1079,1080],{"class":363,"line":757},[361,1081,1082],{"class":520},"    # Apply settings only to matching requests\n",[361,1084,1085,1088,1090],{"class":363,"line":768},[361,1086,1087],{"class":385},"    overrides",[361,1089,390],{"class":389},[361,1091,1092],{"class":719}," [\n",[361,1094,1095],{"class":363,"line":778},[361,1096,1097],{"class":370},"      {\n",[361,1099,1100,1103,1105,1107,1110],{"class":363,"line":790},[361,1101,1102],{"class":385},"        name",[361,1104,621],{"class":389},[361,1106,405],{"class":404},[361,1108,1109],{"class":408},"cache-images-long",[361,1111,412],{"class":404},[361,1113,1114,1117,1119,1122,1124,1127,1129,1132,1134,1137,1139,1141,1143,1146,1148],{"class":363,"line":802},[361,1115,1116],{"class":385},"        extensions",[361,1118,390],{"class":389},[361,1120,1121],{"class":719}," [",[361,1123,495],{"class":404},[361,1125,1126],{"class":408},"jpg",[361,1128,495],{"class":404},[361,1130,1131],{"class":719},", ",[361,1133,495],{"class":404},[361,1135,1136],{"class":408},"png",[361,1138,495],{"class":404},[361,1140,1131],{"class":719},[361,1142,495],{"class":404},[361,1144,1145],{"class":408},"webp",[361,1147,495],{"class":404},[361,1149,1150],{"class":719},"]\n",[361,1152,1153,1156,1158],{"class":363,"line":813},[361,1154,1155],{"class":385},"        rules",[361,1157,390],{"class":389},[361,1159,1092],{"class":719},[361,1161,1162,1165,1168,1170,1172,1175,1177,1179,1182,1184,1188,1191,1193,1196,1198,1201,1204],{"class":363,"line":818},[361,1163,1164],{"class":370},"          {",[361,1166,1167],{"class":385}," string_id",[361,1169,390],{"class":389},[361,1171,405],{"class":404},[361,1173,1174],{"class":408},"general.cacheableTTLOverride",[361,1176,495],{"class":404},[361,1178,1131],{"class":719},[361,1180,1181],{"class":385},"value",[361,1183,390],{"class":389},[361,1185,1187],{"class":1186},"sMLJd"," jsonencode",[361,1189,1190],{"class":370},"(",[361,1192,495],{"class":404},[361,1194,1195],{"class":408},"7d",[361,1197,495],{"class":404},[361,1199,1200],{"class":370},")",[361,1202,1203],{"class":370}," }",[361,1205,1206],{"class":719},",\n",[361,1208,1210],{"class":363,"line":1209},29,[361,1211,1212],{"class":719},"        ]\n",[361,1214,1216,1219],{"class":363,"line":1215},30,[361,1217,1218],{"class":370},"      }",[361,1220,1206],{"class":719},[361,1222,1224],{"class":363,"line":1223},31,[361,1225,1226],{"class":719},"    ]\n",[361,1228,1230],{"class":363,"line":1229},32,[361,1231,439],{"class":370},[361,1233,1235],{"class":363,"line":1234},33,[361,1236,445],{"class":370},[169,1238,1239],{},"Only the settings you set are managed. Everything else keeps its current value, and changes made in the dashboard to those settings do not show up as a difference in your plan.",[184,1241,1242],{},[169,1243,1244],{},"Removing a setting from your configuration stops managing it. It does not reset it to the default value.",[169,1246,1247,1248,1251,1252,1257],{},"See the ",[176,1249,1250],{"href":46},"configuration pages"," for what each setting does. The ",[176,1253,1256],{"href":1254,"rel":1255},"https://github.com/varnish/terraform-provider-varnish/blob/main/examples/full/main.tf",[180],"full example"," lists every field with its allowed values.",[215,1259,1261],{"id":1260},"use-your-own-certificate","Use your own certificate",[169,1263,1264,1265,1268],{},"By default, the CDN issues certificates for your domains. To use your own ",[176,1266,1267],{"href":106},"certificate",", upload it and attach it to a domain:",[352,1270,1272],{"className":354,"code":1271,"filename":349,"language":356,"meta":357,"style":357},"resource \"varnish_cdn_certificate\" \"example\" {\n  name        = \"example-com\"\n  certificate = file(\"cert.pem\")\n  private_key = file(\"key.pem\")\n}\n\nresource \"varnish_cdn_service\" \"web\" {\n  domain {\n    fqdn    = \"www.example.com\"\n    tls     = true\n    cert_id = varnish_cdn_certificate.example.id\n  }\n\n  # origin block as above\n}\n",[206,1273,1274,1286,1301,1323,1343,1347,1351,1361,1367,1379,1388,1407,1411,1415,1420],{"__ignoreMap":357},[361,1275,1276,1278,1281,1284],{"class":363,"line":364},[361,1277,558],{"class":367},[361,1279,1280],{"class":461}," \"varnish_cdn_certificate\"",[361,1282,1283],{"class":461}," \"example\"",[361,1285,371],{"class":370},[361,1287,1288,1291,1294,1296,1299],{"class":363,"line":374},[361,1289,1290],{"class":385},"  name",[361,1292,1293],{"class":389},"        =",[361,1295,405],{"class":404},[361,1297,1298],{"class":408},"example-com",[361,1300,412],{"class":404},[361,1302,1303,1306,1308,1311,1313,1315,1318,1320],{"class":363,"line":382},[361,1304,1305],{"class":385},"  certificate",[361,1307,390],{"class":389},[361,1309,1310],{"class":1186}," file",[361,1312,1190],{"class":370},[361,1314,495],{"class":404},[361,1316,1317],{"class":408},"cert.pem",[361,1319,495],{"class":404},[361,1321,1322],{"class":370},")\n",[361,1324,1325,1328,1330,1332,1334,1336,1339,1341],{"class":363,"line":395},[361,1326,1327],{"class":385},"  private_key",[361,1329,390],{"class":389},[361,1331,1310],{"class":1186},[361,1333,1190],{"class":370},[361,1335,495],{"class":404},[361,1337,1338],{"class":408},"key.pem",[361,1340,495],{"class":404},[361,1342,1322],{"class":370},[361,1344,1345],{"class":363,"line":415},[361,1346,445],{"class":370},[361,1348,1349],{"class":363,"line":430},[361,1350,452],{"emptyLinePlaceholder":451},[361,1352,1353,1355,1357,1359],{"class":363,"line":436},[361,1354,558],{"class":367},[361,1356,561],{"class":461},[361,1358,564],{"class":461},[361,1360,371],{"class":370},[361,1362,1363,1365],{"class":363,"line":442},[361,1364,571],{"class":367},[361,1366,371],{"class":370},[361,1368,1369,1371,1373,1375,1377],{"class":363,"line":448},[361,1370,578],{"class":385},[361,1372,784],{"class":389},[361,1374,405],{"class":404},[361,1376,585],{"class":408},[361,1378,412],{"class":404},[361,1380,1381,1383,1386],{"class":363,"line":455},[361,1382,592],{"class":385},[361,1384,1385],{"class":389},"     =",[361,1387,598],{"class":597},[361,1389,1390,1393,1395,1398,1400,1403,1405],{"class":363,"line":656},[361,1391,1392],{"class":385},"    cert_id",[361,1394,390],{"class":389},[361,1396,1397],{"class":719}," varnish_cdn_certificate",[361,1399,182],{"class":389},[361,1401,1402],{"class":385},"example",[361,1404,182],{"class":389},[361,1406,730],{"class":385},[361,1408,1409],{"class":363,"line":666},[361,1410,439],{"class":370},[361,1412,1413],{"class":363,"line":676},[361,1414,452],{"emptyLinePlaceholder":451},[361,1416,1417],{"class":363,"line":681},[361,1418,1419],{"class":520},"  # origin block as above\n",[361,1421,1422],{"class":363,"line":686},[361,1423,445],{"class":370},[1425,1426,1427],"warning",{},[169,1428,1429],{},"The private key is stored in your state file. Keep the state file in a secure backend.",[215,1431,1433],{"id":1432},"create-a-purge-token","Create a purge token",[169,1435,1436,1439],{},[176,1437,1438],{"href":114},"Purge tokens"," let other systems invalidate cached content:",[352,1441,1443],{"className":354,"code":1442,"filename":349,"language":356,"meta":357,"style":357},"resource \"varnish_cdn_purge_token\" \"ci\" {\n  label  = \"ci-pipeline\"\n  expire = \"8760h\" # one year\n}\n\noutput \"purge_token\" {\n  value     = varnish_cdn_purge_token.ci.access_token\n  sensitive = true\n}\n",[206,1444,1445,1457,1471,1488,1492,1496,1505,1524,1533],{"__ignoreMap":357},[361,1446,1447,1449,1452,1455],{"class":363,"line":364},[361,1448,558],{"class":367},[361,1450,1451],{"class":461}," \"varnish_cdn_purge_token\"",[361,1453,1454],{"class":461}," \"ci\"",[361,1456,371],{"class":370},[361,1458,1459,1462,1464,1466,1469],{"class":363,"line":374},[361,1460,1461],{"class":385},"  label",[361,1463,401],{"class":389},[361,1465,405],{"class":404},[361,1467,1468],{"class":408},"ci-pipeline",[361,1470,412],{"class":404},[361,1472,1473,1476,1478,1480,1483,1485],{"class":363,"line":382},[361,1474,1475],{"class":385},"  expire",[361,1477,390],{"class":389},[361,1479,405],{"class":404},[361,1481,1482],{"class":408},"8760h",[361,1484,495],{"class":404},[361,1486,1487],{"class":520}," # one year\n",[361,1489,1490],{"class":363,"line":395},[361,1491,445],{"class":370},[361,1493,1494],{"class":363,"line":415},[361,1495,452],{"emptyLinePlaceholder":451},[361,1497,1498,1500,1503],{"class":363,"line":430},[361,1499,760],{"class":367},[361,1501,1502],{"class":461}," \"purge_token\"",[361,1504,371],{"class":370},[361,1506,1507,1509,1511,1514,1516,1519,1521],{"class":363,"line":436},[361,1508,771],{"class":385},[361,1510,1385],{"class":389},[361,1512,1513],{"class":719}," varnish_cdn_purge_token",[361,1515,182],{"class":389},[361,1517,1518],{"class":385},"ci",[361,1520,182],{"class":389},[361,1522,1523],{"class":385},"access_token\n",[361,1525,1526,1529,1531],{"class":363,"line":442},[361,1527,1528],{"class":385},"  sensitive",[361,1530,390],{"class":389},[361,1532,598],{"class":597},[361,1534,1535],{"class":363,"line":448},[361,1536,445],{"class":370},[169,1538,1539,1540,1543],{},"Read the token with ",[206,1541,1542],{},"tofu output -raw purge_token",". It is only available for tokens created by OpenTofu or Terraform, not for imported ones.",[215,1545,1547],{"id":1546},"import-existing-services","Import existing services",[169,1549,1550],{},"To manage a service you already created in the dashboard, import it by its service ID:",[352,1552,1555],{"className":354,"code":1553,"filename":1554,"language":356,"meta":357,"style":357},"import {\n  to = varnish_cdn_service.web\n  id = \"42\"\n}\n","import.tf",[206,1556,1557,1564,1578,1592],{"__ignoreMap":357},[361,1558,1559,1562],{"class":363,"line":364},[361,1560,1561],{"class":367},"import",[361,1563,371],{"class":370},[361,1565,1566,1569,1571,1573,1575],{"class":363,"line":374},[361,1567,1568],{"class":385},"  to",[361,1570,390],{"class":389},[361,1572,720],{"class":719},[361,1574,182],{"class":389},[361,1576,1577],{"class":385},"web\n",[361,1579,1580,1583,1585,1587,1590],{"class":363,"line":382},[361,1581,1582],{"class":385},"  id",[361,1584,390],{"class":389},[361,1586,405],{"class":404},[361,1588,1589],{"class":408},"42",[361,1591,412],{"class":404},[361,1593,1594],{"class":363,"line":395},[361,1595,445],{"class":370},[169,1597,1598],{},"Then generate the configuration for it:",[352,1600,1602],{"className":475,"code":1601,"filename":477,"language":478,"meta":357,"style":357},"tofu plan -generate-config-out=generated.tf\n",[206,1603,1604],{"__ignoreMap":357},[361,1605,1606,1608,1611],{"class":363,"line":364},[361,1607,208],{"class":514},[361,1609,1610],{"class":408}," plan",[361,1612,1614],{"class":1613},"sFhLe"," -generate-config-out=generated.tf\n",[169,1616,1617,1618,1621,1622,1625],{},"Review ",[206,1619,1620],{},"generated.tf",", then run ",[206,1623,1624],{},"tofu apply"," to finish the import.",[215,1627,1629],{"id":1628},"reference","Reference",[1631,1632,1633,1642,1649],"ul",{},[1634,1635,1636,1641],"li",{},[176,1637,1640],{"href":1638,"rel":1639},"https://registry.terraform.io/providers/varnish/varnish/latest/docs",[180],"Provider documentation",": every resource and attribute",[1634,1643,1644],{},[176,1645,1648],{"href":1646,"rel":1647},"https://github.com/varnish/terraform-provider-varnish/tree/main/examples",[180],"Examples",[1634,1650,1651],{},[176,1652,1655],{"href":1653,"rel":1654},"https://github.com/varnish/terraform-provider-varnish/issues",[180],"Report an issue",[1657,1658,1659],"style",{},"html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}",{"title":357,"searchDepth":374,"depth":374,"links":1661},[1662,1663,1664,1665,1666,1667,1668,1669],{"id":217,"depth":374,"text":218},{"id":326,"depth":374,"text":327},{"id":536,"depth":374,"text":537},{"id":882,"depth":374,"text":883},{"id":1260,"depth":374,"text":1261},{"id":1432,"depth":374,"text":1433},{"id":1546,"depth":374,"text":1547},{"id":1628,"depth":374,"text":1629},"Manage your Varnish CDN services, certificates and purge tokens as code with the Varnish provider for OpenTofu and Terraform.","md",{},{"title":122,"description":1670},"8k15I9YIIrjUQMy0NyXCrtKSZx_EF1E31z9099DOhBA",[1676,1678],{"title":113,"path":114,"stem":115,"description":1677,"children":-1},"Authenticate your purge requests using workspace-wide JWT or Basic Auth tokens. Securely authorize external systems to invalidate cached content across all your services.",null,[1680],{"title":5,"path":6,"stem":7,"children":1681,"page":44},[1682,1693],{"title":10,"path":11,"stem":12,"children":1683},[1684,1685,1686],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22,"children":1687,"page":44},[1688,1689,1690,1691,1692],{"title":25,"path":26,"stem":27},{"title":29,"path":30,"stem":31},{"title":33,"path":34,"stem":35},{"title":37,"path":38,"stem":39},{"title":41,"path":42,"stem":43},{"title":10,"path":46,"stem":47,"children":1694},[1695,1696,1709,1714],{"title":10,"path":46,"stem":47},{"title":51,"path":52,"stem":53,"children":1697,"page":44},[1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708],{"title":56,"path":57,"stem":58},{"title":60,"path":61,"stem":62},{"title":64,"path":65,"stem":66},{"title":68,"path":69,"stem":70},{"title":72,"path":73,"stem":74},{"title":76,"path":77,"stem":78},{"title":80,"path":81,"stem":82},{"title":84,"path":85,"stem":86},{"title":88,"path":89,"stem":90},{"title":92,"path":93,"stem":94},{"title":96,"path":97,"stem":98},{"title":100,"path":101,"stem":102,"children":1710,"page":44},[1711,1712,1713],{"title":105,"path":106,"stem":107},{"title":109,"path":110,"stem":111},{"title":113,"path":114,"stem":115},{"title":117,"path":118,"stem":119,"children":1715,"page":44},[1716],{"title":122,"path":123,"stem":124},1794392836969]