【问题标题】:Terraform enable specific VMs via command lineTerraform 通过命令行启用特定的虚拟机
【发布时间】:2021-02-15 07:11:39
【问题描述】:

在我的 Terraform 文件或工具中,我试图控制是否使用 terraform 应用计划启用特定虚拟机(模块)。有没有办法使用 Terraform init 或应用参数来做到这一点?还是我只需要创建一个 Python 主脚本来编写 terraform *.tf 文件来启用或禁用特定的虚拟机?这是一个示例,在我的 ma​​in.tf 文件中,我有几个不同的虚拟机。我想在命令行调用 terraform 以指定启用或不启用哪些虚拟机。这样做的原因是我有一个免费的社区 Cyber​​ Range terraform 项目,所产生的成本可能很大。我希望为用户提供更多灵活性选项,并为用户调用启用哪些模块(而不是手动注释掉 Terraform 文件)提供更自动化的选项。试图使其更自动化地动态启用特定的虚拟机/模块。这可以更容易地使用 Python CLI 工具来完成,该工具为用户提供一个菜单,其中包含要启用的菜单,然后控制 Terraform。但是如果知道 Terraform 是否可以在本地使用特性来做到这一点,那就太酷了。

##########################################################
## Create Primary DC VM & AD Forest
##########################################################
module "dc1-vm" {
  source                        = "../modules/dc1-vm"
  resource_group_name           = module.network.out_resource_group_name
  location                      = var.location
  prefix                        = var.prefix
  subnet_id                     = module.network.dc_subnet_subnet_id
  active_directory_domain       = "${var.prefix}.local"
  active_directory_netbios_name = var.prefix
  dc1private_ip_address         = var.dc1private_ip_address
  #network_security_group_id     = "${azurerm_network_security_group.vm_security_group.id}"
  admin_username = var.admin_username
  admin_password = var.admin_password
}

##########################################################
## Create Secondary Domain Controller VM & Join domain
##########################################################
/*module "dc2-vm" {
  source                        =  "../modules/dc2-vm"
  resource_group_name           = "${module.dc1-vm.out_resource_group_name}"
  location                      = "${var.location}"
  dcavailability_set_id         = "${module.dc1-vm.out_dcavailabilityset}"
  prefix                        = "${var.prefix}"
  subnet_id                     = "${module.network.dc_subnet_subnet_id}"
  active_directory_domain       = "${var.prefix}.local"
  active_directory_username     = "${var.admin_username}"
  active_directory_password     = "${var.admin_password}"
  active_directory_netbios_name = "${var.prefix}"
  dc2private_ip_address         = "${var.dc2private_ip_address}"
  admin_username                = "${var.admin_username}"
  admin_password                = "${var.admin_password}"
  domainadmin_username          = "${var.domainadmin_username}"
}*/

##########################################################
## Create the AriaCloud Adversary 1 
##########################################################
module "adversary1-vm" {
  source              = "../modules/adversary1-vm"
  resource_group_name = module.network.out_resource_group_name
  location            = var.location
  prefix              = var.prefix
  subnet_id           = module.network.user2_subnet_subnet_id
}

### Create Windows 10 Pro VM-1
module "win10-vm-1" {
  source                    = "../modules/win10-vm-1"
  resource_group_name       = module.dc1-vm.out_resource_group_name
  location                  = var.location
  prefix                    = var.prefix
  endpoint1_machine_name    = var.endpoint1_machine_name
  endpoint1_username        = var.endpoint1_username
  subnet_id                 = module.network.user1_subnet_subnet_id
  active_directory_domain   = "${var.prefix}.local"
  active_directory_username = var.admin_username
  active_directory_password = var.admin_password
  admin_username            = var.admin_username
  admin_password            = var.admin_password
  vmcount                   = var.vmcount
}


module "win10-vm-2" {
  source                    = "../modules/win10-vm-2"
  resource_group_name       = module.dc1-vm.out_resource_group_name
  location                  = var.location
  prefix                    = var.prefix
  endpoint2_machine_name    = var.endpoint2_machine_name
  endpoint2_username        = var.endpoint2_username
  subnet_id                 = module.network.user1_subnet_subnet_id
  active_directory_domain   = "${var.prefix}.local"
  active_directory_username = var.admin_username
  active_directory_password = var.admin_password
  admin_username            = var.admin_username
  admin_password            = var.admin_password
  vmcount                   = var.vmcount
}

【问题讨论】:

    标签: terraform


    【解决方案1】:

    我发现 Terraform 中的资源定位功能看起来符合要求: https://www.hashicorp.com/blog/resource-targeting-in-terraform

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 2022-07-09
      • 2018-04-17
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2021-11-24
      相关资源
      最近更新 更多