Sha256: 51fff2a15471a1d4dc31523c6ce5caf266840a71d64adb4de3072dbb141dcd36

Contents?: true

Size: 1.65 KB

Versions: 4

Compression:

Stored size: 1.65 KB

Contents

class AwsVpc < Inspec.resource(1)
  name 'aws_vpc'
  desc 'Verifies settings for AWS VPC'
  example "
    describe aws_vpc do
      it { should be_default }
      its('cidr_block') { should cmp '10.0.0.0/16' }
    end
  "
  supports platform: 'aws'

  include AwsSingularResourceMixin

  def to_s
    "VPC #{vpc_id}"
  end

  [:cidr_block, :dhcp_options_id, :state, :vpc_id, :instance_tenancy, :is_default].each do |property|
    define_method(property) do
      @vpc[property]
    end
  end

  alias default? is_default

  private

  def validate_params(raw_params)
    validated_params = check_resource_param_names(
      raw_params: raw_params,
      allowed_params: [:vpc_id],
      allowed_scalar_name: :vpc_id,
      allowed_scalar_type: String,
    )

    if validated_params.key?(:vpc_id) && validated_params[:vpc_id] !~ /^vpc\-[0-9a-f]{8}/
      raise ArgumentError, 'aws_vpc VPC ID must be in the format "vpc-" followed by 8 hexadecimal characters.'
    end

    validated_params
  end

  def fetch_from_api
    backend = BackendFactory.create(inspec_runner)

    if @vpc_id.nil?
      filter = { name: 'isDefault', values: ['true'] }
    else
      filter = { name: 'vpc-id', values: [@vpc_id] }
    end

    resp = backend.describe_vpcs({ filters: [filter] })

    @vpc = resp.vpcs[0].to_h
    @vpc_id = @vpc[:vpc_id]
    @exists = !@vpc.empty?
  end

  class Backend
    class AwsClientApi < AwsBackendBase
      BackendFactory.set_default_backend(self)
      self.aws_client_class = Aws::EC2::Client

      def describe_vpcs(query)
        aws_service_client.describe_vpcs(query)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
inspec-2.1.21 lib/resources/aws/aws_vpc.rb
inspec-2.1.10 lib/resources/aws/aws_vpc.rb
inspec-2.0.32 lib/resources/aws/aws_vpc.rb
inspec-2.0.17 lib/resources/aws/aws_vpc.rb