class ZAWS::Services::EC2::Subnet

Public Class Methods

new(shellout, aws, undofile=nil) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 10
def initialize(shellout, aws, undofile=nil)
  @shellout=shellout
  @aws=aws
  @undofile=undofile
  @undofile ||= ZAWS::Helper::ZFile.new
end

Public Instance Methods

declare(region, vpcid, cidrblock, availabilityzone, statetimeout, textout=nil, verbose=nil, check=false, undo_file=nil) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 26
def declare(region, vpcid, cidrblock, availabilityzone, statetimeout, textout=nil, verbose=nil, check=false, undo_file=nil)
  subnet_exists=exists(region,verbose, vpcid, cidrblock)
  if undo_file
    @undofile.prepend("zaws subnet delete #{cidrblock} #{vpcid} --region #{region} $XTRA_OPTS", '#Delete subnet', undo_file)
  end
  if check
    if not subnet_exists
      ZAWS::Helper::Output.out_nagios_critical(textout, "CRITICAL: Subnet Does Not Exist.")
      return 2
    else
      ZAWS::Helper::Output.out_nagios_ok(textout, "OK: Subnet Exists.")
      return 0
    end
  end
  if subnet_exists
    ZAWS::Helper::Output.out_no_op(textout, "No action needed. Subnet exists already.")
    return 0
  end

  cs=@aws.awscli.command_ec2.createSubnet
  cs.clear_settings
  cs.vpc_id(vpcid).cidr(cidrblock).availability_zone(availabilityzone)
  cs.aws.output("json").region(region)
  cs.execute(verbose)

  begin
    Timeout.timeout(statetimeout) do
      until @aws.awscli.command_ec2.createSubnet.available or @aws.awscli.command_ec2.describeSubnets.available
        sleep(1)
        view(region, 'json', verbose, vpcid, cidrblock)
      end
    end
    ZAWS::Helper::Output.out_change(textout, "Subnet created.")
  rescue Timeout::Error
    throw 'Timeout before Subnet made available.'
  end
  return 0
end
delete(region, textout=nil, verbose=nil, vpcid, cidrblock) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 65
def delete(region, textout=nil, verbose=nil, vpcid, cidrblock)
  subnetid=id_by_cidrblock(region, verbose, vpcid, cidrblock)
  if not subnetid
    ZAWS::Helper::Output.out_no_op(textout, "Subnet does not exist. Skipping deletion.")
    return 0
  end

  cs=@aws.awscli.command_ec2.deleteSubnet
  cs.clear_settings
  cs.subnet_id(subnetid)
  cs.aws.region(region)
  val=JSON.parse(cs.execute(verbose))
  ZAWS::Helper::Output.out_change(textout, "Subnet deleted.") if val["return"] == "true"
end
exists(region, verbose=nil, vpcid, cidrblock) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 102
def exists(region, verbose=nil, vpcid, cidrblock)
  val = id_by_cidrblock(region, verbose, vpcid, cidrblock) ? true : false
  verbose.puts val.to_s if verbose
  return val
end
id_array_by_cidrblock_array(region, verbose=nil, vpcid, cidrblock_array) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 98
def id_array_by_cidrblock_array(region,  verbose=nil, vpcid, cidrblock_array)
  return cidrblock_array.map { |x| id_by_cidrblock(region, verbose, vpcid, x) }
end
id_by_cidrblock(region, verbose=nil, vpcid, cidrblock) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 93
def id_by_cidrblock(region, verbose=nil, vpcid, cidrblock)
  view(region, 'json', verbose, vpcid, cidrblock)
  return @aws.awscli.command_ec2.describeSubnets.id_by_cidrblock(verbose)
end
id_by_ip(region, verbose=nil, vpcid, ip) click to toggle source

def available(subnet, verbose)

#based on the structure of the return from create-subnet and describe-subnet determine if subnet is available
subnet_hash=JSON.parse(subnet)
return (subnet_hash["Subnet"]["State"] == "available") if subnet_hash["Subnet"]
return (subnet_hash["Subnets"][0]["State"] == "available") if subnet_hash["Subnets"] and subnet_hash["Subnets"].count == 1
return false

end

# File lib/zaws/services/ec2/subnet.rb, line 88
def id_by_ip(region,  verbose=nil, vpcid, ip)
  view(region, 'json', verbose, vpcid)
  return @aws.awscli.command_ec2.describeSubnets.id_by_ip(ip)
end
view(region, viewtype, verbose=nil, vpcid=nil, cidrblock=nil) click to toggle source
# File lib/zaws/services/ec2/subnet.rb, line 17
def view(region, viewtype,  verbose=nil, vpcid=nil, cidrblock=nil)
  ds=@aws.awscli.command_ec2.describeSubnets
  ds.clear_settings
  ds.filter.vpc_id(vpcid).cidr(cidrblock)
  ds.aws.output(viewtype).region(region)
  ds.execute(verbose)
  ds.view
end