Skip to content
Snippets Groups Projects
main.tf 2.33 KiB
Newer Older
# is created in internal-network module and called in root module
variable "internal_subnet_id" {type = string}
Ryan Randles Jones's avatar
Ryan Randles Jones committed
variable "image_ood" {}
variable "flavor" {}

# is created in key-pair module and called in root module
variable "key_pair" {type = string}
variable "internal_network" {}
Bo-Chun Chen's avatar
Bo-Chun Chen committed
variable "internal_ip" {}
variable "external_network" {}

# is created in floating-ip module and called in root module
variable "floating_ip_ood" {type = string}
Ryan Randles Jones's avatar
Ryan Randles Jones committed
variable "ood_user" {}
variable "ssh_private_key" {}
Ryan Jones's avatar
Ryan Jones committed

terraform {
required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.42.0"
    }
  }
}

provider "openstack" {
  use_octavia         = true
  endpoint_overrides = {
      "network"  = "https://neutron-api.cloud.rc.uab.edu:9696/v2.0/"
    }
}
Ryan Jones's avatar
Ryan Jones committed

Ryan Randles Jones's avatar
Ryan Randles Jones committed
# creates details for the OOD instance
Ryan Jones's avatar
Ryan Jones committed
resource "openstack_compute_instance_v2" "ood" {
  depends_on      = [var.internal_subnet_id]
Ryan Randles Jones's avatar
Ryan Randles Jones committed
  name            = var.ood_instance_name
Ryan Jones's avatar
Ryan Jones committed
  image_name      = var.image_ood
  flavor_name     = var.flavor
Ryan Randles Jones's avatar
Ryan Randles Jones committed
  key_pair        = var.key_pair
Ryan Jones's avatar
Ryan Jones committed
  security_groups = ["default"]
  user_data =  <<-EOF
    #cloud-config
    runcmd:
Krish Moodbidri's avatar
Krish Moodbidri committed
     - [ bash, -xc, 'ethernet=$(cat /sys/class/net/eth1/address); nodename=$(hostname -s); sed -e "s/MY_HWADDR/$ethernet/" -e "s/MY_NODENAME/$nodename/" -i /warewulf/config;' ]
     - [ bash, -xc, "until WWGETFILES_INTERVAL=0 bash -x /warewulf/bin/wwgetfiles; do echo waiting ; rm -f /tmp/.wwgetfile.lock ; sleep 10; done;" ]
     - [ bash, -xc, "systemctl restart munge" ]
     - [ bash, -xc, "cd /CRI_XCBC; ansible-playbook -c local -i /CRI_XCBC/hosts -l `hostname -s` /CRI_XCBC/ood-ops.yaml -b -v" ]
Ryan Jones's avatar
Ryan Jones committed

# defines the networks of the instance
  network {
    name = var.external_network
Ryan Jones's avatar
Ryan Jones committed
  }
  network {
    name = var.internal_network
Bo-Chun Chen's avatar
Bo-Chun Chen committed
    fixed_ip_v4 = var.internal_ip
Ryan Jones's avatar
Ryan Jones committed
  }
}

Ryan Randles Jones's avatar
Ryan Randles Jones committed
# associates floating ip with the OOD instance
Ryan Jones's avatar
Ryan Jones committed
resource "openstack_compute_floatingip_associate_v2" "ood" {
Ryan Randles Jones's avatar
Ryan Randles Jones committed
  floating_ip = var.floating_ip_ood
Ryan Jones's avatar
Ryan Jones committed
  instance_id = openstack_compute_instance_v2.ood.id
}


output "id" {
    value = openstack_compute_instance_v2.ood.id
}
output "ssh_host"{
Ryan Randles Jones's avatar
Ryan Randles Jones committed
    value = format(var.host_prefix,element(split(".", var.floating_ip_ood),3,),)
}
output "network" {
    value = openstack_compute_instance_v2.ood.network
}