module Souls module Gcloud module Compute class << self def setup_vpc_nat(app_name: "", region: "asia-northeast1", range: "10.124.0.0/28") create_network(app_name: app_name) create_firewall_tcp(app_name: app_name, range: range) create_firewall_ssh(app_name: app_name, range: range) create_subnet(app_name: app_name, region: region, range: range) create_connector(app_name: app_name, region: region) create_external_ip(app_name: app_name, region: region) create_nat(app_name: app_name, region: region) end def create_network(app_name: "") app_name = Souls.configuration.app if app_name.blank? system("gcloud compute networks create #{app_name}") end def create_firewall_tcp(app_name: "", range: "10.124.0.0/28") app_name = Souls.configuration.app if app_name.blank? system( "gcloud compute firewall-rules create #{app_name} \ --network #{app_name} --allow tcp,udp,icmp --source-ranges #{range}" ) end def create_firewall_ssh(app_name: "") app_name = Souls.configuration.app if app_name.blank? system( "gcloud compute firewall-rules create #{app_name}-ssh --network #{app_name} \ --allow tcp:22,tcp:3389,icmp" ) end def create_subnet(app_name: "", region: "asia-northeast1", range: "10.124.0.0/28") app_name = Souls.configuration.app if app_name.blank? system( "gcloud compute networks subnets create #{app_name}-subnet \ --range=#{range} --network=#{app_name} --region=#{region}" ) end def create_connector(app_name: "", region: "asia-northeast1") app_name = Souls.configuration.app if app_name.blank? project_id = Souls.configuration.app if project_id.blank? system( "gcloud compute networks vpc-access connectors create #{app_name}-connector \ --region=#{region} \ --subnet-project=#{project_id} \ --subnet=#{app_name}-subnet" ) end def create_external_ip(app_name: "", region: "asia-northeast1") app_name = Souls.configuration.app if app_name.blank? system("gcloud compute addresses create #{app_name}-worker-ip --region=#{region}") end def create_nat(app_name: "", region: "asia-northeast1") app_name = Souls.configuration.app if app_name.blank? system( "gcloud compute routers nats create #{app_name}-worker-nat \ --router=#{app_name}-router \ --region=#{region} \ --nat-custom-subnet-ip-ranges=#{app_name}-subnet \ --nat-external-ip-pool=#{app_name}-worker-ip" ) end def network_list system("gcloud compute network list") end end end end end