ava-labs/avalanche-ops

Support dev machine for each region

Closed this issue · 4 comments

gyuho commented

This is required for Hyper SDK dev net.

gyuho commented

For reference,


#[serde(default)]
pub create_dev_machine: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub dev_machine: Option<DevMachine>,

needs to be a map per region


let mut regional_resource = spec
.resource
.regional_resources
.get(&spec.resource.regions[0])
.unwrap()
.clone();
let stack_name = if let Some(v) = &regional_resource.cloudformation_asg_dev_machine {
v.clone()
} else {
let s = avalanche_ops::aws::spec::StackName::DevMachine(spec.id.clone()).encode();
regional_resource.cloudformation_asg_dev_machine = Some(s.clone());
s
};
spec.resource
.regional_resources
.insert(spec.resource.regions[0].clone(), regional_resource.clone());
spec.sync(spec_file_path)?;
default_s3_manager
.put_object(
spec_file_path,
&spec.resource.s3_bucket,
&avalanche_ops::aws::spec::StorageNamespace::ConfigFile(spec.id.clone()).encode(),
)
.await
.expect("failed put_object ConfigFile");
let mut regional_common_dev_machine_asg_params = region_to_common_dev_machine_asg_params
.get(&spec.resource.regions[0])
.unwrap()
.clone();
let dev_machine = spec.dev_machine.clone().unwrap();
regional_common_dev_machine_asg_params
.insert("IpMode".to_string(), dev_machine.ip_mode.clone());

needs to create resources in all regions (not just [0]).

gyuho commented

We also need to print out SSH commands for each region:

let mut ssh_commands = Vec::new();
for d in droplets {
// ssh -o "StrictHostKeyChecking no" -i [ec2_key_path] [user name]@[public IPv4/DNS name]
// aws ssm start-session --region [region] --target [instance ID]
// TODO: support other user name?
let public_ip = if let Some(public_ip) = instance_id_to_public_ip.get(&d.instance_id) {
public_ip.clone()
} else {
d.public_ipv4.clone()
};
let ssh_command = ec2::SshCommand {
ec2_key_path: regional_resource.ec2_key_path.clone(),
user_name: user_name.to_string(),
region: spec.resource.regions[0].clone(),
availability_zone: d.availability_zone,
instance_id: d.instance_id,
instance_state_name: d.instance_state_name,
ip_mode: spec.machine.ip_mode.clone(),
public_ip: public_ip,
};
println!("\n{}\n", ssh_command.to_string());
ssh_commands.push(ssh_command);
}
println!();

The file is crazy long now.... but cleanups can come later.

exdx commented
  • Automatically add dev machine to existing networking group

  • Each region should have it's own dev-box to issue transactions

  • Support running default scripts on dev-box startup

exdx commented

Completed by #375