Sha256: 9aec8df3f7f9fe555b0815976d577f818c5081b3966858132ca9ad76f95676a2

Contents?: true

Size: 1.83 KB

Versions: 8

Compression:

Stored size: 1.83 KB

Contents

module Fog
  module Bouncer
    class GroupManager
      def self.log(data, &block)
        Fog::Bouncer.log({group_manager: true}.merge(data), &block)
      end

      def log(data, &block)
        self.class.log(data, &block)
      end

      def initialize(security)
        @security = security
      end

      def synchronize
        log(synchronize: true) do
          create_missing_remote_groups
          synchronize_rules
          remove_extra_remote_groups
        end
      end

      def clear
        @security.groups.each do |group|
          group.revoke
        end

        @security.groups.each do |group|
          begin
            group.destroy
          rescue Fog::Compute::AWS::Error => exception
            unless exception.message =~ /InvalidGroup.InUse/
              raise
            end
            log group_in_use: true, group_name: group.name
          end
        end
      end

      private

      def create_missing_remote_groups
        @security.missing_remote_groups.each do |group|
          log(create_missing_remote_group: true, group_name: group.name) do
            group.create_missing_remote
          end
        end
      end

      def remove_extra_remote_groups
        @security.extra_remote_groups.each do |group|
          log(remove_extra_remote_group: true, group_name: group.name) do
            begin
              group.destroy
            rescue Fog::Compute::AWS::Error => exception
              unless exception.message =~ /InvalidGroup.InUse/
                raise
              end
              log group_in_use: true, group_name: group.name
            end
          end
        end
      end

      def synchronize_rules
        @security.groups.each do |group|
          log(synchronize_rules: true, group_name: group.name) do
            group.sync
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
fog-bouncer-0.2.3 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.2.2 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.2.1 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.2.0 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.1.1 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.1.0 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.0.8 lib/fog/bouncer/group_manager.rb
fog-bouncer-0.0.6 lib/fog/bouncer/group_manager.rb