variable "create_vm" { description = "If set to true, it will create vm" type = bool } variable "create_vmss" { description = "If set to true, it will create vmss" type = bool } and define the resource azurerm_linux_virtual_machine and azurerm_linux_virtual_machine_scale_set in the same VM module. resource "azurerm_linux_virtual_machine" "example" { count = var.create_vm ? 1 : 0 name = "example-machine" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location size = "Standard_F2" ... resource "azurerm_linux_virtual_machine_scale_set" "example" { count = var.create_vmss ? 1 : 0 name = "example-vmss" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location sku = "Standard_F2" instances = 1 admin_username = "adminuser" .... Then call the submodule like this, module "vm" { source = "./modules/vm" create_vm = true create_vmss = false ... }