class EksCli::VPC::Client

Public Class Methods

new(cluster_name) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 8
def initialize(cluster_name)
  @cluster_name = cluster_name
end

Public Instance Methods

allow_networking(old_vpc_sg_id, peering_connection_id) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 55
def allow_networking(old_vpc_sg_id, peering_connection_id)
  Log.info "allowing incoming traffic to sg #{old_vpc_sg_id} from #{config["nodes_sg_id"]} on vpc #{new_vpc.id}"
  old_sg  = Aws::EC2::SecurityGroup.new(old_vpc_sg_id, client: client)
  res = old_sg.authorize_ingress(
    ip_permissions: [
      {
        from_port: "-1",
        ip_protocol: "-1",
        to_port: "-1",
        user_id_group_pairs: [
          {
            description: "Accept all traffic from nodes on EKS cluster #{@cluster_name}",
            group_id: config["nodes_sg_id"],
            vpc_id: new_vpc.id,
            vpc_peering_connection_id: peering_connection_id,
          },
        ],
      },
    ]
  )
  Log.info "done setting networking (#{res})"
end
client() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 107
def client
  @client ||= Aws::EC2::Client.new(region: config["region"])
end
config() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 103
def config
  @config ||= Config[@cluster_name]
end
create_vpc_peering_connection() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 21
def create_vpc_peering_connection
  Log.info "creating VPC peering request between #{new_vpc.id} and #{old_vpc.id}"
  pcr = client.create_vpc_peering_connection({
    dry_run: false,
    peer_vpc_id: old_vpc.id,
    vpc_id: new_vpc.id,
  })
  Log.info "created peering request #{pcr}"
  peering_connection_id = pcr.vpc_peering_connection.vpc_peering_connection_id
  Log.info "accepting peering request"
  res = client.accept_vpc_peering_connection({
    dry_run: false,
    vpc_peering_connection_id: peering_connection_id,
  })
  Log.info "request accepted: #{res}"
  return peering_connection_id
end
delete_vpc_peering_connection() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 39
def delete_vpc_peering_connection
  if id = config["vpc_peering_connection_id"]
    Log.info "deleting vpc peering connection #{id}"
    Log.info client.delete_vpc_peering_connection(vpc_peering_connection_id: id)
  else
    Log.info "no vpc peering connection found"
  end
end
new_vpc() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 91
def new_vpc
  @new_vpc ||= vpc_by_id(new_vpc_id)
end
new_vpc_id() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 111
def new_vpc_id
  @new_vpc_id ||= config["vpc_id"]
end
old_vpc() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 95
def old_vpc
  @old_vpc
end
old_vpc_id() click to toggle source
# File lib/eks_cli/vpc/client.rb, line 115
def old_vpc_id
  @old_vpc_id
end
point_from(from_vpc, to_vpc, peering_connection_id) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 78
def point_from(from_vpc, to_vpc, peering_connection_id)
  Log.info "pointing from #{from_vpc.id} to #{to_vpc.id} via #{peering_connection_id}"
  from_vpc.route_tables.each do |rt|
    res = client.create_route({
      destination_cidr_block: to_vpc.cidr_block, 
      gateway_id: peering_connection_id, 
      route_table_id: rt.id, 
    })
    Log.info "set route #{res}"
  end

end
set_inter_vpc_networking(old_vpc_id, old_vpc_sg_id) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 12
def set_inter_vpc_networking(old_vpc_id, old_vpc_sg_id)
  @old_vpc = vpc_by_id(old_vpc_id)
  Log.info "setting vpc networking between #{new_vpc.id} and #{old_vpc.id}"
  peering_connection_id = create_vpc_peering_connection
  config.write(vpc_peering_connection_id: peering_connection_id)
  update_route_tables(peering_connection_id)
  allow_networking(old_vpc_sg_id, peering_connection_id)
end
update_route_tables(peering_connection_id) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 48
def update_route_tables(peering_connection_id)
  Log.info "updating route tables"
  point_from(old_vpc, new_vpc, peering_connection_id)
  point_from(new_vpc, old_vpc, peering_connection_id)
  Log.info "done updating route tables"
end
vpc_by_id(id) click to toggle source
# File lib/eks_cli/vpc/client.rb, line 99
def vpc_by_id(id)
  Aws::EC2::Vpc.new(id, client: client)
end