[{"data":1,"prerenderedAt":3592},["ShallowReactive",2],{"blog-\u002Fen\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud":3,"blog-\u002Fen\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud-surround":3446,"blog-\u002Fen\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud-certifications":3507},{"id":4,"title":5,"body":6,"categories":3431,"cover":3433,"cover_contain":601,"credly_badge_id":3434,"date":3435,"description":3436,"extension":3437,"meta":3438,"navigation":601,"path":3439,"related_certifications":3440,"seo":3442,"slug":3443,"stem":3444,"__hash__":3445},"blog\u002Fen\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud.md","Configuring Terraform for Scaleway\u002FOVHcloud",{"type":7,"value":8,"toc":3421},"minimark",[9,14,18,22,36,39,43,46,487,505,509,512,517,520,523,1889,1892,1997,2034,2038,2041,2361,2368,2619,2626,2629,3396,3410,3414,3417],[10,11,13],"h2",{"id":12},"real-world-use-case","Real-world use case",[15,16,17],"p",{},"You need to deploy cloud resources in a reproducible way on Scaleway or OVHcloud: here's how to configure Terraform to automate this deployment.",[10,19,21],{"id":20},"terraform","Terraform",[15,23,24,25,35],{},"Terraform is a tool I use to provision my resources hosted with certain providers such as OVH, Scaleway, Azure, or AWS. This is what's known as Infrastructure As Code (IaC): it lets you automate certain tasks. The goal is to provision resources with a provider. More information: ",[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fregistry.terraform.io\u002Fbrowse\u002Fproviders",[30],"nofollow",[32,33,34],"strong",{},"Browse Providers | Terraform Registry",".",[15,37,38],{},"All the commands below are compatible with all clients (Windows, Mac, Linux). In our example, we'll deploy infrastructure on Scaleway with Terraform and run actions on an OVHcloud server.",[10,40,42],{"id":41},"installing-terraform-on-macos","Installing Terraform on macOS",[15,44,45],{},"You can install the package manually on macOS, or via the Homebrew package manager:",[47,48,53],"pre",{"className":49,"code":50,"language":51,"meta":52,"style":52},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew tap hashicorp\u002Ftap\nRunning `brew update --preinstall`...\n==> Auto-updated Homebrew!\nd 3 taps (hashicorp\u002Ftap, homebrew\u002Fcore and homebrew\u002Fcask).\n==> New Formulae\ndbml-cli             dotdrop              glibc@2.13           goctl                libabw               lndir                octosql              release-it           sdl2_sound           sftpgo               xcode-kotlin\n==> Updated Formulae\nUpdated 554 formulae.\n==> New Casks\naethersx2                                       jquake                                          plus42-binary                                   ti-smartview-ce-for-the-ti-84-plus-family       vieb\nbike                                            manila                                          plus42-decimal                                  tqsl                                            yandex-music-unofficial\nferdium                                         mega                                            podman-desktop                                  trivial\ngroestlcoin-core                                oxwu                                            protokol                                        universal-android-debloater\n==> Updated Casks\nUpdated 731 casks.\n==> Deleted Casks\nentropy                 gloomhaven-helper       indigo                  kite                    megax                   nbtexplorer             shortery                tifig                   twitch                  xoctave\nbrew install hashicorp\u002Ftap\u002Fterraform\n==> Downloading https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.1.9\u002Fterraform_1.1.9_darwin_arm64.zip\n######################################################################## 100.0%\n==> Installing terraform from hashicorp\u002Ftap\n????  \u002Fopt\u002Fhomebrew\u002FCellar\u002Fterraform\u002F1.1.9: 3 files, 71.4MB, built in 2 seconds\n==> Running `brew cleanup terraform`...\nDisable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.\nHide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).\n","bash","",[54,55,56,72,94,110,138,151,187,199,210,222,240,258,273,288,299,310,322,355,366,379,386,404,413,433,454],"code",{"__ignoreMap":52},[57,58,61,65,69],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"sBMFI","brew",[57,66,68],{"class":67},"sfazB"," tap",[57,70,71],{"class":67}," hashicorp\u002Ftap\n",[57,73,75,78,82,84,87,90],{"class":59,"line":74},2,[57,76,77],{"class":63},"Running",[57,79,81],{"class":80},"sMK4o"," `",[57,83,64],{"class":63},[57,85,86],{"class":67}," update --preinstall",[57,88,89],{"class":80},"`",[57,91,93],{"class":92},"s2Zo4","...\n",[57,95,97,100,104,107],{"class":59,"line":96},3,[57,98,99],{"class":67},"==",[57,101,103],{"class":102},"sTEyZ","> ",[57,105,106],{"class":67},"Auto-updated",[57,108,109],{"class":67}," Homebrew!\n",[57,111,113,116,120,123,126,129,132,135],{"class":59,"line":112},4,[57,114,115],{"class":63},"d",[57,117,119],{"class":118},"sbssI"," 3",[57,121,122],{"class":67}," taps",[57,124,125],{"class":102}," (hashicorp\u002Ftap, ",[57,127,128],{"class":67},"homebrew\u002Fcore",[57,130,131],{"class":67}," and",[57,133,134],{"class":67}," homebrew\u002Fcask",[57,136,137],{"class":102},").\n",[57,139,141,143,145,148],{"class":59,"line":140},5,[57,142,99],{"class":67},[57,144,103],{"class":102},[57,146,147],{"class":67},"New",[57,149,150],{"class":67}," Formulae\n",[57,152,154,157,160,163,166,169,172,175,178,181,184],{"class":59,"line":153},6,[57,155,156],{"class":63},"dbml-cli",[57,158,159],{"class":67},"             dotdrop",[57,161,162],{"class":67},"              glibc@2.13",[57,164,165],{"class":67},"           goctl",[57,167,168],{"class":67},"                libabw",[57,170,171],{"class":67},"               lndir",[57,173,174],{"class":67},"                octosql",[57,176,177],{"class":67},"              release-it",[57,179,180],{"class":67},"           sdl2_sound",[57,182,183],{"class":67},"           sftpgo",[57,185,186],{"class":67},"               xcode-kotlin\n",[57,188,190,192,194,197],{"class":59,"line":189},7,[57,191,99],{"class":67},[57,193,103],{"class":102},[57,195,196],{"class":67},"Updated",[57,198,150],{"class":67},[57,200,202,204,207],{"class":59,"line":201},8,[57,203,196],{"class":63},[57,205,206],{"class":118}," 554",[57,208,209],{"class":67}," formulae.\n",[57,211,213,215,217,219],{"class":59,"line":212},9,[57,214,99],{"class":67},[57,216,103],{"class":102},[57,218,147],{"class":67},[57,220,221],{"class":67}," Casks\n",[57,223,225,228,231,234,237],{"class":59,"line":224},10,[57,226,227],{"class":63},"aethersx2",[57,229,230],{"class":67},"                                       jquake",[57,232,233],{"class":67},"                                          plus42-binary",[57,235,236],{"class":67},"                                   ti-smartview-ce-for-the-ti-84-plus-family",[57,238,239],{"class":67},"       vieb\n",[57,241,243,246,249,252,255],{"class":59,"line":242},11,[57,244,245],{"class":63},"bike",[57,247,248],{"class":67},"                                            manila",[57,250,251],{"class":67},"                                          plus42-decimal",[57,253,254],{"class":67},"                                  tqsl",[57,256,257],{"class":67},"                                            yandex-music-unofficial\n",[57,259,261,264,267,270],{"class":59,"line":260},12,[57,262,263],{"class":63},"ferdium",[57,265,266],{"class":67},"                                         mega",[57,268,269],{"class":67},"                                            podman-desktop",[57,271,272],{"class":67},"                                  trivial\n",[57,274,276,279,282,285],{"class":59,"line":275},13,[57,277,278],{"class":63},"groestlcoin-core",[57,280,281],{"class":67},"                                oxwu",[57,283,284],{"class":67},"                                            protokol",[57,286,287],{"class":67},"                                        universal-android-debloater\n",[57,289,291,293,295,297],{"class":59,"line":290},14,[57,292,99],{"class":67},[57,294,103],{"class":102},[57,296,196],{"class":67},[57,298,221],{"class":67},[57,300,302,304,307],{"class":59,"line":301},15,[57,303,196],{"class":63},[57,305,306],{"class":118}," 731",[57,308,309],{"class":67}," casks.\n",[57,311,313,315,317,320],{"class":59,"line":312},16,[57,314,99],{"class":67},[57,316,103],{"class":102},[57,318,319],{"class":67},"Deleted",[57,321,221],{"class":67},[57,323,325,328,331,334,337,340,343,346,349,352],{"class":59,"line":324},17,[57,326,327],{"class":63},"entropy",[57,329,330],{"class":67},"                 gloomhaven-helper",[57,332,333],{"class":67},"       indigo",[57,335,336],{"class":67},"                  kite",[57,338,339],{"class":67},"                    megax",[57,341,342],{"class":67},"                   nbtexplorer",[57,344,345],{"class":67},"             shortery",[57,347,348],{"class":67},"                tifig",[57,350,351],{"class":67},"                   twitch",[57,353,354],{"class":67},"                  xoctave\n",[57,356,358,360,363],{"class":59,"line":357},18,[57,359,64],{"class":63},[57,361,362],{"class":67}," install",[57,364,365],{"class":67}," hashicorp\u002Ftap\u002Fterraform\n",[57,367,369,371,373,376],{"class":59,"line":368},19,[57,370,99],{"class":67},[57,372,103],{"class":102},[57,374,375],{"class":67},"Downloading",[57,377,378],{"class":67}," https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.1.9\u002Fterraform_1.1.9_darwin_arm64.zip\n",[57,380,382],{"class":59,"line":381},20,[57,383,385],{"class":384},"sHwdD","######################################################################## 100.0%\n",[57,387,389,391,393,396,399,402],{"class":59,"line":388},21,[57,390,99],{"class":67},[57,392,103],{"class":102},[57,394,395],{"class":67},"Installing",[57,397,398],{"class":67}," terraform",[57,400,401],{"class":67}," from",[57,403,71],{"class":67},[57,405,407,410],{"class":59,"line":406},22,[57,408,409],{"class":80},"????",[57,411,412],{"class":102},"  \u002Fopt\u002Fhomebrew\u002FCellar\u002Fterraform\u002F1.1.9: 3 files, 71.4MB, built in 2 seconds\n",[57,414,416,418,420,422,424,426,429,431],{"class":59,"line":415},23,[57,417,99],{"class":67},[57,419,103],{"class":102},[57,421,77],{"class":67},[57,423,81],{"class":80},[57,425,64],{"class":63},[57,427,428],{"class":67}," cleanup terraform",[57,430,89],{"class":80},[57,432,93],{"class":92},[57,434,436,439,442,445,448,451],{"class":59,"line":435},24,[57,437,438],{"class":63},"Disable",[57,440,441],{"class":67}," this",[57,443,444],{"class":67}," behaviour",[57,446,447],{"class":67}," by",[57,449,450],{"class":67}," setting",[57,452,453],{"class":67}," HOMEBREW_NO_INSTALL_CLEANUP.\n",[57,455,457,460,463,466,469,472,475,477,480,483,485],{"class":59,"line":456},25,[57,458,459],{"class":63},"Hide",[57,461,462],{"class":67}," these",[57,464,465],{"class":67}," hints",[57,467,468],{"class":67}," with",[57,470,471],{"class":67}," HOMEBREW_NO_ENV_HINTS",[57,473,474],{"class":102}," (see ",[57,476,89],{"class":80},[57,478,479],{"class":63},"man",[57,481,482],{"class":67}," brew",[57,484,89],{"class":80},[57,486,137],{"class":102},[15,488,489,490,497,498,35],{},"Next I check the registry of existing providers and look for Scaleway: ",[26,491,494],{"href":492,"rel":493},"https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fscaleway\u002Fscaleway\u002Flatest\u002Fdocs",[30],[32,495,496],{},"scaleway\u002Fscaleway | Terraform Registry"," and ",[26,499,502],{"href":500,"rel":501},"https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fovh\u002Fovh\u002Flatest\u002Fdocs",[30],[32,503,504],{},"OVHcloud",[10,506,508],{"id":507},"configuring-terraform","Configuring Terraform",[15,510,511],{},"To get started, you need to create a folder dedicated to each Terraform project. Then you need to create a main.tf file inside it. There are two ways to write our configuration: using the HashiCorp language or the structured JSON format. In my case, I prefer using JSON formatting.",[513,514,516],"h3",{"id":515},"terraform-with-scaleway","Terraform with Scaleway",[15,518,519],{},"We'll look at an integration with the Scaleway provider (the init, plan, apply commands are explained further below in the OVH provider example if needed).",[15,521,522],{},"Here's a configuration example on Scaleway:",[47,524,526],{"className":49,"code":525,"language":51,"meta":52,"style":52},"terraform {\n  required_providers {\n    scaleway = {\n      source = \"scaleway\u002Fscaleway\"\n    }\n  }\n  required_version = \">= 0.13\"\n}\n\nprovider \"scaleway\" {\n  alias = \"production\"\n  profile = \"kassianoff-blog\"\n}\n\nresource \"scaleway_account_ssh_key\" \"jérémie\" {\n  provider = scaleway.production\n  name = \"Jérémie\"\n  public_key = \"ssh-ed25519 AABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFF\"\n}\n\nresource \"scaleway_instance_ip\" \"public_ip\" {\n  provider = scaleway.production\n}\n\nlocals {\n  ip_source = [\n    { ip = \"my_routable_ip_01\u002F32\", port = \"22\" },\n    { ip = \"my_routable_ip_02\u002F32\", port = \"22\" },\n  ]\n\n  any_in = [\n    { ip_range = \"0.0.0.0\u002F0\", port = \"80\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"443\" },\n  ]\n\n  any_out = [\n    { ip_range = \"0.0.0.0\u002F0\", port = \"53\", protocol = \"TCP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"53\", protocol = \"UDP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"80\", protocol = \"TCP\" },\n    { ip_range = \"0.0.0.0\u002F0\", port = \"443\", protocol = \"TCP\" },\n  ]\n}\n\nresource \"scaleway_instance_security_group\" \"prod\" {\n  provider = scaleway.production\n  description = \"scaleway-firewall\"\n  name = \"Kassianoff scaleway firewall\"\n  inbound_default_policy = \"drop\"\n  outbound_default_policy = \"drop\"\n  enable_default_security = false\n\n  dynamic \"inbound_rule\" {\n    for_each = local.ip_source && local.any_in\n\n    content {\n      action = \"accept\"\n      ip = inbound_rule.value.ip\n      ip_range = inbound_rule.value.ip_range\n      port = inbound_rule.value.port\n    }\n  }\n\n  dynamic \"outbound_rule\" {\n    for_each = local.any_out\n\n    content {\n      action = \"accept\"\n      ip_range = outbound_rule.value.ip_range\n      port = outbound_rule.value.port\n      protocol = outbound_rule.value.protocol\n    }\n  }\n}\n\nresource \"scaleway_instance_server\" \"blog\" {\n  provider = scaleway.production\n  name = \"kassianoff blog\"\n  type = \"DEV1-L\"\n  image = \"ubuntu_jammy\"\n  tags = [ \"blog\" ]\n  ip_id = scaleway_instance_ip.public_ip.id\n  security_group_id = scaleway_instance_security_group.blog.id\n  private_network {\n    pn_id = scaleway_vpc_private_network.blog.id\n  }\n}\n\nresource \"scaleway_rdb_database\" \"blog\" {\n  instance_id = scaleway_rdb_instance.blog.id\n  name = \"kassianoff-database\"\n  node_type = \"DB-DEV-S\"\n  engine = \"PostgreSQL-14\"\n  is_ha_cluster = true\n  disable_backup = true\n  user_name = \"kassianoff\"\n  password = \"thiZ_is_v&ry_s3cret\"\n  region= \"fr-par\"\n  tags = [ \"db\", \"blog\" ]\n  volume_type = \"bssd\"\n  volume_size_in_gb = 5\n  private_network { \n    ip_net = \"192.168.1.254\u002F24\" \n    pn_id = \"${scaleway_vpc_private_network.blog.id}\" \n  }\n}\n\nresource scaleway_vpc_private_network blog { \nname = \"production\" \n}\n",[54,527,528,535,542,552,568,573,578,592,597,603,618,632,646,650,654,675,685,699,713,717,721,741,749,753,757,764,775,811,841,847,852,862,894,924,929,934,944,988,1030,1071,1112,1117,1122,1127,1148,1157,1172,1186,1201,1215,1226,1231,1246,1263,1268,1276,1291,1302,1313,1324,1329,1334,1339,1353,1363,1368,1375,1388,1398,1408,1419,1424,1429,1434,1439,1460,1469,1483,1498,1513,1533,1544,1555,1563,1574,1579,1584,1589,1609,1620,1634,1649,1664,1675,1685,1700,1715,1731,1757,1772,1783,1794,1811,1838,1843,1848,1853,1868,1884],{"__ignoreMap":52},[57,529,530,532],{"class":59,"line":60},[57,531,20],{"class":63},[57,533,534],{"class":67}," {\n",[57,536,537,540],{"class":59,"line":74},[57,538,539],{"class":63},"  required_providers",[57,541,534],{"class":67},[57,543,544,547,550],{"class":59,"line":96},[57,545,546],{"class":63},"    scaleway",[57,548,549],{"class":67}," =",[57,551,534],{"class":67},[57,553,554,557,559,562,565],{"class":59,"line":112},[57,555,556],{"class":92},"      source",[57,558,549],{"class":67},[57,560,561],{"class":80}," \"",[57,563,564],{"class":67},"scaleway\u002Fscaleway",[57,566,567],{"class":80},"\"\n",[57,569,570],{"class":59,"line":140},[57,571,572],{"class":102},"    }\n",[57,574,575],{"class":59,"line":153},[57,576,577],{"class":102},"  }\n",[57,579,580,583,585,587,590],{"class":59,"line":189},[57,581,582],{"class":63},"  required_version",[57,584,549],{"class":67},[57,586,561],{"class":80},[57,588,589],{"class":67},">= 0.13",[57,591,567],{"class":80},[57,593,594],{"class":59,"line":201},[57,595,596],{"class":102},"}\n",[57,598,599],{"class":59,"line":212},[57,600,602],{"emptyLinePlaceholder":601},true,"\n",[57,604,605,608,610,613,616],{"class":59,"line":224},[57,606,607],{"class":63},"provider",[57,609,561],{"class":80},[57,611,612],{"class":67},"scaleway",[57,614,615],{"class":80},"\"",[57,617,534],{"class":67},[57,619,620,623,625,627,630],{"class":59,"line":242},[57,621,622],{"class":92},"  alias",[57,624,549],{"class":67},[57,626,561],{"class":80},[57,628,629],{"class":67},"production",[57,631,567],{"class":80},[57,633,634,637,639,641,644],{"class":59,"line":260},[57,635,636],{"class":63},"  profile",[57,638,549],{"class":67},[57,640,561],{"class":80},[57,642,643],{"class":67},"kassianoff-blog",[57,645,567],{"class":80},[57,647,648],{"class":59,"line":275},[57,649,596],{"class":102},[57,651,652],{"class":59,"line":290},[57,653,602],{"emptyLinePlaceholder":601},[57,655,656,659,661,664,666,668,671,673],{"class":59,"line":301},[57,657,658],{"class":63},"resource",[57,660,561],{"class":80},[57,662,663],{"class":67},"scaleway_account_ssh_key",[57,665,615],{"class":80},[57,667,561],{"class":80},[57,669,670],{"class":67},"jérémie",[57,672,615],{"class":80},[57,674,534],{"class":67},[57,676,677,680,682],{"class":59,"line":312},[57,678,679],{"class":63},"  provider",[57,681,549],{"class":67},[57,683,684],{"class":67}," scaleway.production\n",[57,686,687,690,692,694,697],{"class":59,"line":324},[57,688,689],{"class":63},"  name",[57,691,549],{"class":67},[57,693,561],{"class":80},[57,695,696],{"class":67},"Jérémie",[57,698,567],{"class":80},[57,700,701,704,706,708,711],{"class":59,"line":357},[57,702,703],{"class":63},"  public_key",[57,705,549],{"class":67},[57,707,561],{"class":80},[57,709,710],{"class":67},"ssh-ed25519 AABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFFGGAABBCCDDEEFF",[57,712,567],{"class":80},[57,714,715],{"class":59,"line":368},[57,716,596],{"class":102},[57,718,719],{"class":59,"line":381},[57,720,602],{"emptyLinePlaceholder":601},[57,722,723,725,727,730,732,734,737,739],{"class":59,"line":388},[57,724,658],{"class":63},[57,726,561],{"class":80},[57,728,729],{"class":67},"scaleway_instance_ip",[57,731,615],{"class":80},[57,733,561],{"class":80},[57,735,736],{"class":67},"public_ip",[57,738,615],{"class":80},[57,740,534],{"class":67},[57,742,743,745,747],{"class":59,"line":406},[57,744,679],{"class":63},[57,746,549],{"class":67},[57,748,684],{"class":67},[57,750,751],{"class":59,"line":415},[57,752,596],{"class":102},[57,754,755],{"class":59,"line":435},[57,756,602],{"emptyLinePlaceholder":601},[57,758,759,762],{"class":59,"line":456},[57,760,761],{"class":63},"locals",[57,763,534],{"class":67},[57,765,767,770,772],{"class":59,"line":766},26,[57,768,769],{"class":63},"  ip_source",[57,771,549],{"class":67},[57,773,774],{"class":102}," [\n",[57,776,778,781,784,786,788,791,793,796,799,801,803,806,808],{"class":59,"line":777},27,[57,779,780],{"class":80},"    {",[57,782,783],{"class":63}," ip",[57,785,549],{"class":67},[57,787,561],{"class":80},[57,789,790],{"class":67},"my_routable_ip_01\u002F32",[57,792,615],{"class":80},[57,794,795],{"class":67},",",[57,797,798],{"class":67}," port",[57,800,549],{"class":67},[57,802,561],{"class":80},[57,804,805],{"class":67},"22",[57,807,615],{"class":80},[57,809,810],{"class":67}," },\n",[57,812,814,816,818,820,822,825,827,829,831,833,835,837,839],{"class":59,"line":813},28,[57,815,780],{"class":80},[57,817,783],{"class":63},[57,819,549],{"class":67},[57,821,561],{"class":80},[57,823,824],{"class":67},"my_routable_ip_02\u002F32",[57,826,615],{"class":80},[57,828,795],{"class":67},[57,830,798],{"class":67},[57,832,549],{"class":67},[57,834,561],{"class":80},[57,836,805],{"class":67},[57,838,615],{"class":80},[57,840,810],{"class":67},[57,842,844],{"class":59,"line":843},29,[57,845,846],{"class":102},"  ]\n",[57,848,850],{"class":59,"line":849},30,[57,851,602],{"emptyLinePlaceholder":601},[57,853,855,858,860],{"class":59,"line":854},31,[57,856,857],{"class":63},"  any_in",[57,859,549],{"class":67},[57,861,774],{"class":102},[57,863,865,867,870,872,874,877,879,881,883,885,887,890,892],{"class":59,"line":864},32,[57,866,780],{"class":80},[57,868,869],{"class":63}," ip_range",[57,871,549],{"class":67},[57,873,561],{"class":80},[57,875,876],{"class":67},"0.0.0.0\u002F0",[57,878,615],{"class":80},[57,880,795],{"class":67},[57,882,798],{"class":67},[57,884,549],{"class":67},[57,886,561],{"class":80},[57,888,889],{"class":67},"80",[57,891,615],{"class":80},[57,893,810],{"class":67},[57,895,897,899,901,903,905,907,909,911,913,915,917,920,922],{"class":59,"line":896},33,[57,898,780],{"class":80},[57,900,869],{"class":63},[57,902,549],{"class":67},[57,904,561],{"class":80},[57,906,876],{"class":67},[57,908,615],{"class":80},[57,910,795],{"class":67},[57,912,798],{"class":67},[57,914,549],{"class":67},[57,916,561],{"class":80},[57,918,919],{"class":67},"443",[57,921,615],{"class":80},[57,923,810],{"class":67},[57,925,927],{"class":59,"line":926},34,[57,928,846],{"class":102},[57,930,932],{"class":59,"line":931},35,[57,933,602],{"emptyLinePlaceholder":601},[57,935,937,940,942],{"class":59,"line":936},36,[57,938,939],{"class":63},"  any_out",[57,941,549],{"class":67},[57,943,774],{"class":102},[57,945,947,949,951,953,955,957,959,961,963,965,967,970,972,974,977,979,981,984,986],{"class":59,"line":946},37,[57,948,780],{"class":80},[57,950,869],{"class":63},[57,952,549],{"class":67},[57,954,561],{"class":80},[57,956,876],{"class":67},[57,958,615],{"class":80},[57,960,795],{"class":67},[57,962,798],{"class":67},[57,964,549],{"class":67},[57,966,561],{"class":80},[57,968,969],{"class":67},"53",[57,971,615],{"class":80},[57,973,795],{"class":67},[57,975,976],{"class":67}," protocol",[57,978,549],{"class":67},[57,980,561],{"class":80},[57,982,983],{"class":67},"TCP",[57,985,615],{"class":80},[57,987,810],{"class":67},[57,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1026,1028],{"class":59,"line":990},38,[57,992,780],{"class":80},[57,994,869],{"class":63},[57,996,549],{"class":67},[57,998,561],{"class":80},[57,1000,876],{"class":67},[57,1002,615],{"class":80},[57,1004,795],{"class":67},[57,1006,798],{"class":67},[57,1008,549],{"class":67},[57,1010,561],{"class":80},[57,1012,969],{"class":67},[57,1014,615],{"class":80},[57,1016,795],{"class":67},[57,1018,976],{"class":67},[57,1020,549],{"class":67},[57,1022,561],{"class":80},[57,1024,1025],{"class":67},"UDP",[57,1027,615],{"class":80},[57,1029,810],{"class":67},[57,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069],{"class":59,"line":1032},39,[57,1034,780],{"class":80},[57,1036,869],{"class":63},[57,1038,549],{"class":67},[57,1040,561],{"class":80},[57,1042,876],{"class":67},[57,1044,615],{"class":80},[57,1046,795],{"class":67},[57,1048,798],{"class":67},[57,1050,549],{"class":67},[57,1052,561],{"class":80},[57,1054,889],{"class":67},[57,1056,615],{"class":80},[57,1058,795],{"class":67},[57,1060,976],{"class":67},[57,1062,549],{"class":67},[57,1064,561],{"class":80},[57,1066,983],{"class":67},[57,1068,615],{"class":80},[57,1070,810],{"class":67},[57,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110],{"class":59,"line":1073},40,[57,1075,780],{"class":80},[57,1077,869],{"class":63},[57,1079,549],{"class":67},[57,1081,561],{"class":80},[57,1083,876],{"class":67},[57,1085,615],{"class":80},[57,1087,795],{"class":67},[57,1089,798],{"class":67},[57,1091,549],{"class":67},[57,1093,561],{"class":80},[57,1095,919],{"class":67},[57,1097,615],{"class":80},[57,1099,795],{"class":67},[57,1101,976],{"class":67},[57,1103,549],{"class":67},[57,1105,561],{"class":80},[57,1107,983],{"class":67},[57,1109,615],{"class":80},[57,1111,810],{"class":67},[57,1113,1115],{"class":59,"line":1114},41,[57,1116,846],{"class":102},[57,1118,1120],{"class":59,"line":1119},42,[57,1121,596],{"class":80},[57,1123,1125],{"class":59,"line":1124},43,[57,1126,602],{"emptyLinePlaceholder":601},[57,1128,1130,1132,1134,1137,1139,1141,1144,1146],{"class":59,"line":1129},44,[57,1131,658],{"class":63},[57,1133,561],{"class":80},[57,1135,1136],{"class":67},"scaleway_instance_security_group",[57,1138,615],{"class":80},[57,1140,561],{"class":80},[57,1142,1143],{"class":67},"prod",[57,1145,615],{"class":80},[57,1147,534],{"class":67},[57,1149,1151,1153,1155],{"class":59,"line":1150},45,[57,1152,679],{"class":63},[57,1154,549],{"class":67},[57,1156,684],{"class":67},[57,1158,1160,1163,1165,1167,1170],{"class":59,"line":1159},46,[57,1161,1162],{"class":63},"  description",[57,1164,549],{"class":67},[57,1166,561],{"class":80},[57,1168,1169],{"class":67},"scaleway-firewall",[57,1171,567],{"class":80},[57,1173,1175,1177,1179,1181,1184],{"class":59,"line":1174},47,[57,1176,689],{"class":63},[57,1178,549],{"class":67},[57,1180,561],{"class":80},[57,1182,1183],{"class":67},"Kassianoff scaleway firewall",[57,1185,567],{"class":80},[57,1187,1189,1192,1194,1196,1199],{"class":59,"line":1188},48,[57,1190,1191],{"class":63},"  inbound_default_policy",[57,1193,549],{"class":67},[57,1195,561],{"class":80},[57,1197,1198],{"class":67},"drop",[57,1200,567],{"class":80},[57,1202,1204,1207,1209,1211,1213],{"class":59,"line":1203},49,[57,1205,1206],{"class":63},"  outbound_default_policy",[57,1208,549],{"class":67},[57,1210,561],{"class":80},[57,1212,1198],{"class":67},[57,1214,567],{"class":80},[57,1216,1218,1221,1223],{"class":59,"line":1217},50,[57,1219,1220],{"class":63},"  enable_default_security",[57,1222,549],{"class":67},[57,1224,1225],{"class":80}," false\n",[57,1227,1229],{"class":59,"line":1228},51,[57,1230,602],{"emptyLinePlaceholder":601},[57,1232,1234,1237,1239,1242,1244],{"class":59,"line":1233},52,[57,1235,1236],{"class":63},"  dynamic",[57,1238,561],{"class":80},[57,1240,1241],{"class":67},"inbound_rule",[57,1243,615],{"class":80},[57,1245,534],{"class":67},[57,1247,1249,1252,1254,1257,1260],{"class":59,"line":1248},53,[57,1250,1251],{"class":63},"    for_each",[57,1253,549],{"class":67},[57,1255,1256],{"class":67}," local.ip_source",[57,1258,1259],{"class":80}," &&",[57,1261,1262],{"class":63}," local.any_in\n",[57,1264,1266],{"class":59,"line":1265},54,[57,1267,602],{"emptyLinePlaceholder":601},[57,1269,1271,1274],{"class":59,"line":1270},55,[57,1272,1273],{"class":63},"    content",[57,1275,534],{"class":67},[57,1277,1279,1282,1284,1286,1289],{"class":59,"line":1278},56,[57,1280,1281],{"class":63},"      action",[57,1283,549],{"class":67},[57,1285,561],{"class":80},[57,1287,1288],{"class":67},"accept",[57,1290,567],{"class":80},[57,1292,1294,1297,1299],{"class":59,"line":1293},57,[57,1295,1296],{"class":63},"      ip",[57,1298,549],{"class":67},[57,1300,1301],{"class":67}," inbound_rule.value.ip\n",[57,1303,1305,1308,1310],{"class":59,"line":1304},58,[57,1306,1307],{"class":63},"      ip_range",[57,1309,549],{"class":67},[57,1311,1312],{"class":67}," inbound_rule.value.ip_range\n",[57,1314,1316,1319,1321],{"class":59,"line":1315},59,[57,1317,1318],{"class":63},"      port",[57,1320,549],{"class":67},[57,1322,1323],{"class":67}," inbound_rule.value.port\n",[57,1325,1327],{"class":59,"line":1326},60,[57,1328,572],{"class":80},[57,1330,1332],{"class":59,"line":1331},61,[57,1333,577],{"class":80},[57,1335,1337],{"class":59,"line":1336},62,[57,1338,602],{"emptyLinePlaceholder":601},[57,1340,1342,1344,1346,1349,1351],{"class":59,"line":1341},63,[57,1343,1236],{"class":63},[57,1345,561],{"class":80},[57,1347,1348],{"class":67},"outbound_rule",[57,1350,615],{"class":80},[57,1352,534],{"class":67},[57,1354,1356,1358,1360],{"class":59,"line":1355},64,[57,1357,1251],{"class":63},[57,1359,549],{"class":67},[57,1361,1362],{"class":67}," local.any_out\n",[57,1364,1366],{"class":59,"line":1365},65,[57,1367,602],{"emptyLinePlaceholder":601},[57,1369,1371,1373],{"class":59,"line":1370},66,[57,1372,1273],{"class":63},[57,1374,534],{"class":67},[57,1376,1378,1380,1382,1384,1386],{"class":59,"line":1377},67,[57,1379,1281],{"class":63},[57,1381,549],{"class":67},[57,1383,561],{"class":80},[57,1385,1288],{"class":67},[57,1387,567],{"class":80},[57,1389,1391,1393,1395],{"class":59,"line":1390},68,[57,1392,1307],{"class":63},[57,1394,549],{"class":67},[57,1396,1397],{"class":67}," outbound_rule.value.ip_range\n",[57,1399,1401,1403,1405],{"class":59,"line":1400},69,[57,1402,1318],{"class":63},[57,1404,549],{"class":67},[57,1406,1407],{"class":67}," outbound_rule.value.port\n",[57,1409,1411,1414,1416],{"class":59,"line":1410},70,[57,1412,1413],{"class":63},"      protocol",[57,1415,549],{"class":67},[57,1417,1418],{"class":67}," outbound_rule.value.protocol\n",[57,1420,1422],{"class":59,"line":1421},71,[57,1423,572],{"class":80},[57,1425,1427],{"class":59,"line":1426},72,[57,1428,577],{"class":80},[57,1430,1432],{"class":59,"line":1431},73,[57,1433,596],{"class":80},[57,1435,1437],{"class":59,"line":1436},74,[57,1438,602],{"emptyLinePlaceholder":601},[57,1440,1442,1444,1446,1449,1451,1453,1456,1458],{"class":59,"line":1441},75,[57,1443,658],{"class":63},[57,1445,561],{"class":80},[57,1447,1448],{"class":67},"scaleway_instance_server",[57,1450,615],{"class":80},[57,1452,561],{"class":80},[57,1454,1455],{"class":67},"blog",[57,1457,615],{"class":80},[57,1459,534],{"class":67},[57,1461,1463,1465,1467],{"class":59,"line":1462},76,[57,1464,679],{"class":63},[57,1466,549],{"class":67},[57,1468,684],{"class":67},[57,1470,1472,1474,1476,1478,1481],{"class":59,"line":1471},77,[57,1473,689],{"class":63},[57,1475,549],{"class":67},[57,1477,561],{"class":80},[57,1479,1480],{"class":67},"kassianoff blog",[57,1482,567],{"class":80},[57,1484,1486,1489,1491,1493,1496],{"class":59,"line":1485},78,[57,1487,1488],{"class":92},"  type",[57,1490,549],{"class":67},[57,1492,561],{"class":80},[57,1494,1495],{"class":67},"DEV1-L",[57,1497,567],{"class":80},[57,1499,1501,1504,1506,1508,1511],{"class":59,"line":1500},79,[57,1502,1503],{"class":63},"  image",[57,1505,549],{"class":67},[57,1507,561],{"class":80},[57,1509,1510],{"class":67},"ubuntu_jammy",[57,1512,567],{"class":80},[57,1514,1516,1519,1521,1524,1526,1528,1530],{"class":59,"line":1515},80,[57,1517,1518],{"class":63},"  tags",[57,1520,549],{"class":67},[57,1522,1523],{"class":102}," [ ",[57,1525,615],{"class":80},[57,1527,1455],{"class":67},[57,1529,615],{"class":80},[57,1531,1532],{"class":67}," ]\n",[57,1534,1536,1539,1541],{"class":59,"line":1535},81,[57,1537,1538],{"class":63},"  ip_id",[57,1540,549],{"class":67},[57,1542,1543],{"class":67}," scaleway_instance_ip.public_ip.id\n",[57,1545,1547,1550,1552],{"class":59,"line":1546},82,[57,1548,1549],{"class":63},"  security_group_id",[57,1551,549],{"class":67},[57,1553,1554],{"class":67}," scaleway_instance_security_group.blog.id\n",[57,1556,1558,1561],{"class":59,"line":1557},83,[57,1559,1560],{"class":63},"  private_network",[57,1562,534],{"class":67},[57,1564,1566,1569,1571],{"class":59,"line":1565},84,[57,1567,1568],{"class":63},"    pn_id",[57,1570,549],{"class":67},[57,1572,1573],{"class":67}," scaleway_vpc_private_network.blog.id\n",[57,1575,1577],{"class":59,"line":1576},85,[57,1578,577],{"class":80},[57,1580,1582],{"class":59,"line":1581},86,[57,1583,596],{"class":80},[57,1585,1587],{"class":59,"line":1586},87,[57,1588,602],{"emptyLinePlaceholder":601},[57,1590,1592,1594,1596,1599,1601,1603,1605,1607],{"class":59,"line":1591},88,[57,1593,658],{"class":63},[57,1595,561],{"class":80},[57,1597,1598],{"class":67},"scaleway_rdb_database",[57,1600,615],{"class":80},[57,1602,561],{"class":80},[57,1604,1455],{"class":67},[57,1606,615],{"class":80},[57,1608,534],{"class":67},[57,1610,1612,1615,1617],{"class":59,"line":1611},89,[57,1613,1614],{"class":63},"  instance_id",[57,1616,549],{"class":67},[57,1618,1619],{"class":67}," scaleway_rdb_instance.blog.id\n",[57,1621,1623,1625,1627,1629,1632],{"class":59,"line":1622},90,[57,1624,689],{"class":63},[57,1626,549],{"class":67},[57,1628,561],{"class":80},[57,1630,1631],{"class":67},"kassianoff-database",[57,1633,567],{"class":80},[57,1635,1637,1640,1642,1644,1647],{"class":59,"line":1636},91,[57,1638,1639],{"class":63},"  node_type",[57,1641,549],{"class":67},[57,1643,561],{"class":80},[57,1645,1646],{"class":67},"DB-DEV-S",[57,1648,567],{"class":80},[57,1650,1652,1655,1657,1659,1662],{"class":59,"line":1651},92,[57,1653,1654],{"class":63},"  engine",[57,1656,549],{"class":67},[57,1658,561],{"class":80},[57,1660,1661],{"class":67},"PostgreSQL-14",[57,1663,567],{"class":80},[57,1665,1667,1670,1672],{"class":59,"line":1666},93,[57,1668,1669],{"class":63},"  is_ha_cluster",[57,1671,549],{"class":67},[57,1673,1674],{"class":80}," true\n",[57,1676,1678,1681,1683],{"class":59,"line":1677},94,[57,1679,1680],{"class":63},"  disable_backup",[57,1682,549],{"class":67},[57,1684,1674],{"class":80},[57,1686,1688,1691,1693,1695,1698],{"class":59,"line":1687},95,[57,1689,1690],{"class":63},"  user_name",[57,1692,549],{"class":67},[57,1694,561],{"class":80},[57,1696,1697],{"class":67},"kassianoff",[57,1699,567],{"class":80},[57,1701,1703,1706,1708,1710,1713],{"class":59,"line":1702},96,[57,1704,1705],{"class":63},"  password",[57,1707,549],{"class":67},[57,1709,561],{"class":80},[57,1711,1712],{"class":67},"thiZ_is_v&ry_s3cret",[57,1714,567],{"class":80},[57,1716,1718,1721,1724,1726,1729],{"class":59,"line":1717},97,[57,1719,1720],{"class":102},"  region",[57,1722,1723],{"class":80},"=",[57,1725,561],{"class":80},[57,1727,1728],{"class":67},"fr-par",[57,1730,567],{"class":80},[57,1732,1734,1736,1738,1740,1742,1745,1747,1749,1751,1753,1755],{"class":59,"line":1733},98,[57,1735,1518],{"class":63},[57,1737,549],{"class":67},[57,1739,1523],{"class":102},[57,1741,615],{"class":80},[57,1743,1744],{"class":67},"db",[57,1746,615],{"class":80},[57,1748,795],{"class":67},[57,1750,561],{"class":80},[57,1752,1455],{"class":67},[57,1754,615],{"class":80},[57,1756,1532],{"class":67},[57,1758,1760,1763,1765,1767,1770],{"class":59,"line":1759},99,[57,1761,1762],{"class":63},"  volume_type",[57,1764,549],{"class":67},[57,1766,561],{"class":80},[57,1768,1769],{"class":67},"bssd",[57,1771,567],{"class":80},[57,1773,1775,1778,1780],{"class":59,"line":1774},100,[57,1776,1777],{"class":63},"  volume_size_in_gb",[57,1779,549],{"class":67},[57,1781,1782],{"class":118}," 5\n",[57,1784,1786,1788,1791],{"class":59,"line":1785},101,[57,1787,1560],{"class":63},[57,1789,1790],{"class":67}," {",[57,1792,1793],{"class":102}," \n",[57,1795,1797,1800,1802,1804,1807,1809],{"class":59,"line":1796},102,[57,1798,1799],{"class":63},"    ip_net",[57,1801,549],{"class":67},[57,1803,561],{"class":80},[57,1805,1806],{"class":67},"192.168.1.254\u002F24",[57,1808,615],{"class":80},[57,1810,1793],{"class":102},[57,1812,1814,1816,1818,1821,1824,1826,1828,1830,1833,1836],{"class":59,"line":1813},103,[57,1815,1568],{"class":63},[57,1817,549],{"class":67},[57,1819,1820],{"class":80}," \"${",[57,1822,1823],{"class":102},"scaleway_vpc_private_network",[57,1825,35],{"class":67},[57,1827,1455],{"class":102},[57,1829,35],{"class":67},[57,1831,1832],{"class":102},"id",[57,1834,1835],{"class":80},"}\"",[57,1837,1793],{"class":102},[57,1839,1841],{"class":59,"line":1840},104,[57,1842,577],{"class":102},[57,1844,1846],{"class":59,"line":1845},105,[57,1847,596],{"class":102},[57,1849,1851],{"class":59,"line":1850},106,[57,1852,602],{"emptyLinePlaceholder":601},[57,1854,1856,1858,1861,1864,1866],{"class":59,"line":1855},107,[57,1857,658],{"class":63},[57,1859,1860],{"class":67}," scaleway_vpc_private_network",[57,1862,1863],{"class":67}," blog",[57,1865,1790],{"class":67},[57,1867,1793],{"class":102},[57,1869,1871,1874,1876,1878,1880,1882],{"class":59,"line":1870},108,[57,1872,1873],{"class":63},"name",[57,1875,549],{"class":67},[57,1877,561],{"class":80},[57,1879,629],{"class":67},[57,1881,615],{"class":80},[57,1883,1793],{"class":102},[57,1885,1887],{"class":59,"line":1886},109,[57,1888,596],{"class":102},[15,1890,1891],{},"Let's not forget to configure a profile for our Scaleway provider:",[47,1893,1897],{"className":1894,"code":1895,"language":1896,"meta":52,"style":52},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","profiles:\n  kassianoff-blog:\n    access_key: XXXXXXXXXXXXXXXXXXXX\n    secret_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \n    default_organization_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    default_project_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    default_zone: fr-par-1\n    default_region: fr-par\n    api_url: https:\u002F\u002Fapi.scaleway.com\n    insecure: false\n","yaml",[54,1898,1899,1908,1915,1926,1938,1948,1957,1967,1977,1987],{"__ignoreMap":52},[57,1900,1901,1905],{"class":59,"line":60},[57,1902,1904],{"class":1903},"swJcz","profiles",[57,1906,1907],{"class":80},":\n",[57,1909,1910,1913],{"class":59,"line":74},[57,1911,1912],{"class":1903},"  kassianoff-blog",[57,1914,1907],{"class":80},[57,1916,1917,1920,1923],{"class":59,"line":96},[57,1918,1919],{"class":1903},"    access_key",[57,1921,1922],{"class":80},":",[57,1924,1925],{"class":67}," XXXXXXXXXXXXXXXXXXXX\n",[57,1927,1928,1931,1933,1936],{"class":59,"line":112},[57,1929,1930],{"class":1903},"    secret_key",[57,1932,1922],{"class":80},[57,1934,1935],{"class":67}," XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",[57,1937,1793],{"class":102},[57,1939,1940,1943,1945],{"class":59,"line":140},[57,1941,1942],{"class":1903},"    default_organization_id",[57,1944,1922],{"class":80},[57,1946,1947],{"class":67}," XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n",[57,1949,1950,1953,1955],{"class":59,"line":153},[57,1951,1952],{"class":1903},"    default_project_id",[57,1954,1922],{"class":80},[57,1956,1947],{"class":67},[57,1958,1959,1962,1964],{"class":59,"line":189},[57,1960,1961],{"class":1903},"    default_zone",[57,1963,1922],{"class":80},[57,1965,1966],{"class":67}," fr-par-1\n",[57,1968,1969,1972,1974],{"class":59,"line":201},[57,1970,1971],{"class":1903},"    default_region",[57,1973,1922],{"class":80},[57,1975,1976],{"class":67}," fr-par\n",[57,1978,1979,1982,1984],{"class":59,"line":212},[57,1980,1981],{"class":1903},"    api_url",[57,1983,1922],{"class":80},[57,1985,1986],{"class":67}," https:\u002F\u002Fapi.scaleway.com\n",[57,1988,1989,1992,1994],{"class":59,"line":224},[57,1990,1991],{"class":1903},"    insecure",[57,1993,1922],{"class":80},[57,1995,1225],{"class":1996},"sfNiH",[1998,1999,2000,2004,2007,2010,2013,2016,2025,2028,2031],"ol",{},[2001,2002,2003],"li",{},"We specify the provider we want to interact with, i.e. Scaleway.",[2001,2005,2006],{},"We defined a profile named \"kassianoff-blog\" to contact our provider. This refers to a configuration file (which isn't the default one). It contains our secrets, our deployment zone, and Scaleway's endpoint:",[2001,2008,2009],{},"We add an SSH key to our Scaleway profile so we can connect to our next instance.",[2001,2011,2012],{},"We add a public_ip resource so we can get an IP address on our next instance.",[2001,2014,2015],{},"We declare a \"locals\" variable in a JSON array with several values: ip_source, any_in, any_out, so we can reuse them when editing the Scaleway firewall configuration.",[2001,2017,2018,2019,2024],{},"We'll then create a Scaleway security group by adding our firewall rules in a ",[26,2020,2023],{"href":2021,"rel":2022},"https:\u002F\u002Fwww.terraform.io\u002Flanguage\u002Fexpressions\u002Fdynamic-blocks",[30],"dynamic expression"," so we can reuse our variables.",[2001,2026,2027],{},"We'll then create our server instance by choosing its name, its type, and its characteristics. We notice that the integration with the public IP and the security group is clearly visible.",[2001,2029,2030],{},"Furthermore, we want to create a database managed by Scaleway so we don't have to manage it ourselves. We also connect a private network to our database and configure its interface on the private network.",[2001,2032,2033],{},"A private network will be created so the instance and the database can communicate over a private network (you'll need to configure your ens5(eth1) interface on the linux server to access the database).",[513,2035,2037],{"id":2036},"terraform-with-ovhcloud","Terraform with OVHcloud",[15,2039,2040],{},"Here's another small example to switch my kimsufi server, dating from 2013, into rescue mode and reboot it:",[47,2042,2044],{"className":49,"code":2043,"language":51,"meta":52,"style":52},"terraform {\n  required_providers {\n    ovh = {\n      source  = \"ovh\u002Fovh\"\n    }\n  }\n}\n\nprovider \"ovh\" {\nendpoint = \"ovh-eu\"\napplication_key = \"namJkXXXXXXXXXXX\"\napplication_secret = \"rXXXXXXXXXXXX\"\nconsumer_key = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n}\n\ndata ovh_dedicated_server_boots \"rescue\" {\nservice_name = \"ksXXXXXXX.kimsufi.com\"\nboot_type = \"rescue\"\nkernel = \"rescue64-pro\"\n}\n\nresource ovh_dedicated_server_update \"server_on_rescue\" {\nservice_name = \"ksXXXXXXX.kimsufi.com\"\nboot_id = data.ovh_dedicated_server_boots.rescue.result[0]\nmonitoring = true\nstate = \"ok\"\n}\n\nresource ovh_dedicated_server_reboot_task \"server_reboot\" {\nservice_name = data.ovh_dedicated_server_boots.rescue.service_name\nkeepers = [\novh_dedicated_server_update.server_on_rescue.boot_id,\n]\n\n}\n",[54,2045,2046,2052,2058,2067,2081,2085,2089,2093,2097,2110,2124,2138,2152,2166,2170,2174,2191,2205,2218,2232,2236,2240,2256,2268,2278,2287,2301,2305,2309,2325,2334,2343,2348,2353,2357],{"__ignoreMap":52},[57,2047,2048,2050],{"class":59,"line":60},[57,2049,20],{"class":63},[57,2051,534],{"class":67},[57,2053,2054,2056],{"class":59,"line":74},[57,2055,539],{"class":63},[57,2057,534],{"class":67},[57,2059,2060,2063,2065],{"class":59,"line":96},[57,2061,2062],{"class":63},"    ovh",[57,2064,549],{"class":67},[57,2066,534],{"class":67},[57,2068,2069,2071,2074,2076,2079],{"class":59,"line":112},[57,2070,556],{"class":92},[57,2072,2073],{"class":67},"  =",[57,2075,561],{"class":80},[57,2077,2078],{"class":67},"ovh\u002Fovh",[57,2080,567],{"class":80},[57,2082,2083],{"class":59,"line":140},[57,2084,572],{"class":102},[57,2086,2087],{"class":59,"line":153},[57,2088,577],{"class":102},[57,2090,2091],{"class":59,"line":189},[57,2092,596],{"class":102},[57,2094,2095],{"class":59,"line":201},[57,2096,602],{"emptyLinePlaceholder":601},[57,2098,2099,2101,2103,2106,2108],{"class":59,"line":212},[57,2100,607],{"class":63},[57,2102,561],{"class":80},[57,2104,2105],{"class":67},"ovh",[57,2107,615],{"class":80},[57,2109,534],{"class":67},[57,2111,2112,2115,2117,2119,2122],{"class":59,"line":224},[57,2113,2114],{"class":63},"endpoint",[57,2116,549],{"class":67},[57,2118,561],{"class":80},[57,2120,2121],{"class":67},"ovh-eu",[57,2123,567],{"class":80},[57,2125,2126,2129,2131,2133,2136],{"class":59,"line":242},[57,2127,2128],{"class":63},"application_key",[57,2130,549],{"class":67},[57,2132,561],{"class":80},[57,2134,2135],{"class":67},"namJkXXXXXXXXXXX",[57,2137,567],{"class":80},[57,2139,2140,2143,2145,2147,2150],{"class":59,"line":260},[57,2141,2142],{"class":63},"application_secret",[57,2144,549],{"class":67},[57,2146,561],{"class":80},[57,2148,2149],{"class":67},"rXXXXXXXXXXXX",[57,2151,567],{"class":80},[57,2153,2154,2157,2159,2161,2164],{"class":59,"line":275},[57,2155,2156],{"class":63},"consumer_key",[57,2158,549],{"class":67},[57,2160,561],{"class":80},[57,2162,2163],{"class":67},"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",[57,2165,567],{"class":80},[57,2167,2168],{"class":59,"line":290},[57,2169,596],{"class":102},[57,2171,2172],{"class":59,"line":301},[57,2173,602],{"emptyLinePlaceholder":601},[57,2175,2176,2179,2182,2184,2187,2189],{"class":59,"line":312},[57,2177,2178],{"class":63},"data",[57,2180,2181],{"class":67}," ovh_dedicated_server_boots",[57,2183,561],{"class":80},[57,2185,2186],{"class":67},"rescue",[57,2188,615],{"class":80},[57,2190,534],{"class":67},[57,2192,2193,2196,2198,2200,2203],{"class":59,"line":324},[57,2194,2195],{"class":63},"service_name",[57,2197,549],{"class":67},[57,2199,561],{"class":80},[57,2201,2202],{"class":67},"ksXXXXXXX.kimsufi.com",[57,2204,567],{"class":80},[57,2206,2207,2210,2212,2214,2216],{"class":59,"line":357},[57,2208,2209],{"class":63},"boot_type",[57,2211,549],{"class":67},[57,2213,561],{"class":80},[57,2215,2186],{"class":67},[57,2217,567],{"class":80},[57,2219,2220,2223,2225,2227,2230],{"class":59,"line":368},[57,2221,2222],{"class":63},"kernel",[57,2224,549],{"class":67},[57,2226,561],{"class":80},[57,2228,2229],{"class":67},"rescue64-pro",[57,2231,567],{"class":80},[57,2233,2234],{"class":59,"line":381},[57,2235,596],{"class":102},[57,2237,2238],{"class":59,"line":388},[57,2239,602],{"emptyLinePlaceholder":601},[57,2241,2242,2244,2247,2249,2252,2254],{"class":59,"line":406},[57,2243,658],{"class":63},[57,2245,2246],{"class":67}," ovh_dedicated_server_update",[57,2248,561],{"class":80},[57,2250,2251],{"class":67},"server_on_rescue",[57,2253,615],{"class":80},[57,2255,534],{"class":67},[57,2257,2258,2260,2262,2264,2266],{"class":59,"line":415},[57,2259,2195],{"class":63},[57,2261,549],{"class":67},[57,2263,561],{"class":80},[57,2265,2202],{"class":67},[57,2267,567],{"class":80},[57,2269,2270,2273,2275],{"class":59,"line":435},[57,2271,2272],{"class":63},"boot_id",[57,2274,549],{"class":67},[57,2276,2277],{"class":67}," data.ovh_dedicated_server_boots.rescue.result[0]\n",[57,2279,2280,2283,2285],{"class":59,"line":456},[57,2281,2282],{"class":63},"monitoring",[57,2284,549],{"class":67},[57,2286,1674],{"class":80},[57,2288,2289,2292,2294,2296,2299],{"class":59,"line":766},[57,2290,2291],{"class":63},"state",[57,2293,549],{"class":67},[57,2295,561],{"class":80},[57,2297,2298],{"class":67},"ok",[57,2300,567],{"class":80},[57,2302,2303],{"class":59,"line":777},[57,2304,596],{"class":102},[57,2306,2307],{"class":59,"line":813},[57,2308,602],{"emptyLinePlaceholder":601},[57,2310,2311,2313,2316,2318,2321,2323],{"class":59,"line":843},[57,2312,658],{"class":63},[57,2314,2315],{"class":67}," ovh_dedicated_server_reboot_task",[57,2317,561],{"class":80},[57,2319,2320],{"class":67},"server_reboot",[57,2322,615],{"class":80},[57,2324,534],{"class":67},[57,2326,2327,2329,2331],{"class":59,"line":849},[57,2328,2195],{"class":63},[57,2330,549],{"class":67},[57,2332,2333],{"class":67}," data.ovh_dedicated_server_boots.rescue.service_name\n",[57,2335,2336,2339,2341],{"class":59,"line":854},[57,2337,2338],{"class":63},"keepers",[57,2340,549],{"class":67},[57,2342,774],{"class":102},[57,2344,2345],{"class":59,"line":864},[57,2346,2347],{"class":63},"ovh_dedicated_server_update.server_on_rescue.boot_id,\n",[57,2349,2350],{"class":59,"line":896},[57,2351,2352],{"class":102},"]\n",[57,2354,2355],{"class":59,"line":926},[57,2356,602],{"emptyLinePlaceholder":601},[57,2358,2359],{"class":59,"line":931},[57,2360,596],{"class":102},[15,2362,2363,2364,2367],{},"One of the first Terraform commands is \"",[32,2365,2366],{},"terraform init","\". It's used to initialize a working directory containing Terraform configuration files. It's the first command to run after writing a new Terraform configuration.",[47,2369,2371],{"className":49,"code":2370,"language":51,"meta":52,"style":52},"terraform init\n\nInitializing the backend...\n\nInitializing provider plugins...\n\n- Finding ovh\u002Fovh versions matching \"~> 0.11.0\"...\n\n- Installing ovh\u002Fovh v0.11.0...\n\n- Installed ovh\u002Fovh v0.11.0 (signed by a HashiCorp partner, key ID F56D1A6CBDAAADA5)\n\nPartner and community providers are signed by their developers.\nIf you'd like to know more about provider signing, you can read about it here:\nhttps:\u002F\u002Fwww.terraform.io\u002Fdocs\u002Fcli\u002Fplugins\u002Fsigning.html\n\nTerraform has created a lock file .terraform.lock.hcl to record the provider\nselections it made above. Include this file in your version control repository\nso that Terraform can guarantee to make the same selections by default when\nyou run \"terraform init\" in the future.\n\nTerraform has been successfully initialized!\n\nYou may now begin working with Terraform. Try running \"terraform plan\" to see\nany changes that are required for your infrastructure. All Terraform commands\nshould now work.\n\nIf you ever set or change modules or backend configuration for Terraform,\nrerun this command to reinitialize your working directory. If you forget, other\ncommands will detect it and remind you to do so if necessary.\n",[54,2372,2373,2380,2384,2395,2399,2409,2413,2439,2443,2455,2459,2498,2502,2529,2543,2548,2552,2557,2562,2567,2572,2576,2581,2585,2590,2595,2600,2604,2609,2614],{"__ignoreMap":52},[57,2374,2375,2377],{"class":59,"line":60},[57,2376,20],{"class":63},[57,2378,2379],{"class":67}," init\n",[57,2381,2382],{"class":59,"line":74},[57,2383,602],{"emptyLinePlaceholder":601},[57,2385,2386,2389,2392],{"class":59,"line":96},[57,2387,2388],{"class":63},"Initializing",[57,2390,2391],{"class":67}," the",[57,2393,2394],{"class":67}," backend...\n",[57,2396,2397],{"class":59,"line":112},[57,2398,602],{"emptyLinePlaceholder":601},[57,2400,2401,2403,2406],{"class":59,"line":140},[57,2402,2388],{"class":63},[57,2404,2405],{"class":67}," provider",[57,2407,2408],{"class":67}," plugins...\n",[57,2410,2411],{"class":59,"line":153},[57,2412,602],{"emptyLinePlaceholder":601},[57,2414,2415,2418,2421,2424,2427,2430,2432,2435,2437],{"class":59,"line":189},[57,2416,2417],{"class":63},"-",[57,2419,2420],{"class":67}," Finding",[57,2422,2423],{"class":67}," ovh\u002Fovh",[57,2425,2426],{"class":67}," versions",[57,2428,2429],{"class":67}," matching",[57,2431,561],{"class":80},[57,2433,2434],{"class":67},"~> 0.11.0",[57,2436,615],{"class":80},[57,2438,93],{"class":67},[57,2440,2441],{"class":59,"line":201},[57,2442,602],{"emptyLinePlaceholder":601},[57,2444,2445,2447,2450,2452],{"class":59,"line":212},[57,2446,2417],{"class":63},[57,2448,2449],{"class":67}," Installing",[57,2451,2423],{"class":67},[57,2453,2454],{"class":67}," v0.11.0...\n",[57,2456,2457],{"class":59,"line":224},[57,2458,602],{"emptyLinePlaceholder":601},[57,2460,2461,2463,2466,2468,2471,2474,2477,2480,2483,2486,2489,2492,2495],{"class":59,"line":242},[57,2462,2417],{"class":63},[57,2464,2465],{"class":67}," Installed",[57,2467,2423],{"class":67},[57,2469,2470],{"class":67}," v0.11.0",[57,2472,2473],{"class":102}," (signed ",[57,2475,2476],{"class":67},"by",[57,2478,2479],{"class":67}," a",[57,2481,2482],{"class":67}," HashiCorp",[57,2484,2485],{"class":67}," partner,",[57,2487,2488],{"class":67}," key",[57,2490,2491],{"class":67}," ID",[57,2493,2494],{"class":67}," F56D1A6CBDAAADA5",[57,2496,2497],{"class":102},")\n",[57,2499,2500],{"class":59,"line":260},[57,2501,602],{"emptyLinePlaceholder":601},[57,2503,2504,2507,2509,2512,2515,2518,2521,2523,2526],{"class":59,"line":275},[57,2505,2506],{"class":63},"Partner",[57,2508,131],{"class":67},[57,2510,2511],{"class":67}," community",[57,2513,2514],{"class":67}," providers",[57,2516,2517],{"class":67}," are",[57,2519,2520],{"class":67}," signed",[57,2522,447],{"class":67},[57,2524,2525],{"class":67}," their",[57,2527,2528],{"class":67}," developers.\n",[57,2530,2531,2534,2537,2540],{"class":59,"line":290},[57,2532,2533],{"class":63},"If",[57,2535,2536],{"class":67}," you",[57,2538,2539],{"class":80},"'",[57,2541,2542],{"class":67},"d like to know more about provider signing, you can read about it here:\n",[57,2544,2545],{"class":59,"line":301},[57,2546,2547],{"class":67},"https:\u002F\u002Fwww.terraform.io\u002Fdocs\u002Fcli\u002Fplugins\u002Fsigning.html\n",[57,2549,2550],{"class":59,"line":312},[57,2551,602],{"emptyLinePlaceholder":601},[57,2553,2554],{"class":59,"line":324},[57,2555,2556],{"class":67},"Terraform has created a lock file .terraform.lock.hcl to record the provider\n",[57,2558,2559],{"class":59,"line":357},[57,2560,2561],{"class":67},"selections it made above. Include this file in your version control repository\n",[57,2563,2564],{"class":59,"line":368},[57,2565,2566],{"class":67},"so that Terraform can guarantee to make the same selections by default when\n",[57,2568,2569],{"class":59,"line":381},[57,2570,2571],{"class":67},"you run \"terraform init\" in the future.\n",[57,2573,2574],{"class":59,"line":388},[57,2575,602],{"emptyLinePlaceholder":601},[57,2577,2578],{"class":59,"line":406},[57,2579,2580],{"class":67},"Terraform has been successfully initialized!\n",[57,2582,2583],{"class":59,"line":415},[57,2584,602],{"emptyLinePlaceholder":601},[57,2586,2587],{"class":59,"line":435},[57,2588,2589],{"class":67},"You may now begin working with Terraform. Try running \"terraform plan\" to see\n",[57,2591,2592],{"class":59,"line":456},[57,2593,2594],{"class":67},"any changes that are required for your infrastructure. All Terraform commands\n",[57,2596,2597],{"class":59,"line":766},[57,2598,2599],{"class":67},"should now work.\n",[57,2601,2602],{"class":59,"line":777},[57,2603,602],{"emptyLinePlaceholder":601},[57,2605,2606],{"class":59,"line":813},[57,2607,2608],{"class":67},"If you ever set or change modules or backend configuration for Terraform,\n",[57,2610,2611],{"class":59,"line":843},[57,2612,2613],{"class":67},"rerun this command to reinitialize your working directory. If you forget, other\n",[57,2615,2616],{"class":59,"line":849},[57,2617,2618],{"class":67},"commands will detect it and remind you to do so if necessary.\n",[15,2620,2621,2622,2625],{},"The second command is \"",[32,2623,2624],{},"terraform plan","\". This command creates an execution plan, which lets you preview the changes Terraform plans to make to your infrastructure.",[15,2627,2628],{},"By default, when Terraform creates a plan, it reads the current state of all already-existing remote objects to make sure Terraform's state is up to date. It then compares the current configuration to the previous state and notes any differences. It then proposes a set of change actions that should, if applied, make the remote objects match the current configuration:",[47,2630,2632],{"className":49,"code":2631,"language":51,"meta":52,"style":52},"terraform plan\n\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\n\n  + create\n\nTerraform will perform the following actions:\n\n  # ovh_dedicated_server_reboot_task.server_reboot will be created\n\n  + resource \"ovh_dedicated_server_reboot_task\" \"server_reboot\" {\n      + comment      = (known after apply)\n      + done_date    = (known after apply)\n      + function     = (known after apply)\n      + id           = (known after apply)\n      + keepers      = [\n          + \"1122\",\n        ]\n\n      + last_update  = (known after apply)\n      + service_name = \"ksxxxxxxx.kimsufi.com\"\n      + start_date   = (known after apply)\n      + status       = (known after apply)\n\n    }\n\n  # ovh_dedicated_server_update.server_on_rescue will be created\n  + resource \"ovh_dedicated_server_update\" \"server_on_rescue\" {\n\n      + boot_id      = 1122\n      + id           = (known after apply)\n      + monitoring   = true\n      + service_name = \"ksxxxxxxx.kimsufi.com\"\n\n      + state        = \"ok\"\n\n    }\n\nPlan: 2 to add, 0 to change, 0 to destroy.\n\nDo you want to perform these actions?\n  Terraform will perform the actions described above.\n  Only 'yes' will be accepted to approve.\n  Enter a value: yes\n\novh_dedicated_server_update.server_on_rescue: Creating...\novh_dedicated_server_update.server_on_rescue: Still creating... [10s elapsed]\novh_dedicated_server_update.server_on_rescue: Creation complete after 11s [id=ksxxxxxxx.kimsufi.com]\novh_dedicated_server_reboot_task.server_reboot: Creating...\novh_dedicated_server_reboot_task.server_reboot: Still creating... [10s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [20s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [30s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [40s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [50s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m0s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m10s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m20s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Still creating... [1m30s elapsed]\novh_dedicated_server_reboot_task.server_reboot: Creation complete after 1m31s [id=251909160]\n\nApply complete! Resources: 2 added, 0 changed, 0 destroyed.\n",[54,2633,2634,2641,2645,2696,2700,2708,2712,2729,2733,2738,2742,2764,2786,2804,2822,2840,2851,2866,2871,2875,2892,2908,2926,2944,2948,2952,2956,2961,2982,2986,2998,3014,3025,3039,3043,3059,3063,3067,3071,3099,3103,3122,3141,3167,3180,3184,3192,3208,3227,3234,3246,3259,3272,3285,3298,3311,3324,3337,3350,3366,3370],{"__ignoreMap":52},[57,2635,2636,2638],{"class":59,"line":60},[57,2637,20],{"class":63},[57,2639,2640],{"class":67}," plan\n",[57,2642,2643],{"class":59,"line":74},[57,2644,602],{"emptyLinePlaceholder":601},[57,2646,2647,2649,2652,2654,2657,2659,2662,2665,2667,2670,2673,2676,2679,2682,2684,2687,2689,2691,2693],{"class":59,"line":96},[57,2648,21],{"class":63},[57,2650,2651],{"class":67}," used",[57,2653,2391],{"class":67},[57,2655,2656],{"class":67}," selected",[57,2658,2514],{"class":67},[57,2660,2661],{"class":67}," to",[57,2663,2664],{"class":67}," generate",[57,2666,2391],{"class":67},[57,2668,2669],{"class":67}," following",[57,2671,2672],{"class":67}," execution",[57,2674,2675],{"class":67}," plan.",[57,2677,2678],{"class":67}," Resource",[57,2680,2681],{"class":67}," actions",[57,2683,2517],{"class":67},[57,2685,2686],{"class":67}," indicated",[57,2688,468],{"class":67},[57,2690,2391],{"class":67},[57,2692,2669],{"class":67},[57,2694,2695],{"class":67}," symbols:\n",[57,2697,2698],{"class":59,"line":112},[57,2699,602],{"emptyLinePlaceholder":601},[57,2701,2702,2705],{"class":59,"line":140},[57,2703,2704],{"class":63},"  +",[57,2706,2707],{"class":67}," create\n",[57,2709,2710],{"class":59,"line":153},[57,2711,602],{"emptyLinePlaceholder":601},[57,2713,2714,2716,2719,2722,2724,2726],{"class":59,"line":189},[57,2715,21],{"class":63},[57,2717,2718],{"class":67}," will",[57,2720,2721],{"class":67}," perform",[57,2723,2391],{"class":67},[57,2725,2669],{"class":67},[57,2727,2728],{"class":67}," actions:\n",[57,2730,2731],{"class":59,"line":201},[57,2732,602],{"emptyLinePlaceholder":601},[57,2734,2735],{"class":59,"line":212},[57,2736,2737],{"class":384},"  # ovh_dedicated_server_reboot_task.server_reboot will be created\n",[57,2739,2740],{"class":59,"line":224},[57,2741,602],{"emptyLinePlaceholder":601},[57,2743,2744,2746,2749,2751,2754,2756,2758,2760,2762],{"class":59,"line":242},[57,2745,2704],{"class":63},[57,2747,2748],{"class":67}," resource",[57,2750,561],{"class":80},[57,2752,2753],{"class":67},"ovh_dedicated_server_reboot_task",[57,2755,615],{"class":80},[57,2757,561],{"class":80},[57,2759,2320],{"class":67},[57,2761,615],{"class":80},[57,2763,534],{"class":67},[57,2765,2766,2769,2772,2775,2778,2781,2784],{"class":59,"line":260},[57,2767,2768],{"class":63},"      +",[57,2770,2771],{"class":67}," comment",[57,2773,2774],{"class":67},"      =",[57,2776,2777],{"class":102}," (known ",[57,2779,2780],{"class":67},"after",[57,2782,2783],{"class":67}," apply",[57,2785,2497],{"class":102},[57,2787,2788,2790,2793,2796,2798,2800,2802],{"class":59,"line":275},[57,2789,2768],{"class":63},[57,2791,2792],{"class":67}," done_date",[57,2794,2795],{"class":67},"    =",[57,2797,2777],{"class":102},[57,2799,2780],{"class":67},[57,2801,2783],{"class":67},[57,2803,2497],{"class":102},[57,2805,2806,2808,2811,2814,2816,2818,2820],{"class":59,"line":290},[57,2807,2768],{"class":63},[57,2809,2810],{"class":67}," function",[57,2812,2813],{"class":67},"     =",[57,2815,2777],{"class":102},[57,2817,2780],{"class":67},[57,2819,2783],{"class":67},[57,2821,2497],{"class":102},[57,2823,2824,2826,2829,2832,2834,2836,2838],{"class":59,"line":301},[57,2825,2768],{"class":63},[57,2827,2828],{"class":67}," id",[57,2830,2831],{"class":67},"           =",[57,2833,2777],{"class":102},[57,2835,2780],{"class":67},[57,2837,2783],{"class":67},[57,2839,2497],{"class":102},[57,2841,2842,2844,2847,2849],{"class":59,"line":312},[57,2843,2768],{"class":63},[57,2845,2846],{"class":67}," keepers",[57,2848,2774],{"class":67},[57,2850,774],{"class":102},[57,2852,2853,2856,2858,2861,2863],{"class":59,"line":324},[57,2854,2855],{"class":63},"          +",[57,2857,561],{"class":80},[57,2859,2860],{"class":67},"1122",[57,2862,615],{"class":80},[57,2864,2865],{"class":67},",\n",[57,2867,2868],{"class":59,"line":357},[57,2869,2870],{"class":102},"        ]\n",[57,2872,2873],{"class":59,"line":368},[57,2874,602],{"emptyLinePlaceholder":601},[57,2876,2877,2879,2882,2884,2886,2888,2890],{"class":59,"line":381},[57,2878,2768],{"class":63},[57,2880,2881],{"class":67}," last_update",[57,2883,2073],{"class":67},[57,2885,2777],{"class":102},[57,2887,2780],{"class":67},[57,2889,2783],{"class":67},[57,2891,2497],{"class":102},[57,2893,2894,2896,2899,2901,2903,2906],{"class":59,"line":388},[57,2895,2768],{"class":63},[57,2897,2898],{"class":67}," service_name",[57,2900,549],{"class":67},[57,2902,561],{"class":80},[57,2904,2905],{"class":67},"ksxxxxxxx.kimsufi.com",[57,2907,567],{"class":80},[57,2909,2910,2912,2915,2918,2920,2922,2924],{"class":59,"line":406},[57,2911,2768],{"class":63},[57,2913,2914],{"class":67}," start_date",[57,2916,2917],{"class":67},"   =",[57,2919,2777],{"class":102},[57,2921,2780],{"class":67},[57,2923,2783],{"class":67},[57,2925,2497],{"class":102},[57,2927,2928,2930,2933,2936,2938,2940,2942],{"class":59,"line":415},[57,2929,2768],{"class":63},[57,2931,2932],{"class":67}," status",[57,2934,2935],{"class":67},"       =",[57,2937,2777],{"class":102},[57,2939,2780],{"class":67},[57,2941,2783],{"class":67},[57,2943,2497],{"class":102},[57,2945,2946],{"class":59,"line":435},[57,2947,602],{"emptyLinePlaceholder":601},[57,2949,2950],{"class":59,"line":456},[57,2951,572],{"class":102},[57,2953,2954],{"class":59,"line":766},[57,2955,602],{"emptyLinePlaceholder":601},[57,2957,2958],{"class":59,"line":777},[57,2959,2960],{"class":384},"  # ovh_dedicated_server_update.server_on_rescue will be created\n",[57,2962,2963,2965,2967,2969,2972,2974,2976,2978,2980],{"class":59,"line":813},[57,2964,2704],{"class":63},[57,2966,2748],{"class":67},[57,2968,561],{"class":80},[57,2970,2971],{"class":67},"ovh_dedicated_server_update",[57,2973,615],{"class":80},[57,2975,561],{"class":80},[57,2977,2251],{"class":67},[57,2979,615],{"class":80},[57,2981,534],{"class":67},[57,2983,2984],{"class":59,"line":843},[57,2985,602],{"emptyLinePlaceholder":601},[57,2987,2988,2990,2993,2995],{"class":59,"line":849},[57,2989,2768],{"class":63},[57,2991,2992],{"class":67}," boot_id",[57,2994,2774],{"class":67},[57,2996,2997],{"class":118}," 1122\n",[57,2999,3000,3002,3004,3006,3008,3010,3012],{"class":59,"line":854},[57,3001,2768],{"class":63},[57,3003,2828],{"class":67},[57,3005,2831],{"class":67},[57,3007,2777],{"class":102},[57,3009,2780],{"class":67},[57,3011,2783],{"class":67},[57,3013,2497],{"class":102},[57,3015,3016,3018,3021,3023],{"class":59,"line":864},[57,3017,2768],{"class":63},[57,3019,3020],{"class":67}," monitoring",[57,3022,2917],{"class":67},[57,3024,1674],{"class":80},[57,3026,3027,3029,3031,3033,3035,3037],{"class":59,"line":896},[57,3028,2768],{"class":63},[57,3030,2898],{"class":67},[57,3032,549],{"class":67},[57,3034,561],{"class":80},[57,3036,2905],{"class":67},[57,3038,567],{"class":80},[57,3040,3041],{"class":59,"line":926},[57,3042,602],{"emptyLinePlaceholder":601},[57,3044,3045,3047,3050,3053,3055,3057],{"class":59,"line":931},[57,3046,2768],{"class":63},[57,3048,3049],{"class":67}," state",[57,3051,3052],{"class":67},"        =",[57,3054,561],{"class":80},[57,3056,2298],{"class":67},[57,3058,567],{"class":80},[57,3060,3061],{"class":59,"line":936},[57,3062,602],{"emptyLinePlaceholder":601},[57,3064,3065],{"class":59,"line":946},[57,3066,572],{"class":102},[57,3068,3069],{"class":59,"line":990},[57,3070,602],{"emptyLinePlaceholder":601},[57,3072,3073,3076,3079,3081,3084,3087,3089,3092,3094,3096],{"class":59,"line":1032},[57,3074,3075],{"class":63},"Plan:",[57,3077,3078],{"class":118}," 2",[57,3080,2661],{"class":67},[57,3082,3083],{"class":67}," add,",[57,3085,3086],{"class":118}," 0",[57,3088,2661],{"class":67},[57,3090,3091],{"class":67}," change,",[57,3093,3086],{"class":118},[57,3095,2661],{"class":67},[57,3097,3098],{"class":67}," destroy.\n",[57,3100,3101],{"class":59,"line":1073},[57,3102,602],{"emptyLinePlaceholder":601},[57,3104,3105,3108,3110,3113,3115,3117,3119],{"class":59,"line":1114},[57,3106,3107],{"class":63},"Do",[57,3109,2536],{"class":67},[57,3111,3112],{"class":67}," want",[57,3114,2661],{"class":67},[57,3116,2721],{"class":67},[57,3118,462],{"class":67},[57,3120,3121],{"class":67}," actions?\n",[57,3123,3124,3127,3129,3131,3133,3135,3138],{"class":59,"line":1119},[57,3125,3126],{"class":63},"  Terraform",[57,3128,2718],{"class":67},[57,3130,2721],{"class":67},[57,3132,2391],{"class":67},[57,3134,2681],{"class":67},[57,3136,3137],{"class":67}," described",[57,3139,3140],{"class":67}," above.\n",[57,3142,3143,3146,3149,3152,3154,3156,3159,3162,3164],{"class":59,"line":1124},[57,3144,3145],{"class":63},"  Only",[57,3147,3148],{"class":80}," '",[57,3150,3151],{"class":67},"yes",[57,3153,2539],{"class":80},[57,3155,2718],{"class":67},[57,3157,3158],{"class":67}," be",[57,3160,3161],{"class":67}," accepted",[57,3163,2661],{"class":67},[57,3165,3166],{"class":67}," approve.\n",[57,3168,3169,3172,3174,3177],{"class":59,"line":1129},[57,3170,3171],{"class":63},"  Enter",[57,3173,2479],{"class":67},[57,3175,3176],{"class":67}," value:",[57,3178,3179],{"class":67}," yes\n",[57,3181,3182],{"class":59,"line":1150},[57,3183,602],{"emptyLinePlaceholder":601},[57,3185,3186,3189],{"class":59,"line":1159},[57,3187,3188],{"class":63},"ovh_dedicated_server_update.server_on_rescue:",[57,3190,3191],{"class":67}," Creating...\n",[57,3193,3194,3196,3199,3202,3205],{"class":59,"line":1174},[57,3195,3188],{"class":63},[57,3197,3198],{"class":67}," Still",[57,3200,3201],{"class":67}," creating...",[57,3203,3204],{"class":102}," [10s ",[57,3206,3207],{"class":67},"elapsed]\n",[57,3209,3210,3212,3215,3218,3221,3224],{"class":59,"line":1188},[57,3211,3188],{"class":63},[57,3213,3214],{"class":67}," Creation",[57,3216,3217],{"class":67}," complete",[57,3219,3220],{"class":67}," after",[57,3222,3223],{"class":67}," 11s",[57,3225,3226],{"class":102}," [id=ksxxxxxxx.kimsufi.com]\n",[57,3228,3229,3232],{"class":59,"line":1203},[57,3230,3231],{"class":63},"ovh_dedicated_server_reboot_task.server_reboot:",[57,3233,3191],{"class":67},[57,3235,3236,3238,3240,3242,3244],{"class":59,"line":1217},[57,3237,3231],{"class":63},[57,3239,3198],{"class":67},[57,3241,3201],{"class":67},[57,3243,3204],{"class":102},[57,3245,3207],{"class":67},[57,3247,3248,3250,3252,3254,3257],{"class":59,"line":1228},[57,3249,3231],{"class":63},[57,3251,3198],{"class":67},[57,3253,3201],{"class":67},[57,3255,3256],{"class":102}," [20s ",[57,3258,3207],{"class":67},[57,3260,3261,3263,3265,3267,3270],{"class":59,"line":1233},[57,3262,3231],{"class":63},[57,3264,3198],{"class":67},[57,3266,3201],{"class":67},[57,3268,3269],{"class":102}," [30s ",[57,3271,3207],{"class":67},[57,3273,3274,3276,3278,3280,3283],{"class":59,"line":1248},[57,3275,3231],{"class":63},[57,3277,3198],{"class":67},[57,3279,3201],{"class":67},[57,3281,3282],{"class":102}," [40s ",[57,3284,3207],{"class":67},[57,3286,3287,3289,3291,3293,3296],{"class":59,"line":1265},[57,3288,3231],{"class":63},[57,3290,3198],{"class":67},[57,3292,3201],{"class":67},[57,3294,3295],{"class":102}," [50s ",[57,3297,3207],{"class":67},[57,3299,3300,3302,3304,3306,3309],{"class":59,"line":1270},[57,3301,3231],{"class":63},[57,3303,3198],{"class":67},[57,3305,3201],{"class":67},[57,3307,3308],{"class":102}," [1m0s ",[57,3310,3207],{"class":67},[57,3312,3313,3315,3317,3319,3322],{"class":59,"line":1278},[57,3314,3231],{"class":63},[57,3316,3198],{"class":67},[57,3318,3201],{"class":67},[57,3320,3321],{"class":102}," [1m10s ",[57,3323,3207],{"class":67},[57,3325,3326,3328,3330,3332,3335],{"class":59,"line":1293},[57,3327,3231],{"class":63},[57,3329,3198],{"class":67},[57,3331,3201],{"class":67},[57,3333,3334],{"class":102}," [1m20s ",[57,3336,3207],{"class":67},[57,3338,3339,3341,3343,3345,3348],{"class":59,"line":1304},[57,3340,3231],{"class":63},[57,3342,3198],{"class":67},[57,3344,3201],{"class":67},[57,3346,3347],{"class":102}," [1m30s ",[57,3349,3207],{"class":67},[57,3351,3352,3354,3356,3358,3360,3363],{"class":59,"line":1315},[57,3353,3231],{"class":63},[57,3355,3214],{"class":67},[57,3357,3217],{"class":67},[57,3359,3220],{"class":67},[57,3361,3362],{"class":67}," 1m31s",[57,3364,3365],{"class":102}," [id=251909160]\n",[57,3367,3368],{"class":59,"line":1326},[57,3369,602],{"emptyLinePlaceholder":601},[57,3371,3372,3375,3378,3381,3383,3386,3388,3391,3393],{"class":59,"line":1331},[57,3373,3374],{"class":63},"Apply",[57,3376,3377],{"class":67}," complete!",[57,3379,3380],{"class":67}," Resources:",[57,3382,3078],{"class":118},[57,3384,3385],{"class":67}," added,",[57,3387,3086],{"class":118},[57,3389,3390],{"class":67}," changed,",[57,3392,3086],{"class":118},[57,3394,3395],{"class":67}," destroyed.\n",[15,3397,3398,3399,3403,3404,3409],{},"An email from OVH will automatically arrive in your mailbox to send you the connection information in rescue mode. I invite you to check out ",[26,3400,3402],{"href":500,"rel":3401},[30],"the OVH documentation"," to deploy other kinds of configuration, and also ",[26,3405,3408],{"href":3406,"rel":3407},"https:\u002F\u002Fwww.terraform.io\u002Fdocs",[30],"the Terraform documentation"," to learn more.",[10,3411,3413],{"id":3412},"conclusion","Conclusion",[15,3415,3416],{},"I've presented installing Terraform on macOS as well as two concrete configuration examples: provisioning a complete infrastructure on Scaleway (SSH key, firewall, instance, database, and private network) and driving an OVHcloud dedicated server to switch it into rescue mode. The essential commands terraform init, plan, and apply are detailed with their actual outputs. This infrastructure as code approach lets you automate and document deployments otherwise done manually. It requires properly securing the secrets (API keys, passwords) used in the configuration files.",[3418,3419,3420],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":52,"searchDepth":74,"depth":74,"links":3422},[3423,3424,3425,3426,3430],{"id":12,"depth":74,"text":13},{"id":20,"depth":74,"text":21},{"id":41,"depth":74,"text":42},{"id":507,"depth":74,"text":508,"children":3427},[3428,3429],{"id":515,"depth":96,"text":516},{"id":2036,"depth":96,"text":2037},{"id":3412,"depth":74,"text":3413},[3432],"Linux","\u002Fimages\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud\u002Fce5716efc3.png",null,"2022-05-24","Terraform lets you automate resource deployment.","md",{},"\u002Fen\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud",[3441],"certificat-hashicorp-certified-terraform-associate",{"title":5,"description":3436},"blog-configuration-terraform-scaleway-ovhcloud","en\u002Fblog\u002Fblog-configuration-terraform-scaleway-ovhcloud","IvLUvu7tnZb37cCqsblQMwwuZ_1NSYlB4FHBFZ5Ct6o",[3447,3456,3464,3472,3479,3485,3492,3500],{"title":3448,"path":3449,"stem":3450,"date":3451,"cover":3452,"categories":3453,"children":-1},"Junos Associate (JNCIA-Junos)","\u002Fen\u002Fblog\u002Fcertificat-junos-associe-jncia-junos","en\u002Fblog\u002Fcertificat-junos-associe-jncia-junos","2023-01-17","\u002Fimages\u002Fblog\u002Fcertificat-junos-associe-jncia-junos\u002F773018337d.png",[3454,3455],"Certifications","Réseau",{"title":3457,"path":3458,"stem":3459,"date":3460,"cover":3461,"categories":3462,"children":-1},"Microsoft: Security, Compliance, and Identity Fundamentals","\u002Fen\u002Fblog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals","en\u002Fblog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals","2022-10-17","\u002Fimages\u002Fblog\u002Fcertificat-microsoft-security-compliance-and-identity-fundamentals\u002F70ef935f2a.png",[3454,3463],"Microsoft",{"title":3465,"path":3466,"stem":3467,"date":3468,"cover":3469,"categories":3470,"children":-1},"Hack In Paris 2022: the Cybersecurity Conference of the Year","\u002Fen\u002Fblog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee","en\u002Fblog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee","2022-06-19","\u002Fimages\u002Fblog\u002Fhack-in-paris-2022-conference-cybersecurite-de-lannee\u002F8ad6403cd6.png",[3471],"Évènement",{"title":3473,"path":3474,"stem":3475,"date":3476,"cover":3477,"categories":3478,"children":-1},"Deploying Microsoft Defender ATP with Ansible","\u002Fen\u002Fblog\u002Fdeployer-microsoft-defender-atp-avec-ansible","en\u002Fblog\u002Fdeployer-microsoft-defender-atp-avec-ansible","2022-05-28","\u002Fimages\u002Fblog\u002Fdeployer-microsoft-defender-atp-avec-ansible\u002F20b08b6e35.jpg",[3432],{"title":3480,"path":3481,"stem":3482,"date":3435,"cover":3483,"categories":3484,"children":-1},"Configuring Nginx with VueJS (404 error)","\u002Fen\u002Fblog\u002Fconfiguration-nginx-avec-vuejs-erreur-404","en\u002Fblog\u002Fconfiguration-nginx-avec-vuejs-erreur-404","\u002Fimages\u002Fblog\u002Fconfiguration-nginx-avec-vuejs-erreur-404\u002Fc5873a58c2.jpg",[3432],{"title":3486,"path":3487,"stem":3488,"date":3489,"cover":3490,"categories":3491,"children":-1},"Manage Your IT Fleet with GLPI","\u002Fen\u002Fblog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi","en\u002Fblog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi","2022-01-12","\u002Fimages\u002Fblog\u002Fcertificat-gerez-votre-parc-informatique-avec-glpi\u002Fb3a9f2486c.jpg",[3454],{"title":3493,"path":3494,"stem":3495,"date":3496,"cover":3497,"categories":3498,"children":-1},"Secure Your Infrastructures","\u002Fen\u002Fblog\u002Fcertificat-securisez-vos-infrastructures","en\u002Fblog\u002Fcertificat-securisez-vos-infrastructures","2021-10-29","\u002Fimages\u002Fblog\u002Fcertificat-securisez-vos-infrastructures\u002Fdcf3ea9308.jpg",[3454,3499],"Sécurité",{"title":3501,"path":3502,"stem":3503,"date":3504,"cover":3505,"categories":3506,"children":-1},"On the Road to Electric with Tesla","\u002Fen\u002Fblog\u002Fen-route-vers-electrique-avec-tesla","en\u002Fblog\u002Fen-route-vers-electrique-avec-tesla","2021-07-07","\u002Fimages\u002Fblog\u002Fen-route-vers-electrique-avec-tesla\u002F7dec469e8d.jpg",[3471],[3508],{"id":3509,"title":3510,"body":3511,"categories":3581,"cover":3583,"cover_contain":601,"credly_badge_id":3584,"date":3585,"description":3586,"extension":3437,"meta":3587,"navigation":601,"path":3588,"related_certifications":3434,"seo":3589,"slug":3441,"stem":3590,"__hash__":3591},"blog\u002Fen\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate.md","HashiCorp Terraform Associate",{"type":7,"value":3512,"toc":3577},[3513,3515,3518,3521,3569,3572,3574],[10,3514,13],{"id":12},[15,3516,3517],{},"To industrialize infrastructure deployment for my clients, I took the HashiCorp Terraform Associate certification.",[15,3519,3520],{},"The \"Terraform Associate\" training path is designed for IT professionals in charge of infrastructure deployment operations.\nThe course catalog covers the following modules:",[3522,3523,3524,3529,3534,3539,3544,3549,3554,3559,3564],"ul",{},[2001,3525,3526],{},[32,3527,3528],{},"Understand Infrastructure as Code (IaC) concepts",[2001,3530,3531],{},[32,3532,3533],{},"Understand the purpose of Terraform (vs other IaC)",[2001,3535,3536],{},[32,3537,3538],{},"Understand Terraform basics",[2001,3540,3541],{},[32,3542,3543],{},"Use Terraform outside the core workflow",[2001,3545,3546],{},[32,3547,3548],{},"Interact with Terraform modules",[2001,3550,3551],{},[32,3552,3553],{},"Use the core Terraform workflow",[2001,3555,3556],{},[32,3557,3558],{},"Implement and maintain state",[2001,3560,3561],{},[32,3562,3563],{},"Read, generate, and modify configuration",[2001,3565,3566],{},[32,3567,3568],{},"Understand HCP Terraform capabilities",[15,3570,3571],{},"The training takes about 4 days.\nYou should then allow around 1h45 for the certification exam itself: Terraform Associate.",[10,3573,3413],{"id":3412},[15,3575,3576],{},"This Pearson VUE certification covers all the concepts needed to confidently approach the Terraform Associate exam: infrastructure as code, the Terraform workflow, state management, and using modules. It validates a solid understanding of infrastructure deployment best practices with Terraform. A useful certification for any professional automating cloud infrastructure.",{"title":52,"searchDepth":74,"depth":74,"links":3578},[3579,3580],{"id":12,"depth":74,"text":13},{"id":3412,"depth":74,"text":3413},[3454,3582],"Code","\u002Fimages\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate\u002F488880edcf.png","632a52a8-b218-4463-aa2e-f85c9643535f","2025-02-11","HashiCorp Terraform Associate: Pearson VUE certification, completed as part of my professional watch in cybersecurity and IT.",{},"\u002Fen\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate",{"title":3510,"description":3586},"en\u002Fblog\u002Fcertificat-hashicorp-certified-terraform-associate","Jo1W0rdAoS7xXZL4ego6L3fNZXTKjZux5afRrkNBxhE",1786644883819]