diff --git a/src/bitte/cli/rebuild.cr b/src/bitte/cli/rebuild.cr index 9efc117..61f062b 100644 --- a/src/bitte/cli/rebuild.cr +++ b/src/bitte/cli/rebuild.cr @@ -40,17 +40,19 @@ module Bitte sleep(ch_count * 2) # this works around https://github.com/NixOS/nix/issues/3794 end - cluster.asgs.each do |name, asg| - asg.instances.each do |instance| - next if skip?(name) - ch_count += 1 - parallel_copy channel: ch, - name: instance.name, - ip: instance.public_ip.not_nil!, - flake: flake, - flake_attr: asg.flake_attr, - uid: asg.uid - sleep(ch_count * 2) # this works around https://github.com/NixOS/nix/issues/3794 + if asgs = cluster.asgs + asgs.each do |name, asg| + asg.instances.each do |instance| + next if skip?(name) + ch_count += 1 + parallel_copy channel: ch, + name: instance.name, + ip: instance.public_ip.not_nil!, + flake: flake, + flake_attr: asg.flake_attr, + uid: asg.uid + sleep(ch_count * 2) # this works around https://github.com/NixOS/nix/issues/3794 + end end end diff --git a/src/bitte/cli/ssh-for-each.cr b/src/bitte/cli/ssh-for-each.cr index 3feaadb..5189d93 100644 --- a/src/bitte/cli/ssh-for-each.cr +++ b/src/bitte/cli/ssh-for-each.cr @@ -21,7 +21,9 @@ module Bitte parallel_ssh ch, name, instance.public_ip, @argv.map(&.to_s) end - cluster.asgs.each do |name, asg| + return unless asgs = cluster.asgs + + asgs.each do |name, asg| asg.instances.each do |instance| next unless ip = instance.public_ip ch_count += 1 diff --git a/src/bitte/cluster.cr b/src/bitte/cluster.cr index a87dbf6..3509061 100644 --- a/src/bitte/cluster.cr +++ b/src/bitte/cluster.cr @@ -8,14 +8,15 @@ module Bitte mem = IO::Memory.new sh!("terraform", args: ["output", "-json", "cluster"], output: mem) from_json(mem.to_s).tap do |cluster| - cluster.asgs.each do |name, asg| + next unless asgs = cluster.asgs + asgs.each do |name, asg| asg.cluster = cluster asg.name = name end end end - property asgs : Hash(String, ASG) + property asgs : Hash(String, ASG)? property flake : String property instances : Hash(String, Instance) property kms : String