Sha256: 14046288310078b4d301e17870c6af059f784611b48ee2dfc2710b02344488af

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require 'piculet'
require 'tempfile'
require 'json'
require 'aws-sdk-v1'

module Sgupdater
  class Updater
    def initialize(options = {})
      @options = options.dup
      @options[:without_convert] = true
      @options[:format] = :json
      AWS.config(@options)
      @client = Piculet::Client.new(@options)
      @exported = @client.export(without_convert: true)
    end

    def replace(from, to)
      @exported.each do |vpc, sgs|
        sgs.each do |sg, props|
          props[:ingress].each do |ing|
            ing[:ip_ranges].each_with_index do |cidr, i|
              if cidr == from
                ing[:ip_ranges][i] = to
                puts [vpc ? vpc : 'classic', sg, props[:name], ing[:protocol], ing[:port_range], ing[:ip_rages], ing[:groups], cidr].join("\t")
              end
            end
          end
        end
      end
    end

    def add(from, to)
      @exported.each do |vpc, sgs|
        sgs.each do |sg, props|
          props[:ingress].each do |ing|
            ing[:ip_ranges].each do |cidr|
              if cidr == from
                ing[:ip_ranges] << to
                puts [vpc ? vpc : '(classic)', sg, props[:name], ing[:protocol], ing[:port_range], ing[:ip_ranges], ing[:groups]].join("\t")
              end
            end
          end
        end
      end
    end

    def update
      exported = JSON.pretty_generate(@exported)
      file = Tempfile.new('exported')
      begin
        file.puts exported
        file.rewind
        file.rewind
        updated = @client.apply(file)
      ensure
        file.close
        file.unlink
      end
      updated
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sgupdater-0.2.0 lib/sgupdater/updater.rb