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"}