|
| 1 | +locals { |
| 2 | + autoid_nodes_ip_v4 = flatten([ |
| 3 | + [aws_instance.autoid_node.*.public_ip] |
| 4 | + ] |
| 5 | + ) |
| 6 | + autoid_nodes_ip_v6 = flatten([ |
| 7 | + [aws_instance.autoid_node.*.ipv6_addresses] |
| 8 | + ] |
| 9 | + ) |
| 10 | +} |
| 11 | + |
| 12 | +resource "null_resource" "setup-autoid-nodes" { |
| 13 | + count = length(local.autoid_nodes_ip_v4) |
| 14 | + |
| 15 | + depends_on = [aws_instance.autoid_node] |
| 16 | + |
| 17 | + # trigger on node ip changes |
| 18 | + triggers = { |
| 19 | + cluster_instance_ipv4s = join(",", local.autoid_nodes_ip_v4) |
| 20 | + } |
| 21 | + |
| 22 | + connection { |
| 23 | + host = local.autoid_nodes_ip_v4[count.index] |
| 24 | + user = var.ssh_user |
| 25 | + type = "ssh" |
| 26 | + agent = true |
| 27 | + private_key = file("${var.private_key_path}") |
| 28 | + timeout = "300s" |
| 29 | + } |
| 30 | + |
| 31 | + # create subspace dir |
| 32 | + provisioner "remote-exec" { |
| 33 | + inline = [ |
| 34 | + "sudo mkdir -p /home/${var.ssh_user}/subspace/", |
| 35 | + "sudo chown -R ${var.ssh_user}:${var.ssh_user} /home/${var.ssh_user}/subspace/ && sudo chmod -R 750 /home/${var.ssh_user}/subspace/" |
| 36 | + ] |
| 37 | + } |
| 38 | + |
| 39 | + # copy install file |
| 40 | + provisioner "file" { |
| 41 | + source = "${var.path_to_scripts}/installer.sh" |
| 42 | + destination = "/home/${var.ssh_user}/subspace/installer.sh" |
| 43 | + } |
| 44 | + |
| 45 | + # copy config files |
| 46 | + provisioner "file" { |
| 47 | + source = "${var.path_to_configs}/" |
| 48 | + destination = "/home/${var.ssh_user}/subspace/" |
| 49 | + } |
| 50 | + |
| 51 | + # copy LE script |
| 52 | + provisioner "file" { |
| 53 | + source = "${var.path_to_scripts}/acme.sh" |
| 54 | + destination = "/home/${var.ssh_user}/subspace/acme.sh" |
| 55 | + } |
| 56 | + |
| 57 | + # install docker and docker compose and LE script |
| 58 | + provisioner "remote-exec" { |
| 59 | + inline = [ |
| 60 | + "sudo bash /home/${var.ssh_user}/subspace/installer.sh", |
| 61 | + "bash /home/${var.ssh_user}/subspace/acme.sh", |
| 62 | + ] |
| 63 | + } |
| 64 | + |
| 65 | +} |
| 66 | + |
| 67 | +resource "null_resource" "prune-autoid-nodes" { |
| 68 | + count = var.autoid-node-config.prune ? length(local.autoid_nodes_ip_v4) : 0 |
| 69 | + depends_on = [null_resource.setup-autoid-nodes] |
| 70 | + |
| 71 | + triggers = { |
| 72 | + prune = var.autoid-node-config.prune |
| 73 | + } |
| 74 | + |
| 75 | + connection { |
| 76 | + host = local.autoid_nodes_ip_v4[count.index] |
| 77 | + user = var.ssh_user |
| 78 | + type = "ssh" |
| 79 | + agent = true |
| 80 | + private_key = file("${var.private_key_path}") |
| 81 | + timeout = "300s" |
| 82 | + } |
| 83 | + |
| 84 | + provisioner "file" { |
| 85 | + source = "${var.path_to_scripts}/prune_docker_system.sh" |
| 86 | + destination = "/home/${var.ssh_user}/subspace/prune_docker_system.sh" |
| 87 | + } |
| 88 | + |
| 89 | + # prune network |
| 90 | + provisioner "remote-exec" { |
| 91 | + inline = [ |
| 92 | + "sudo bash /home/${var.ssh_user}/subspace/prune_docker_system.sh" |
| 93 | + ] |
| 94 | + } |
| 95 | +} |
| 96 | + |
| 97 | +resource "null_resource" "start-autoid-nodes" { |
| 98 | + count = length(local.autoid_nodes_ip_v4) |
| 99 | + |
| 100 | + depends_on = [null_resource.setup-autoid-nodes] |
| 101 | + |
| 102 | + # trigger on node deployment version change |
| 103 | + triggers = { |
| 104 | + deployment_version = var.autoid-node-config.deployment-version |
| 105 | + reserved_only = var.autoid-node-config.reserved-only |
| 106 | + } |
| 107 | + |
| 108 | + connection { |
| 109 | + host = local.autoid_nodes_ip_v4[count.index] |
| 110 | + user = var.ssh_user |
| 111 | + type = "ssh" |
| 112 | + agent = true |
| 113 | + private_key = file("${var.private_key_path}") |
| 114 | + timeout = "300s" |
| 115 | + } |
| 116 | + |
| 117 | + # copy node keys file |
| 118 | + provisioner "file" { |
| 119 | + source = "./autoid_node_keys.txt" |
| 120 | + destination = "/home/${var.ssh_user}/subspace/node_keys.txt" |
| 121 | + } |
| 122 | + |
| 123 | + # copy boostrap node keys file |
| 124 | + provisioner "file" { |
| 125 | + source = "./bootstrap_node_keys.txt" |
| 126 | + destination = "/home/${var.ssh_user}/subspace/bootstrap_node_keys.txt" |
| 127 | + } |
| 128 | + |
| 129 | + |
| 130 | + # copy boostrap node keys file |
| 131 | + provisioner "file" { |
| 132 | + source = "./bootstrap_node_autoid_keys.txt" |
| 133 | + destination = "/home/${var.ssh_user}/subspace/bootstrap_node_autoid_keys.txt" |
| 134 | + } |
| 135 | + |
| 136 | + # copy dsn_boostrap node keys file |
| 137 | + provisioner "file" { |
| 138 | + source = "./dsn_bootstrap_node_keys.txt" |
| 139 | + destination = "/home/${var.ssh_user}/subspace/dsn_bootstrap_node_keys.txt" |
| 140 | + } |
| 141 | + |
| 142 | + # copy keystore |
| 143 | + provisioner "file" { |
| 144 | + source = "./keystore" |
| 145 | + destination = "/home/${var.ssh_user}/subspace/keystore/" |
| 146 | + } |
| 147 | + |
| 148 | + # copy compose file creation script |
| 149 | + provisioner "file" { |
| 150 | + source = "${var.path_to_scripts}/create_domain_node_compose_file.sh" |
| 151 | + destination = "/home/${var.ssh_user}/subspace/create_compose_file.sh" |
| 152 | + } |
| 153 | + |
| 154 | + # start docker containers |
| 155 | + provisioner "remote-exec" { |
| 156 | + inline = [ |
| 157 | + # stop any running service |
| 158 | + "sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml down ", |
| 159 | + |
| 160 | + # set hostname |
| 161 | + "sudo hostnamectl set-hostname ${var.network_name}-autoid-node-${count.index}", |
| 162 | + |
| 163 | + # create .env file |
| 164 | + "echo NODE_ORG=${var.autoid-node-config.docker-org} > /home/${var.ssh_user}/subspace/.env", |
| 165 | + "echo NODE_TAG=${var.autoid-node-config.docker-tag} >> /home/${var.ssh_user}/subspace/.env", |
| 166 | + "echo NETWORK_NAME=${var.network_name} >> /home/${var.ssh_user}/subspace/.env", |
| 167 | + "echo DOMAIN_PREFIX=${var.autoid-node-config.domain-prefix[0]} >> /home/${var.ssh_user}/subspace/.env", |
| 168 | + "echo DOMAIN_LABEL=${var.autoid-node-config.domain-labels[1]} >> /home/${var.ssh_user}/subspace/.env", |
| 169 | + "echo DOMAIN_ID=${var.autoid-node-config.domain-id[1]} >> /home/${var.ssh_user}/subspace/.env", |
| 170 | + "echo NODE_ID=${count.index} >> /home/${var.ssh_user}/subspace/.env", |
| 171 | + "echo NODE_KEY=$(sed -nr 's/NODE_${count.index}_KEY=//p' /home/${var.ssh_user}/subspace/node_keys.txt) >> /home/${var.ssh_user}/subspace/.env", |
| 172 | + "echo NR_API_KEY=${var.nr_api_key} >> /home/${var.ssh_user}/subspace/.env", |
| 173 | + "echo PIECE_CACHE_SIZE=${var.piece_cache_size} >> /home/${var.ssh_user}/subspace/.env", |
| 174 | + "echo NODE_DSN_PORT=${var.autoid-node-config.node-dsn-port} >> /home/${var.ssh_user}/subspace/.env", |
| 175 | + "echo POT_EXTERNAL_ENTROPY=${var.pot_external_entropy} >> /home/${var.ssh_user}/subspace/.env", |
| 176 | + |
| 177 | + # create docker compose file |
| 178 | + "bash /home/${var.ssh_user}/subspace/create_compose_file.sh ${var.bootstrap-node-config.reserved-only} ${length(local.domain_nodes_ip_v4)} ${count.index} ${length(local.bootstrap_nodes_ip_v4)} ${length(local.bootstrap_nodes_autoid_ip_v4)} ${var.autoid-node-config.enable-domains} ${var.autoid-node-config.domain-id[0]}", |
| 179 | + |
| 180 | + # start subspace node |
| 181 | + "sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml up -d", |
| 182 | + ] |
| 183 | + } |
| 184 | +} |
0 commit comments