Terraform
Last updated
Was this helpful?
Last updated
Was this helpful?
Unlike Bicep Terraform allows us to separate the variables of the definition files from the state of our infrastructure, the working folder is c:\osdcloud\terraform
This is the main file of terraform and contains the complete description of the future infrastructure.
resource "azurerm_resource_group" "RessourceGroup" {
location = var.osdcloud_Location
name = var.osdcloud_resourcegroup
}
resource "azurerm_storage_account" "OSDCloud" {
account_replication_type = "LRS"
account_tier = "Standard"
location = var.osdcloud_Location
name = var.osdcloud_StorageAccountOSDCloud
resource_group_name = var.osdcloud_resourcegroup
access_tier = "Hot"
min_tls_version = "TLS1_2"
account_kind = "StorageV2"
shared_access_key_enabled = true
allow_nested_items_to_be_public = true
blob_properties {
change_feed_enabled = true
}
tags = {
OSDCloud = "production"
}
depends_on = [
azurerm_resource_group.RessourceGroup,
]
}
resource "azurerm_storage_account" "OSDScripts" {
depends_on = [
azurerm_resource_group.RessourceGroup,
]
account_replication_type = "LRS"
account_tier = "Standard"
location = var.osdcloud_Location
name = var.osdcloud_StorageAccountOSDScripts
resource_group_name = var.osdcloud_resourcegroup
min_tls_version = "TLS1_2"
access_tier = "Hot"
account_kind = "StorageV2"
shared_access_key_enabled = true
allow_nested_items_to_be_public = true
blob_properties {
change_feed_enabled = true
}
tags = {
OSDScripts = "powershell"
}
}
resource "azurerm_storage_container" "ContainerOSDCloud" {
depends_on = [
azurerm_resource_group.RessourceGroup,
azurerm_storage_account.OSDCloud,
]
count = length(var.osdcloud_containers)
name = var.osdcloud_containers[count.index]
storage_account_name = azurerm_storage_account.OSDCloud.name
container_access_type = "container"
}
resource "azurerm_storage_container" "ContainerOSDScripts" {
count = length(var.osdscript_containers)
name = var.osdscript_containers[count.index]
storage_account_name = azurerm_storage_account.OSDScripts.name
container_access_type = "container"
}
resource "azurerm_role_assignment" "RBAC_OSDCloud" {
scope = azurerm_storage_account.OSDCloud.id
role_definition_name = "Storage Blob Data Reader"
principal_id = var.technicien_id
}
resource "azurerm_role_assignment" "RBAC_OSDScripts" {
scope = azurerm_storage_account.OSDScripts.id
role_definition_name = "Storage Blob Data Reader"
principal_id = var.technicien_id
}
The providers file contains the information to connect to Azure.
terraform {
backend "local" {}
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.9.0"
}
}
}
provider "azurerm" {
subscription_id = var.subscription_id
tenant_id = var.tenant_id
features {}
}
This file allows you to understand the role of each variable as well as the type that accepts variables, objects, lists, integer etc...
variable "osdcloud_containers" {
description = "List of containers to create for OSDCloud"
type = list
}
variable "osdscript_containers" {
description = "List of containers to create for OSDScripts"
type = list
}
variable "osdcloud_resourcegroup" {
description = " Name for the resource group"
type = string
}
variable "osdcloud_StorageAccountOSDCloud" {
description = "The name of the storage account for OSDCloud"
type = string
}
variable "osdcloud_StorageAccountOSDScripts" {
description = "The name of the storage account for OSDScripts"
type = string
}
variable "osdcloud_Location" {
description = "Select your Azure region"
type = string
validation {
condition = contains(
["eastasia", "southeastasia", "centralus","eastus","eastus2","westus","northcentralus","southcentralus","northeurope","westeurope","japanwest","japaneast","brazilsouth","australiaeast","australiasoutheast","southindia","centralindia","westindia","canadacentral","canadaeast","uksouth","ukwest","westcentralus","germanywestcentral","norwaywest","norwayeast","brazilsoutheast","westus3","swedencentral"],
var.osdcloud_Location
)
error_message = "Err: This location is not valid for Azure."
}
}
variable "subscription_id" {
description = " your Azure subscription id"
type = string
}
variable "technicien_id" {
description = " your AzureAD User Id, it can only connect to storage account download and list objects"
type = string
}
variable "tenant_id" {
description = " your Azure tenant id"
type = string
}
It is in this file that we must fill in all the necessary information.
osdcloud_containers = ["server", "retail", "insiders", "driverpack", "bootimage"]
osdscript_containers = ["scripts", "packages", "unattend", "others"]
osdcloud_resourcegroup = "AzOSDCloud"
osdcloud_StorageAccountOSDScripts = "osdscripts"
osdcloud_StorageAccountOSDCloud = "osdcloud"
osdcloud_Location = ""
subscription_id = ""
technicien_id = ""
tenant_id = ""