awshark 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +3 -0
- data/lib/awshark/class_options.rb +26 -0
- data/lib/awshark/cli.rb +11 -12
- data/lib/awshark/{subcommands/cloud_formation.rb → cloud_formation/subcommand.rb} +3 -3
- data/lib/awshark/concerns/logging.rb +9 -0
- data/lib/awshark/ec2/configuration.rb +14 -0
- data/lib/awshark/ec2/instance.rb +1 -1
- data/lib/awshark/ec2/manager.rb +2 -6
- data/lib/awshark/ec2/security_group.rb +76 -0
- data/lib/awshark/ec2/security_rule.rb +42 -0
- data/lib/awshark/ec2/subcommand.rb +107 -0
- data/lib/awshark/{subcommands/ecs.rb → ecs/subcommand.rb} +3 -3
- data/lib/awshark/{subcommands/rds.rb → rds/subcommand.rb} +3 -3
- data/lib/awshark/{subcommands/s3.rb → s3/subcommand.rb} +3 -3
- data/lib/awshark/version.rb +1 -1
- data/lib/awshark.rb +4 -0
- metadata +12 -8
- data/lib/awshark/subcommands/class_options.rb +0 -28
- data/lib/awshark/subcommands/ec2.rb +0 -38
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8f014eaddd54562cad6064bc0b28a9fde800b7144f3be26e4af11f02a99d1f13
         | 
| 4 | 
            +
              data.tar.gz: 258b5c71b20180623ca66646d4081c38d8c14e590a1b2a2773193523423dc614
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 42970eec188f9fe6a4f561a2d42b01387b08c98f26ee93e0352d83f1fda165f119ae09909fbbb62c80e5380ca259a8d667bb46cf416e742db333051da4891204
         | 
| 7 | 
            +
              data.tar.gz: ecf2602e7bb5cf37ebd508d3bb95d44eff004214f38bb6fa19475ee38d6b094093c6572c17acb3d48ca59d6b018a39129019d450e80aa7a6db4d84d0cc4b7c17
         | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Awshark
         | 
| 4 | 
            +
              module ClassOptions
         | 
| 5 | 
            +
                def process_class_options
         | 
| 6 | 
            +
                  command = current_command_chain.last
         | 
| 7 | 
            +
                  cli_options = options.merge(parent_options || {}).symbolize_keys
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  if cli_options[:help]
         | 
| 10 | 
            +
                    respond_to?(command) ? help(command) : help
         | 
| 11 | 
            +
                    exit(0)
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  setup_aws_credentials(options)
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def setup_aws_credentials(options)
         | 
| 20 | 
            +
                  profile_resolver = ProfileResolver.new(options)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  ::Aws.config[:region] = profile_resolver.region
         | 
| 23 | 
            +
                  ::Aws.config[:credentials] = profile_resolver.credentials
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
    
        data/lib/awshark/cli.rb
    CHANGED
    
    | @@ -1,13 +1,12 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'awshark/profile_resolver'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            require 'awshark/ | 
| 6 | 
            -
            require 'awshark/ | 
| 7 | 
            -
            require 'awshark/ | 
| 8 | 
            -
            require 'awshark/ | 
| 9 | 
            -
            require 'awshark/ | 
| 10 | 
            -
            require 'awshark/subcommands/s3'
         | 
| 4 | 
            +
            require 'awshark/class_options'
         | 
| 5 | 
            +
            require 'awshark/cloud_formation/subcommand'
         | 
| 6 | 
            +
            require 'awshark/ec2/subcommand'
         | 
| 7 | 
            +
            require 'awshark/ecs/subcommand'
         | 
| 8 | 
            +
            require 'awshark/rds/subcommand'
         | 
| 9 | 
            +
            require 'awshark/s3/subcommand'
         | 
| 11 10 |  | 
| 12 11 | 
             
            module Awshark
         | 
| 13 12 | 
             
              class Cli < Thor
         | 
| @@ -18,19 +17,19 @@ module Awshark | |
| 18 17 | 
             
                class_option :help, type: :boolean, desc: 'Prints this help'
         | 
| 19 18 |  | 
| 20 19 | 
             
                desc 'cf COMMAND', 'Run CloudFormation command'
         | 
| 21 | 
            -
                subcommand 'cf', Awshark:: | 
| 20 | 
            +
                subcommand 'cf', Awshark::CloudFormation::Subcommand
         | 
| 22 21 |  | 
| 23 22 | 
             
                desc 'ec2 COMMAND', 'Run EC2 command'
         | 
| 24 | 
            -
                subcommand 'ec2', Awshark:: | 
| 23 | 
            +
                subcommand 'ec2', Awshark::Ec2::Subcommand
         | 
| 25 24 |  | 
| 26 25 | 
             
                desc 'ecs COMMAND', 'Run ECS command'
         | 
| 27 | 
            -
                subcommand 'ecs', Awshark:: | 
| 26 | 
            +
                subcommand 'ecs', Awshark::Ecs::Subcommand
         | 
| 28 27 |  | 
| 29 28 | 
             
                desc 'rds COMMAND', 'Run RDS command'
         | 
| 30 | 
            -
                subcommand 'rds', Awshark:: | 
| 29 | 
            +
                subcommand 'rds', Awshark::Rds::Subcommand
         | 
| 31 30 |  | 
| 32 31 | 
             
                desc 's3 COMMAND', 'Run CloudFormation command'
         | 
| 33 | 
            -
                subcommand 's3', Awshark:: | 
| 32 | 
            +
                subcommand 's3', Awshark::S3::Subcommand
         | 
| 34 33 |  | 
| 35 34 | 
             
                desc 'version', 'Displays current version of AwsShark'
         | 
| 36 35 | 
             
                long_desc <<-LONGDESC
         | 
| @@ -14,9 +14,9 @@ require 'awshark/cloud_formation/stack_events' | |
| 14 14 | 
             
            require 'awshark/cloud_formation/template'
         | 
| 15 15 |  | 
| 16 16 | 
             
            module Awshark
         | 
| 17 | 
            -
              module  | 
| 18 | 
            -
                class  | 
| 19 | 
            -
                  include Awshark:: | 
| 17 | 
            +
              module CloudFormation
         | 
| 18 | 
            +
                class Subcommand < Thor
         | 
| 19 | 
            +
                  include Awshark::ClassOptions
         | 
| 20 20 |  | 
| 21 21 | 
             
                  class_option :bucket, type: :string, desc: 'S3 bucket for template'
         | 
| 22 22 | 
             
                  class_option :iam, type: :boolean, desc: 'Needs IAM capabilities'
         | 
    
        data/lib/awshark/ec2/instance.rb
    CHANGED
    
    
    
        data/lib/awshark/ec2/manager.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Awshark
         | 
| 4 | 
            -
              module  | 
| 4 | 
            +
              module Ec2
         | 
| 5 5 | 
             
                class Manager
         | 
| 6 6 | 
             
                  def all_instances
         | 
| 7 7 | 
             
                    return @all_instances if defined?(@all_instances)
         | 
| @@ -29,11 +29,7 @@ module Awshark | |
| 29 29 | 
             
                  private
         | 
| 30 30 |  | 
| 31 31 | 
             
                  def client
         | 
| 32 | 
            -
                     | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  def region
         | 
| 36 | 
            -
                    Aws.config[:region] || 'eu-central-1'
         | 
| 32 | 
            +
                    Awshark.config.ec2.client
         | 
| 37 33 | 
             
                  end
         | 
| 38 34 | 
             
                end
         | 
| 39 35 | 
             
              end
         | 
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Awshark
         | 
| 4 | 
            +
              module Ec2
         | 
| 5 | 
            +
                class SecurityGroup
         | 
| 6 | 
            +
                  include Logging
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  attr_reader :security_group_id, :username
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def initialize(id:, username:)
         | 
| 11 | 
            +
                    validate!(:id, id)
         | 
| 12 | 
            +
                    validate!(:username, username)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    @security_group_id = id
         | 
| 15 | 
            +
                    @username = username
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def authorize(ip:, ports:)
         | 
| 19 | 
            +
                    ports.each do |port|
         | 
| 20 | 
            +
                      ip_rule = SecurityRule.new(
         | 
| 21 | 
            +
                        ip: ip,
         | 
| 22 | 
            +
                        from_port: port,
         | 
| 23 | 
            +
                        to_port: port,
         | 
| 24 | 
            +
                        description: username
         | 
| 25 | 
            +
                      )
         | 
| 26 | 
            +
                      client.authorize_security_group_ingress(
         | 
| 27 | 
            +
                        group_id: security_group_id,
         | 
| 28 | 
            +
                        ip_permissions: [ip_rule.to_hash]
         | 
| 29 | 
            +
                      )
         | 
| 30 | 
            +
                      logger.info "Created ingress rule in for #{ip_rule.cidr_ip}, port #{port}."
         | 
| 31 | 
            +
                    rescue Aws::EC2::Errors::InvalidPermissionDuplicate
         | 
| 32 | 
            +
                      logger.warn "An ingress rule for #{ip} and port #{port} exists."
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def unauthorize
         | 
| 37 | 
            +
                    return if my_ingress_rules.empty?
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    client.revoke_security_group_ingress(
         | 
| 40 | 
            +
                      group_id: security_group_id,
         | 
| 41 | 
            +
                      ip_permissions: my_ingress_rules
         | 
| 42 | 
            +
                    )
         | 
| 43 | 
            +
                    logger.info "Removed all ingress rules for #{username}."
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def my_ingress_rules
         | 
| 47 | 
            +
                    return @my_ingress_rules if defined?(@my_ingress_rules)
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    response = client.describe_security_groups(group_ids: [security_group_id])
         | 
| 50 | 
            +
                    return [] if response.security_groups.empty?
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    security_group = response.security_groups.first
         | 
| 53 | 
            +
                    security_rules = security_group.ip_permissions.map do |ip_permission|
         | 
| 54 | 
            +
                      SecurityRule.new(ip_permission)
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    @my_ingress_rules = security_rules.map do |rule|
         | 
| 58 | 
            +
                      rule.ip_ranges.keep_if { |ip_range| ip_range.description == username }
         | 
| 59 | 
            +
                      rule.ip_ranges.any? ? rule.to_hash : nil
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    @my_ingress_rules.compact!
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  private
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  def client
         | 
| 68 | 
            +
                    Awshark.config.ec2.client
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  def validate!(name, value)
         | 
| 72 | 
            +
                    raise ArgumentError, "Argument #{name} cannot be empty" if value.blank?
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
            end
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Awshark
         | 
| 4 | 
            +
              module Ec2
         | 
| 5 | 
            +
                class SecurityRule
         | 
| 6 | 
            +
                  attr_reader :ip_protocol, :ip_ranges, :from_port, :to_port
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(args)
         | 
| 9 | 
            +
                    if args.is_a?(Aws::EC2::Types::IpPermission)
         | 
| 10 | 
            +
                      @ip_protocol = args.ip_protocol
         | 
| 11 | 
            +
                      @ip_ranges = args.ip_ranges
         | 
| 12 | 
            +
                      @from_port = args.from_port
         | 
| 13 | 
            +
                      @to_port = args.to_port
         | 
| 14 | 
            +
                    else
         | 
| 15 | 
            +
                      ip = args.fetch(:ip)
         | 
| 16 | 
            +
                      description = args.fetch(:description)
         | 
| 17 | 
            +
                      @ip_protocol = args.fetch(:ip_protocol, 'tcp')
         | 
| 18 | 
            +
                      @ip_ranges = [OpenStruct.new({ cidr_ip: "#{ip}/32", description: description })]
         | 
| 19 | 
            +
                      @from_port = args.fetch(:from_port)
         | 
| 20 | 
            +
                      @to_port = args.fetch(:to_port)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def cidr_ip
         | 
| 25 | 
            +
                    ip_ranges[0].cidr_ip
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def description
         | 
| 29 | 
            +
                    ip_ranges[0].description
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def to_hash
         | 
| 33 | 
            +
                    {
         | 
| 34 | 
            +
                      ip_protocol: ip_protocol,
         | 
| 35 | 
            +
                      from_port: from_port,
         | 
| 36 | 
            +
                      to_port: to_port,
         | 
| 37 | 
            +
                      ip_ranges: ip_ranges.map(&:to_h)
         | 
| 38 | 
            +
                    }
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -0,0 +1,107 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'aws-sdk-ec2'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require 'awshark/ec2/instance'
         | 
| 6 | 
            +
            require 'awshark/ec2/manager'
         | 
| 7 | 
            +
            require 'awshark/ec2/security_group'
         | 
| 8 | 
            +
            require 'awshark/ec2/security_rule'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            module Awshark
         | 
| 11 | 
            +
              module Ec2
         | 
| 12 | 
            +
                class Subcommand < Thor
         | 
| 13 | 
            +
                  include Awshark::ClassOptions
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  desc 'list', 'List all EC2 instances'
         | 
| 16 | 
            +
                  long_desc <<-LONGDESC
         | 
| 17 | 
            +
                    List all EC2 instances in a region
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    Example:
         | 
| 20 | 
            +
                      awshark ec2 list STATE
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  LONGDESC
         | 
| 23 | 
            +
                  def list(state = 'running')
         | 
| 24 | 
            +
                    process_class_options
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    instances = manager.public_send("#{state}_instances")
         | 
| 27 | 
            +
                    instances = instances.sort_by(&:name)
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    instances.each do |i|
         | 
| 30 | 
            +
                      args = { name: i.name, type: i.type, public_dns: i.public_dns_name, state: i.state }
         | 
| 31 | 
            +
                      printf "%-40<name>s %-12<type>s %-60<public_dns>s %<state>s\n", args
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  desc 'authorize', 'Authorises your IP to access AWS'
         | 
| 36 | 
            +
                  long_desc <<-LONGDESC
         | 
| 37 | 
            +
                    Adds your IP address to the security group to allow direct access to the VPCs.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    Example:
         | 
| 40 | 
            +
                      awshark ec2 authorize
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  LONGDESC
         | 
| 43 | 
            +
                  option :ports,
         | 
| 44 | 
            +
                         type: :string,
         | 
| 45 | 
            +
                         desc: 'Ports to register. Only uses ports from 1 to 65535.',
         | 
| 46 | 
            +
                         default: '443'
         | 
| 47 | 
            +
                  option :security_group,
         | 
| 48 | 
            +
                         type: :string,
         | 
| 49 | 
            +
                         required: true,
         | 
| 50 | 
            +
                         desc: 'Security group to allow access to.'
         | 
| 51 | 
            +
                  option :username,
         | 
| 52 | 
            +
                         type: :string,
         | 
| 53 | 
            +
                         desc: 'Ports to register. Only uses ports from 1 to 65535.'
         | 
| 54 | 
            +
                  def authorize
         | 
| 55 | 
            +
                    process_class_options
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    group = Ec2::SecurityGroup.new(id: security_group_id, username: username)
         | 
| 58 | 
            +
                    group.authorize(ip: my_ip, ports: ports)
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  desc 'unauthorize', 'Removes your IP from access to AWS'
         | 
| 62 | 
            +
                  long_desc <<-LONGDESC
         | 
| 63 | 
            +
                    Removes all your ingress rules from the home office security group in the VPCs.
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    Example:
         | 
| 66 | 
            +
                      awshark ec2 unauthorize
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  LONGDESC
         | 
| 69 | 
            +
                  option :security_group,
         | 
| 70 | 
            +
                         type: :string,
         | 
| 71 | 
            +
                         required: true,
         | 
| 72 | 
            +
                         desc: 'Security group to remove access from.'
         | 
| 73 | 
            +
                  option :username,
         | 
| 74 | 
            +
                         type: :string,
         | 
| 75 | 
            +
                         desc: 'Ports to register. Only uses ports from 1 to 65535.'
         | 
| 76 | 
            +
                  def unauthorize
         | 
| 77 | 
            +
                    process_class_options
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                    group = Ec2::SecurityGroup.new(id: security_group_id, username: username)
         | 
| 80 | 
            +
                    group.unauthorize
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  private
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  def manager
         | 
| 86 | 
            +
                    @manager ||= Ec2::Manager.new
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  def my_ip
         | 
| 90 | 
            +
                    @my_ip ||= `curl -s https://api.ipify.org`.strip
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  def ports
         | 
| 94 | 
            +
                    result = options[:ports].split(',').map(&:to_i)
         | 
| 95 | 
            +
                    result.select { |port| (1..65_535).cover?(port) }
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                  def security_group_id
         | 
| 99 | 
            +
                    options[:security_group].strip
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  def username
         | 
| 103 | 
            +
                    options[:username].presence || `whoami`.strip
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
            end
         | 
| @@ -7,9 +7,9 @@ require 'awshark/ecs/cluster' | |
| 7 7 | 
             
            require 'awshark/ecs/manager'
         | 
| 8 8 |  | 
| 9 9 | 
             
            module Awshark
         | 
| 10 | 
            -
              module  | 
| 11 | 
            -
                class  | 
| 12 | 
            -
                  include Awshark:: | 
| 10 | 
            +
              module Ecs
         | 
| 11 | 
            +
                class Subcommand < Thor
         | 
| 12 | 
            +
                  include Awshark::ClassOptions
         | 
| 13 13 |  | 
| 14 14 | 
             
                  desc 'list', 'list ECS tasks'
         | 
| 15 15 | 
             
                  long_desc <<-LONGDESC
         | 
| @@ -6,9 +6,9 @@ require 'awshark/rds/check_reservations' | |
| 6 6 | 
             
            require 'awshark/rds/manager'
         | 
| 7 7 |  | 
| 8 8 | 
             
            module Awshark
         | 
| 9 | 
            -
              module  | 
| 10 | 
            -
                class  | 
| 11 | 
            -
                  include Awshark:: | 
| 9 | 
            +
              module Rds
         | 
| 10 | 
            +
                class Subcommand < Thor
         | 
| 11 | 
            +
                  include Awshark::ClassOptions
         | 
| 12 12 |  | 
| 13 13 | 
             
                  desc 'check', 'Check RDS reservations'
         | 
| 14 14 | 
             
                  long_desc <<-LONGDESC
         | 
| @@ -9,9 +9,9 @@ require 'awshark/s3/bucket' | |
| 9 9 | 
             
            require 'awshark/s3/manager'
         | 
| 10 10 |  | 
| 11 11 | 
             
            module Awshark
         | 
| 12 | 
            -
              module  | 
| 13 | 
            -
                class  | 
| 14 | 
            -
                  include Awshark:: | 
| 12 | 
            +
              module S3
         | 
| 13 | 
            +
                class Subcommand < Thor
         | 
| 14 | 
            +
                  include Awshark::ClassOptions
         | 
| 15 15 | 
             
                  include ActiveSupport::NumberHelper
         | 
| 16 16 |  | 
| 17 17 | 
             
                  desc 'list', 'List S3 bucket statistics'
         | 
    
        data/lib/awshark/version.rb
    CHANGED
    
    
    
        data/lib/awshark.rb
    CHANGED
    
    | @@ -6,7 +6,9 @@ require 'thor' | |
| 6 6 | 
             
            require 'yaml'
         | 
| 7 7 |  | 
| 8 8 | 
             
            require 'awshark/version'
         | 
| 9 | 
            +
            require 'awshark/concerns/logging'
         | 
| 9 10 | 
             
            require 'awshark/cloud_formation/configuration'
         | 
| 11 | 
            +
            require 'awshark/ec2/configuration'
         | 
| 10 12 | 
             
            require 'awshark/ecs/configuration'
         | 
| 11 13 | 
             
            require 'awshark/s3/configuration'
         | 
| 12 14 | 
             
            require 'awshark/sts/configuration'
         | 
| @@ -17,12 +19,14 @@ module Awshark | |
| 17 19 | 
             
              def self.config
         | 
| 18 20 | 
             
                @config ||= begin
         | 
| 19 21 | 
             
                              cf = CloudFormation::Configuration.new
         | 
| 22 | 
            +
                              ec2 = Ec2::Configuration.new
         | 
| 20 23 | 
             
                              ecs = Ecs::Configuration.new
         | 
| 21 24 | 
             
                              s3 = S3::Configuration.new
         | 
| 22 25 | 
             
                              sts = Sts::Configuration.new
         | 
| 23 26 |  | 
| 24 27 | 
             
                              OpenStruct.new(
         | 
| 25 28 | 
             
                                cloud_formation: cf,
         | 
| 29 | 
            +
                                ec2: ec2,
         | 
| 26 30 | 
             
                                ecs: ecs,
         | 
| 27 31 | 
             
                                s3: s3,
         | 
| 28 32 | 
             
                                sts: sts
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: awshark
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Joergen Dahlke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2022-01-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -252,6 +252,7 @@ files: | |
| 252 252 | 
             
            - exe/awshark
         | 
| 253 253 | 
             
            - gems.rb
         | 
| 254 254 | 
             
            - lib/awshark.rb
         | 
| 255 | 
            +
            - lib/awshark/class_options.rb
         | 
| 255 256 | 
             
            - lib/awshark/cli.rb
         | 
| 256 257 | 
             
            - lib/awshark/cloud_formation/configuration.rb
         | 
| 257 258 | 
             
            - lib/awshark/cloud_formation/file_loading.rb
         | 
| @@ -260,26 +261,29 @@ files: | |
| 260 261 | 
             
            - lib/awshark/cloud_formation/parameters.rb
         | 
| 261 262 | 
             
            - lib/awshark/cloud_formation/stack.rb
         | 
| 262 263 | 
             
            - lib/awshark/cloud_formation/stack_events.rb
         | 
| 264 | 
            +
            - lib/awshark/cloud_formation/subcommand.rb
         | 
| 263 265 | 
             
            - lib/awshark/cloud_formation/template.rb
         | 
| 266 | 
            +
            - lib/awshark/concerns/logging.rb
         | 
| 267 | 
            +
            - lib/awshark/ec2/configuration.rb
         | 
| 264 268 | 
             
            - lib/awshark/ec2/instance.rb
         | 
| 265 269 | 
             
            - lib/awshark/ec2/manager.rb
         | 
| 270 | 
            +
            - lib/awshark/ec2/security_group.rb
         | 
| 271 | 
            +
            - lib/awshark/ec2/security_rule.rb
         | 
| 272 | 
            +
            - lib/awshark/ec2/subcommand.rb
         | 
| 266 273 | 
             
            - lib/awshark/ecs/cluster.rb
         | 
| 267 274 | 
             
            - lib/awshark/ecs/configuration.rb
         | 
| 268 275 | 
             
            - lib/awshark/ecs/manager.rb
         | 
| 276 | 
            +
            - lib/awshark/ecs/subcommand.rb
         | 
| 269 277 | 
             
            - lib/awshark/profile_resolver.rb
         | 
| 270 278 | 
             
            - lib/awshark/rds/check_reservations.rb
         | 
| 271 279 | 
             
            - lib/awshark/rds/manager.rb
         | 
| 280 | 
            +
            - lib/awshark/rds/subcommand.rb
         | 
| 272 281 | 
             
            - lib/awshark/s3/artifact.rb
         | 
| 273 282 | 
             
            - lib/awshark/s3/bucket.rb
         | 
| 274 283 | 
             
            - lib/awshark/s3/configuration.rb
         | 
| 275 284 | 
             
            - lib/awshark/s3/manager.rb
         | 
| 285 | 
            +
            - lib/awshark/s3/subcommand.rb
         | 
| 276 286 | 
             
            - lib/awshark/sts/configuration.rb
         | 
| 277 | 
            -
            - lib/awshark/subcommands/class_options.rb
         | 
| 278 | 
            -
            - lib/awshark/subcommands/cloud_formation.rb
         | 
| 279 | 
            -
            - lib/awshark/subcommands/ec2.rb
         | 
| 280 | 
            -
            - lib/awshark/subcommands/ecs.rb
         | 
| 281 | 
            -
            - lib/awshark/subcommands/rds.rb
         | 
| 282 | 
            -
            - lib/awshark/subcommands/s3.rb
         | 
| 283 287 | 
             
            - lib/awshark/version.rb
         | 
| 284 288 | 
             
            homepage: https://github.com/jdahlke/awshark
         | 
| 285 289 | 
             
            licenses:
         | 
| @@ -1,28 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Awshark
         | 
| 4 | 
            -
              module Subcommands
         | 
| 5 | 
            -
                module ClassOptions
         | 
| 6 | 
            -
                  def process_class_options
         | 
| 7 | 
            -
                    command = current_command_chain.last
         | 
| 8 | 
            -
                    cli_options = options.merge(parent_options || {}).symbolize_keys
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                    if cli_options[:help]
         | 
| 11 | 
            -
                      respond_to?(command) ? help(command) : help
         | 
| 12 | 
            -
                      exit(0)
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                    setup_aws_credentials(options)
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  private
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  def setup_aws_credentials(options)
         | 
| 21 | 
            -
                    profile_resolver = ProfileResolver.new(options)
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    ::Aws.config[:region] = profile_resolver.region
         | 
| 24 | 
            -
                    ::Aws.config[:credentials] = profile_resolver.credentials
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
            end
         | 
| @@ -1,38 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require 'aws-sdk-ec2'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            require 'awshark/ec2/instance'
         | 
| 6 | 
            -
            require 'awshark/ec2/manager'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            module Awshark
         | 
| 9 | 
            -
              module Subcommands
         | 
| 10 | 
            -
                class EC2 < Thor
         | 
| 11 | 
            -
                  include Awshark::Subcommands::ClassOptions
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  desc 'list', 'List all EC2 instances'
         | 
| 14 | 
            -
                  long_desc <<-LONGDESC
         | 
| 15 | 
            -
                    List all EC2 instances in a region
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    Example: `awshark ec2 list STATE`
         | 
| 18 | 
            -
                  LONGDESC
         | 
| 19 | 
            -
                  def list(state = 'running')
         | 
| 20 | 
            -
                    process_class_options
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                    instances = manager.public_send("#{state}_instances")
         | 
| 23 | 
            -
                    instances = instances.sort_by(&:name)
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    instances.each do |i|
         | 
| 26 | 
            -
                      args = { name: i.name, type: i.type, public_dns: i.public_dns_name, state: i.state }
         | 
| 27 | 
            -
                      printf "%-40<name>s %-12<type>s %-60<public_dns>s %<state>s\n", args
         | 
| 28 | 
            -
                    end
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  private
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                  def manager
         | 
| 34 | 
            -
                    @manager ||= Awshark::EC2::Manager.new
         | 
| 35 | 
            -
                  end
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
            end
         |