diff --git a/main.tf b/main.tf index 128e223650c2dc8e457d1531cb493ea1a049c435..2031ad4572f62c66b0b5cacc4795d43639e8de6f 100644 --- a/main.tf +++ b/main.tf @@ -65,6 +65,7 @@ module "create-ohpc-instance" { key_pair = "${module.import-keypair.keypair_name}" external_network = var.external_network internal_network = var.internal_network + internal_ip = var.ohpc_private_ip floating_ip_ohpc = "${module.floating-ip-address.ohpc_address}" host_prefix = var.host_prefix ohpc_user = var.ohpc_user @@ -81,6 +82,7 @@ module "create-ood-instance" { flavor = var.flavor key_pair = "${module.import-keypair.keypair_name}" internal_network = var.internal_network + internal_ip = var.ood_private_ip external_network = var.external_network floating_ip_ood = "${module.floating-ip-address.ood_address}" host_prefix = var.host_prefix @@ -108,4 +110,26 @@ output "ohpc-ssh_host" { # calls the outputs defined in the ood-instance module output "ood-ssh_host" { value = "${module.create-ood-instance.ssh_host}" -} \ No newline at end of file +} + +# compute node post provision +resource "null_resource" "compute_ops" { + triggers = { + ohpc_instance = module.create-ohpc-instance.id + compute_instances = join(",", module.nodes.id) + } + + connection { + host = module.create-ohpc-instance.ssh_host + user = var.ohpc_user + private_key = file(var.ssh_private_key) + } + + # compute node + provisioner "remote-exec" { + inline = [ + for node, net in module.nodes.network: + "ansible-playbook -i /CRI_XCBC/hosts -l `hostname -s` -e \"{'node_name':'${node}', 'node_ip_v4':'${net[0].fixed_ip_v4}', 'node_mac':'${net[0].mac}'}\" /CRI_XCBC/site-ops.yaml -b -v" + ] + } +} diff --git a/nodes/main.tf b/nodes/main.tf index 5fdb441aacee4bcd7c26596cc5d0be28ce5c2ef6..dfeeeadd5fa32df3107c5e63258e0833506de556 100644 --- a/nodes/main.tf +++ b/nodes/main.tf @@ -10,20 +10,44 @@ variable "key_pair" {type = "string"} variable "compute_node_count" { } variable "internal_network" {} - +data "openstack_images_image_v2" "compute" { + name = var.image_compute + most_recent = true +} # creates compute node -resource "openstack_compute_instance_v2" "c0" { +resource "openstack_compute_instance_v2" "compute" { depends_on = [var.internal_subnet_id] name = "c${count.index}" - image_name = var.image_compute + image_id = data.openstack_images_image_v2.compute.id flavor_name = var.flavor key_pair = var.key_pair security_groups = ["default"] count = var.compute_node_count + user_data = <<-EOF + #cloud-config + runcmd: + - [ bash, -xc, 'ethernet=$(cat /sys/class/net/eth0/address); nodename=$(hostname -s); sed -e "s/MY_HWADDR/$ethernet/" -e "s/MY_NODENAME/$nodename/" -i /warewulf/config;' ] + - [ bash, -xc, "echo $(date) ': hello world!'; 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, "systemctl restart slurmd" ] + EOF # defines the networks of the instance network { name = var.internal_network } -} \ No newline at end of file +} + +# output +output "id" { + value = openstack_compute_instance_v2.compute.*.id +} + +output "image_id" { + value = data.openstack_images_image_v2.compute.id +} + +output "network" { + value = zipmap(openstack_compute_instance_v2.compute.*.name, openstack_compute_instance_v2.compute.*.network) +} diff --git a/ohpc-instance/main.tf b/ohpc-instance/main.tf index c41ad802d3b981b170eb7e956d73043d0d2e7817..746a7e51b437cfbe37bb1463ff038266513fafa7 100644 --- a/ohpc-instance/main.tf +++ b/ohpc-instance/main.tf @@ -9,6 +9,7 @@ variable "flavor" {} variable "key_pair" {type = "string"} variable "internal_network" {} +variable "internal_ip" {} variable "external_network" {} # is created in floating-ip module and called in root module @@ -34,6 +35,7 @@ resource "openstack_compute_instance_v2" "ohpc" { } network { name = var.internal_network + fixed_ip_v4 = var.internal_ip } } @@ -50,6 +52,10 @@ resource "openstack_compute_floatingip_associate_v2" "ohpc" { } } +output "id" { + value = openstack_compute_instance_v2.ohpc.id +} + output "ssh_host" { value = format(var.host_prefix,element(split(".", var.floating_ip_ohpc),3,),) -} \ No newline at end of file +} diff --git a/ood-instance/main.tf b/ood-instance/main.tf index 09e8ce5cdb33954e567c588b47de5e34b9dce5d2..7d0d599f65da8f93a8833a0e92bf5ef929c48585 100644 --- a/ood-instance/main.tf +++ b/ood-instance/main.tf @@ -9,6 +9,7 @@ variable "flavor" {} variable "key_pair" {type = "string"} variable "internal_network" {} +variable "internal_ip" {} variable "external_network" {} # is created in floating-ip module and called in root module @@ -34,6 +35,7 @@ resource "openstack_compute_instance_v2" "ood" { } network { name = var.internal_network + fixed_ip_v4 = var.internal_ip } } diff --git a/vars.tf b/vars.tf index b95a6f264ddc1c3fbf8746f8cbf152902294b758..00bbcd100a31a4f8cee76c2d3e64636e339588e9 100644 --- a/vars.tf +++ b/vars.tf @@ -14,9 +14,11 @@ variable "ssh_public_key" {default = "~/.ssh/id_rsa.pub"} # variables for instance modules variable "ohpc_instance_name" {default = "ohpc"} +variable "ohpc_private_ip" {default = "10.1.1.10"} variable "ood_instance_name" { default = "ood"} variable "image_ohpc" {default = "CentOS-7-x86_64-GenericCloud-1905"} variable "image_ood" {default = "CentOS-7-x86_64-GenericCloud-1905"} +variable "ood_private_ip" {default = "10.1.1.11"} variable "flavor" {default = "m1.medium"} variable "internal_network" {default = "clusternet"} variable "external_network" {default = "dmznet"}