gcloud-utils 0.3.1

Google Cloud Utilities.
Documentation
use tokio::process::Command;

pub async fn process_create_network(project_id: &str, service_name: &str) {
  let output = Command::new("gcloud")
    .args(
      &[
        "compute",
        "networks",
        "create",
        service_name,
        "--project",
        project_id
        ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_firewall_tcp(project_id: &str, service_name: &str) {
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "firewall-rules",
      "create",
      "--network",
      service_name,
      "--allow",
      "tcp,udp,icmp",
      "--source-ranges",
      "10.124.0.0/28",
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_firewall_ssh(project_id: &str, service_name: &str) {
  let firewall = String::from(service_name) + "-ssh";
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "firewall-rules",
      "create",
      &firewall,
      "--network",
      service_name,
      "--allow",
      "tcp:22,tcp:3389,icmp",
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_subnet(project_id: &str, service_name: &str, region: &str) {
  let subnet = String::from(service_name) + "-subnet";
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "networks",
      "subnets",
      "create",
      &subnet,
      "--range",
      "10.124.0.0/28",
      "--network",
      service_name,
      "--region",
      region,
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_connector(project_id: &str, service_name: &str, region: &str) {
  let subnet = String::from(service_name) + "-subnet";
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "networks",
      "vpc-access",
      "connectors",
      "create",
      service_name,
      "--subnet",
      &subnet,
      "--subnet-project",
      project_id,
      "--region",
      region,
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_router(project_id: &str, service_name: &str, region: &str) {
  let router = String::from(service_name) + "-router";
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "routers",
      "create",
      &router,
      "--network",
      service_name,
      "--region",
      region,
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_external_ip(project_id: &str, service_name: &str, region: &str) {
  let external_ip = String::from(service_name) + "-ip";
  let output = Command::new("gcloud")
    .args(
      &[
        "compute",
        "addresses",
        "create",
        &external_ip,
        "--region",
        region,
        "--project",
        project_id
        ])
    .output()
    .await;
  println!("output = {:?}", output);
}

pub async fn process_create_nat(project_id: &str, service_name: &str, region: &str) {
  let nat = String::from(service_name) + "-nat";
  let router = String::from(service_name) + "-router";
  let nat_custom_subnet_ip_ranges = String::from(service_name) + "-subnet";
  let nat_external_ip_pool = String::from(service_name) + "-ip";
  let output = Command::new("gcloud")
    .args(&[
      "compute",
      "routers",
      "nats",
      "create",
      &nat,
      "--router",
      &router,
      "--region",
      region,
      "--nat-custom-subnet-ip-ranges",
      &nat_custom_subnet_ip_ranges,
      "--nat-external-ip-pool",
      &nat_external_ip_pool,
      "--project",
      project_id
    ])
    .output()
    .await;
  println!("output = {:?}", output);
}