Skip to content

Commit 5eb6db0

Browse files
authored
Merge pull request #455 from autonomys/v2
V2
2 parents 45db0d0 + 515194a commit 5eb6db0

File tree

89 files changed

+9377
-5314
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+9377
-5314
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ resources/taurus/*_node_keys.txt
1616
resources/taurus/keystore/*
1717
resources/mainnet/*_node_keys.txt
1818
resources/mainnet/keystore/*
19+
/.idea
20+
/modules/node-utils/target
21+
/modules/node-utils/data
22+
/resources/terraform/devnet/config.toml
23+
/resources/terraform/mainnet-domains/config.toml
24+
/resources/terraform/dns/proxied.json
25+
/resources/terraform/chronos/config.toml
File renamed without changes.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
resource "null_resource" "setup_bare_domain_operator_nodes" {
2+
count = length(var.bare-domain-operator-node-config.operator-nodes)
3+
4+
connection {
5+
host = var.bare-domain-operator-node-config.operator-nodes[count.index].ipv4
6+
user = var.ssh_user
7+
type = "ssh"
8+
agent = true
9+
agent_identity = var.ssh_agent_identity
10+
timeout = "300s"
11+
}
12+
13+
# create subspace dir
14+
provisioner "remote-exec" {
15+
inline = [
16+
<<-EOT
17+
sudo apt update -y
18+
sudo mkdir -p /home/${var.ssh_user}/subspace/
19+
sudo chown -R ${var.ssh_user}:${var.ssh_user} /home/${var.ssh_user}/subspace/ && sudo chmod -R 750 /home/${var.ssh_user}/subspace/
20+
EOT
21+
]
22+
}
23+
24+
# copy install file
25+
provisioner "file" {
26+
source = "${var.path_to_scripts}/installer.sh"
27+
destination = "/home/${var.ssh_user}/subspace/installer.sh"
28+
}
29+
30+
# install docker and docker compose and LE script
31+
provisioner "remote-exec" {
32+
inline = [
33+
"sudo bash /home/${var.ssh_user}/subspace/installer.sh",
34+
]
35+
}
36+
37+
}
38+
39+
resource "null_resource" "start_bare_domain_operator_nodes" {
40+
count = length(var.bare-domain-operator-node-config.operator-nodes)
41+
depends_on = [null_resource.setup_bare_domain_operator_nodes]
42+
43+
# trigger node deployment on node object change
44+
triggers = var.bare-domain-operator-node-config.operator-nodes[count.index]
45+
46+
connection {
47+
host = var.bare-domain-operator-node-config.operator-nodes[count.index].ipv4
48+
user = var.ssh_user
49+
type = "ssh"
50+
agent = true
51+
agent_identity = var.ssh_agent_identity
52+
timeout = "300s"
53+
}
54+
55+
# copy config file
56+
provisioner "file" {
57+
source = "./config.toml"
58+
destination = "/home/${var.ssh_user}/subspace/config.toml"
59+
}
60+
61+
# start docker containers
62+
# TODO: use autonomys ghcr
63+
provisioner "remote-exec" {
64+
inline = [
65+
<<-EOT
66+
# stop any running service
67+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml down
68+
69+
# set hostname
70+
sudo hostnamectl set-hostname ${var.network_name}-domain-${var.bare-domain-operator-node-config.operator-nodes[count.index].domain-id}-operator-node-${var.bare-domain-operator-node-config.operator-nodes[count.index].index}
71+
72+
# create docker compose
73+
sudo docker run --rm --pull always -v /home/${var.ssh_user}/subspace:/data vedhavyas/node-utils:latest domain-operator \
74+
--node-id ${var.bare-domain-operator-node-config.operator-nodes[count.index].index} \
75+
--docker-tag ${var.bare-domain-operator-node-config.operator-nodes[count.index].docker-tag} \
76+
--external-ip-v4 ${var.bare-domain-operator-node-config.operator-nodes[count.index].ipv4} \
77+
--node-prefix ${var.bare-domain-operator-node-config.operator-nodes[count.index].domain-name} \
78+
--domain-id ${var.bare-domain-operator-node-config.operator-nodes[count.index].domain-id} \
79+
--operator-id ${var.bare-domain-operator-node-config.operator-nodes[count.index].operator-id} \
80+
--sync-mode ${var.bare-domain-operator-node-config.operator-nodes[count.index].sync-mode} \
81+
--is-reserved ${var.bare-domain-operator-node-config.operator-nodes[count.index].reserved-only}
82+
83+
# start subspace node
84+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml up -d
85+
86+
# wait until container is created
87+
sudo sh -c 'until docker ps -f "name=node" --format "{{.ID}}" | grep -q .; do sleep 1; done'
88+
89+
# insert domain operator key
90+
sudo docker exec node /subspace-node domain key insert --base-path=/var/subspace --domain-id ${var.bare-domain-operator-node-config.operator-nodes[count.index].domain-id} --keystore-suri "$(cat /home/${var.ssh_user}/subspace/node.key)"
91+
EOT
92+
]
93+
}
94+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
resource "null_resource" "setup-domain-bootstrap-nodes" {
2+
count = length(aws_instance.domain_bootstrap_nodes)
3+
depends_on = [aws_instance.domain_bootstrap_nodes]
4+
5+
connection {
6+
host = aws_instance.domain_bootstrap_nodes[count.index].public_ip
7+
user = var.ssh_user
8+
type = "ssh"
9+
agent = true
10+
agent_identity = var.ssh_agent_identity
11+
timeout = "300s"
12+
}
13+
14+
# create subspace dir
15+
provisioner "remote-exec" {
16+
inline = [
17+
<<-EOT
18+
cloud-init status --wait
19+
sudo apt update -y
20+
sudo mkdir -p /home/${var.ssh_user}/subspace/
21+
sudo chown -R ${var.ssh_user}:${var.ssh_user} /home/${var.ssh_user}/subspace/ && sudo chmod -R 750 /home/${var.ssh_user}/subspace/
22+
EOT
23+
]
24+
}
25+
26+
# copy install file
27+
provisioner "file" {
28+
source = "${var.path_to_scripts}/installer.sh"
29+
destination = "/home/${var.ssh_user}/subspace/installer.sh"
30+
}
31+
32+
# install docker and docker compose
33+
provisioner "remote-exec" {
34+
inline = [
35+
<<-EOT
36+
sudo bash /home/${var.ssh_user}/subspace/installer.sh
37+
EOT
38+
]
39+
}
40+
41+
}
42+
43+
resource "null_resource" "start-domain-bootstrap-nodes" {
44+
count = length(aws_instance.domain_bootstrap_nodes)
45+
depends_on = [null_resource.setup-domain-bootstrap-nodes]
46+
47+
# trigger node deployment of the node object changes
48+
triggers = var.domain-bootstrap-node-config.bootstrap-nodes[count.index]
49+
50+
connection {
51+
host = aws_instance.domain_bootstrap_nodes[count.index].public_ip
52+
user = var.ssh_user
53+
type = "ssh"
54+
agent = true
55+
agent_identity = var.ssh_agent_identity
56+
timeout = "300s"
57+
}
58+
59+
# copy config file
60+
provisioner "file" {
61+
source = "./config.toml"
62+
destination = "/home/${var.ssh_user}/subspace/config.toml"
63+
}
64+
65+
# start docker containers
66+
# TODO: use autonomys ghcr
67+
provisioner "remote-exec" {
68+
inline = [
69+
<<-EOT
70+
# stop any running service
71+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml down
72+
73+
# set hostname
74+
sudo hostnamectl set-hostname ${var.network_name}-domain-${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].domain-id}-bootstrap-node-${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].index}
75+
76+
# create docker compose
77+
sudo docker run --rm --pull always -v /home/${var.ssh_user}/subspace:/data vedhavyas/node-utils:latest domain-bootstrap \
78+
--node-id ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].index} \
79+
--docker-tag ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].docker-tag} \
80+
--external-ip-v4 ${aws_instance.domain_bootstrap_nodes[count.index].public_ip} \
81+
--external-ip-v6 ${aws_instance.domain_bootstrap_nodes[count.index].ipv6_addresses[0]} \
82+
--node-prefix ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].domain-name} \
83+
--domain-id ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].domain-id} \
84+
--sync-mode ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].sync-mode} \
85+
--is-reserved ${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].reserved-only}
86+
87+
# start subspace node
88+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml up -d
89+
EOT
90+
]
91+
}
92+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
resource "null_resource" "setup-consensus-bootstrap-nodes" {
2+
count = length(aws_instance.consensus_bootstrap_nodes)
3+
depends_on = [aws_instance.consensus_bootstrap_nodes]
4+
5+
connection {
6+
host = aws_instance.consensus_bootstrap_nodes[count.index].public_ip
7+
user = var.ssh_user
8+
type = "ssh"
9+
agent = true
10+
agent_identity = var.ssh_agent_identity
11+
timeout = "300s"
12+
}
13+
14+
# init node
15+
provisioner "remote-exec" {
16+
inline = [
17+
<<-EOT
18+
cloud-init status --wait
19+
sudo apt update -y
20+
sudo mkdir -p /home/${var.ssh_user}/subspace/
21+
sudo chown -R ${var.ssh_user}:${var.ssh_user} /home/${var.ssh_user}/subspace/ && sudo chmod -R 750 /home/${var.ssh_user}/subspace/
22+
EOT
23+
]
24+
}
25+
26+
# copy install file
27+
provisioner "file" {
28+
source = "${var.path_to_scripts}/installer.sh"
29+
destination = "/home/${var.ssh_user}/subspace/installer.sh"
30+
}
31+
32+
# install docker and docker compose
33+
provisioner "remote-exec" {
34+
inline = [
35+
<<-EOT
36+
sudo bash /home/${var.ssh_user}/subspace/installer.sh
37+
EOT
38+
]
39+
}
40+
41+
}
42+
43+
resource "null_resource" "start-consensus-boostrap-nodes" {
44+
count = length(aws_instance.consensus_bootstrap_nodes)
45+
depends_on = [null_resource.setup-consensus-bootstrap-nodes]
46+
47+
# trigger node re-deployment if anything changes in the node config
48+
triggers = var.consensus-bootstrap-node-config.bootstrap-nodes[count.index]
49+
50+
connection {
51+
host = aws_instance.consensus_bootstrap_nodes[count.index].public_ip
52+
user = var.ssh_user
53+
type = "ssh"
54+
agent = true
55+
agent_identity = var.ssh_agent_identity
56+
timeout = "300s"
57+
}
58+
59+
# copy config file
60+
provisioner "file" {
61+
source = "./config.toml"
62+
destination = "/home/${var.ssh_user}/subspace/config.toml"
63+
}
64+
65+
# start docker containers
66+
# TODO: use autonomys ghcr
67+
provisioner "remote-exec" {
68+
inline = [
69+
<<-EOT
70+
# stop any running service
71+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml down
72+
73+
# set hostname
74+
sudo hostnamectl set-hostname ${var.network_name}-bootstrap-node-${var.consensus-bootstrap-node-config.bootstrap-nodes[count.index].index}
75+
76+
# create docker compose
77+
sudo docker run --rm --pull always -v /home/${var.ssh_user}/subspace:/data vedhavyas/node-utils:latest bootstrap \
78+
--node-id ${var.consensus-bootstrap-node-config.bootstrap-nodes[count.index].index} \
79+
--docker-tag ${var.consensus-bootstrap-node-config.bootstrap-nodes[count.index].docker-tag} \
80+
--external-ip-v4 ${aws_instance.consensus_bootstrap_nodes[count.index].public_ip} \
81+
--external-ip-v6 ${aws_instance.consensus_bootstrap_nodes[count.index].ipv6_addresses[0]} \
82+
--sync-mode ${var.consensus-bootstrap-node-config.bootstrap-nodes[count.index].sync-mode} \
83+
--is-reserved ${var.consensus-bootstrap-node-config.bootstrap-nodes[count.index].reserved-only}
84+
85+
# start subspace node
86+
sudo docker compose -f /home/${var.ssh_user}/subspace/docker-compose.yml up -d
87+
EOT
88+
]
89+
}
90+
}

modules/network-primitives/dns.tf

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
data "cloudflare_zone" "cloudflare_zone" {
2+
filter = {
3+
name = var.cloudflare_domain_fqdn
4+
}
5+
}
6+
7+
resource "cloudflare_dns_record" "consensus_bootstrap_ipv4" {
8+
lifecycle {
9+
ignore_changes = [name]
10+
}
11+
depends_on = [aws_instance.consensus_bootstrap_nodes]
12+
count = length(aws_instance.consensus_bootstrap_nodes)
13+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
14+
name = "bootstrap-${count.index}.${var.network_name}"
15+
content = aws_instance.consensus_bootstrap_nodes[count.index].public_ip
16+
type = "A"
17+
ttl = 3600
18+
proxied = false
19+
}
20+
21+
resource "cloudflare_dns_record" "consensus_bootstrap_ipv6" {
22+
lifecycle {
23+
ignore_changes = [name]
24+
}
25+
depends_on = [aws_instance.consensus_bootstrap_nodes]
26+
count = length(aws_instance.consensus_bootstrap_nodes)
27+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
28+
name = "bootstrap-${count.index}.${var.network_name}"
29+
content = aws_instance.consensus_bootstrap_nodes[count.index].ipv6_addresses[0]
30+
type = "AAAA"
31+
ttl = 3600
32+
proxied = false
33+
}
34+
35+
resource "cloudflare_dns_record" "consensus_rpc" {
36+
lifecycle {
37+
ignore_changes = [name]
38+
}
39+
depends_on = [aws_instance.consensus_rpc_nodes]
40+
count = var.consensus-rpc-node-config == null ? 0 : var.consensus-rpc-node-config.enable-reverse-proxy ? length(aws_instance.consensus_rpc_nodes) : 0
41+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
42+
name = "${var.consensus-rpc-node-config.dns-prefix}-${count.index}.${var.network_name}"
43+
content = aws_instance.consensus_rpc_nodes[count.index].public_ip
44+
type = "A"
45+
ttl = 1
46+
proxied = true
47+
}
48+
49+
resource "cloudflare_dns_record" "domain_bootstrap_ipv4" {
50+
lifecycle {
51+
ignore_changes = [name]
52+
}
53+
depends_on = [aws_instance.domain_bootstrap_nodes]
54+
count = length(aws_instance.domain_bootstrap_nodes)
55+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
56+
name = "bootstrap-${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].index}.${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].domain-name}.${var.network_name}"
57+
content = aws_instance.domain_bootstrap_nodes[count.index].public_ip
58+
type = "A"
59+
ttl = 3600
60+
proxied = false
61+
}
62+
63+
resource "cloudflare_dns_record" "domain_bootstrap_ipv6" {
64+
lifecycle {
65+
ignore_changes = [name]
66+
}
67+
depends_on = [aws_instance.domain_bootstrap_nodes]
68+
count = length(aws_instance.domain_bootstrap_nodes)
69+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
70+
name = "bootstrap-${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].index}.${var.domain-bootstrap-node-config.bootstrap-nodes[count.index].domain-name}.${var.network_name}"
71+
content = aws_instance.domain_bootstrap_nodes[count.index].ipv6_addresses[0]
72+
type = "AAAA"
73+
ttl = 3600
74+
proxied = false
75+
}
76+
77+
resource "cloudflare_dns_record" "domain_rpc" {
78+
lifecycle {
79+
ignore_changes = [name]
80+
}
81+
depends_on = [aws_instance.domain_rpc_nodes]
82+
count = var.domain-rpc-node-config == null ? 0 : var.domain-rpc-node-config.enable-reverse-proxy ? length(aws_instance.domain_rpc_nodes) : 0
83+
zone_id = data.cloudflare_zone.cloudflare_zone.zone_id
84+
name = "${var.domain-rpc-node-config.rpc-nodes[count.index].domain-name}-${var.domain-rpc-node-config.rpc-nodes[count.index].index}.${var.network_name}"
85+
content = aws_instance.domain_rpc_nodes[count.index].public_ip
86+
type = "A"
87+
ttl = 1
88+
proxied = true
89+
}

0 commit comments

Comments
 (0)