fawsade 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1d71efe0d2d709a30dbd04790dfe3e738de9d84c
4
+ data.tar.gz: 61b000f028bb8522bd000e90c8f233a3f30e369a
5
+ SHA512:
6
+ metadata.gz: 08ff041f34cb630352a681c66d9bf8cb767a724aec8cd1398239b05176e66b722422fecc32b05fdc11c412e3597248f0aac882e4631495a24765891cd5f529c6
7
+ data.tar.gz: 42c3f53522efb723cbb93e503bb32f167431eff18ff48b36247239956667cd05a6d89508ddf4de3c3ff5c66e7c5debef5cf872dcc515bca209d824696c211913
@@ -0,0 +1,18 @@
1
+ # Fawsade
2
+
3
+ Provides a few custom methods for the AWS Ruby SDK.
4
+
5
+ ## Usage
6
+
7
+ ```ruby
8
+ require "fawsade"
9
+
10
+ client = Fawsade::Client.new(
11
+ region: "eu-west-1",
12
+ access_key_id: "xxxx",
13
+ secret_access_key: "xxxx")
14
+
15
+ client.instances_by_name(/api\d+/) => [#<struct Fawsade::Instance id="i-xxxx", dns="ip-xxxx.eu-west-1.compute.internal", name="api01">, #<struct Fawsade::Instance id="i-xxxx", dns="ip-xxxx.eu-west-1.compute.internal", name="api02">]
16
+
17
+ client.instance_by_id("i-xxxx") => #<struct Fawsade::Instance id="i-xxxx", dns="ip-xxxx.eu-west-1.compute.internal", name="api01">
18
+ ```
@@ -0,0 +1,4 @@
1
+ require "aws-sdk"
2
+
3
+ require_relative "fawsade/client"
4
+ require_relative "fawsade/instance"
@@ -0,0 +1,46 @@
1
+ module Fawsade
2
+ class Client
3
+ def initialize(region:, access_key_id:, secret_access_key:)
4
+ @client = Aws::EC2::Client.new(
5
+ region: region,
6
+ access_key_id: access_key_id,
7
+ secret_access_key: secret_access_key)
8
+ end
9
+
10
+ def instance_by_id(id)
11
+ instances.find { |instance| instance.id == id }
12
+ end
13
+
14
+ def instances_by_name(regex)
15
+ instances.select { |instance| instance.name =~ /^#{regex}$/ }
16
+ end
17
+
18
+ def method_missing(method_name, *parameters, &block)
19
+ @client.send(method_name, *parameters, &block)
20
+ end
21
+
22
+ private
23
+
24
+ def instances
25
+ @client.describe_instances.reservations.each_with_object([]) do |reservation, array|
26
+ reservation.instances.each do |instance|
27
+ next unless running?(instance) && instance.tags.any?
28
+
29
+ array << build(instance)
30
+ end
31
+ end
32
+ end
33
+
34
+ def running?(instance)
35
+ instance.state.name == "running"
36
+ end
37
+
38
+ def build(instance)
39
+ Instance.new(instance.instance_id, instance.private_dns_name, name_of(instance))
40
+ end
41
+
42
+ def name_of(instance)
43
+ instance.tags.find { |tag| tag.key == "Name" }.value
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ module Fawsade
2
+ Instance = Struct.new(:id, :dns, :name)
3
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fawsade
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Gimenez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Simplified interface for the AWS Ruby SDK
28
+ email:
29
+ - me@pedro.bz
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files:
33
+ - README.md
34
+ files:
35
+ - README.md
36
+ - lib/fawsade.rb
37
+ - lib/fawsade/client.rb
38
+ - lib/fawsade/instance.rb
39
+ homepage: http://github.com/pedrogimenez/fawsade
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 2.1.0
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.6.3
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Simplified interface for the AWS Ruby SDK
63
+ test_files: []