toquen 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12bb92a9c1a199d33e77b7c902603120b442cc43
4
- data.tar.gz: 13da56549c30b17f39a2e5fafac352cb5d8ecc7d
3
+ metadata.gz: 4170f1693c5c6bfaa962826d43179a5f6eee4583
4
+ data.tar.gz: 541031a124b960ed711485f99805ccda367f00e6
5
5
  SHA512:
6
- metadata.gz: d7c316d71f39b4fc65019b5632cf5c686b13f0dde8b9ae43efbd71956dca23115bc40e1ebd1cb2ce9d3e51367a54ed70f9bedae19829ec1eb7931dcfd778b641
7
- data.tar.gz: 70de592b929668e36cd7aaaf7a9d94fe931e644714e40a0a2a2b86e70f3103fda262c95480a85571436739024a4c28875fcf91a16c6c6e81f00adbc587c13b3a
6
+ metadata.gz: d794d3149af0c9ad3b1002109496b9bc1f94959b29a8e9e8963062a7c2a84d1d695e886f823c35ad0859df0592baeddf1ee109e5f84766d9f7f63777892fdfac
7
+ data.tar.gz: b9067b1456a24d82bd83485f0229b4cc45d302098328dab95cb0180251fc03ae0bb38ed07fc80f12ac6d73878d9d92b4051ba3acfaf81d42b0956911ffec7c2d
data/README.md CHANGED
@@ -115,3 +115,5 @@ And then, when you're finished:
115
115
  Or, if you want to do everything in one step:
116
116
 
117
117
  $ cap databases open_ssh cook close_ssh
118
+
119
+ **Note**: You can also use the task *open_port[22]* and *close_port[22]* to open and close SSH (or any other port).
data/lib/toquen/aws.rb CHANGED
@@ -8,6 +8,7 @@ module Toquen
8
8
  @key_id = fetch(:aws_access_key_id)
9
9
  @key = fetch(:aws_secret_access_key)
10
10
  @regions = fetch(:aws_regions, ['us-east-1'])
11
+ AWS.config(:access_key_id => @key_id, :secret_access_key => @key)
11
12
  end
12
13
 
13
14
  def server_details
@@ -20,6 +21,11 @@ module Toquen
20
21
  }
21
22
  end
22
23
 
24
+ def get_security_groups(ids)
25
+ ectwo = AWS::EC2.new
26
+ ids.map { |id| ectwo.security_groups[id] }
27
+ end
28
+
23
29
  def authorize_ingress(secgroup, protocol, port, ip)
24
30
  # test if exists first
25
31
  return false if secgroup.ingress_ip_permissions.to_a.select { |p|
@@ -52,7 +58,7 @@ module Toquen
52
58
  :type => i.instance_type,
53
59
  :external_dns => i.public_dns_name,
54
60
  :internal_dns => i.private_dns_name,
55
- :security_groups => i.security_groups
61
+ :security_groups => i.security_groups.to_a.map(&:id)
56
62
  }
57
63
  end
58
64
  end
@@ -81,20 +81,9 @@ task :cook do
81
81
  end
82
82
  before :cook, :update_kitchen
83
83
 
84
- desc "Open SSH ingress to current machine"
85
- task :open_ssh do
86
- secgroups = {}
87
- filter_roles = Set.new fetch(:filter)[:roles]
88
- aws = Toquen::AWSProxy.new
89
- aws.regions.each do |region|
90
- aws.server_details_in(region).each do |instance|
91
- instance_roles = instance[:roles] + ["all", "server-#{instance[:name]}"]
92
- unless (filter_roles.intersection instance_roles.to_set).empty?
93
- instance[:security_groups].each { |sg| secgroups[sg.id] = sg }
94
- end
95
- end
96
- end
97
-
84
+ desc "Open a port of ingress to the current machine"
85
+ task :open_port, :port do |t, args|
86
+ port = (args[:port] || 22).to_i
98
87
  run_locally do
99
88
  ivip = StunClient.get_ip
100
89
  if ivip.nil?
@@ -103,30 +92,20 @@ task :open_ssh do
103
92
  end
104
93
 
105
94
  ivip = "#{ivip}/32"
106
- secgroups.values.each do |sg|
107
- if aws.authorize_ingress sg, :tcp, 22, ivip
108
- info "Opened port tcp:22 on security group '#{sg.name}' (#{sg.id}) to #{ivip}"
95
+ aws = Toquen::AWSProxy.new
96
+ aws.get_security_groups(fetch(:filter)[:secgroups]).each do |sg|
97
+ if aws.authorize_ingress sg, :tcp, port, ivip
98
+ info "Opened port tcp:#{port} on security group '#{sg.name}' (#{sg.id}) to #{ivip}"
109
99
  else
110
- warn "Port tcp:22 in security group '#{sg.name}' (#{sg.id}) already open to #{ivip}"
100
+ warn "Port tcp:#{port} in security group '#{sg.name}' (#{sg.id}) already open to #{ivip}"
111
101
  end
112
102
  end
113
103
  end
114
104
  end
115
105
 
116
- desc "Close SSH ingress to current machine"
117
- task :close_ssh do
118
- secgroups = {}
119
- filter_roles = Set.new fetch(:filter)[:roles]
120
- aws = Toquen::AWSProxy.new
121
- aws.regions.each do |region|
122
- aws.server_details_in(region).each do |instance|
123
- instance_roles = instance[:roles] + ["all", "server-#{instance[:name]}"]
124
- unless (filter_roles.intersection instance_roles.to_set).empty?
125
- instance[:security_groups].each { |sg| secgroups[sg.id] = sg }
126
- end
127
- end
128
- end
129
-
106
+ desc "Close a port of ingress to the current machine"
107
+ task :close_port, :port do |t, args|
108
+ port = (args[:port] || 22).to_i
130
109
  run_locally do
131
110
  ivip = StunClient.get_ip
132
111
  if ivip.nil?
@@ -135,16 +114,27 @@ task :close_ssh do
135
114
  end
136
115
 
137
116
  ivip = "#{ivip}/32"
138
- secgroups.values.each do |sg|
139
- if aws.revoke_ingress sg, :tcp, 22, ivip
140
- info "Closed port tcp:22 on security group '#{sg.name}' (#{sg.id}) to #{ivip}"
117
+ aws = Toquen::AWSProxy.new
118
+ aws.get_security_groups(fetch(:filter)[:secgroups]).each do |sg|
119
+ if aws.revoke_ingress sg, :tcp, port, ivip
120
+ info "Closed port tcp:#{port} on security group '#{sg.name}' (#{sg.id}) to #{ivip}"
141
121
  else
142
- warn "Port tcp:22 in security group '#{sg.name}' (#{sg.id}) already closed to #{ivip}"
122
+ warn "Port tcp:#{port} in security group '#{sg.name}' (#{sg.id}) already closed to #{ivip}"
143
123
  end
144
124
  end
145
125
  end
146
126
  end
147
127
 
128
+ desc "Open SSH ingress to current machine"
129
+ task :open_ssh do
130
+ invoke "open_port", "22"
131
+ end
132
+
133
+ desc "Close SSH ingress to current machine"
134
+ task :close_ssh do
135
+ invoke "close_port", "22"
136
+ end
137
+
148
138
  desc "install toquen capistrano setup to current directory"
149
139
  task :toquen_install do
150
140
  unless Dir.exists?('config')
@@ -13,11 +13,14 @@ module Toquen
13
13
  open("config/deploy/#{name}.rb", 'w') do |f|
14
14
  f.write("# This file will be overwritten by toquen! Don't put anything here.\n")
15
15
  f.write("set :stage, '#{name}'.intern\n")
16
+ secgroups = []
16
17
  servers.each { |details|
17
18
  rstring = (details[:roles] + [ "all", "server-#{details[:name]}" ]).join(' ')
18
19
  f.write("server '#{details[:external_ip]}', roles: %w{#{rstring}}, awsname: '#{details[:name]}'\n")
20
+ secgroups += details[:security_groups]
19
21
  }
20
- f.write("set :filter, roles: %w{#{name}}\n")
22
+ secstring = secgroups.uniq.join(' ')
23
+ f.write("set :filter, roles: %w{#{name}}, secgroups: %w{#{secstring}}\n")
21
24
  end
22
25
  end
23
26
 
@@ -1,3 +1,3 @@
1
1
  module Toquen
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toquen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Muller