module Backends::Ec2::Helpers::NetworkDeleteHelper

Public Instance Methods

network_delete_acls(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 40
def network_delete_acls(vpc)
  filters = []
  filters << { name: 'vpc-id', values: [vpc[:vpc_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    network_acls = @ec2_client.describe_network_acls(filters: filters).network_acls
    network_acls.each do |network_acl|
      next if network_acl[:is_default]
      @ec2_client.delete_network_acl(network_acl_id: network_acl[:network_acl_id])
    end if network_acls
  end

  true
end
network_delete_dhcp_options(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 6
def network_delete_dhcp_options(vpc)
  return false if vpc[:dhcp_options_id].blank?

  filters = []
  filters << { name: 'dhcp-options-id', values: [vpc[:dhcp_options_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    vpcs = @ec2_client.describe_vpcs(filters: filters).vpcs
    @ec2_client.delete_dhcp_options(dhcp_options_id: vpc[:dhcp_options_id]) if vpcs.blank?
  end

  true
end
network_delete_internet_gateways(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 70
def network_delete_internet_gateways(vpc)
  filters = []
  filters << { name: 'attachment.vpc-id', values: [vpc[:vpc_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    internet_gateways = @ec2_client.describe_internet_gateways(filters: filters).internet_gateways
    internet_gateways.each do |internet_gateway|
      @ec2_client.detach_internet_gateway(internet_gateway_id: internet_gateway[:internet_gateway_id], vpc_id: vpc[:vpc_id])
      @ec2_client.delete_internet_gateway(internet_gateway_id: internet_gateway[:internet_gateway_id]) if internet_gateway[:attachments].length == 1
    end if internet_gateways
  end

  true
end
network_delete_route_tables(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 20
def network_delete_route_tables(vpc)
  filters = []
  filters << { name: 'vpc-id', values: [vpc[:vpc_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    route_tables = @ec2_client.describe_route_tables(filters: filters).route_tables
    route_tables.each do |route_table|
      is_main = false
      route_table[:associations].each do |assoc|
        next if assoc[:main] && (is_main = true)
        @ec2_client.disassociate_route_table(association_id: assoc[:route_table_association_id])
      end

      @ec2_client.delete_route_table(route_table_id: route_table[:route_table_id]) unless is_main
    end if route_tables
  end

  true
end
network_delete_security_groups(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 55
def network_delete_security_groups(vpc)
  filters = []
  filters << { name: 'vpc-id', values: [vpc[:vpc_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    security_groups = @ec2_client.describe_security_groups(filters: filters).security_groups
    security_groups.each do |security_group|
      next if security_group[:group_name] == 'default'
      @ec2_client.delete_security_group(group_id: security_group[:group_id])
    end if security_groups
  end

  true
end
network_delete_subnets(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 106
def network_delete_subnets(vpc)
  filters = []
  filters << { name: 'vpc-id', values: [vpc[:vpc_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    subnets = @ec2_client.describe_subnets(filters: filters).subnets
    subnets.each { |subnet| @ec2_client.delete_subnet(subnet_id: subnet[:subnet_id]) } if subnets
  end

  true
end
network_delete_vpn_connections(vpn_gateway) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 118
def network_delete_vpn_connections(vpn_gateway)
  filters = []
  filters << { name: 'vpn-gateway-id', values: [vpn_gateway[:vpn_gateway_id]] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    vpn_connections = @ec2_client.describe_vpn_connections(filters: filters).vpn_connections
    vpn_connections.each { |vpn_connection| @ec2_client.delete_vpn_connection(vpn_connection_id: vpn_connection[:vpn_connection_id]) } if vpn_connections
  end

  network_delete_vpn_connections_wait4detach(vpn_gateway)

  true
end
network_delete_vpn_connections_wait4detach(vpn_gateway) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 153
def network_delete_vpn_connections_wait4detach(vpn_gateway)
  return false unless vpn_gateway

  # TODO: use @ec2_client.wait_until if a waiter becomes available
  filters = []
  filters << { name: 'vpn-gateway-id', values: [vpn_gateway[:vpn_gateway_id]] }
  filters << { name: 'state', values: ['pending', 'deleting'] }

  vpn_connection = 'dummy'
  until vpn_connection.blank?
    sleep 5.0

    Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
      vpn_connections = @ec2_client.describe_vpn_connections(filters: filters).vpn_connections
      vpn_connection = vpn_connections ? vpn_connections.first : nil
    end
  end

  true
end
network_delete_vpn_gateways(vpc) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 85
def network_delete_vpn_gateways(vpc)
  filters = []
  filters << { name: 'attachment.vpc-id', values: [vpc[:vpc_id]] }
  filters << { name: 'attachment.state', values: ['attached'] }

  Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
    vpn_gateways = @ec2_client.describe_vpn_gateways(filters: filters).vpn_gateways
    vpn_gateways.each do |vpn_gateway|
      @ec2_client.detach_vpn_gateway(vpn_gateway_id: vpn_gateway[:vpn_gateway_id], vpc_id: vpc[:vpc_id])
      network_delete_vpn_gateways_wait4detach(vpn_gateway, vpc[:vpc_id])

      if @options.network_destroy_vpn_gws
        network_delete_vpn_connections(vpn_gateway)
        @ec2_client.delete_vpn_gateway(vpn_gateway_id: vpn_gateway[:vpn_gateway_id]) if vpn_gateway[:vpc_attachments].length == 1
      end
    end if vpn_gateways
  end

  true
end
network_delete_vpn_gateways_wait4detach(vpn_gateway, vpc_id) click to toggle source
# File lib/backends/ec2/helpers/network_delete_helper.rb, line 132
def network_delete_vpn_gateways_wait4detach(vpn_gateway, vpc_id)
  return false unless vpn_gateway && vpc_id

  # TODO: use @ec2_client.wait_until if a waiter becomes available
  filters = []
  filters << { name: 'vpn-gateway-id', values: [vpn_gateway[:vpn_gateway_id]] }
  filters << { name: 'attachment.vpc-id', values: [vpc_id] }
  filters << { name: 'attachment.state', values: ['attaching', 'attached', 'detaching'] }

  until vpn_gateway.blank?
    sleep 5.0

    Backends::Ec2::Helpers::AwsConnectHelper.rescue_aws_service(@logger) do
      vpn_gateways = @ec2_client.describe_vpn_gateways(filters: filters).vpn_gateways
      vpn_gateway = vpn_gateways ? vpn_gateways.first : nil
    end
  end

  true
end