awful 0.0.131 → 0.0.132
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/awful/security_group.rb +68 -18
- data/lib/awful/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14133429fbba1f41a835d8d45c39f5373a970934
|
4
|
+
data.tar.gz: c78d296568121425e737eb1101ab6227b4145f1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d8e26ea411a4c35a932113c54a8123110c5e8bb3910f8514779a3c84b1a6aae59951cfa94cde2b9d3f30606d32db5e7ffb2057a6198ab5ace642a20b2aa8157
|
7
|
+
data.tar.gz: 5535193a7a7fa50171676f61ec315b1ef228a1d041241e4bd29569aff95316abc8ebee71e58b31580b6e85a243c22bfdad676e081fb22687617953bdd0ab694b
|
data/lib/awful/security_group.rb
CHANGED
@@ -1,20 +1,46 @@
|
|
1
1
|
module Awful
|
2
|
+
module Short
|
3
|
+
def sg(*args)
|
4
|
+
Awful::SecurityGroup.new.invoke(*args)
|
5
|
+
end
|
6
|
+
end
|
2
7
|
|
3
8
|
class SecurityGroup < Cli
|
4
9
|
|
5
|
-
desc 'ls [
|
6
|
-
method_option :long,
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
desc 'ls [IDs]', 'list security groups'
|
11
|
+
method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
|
12
|
+
method_option :ingress, aliases: '-i', type: :boolean, default: false, desc: 'list ingress permissions'
|
13
|
+
method_option :egress, aliases: '-o', type: :boolean, default: false, desc: 'list egress permissions'
|
14
|
+
method_option :tags, aliases: '-t', type: :array, default: [], desc: 'List of tags to filter, as key=value'
|
15
|
+
method_option :stack, aliases: '-s', type: :string, default: nil, desc: 'Filter by given stack'
|
16
|
+
method_option :resource, aliases: '-r', type: :string, default: nil, desc: 'Filter by given stack resource logical id'
|
17
|
+
def ls(*ids)
|
18
|
+
## filter by tags
|
19
|
+
filters = []
|
20
|
+
options[:tags].each do |tag|
|
21
|
+
key, value = tag.split('=')
|
22
|
+
filters << {name: "tag:#{key}", values: [value]}
|
23
|
+
end
|
24
|
+
filters << {name: 'tag:aws:cloudformation:stack-name', values: [options[:stack]]} if options[:stack]
|
25
|
+
filters << {name: 'tag:aws:cloudformation:logical-id', values: [options[:resource]]} if options[:resource]
|
26
|
+
filters = nil if filters.empty? # sdk does not like empty arrays as args
|
27
|
+
|
28
|
+
ec2.describe_security_groups(group_ids: ids, filters: filters).security_groups.output do |groups|
|
29
|
+
if options[:long]
|
30
|
+
print_table groups.map { |g|
|
31
|
+
[ g.group_name, g.group_id, g.vpc_id, g.description ]
|
32
|
+
}.sort
|
33
|
+
elsif options[:ingress]
|
34
|
+
print_table groups.map { |g|
|
35
|
+
[ g.group_name, g.group_id, g.ip_permissions.map { |p| "#{p.ip_protocol}:#{p.from_port}-#{p.to_port}" }.join(',') ]
|
36
|
+
}.sort
|
37
|
+
elsif options[:egress]
|
38
|
+
print_table groups.map { |g|
|
39
|
+
[ g.group_name, g.group_id, g.ip_permissions_egress.map { |p| "#{p.ip_protocol}:#{p.from_port}-#{p.to_port}" }.join(',') ]
|
40
|
+
}.sort
|
41
|
+
else
|
42
|
+
puts groups.map(&:group_name).sort
|
43
|
+
end
|
18
44
|
end
|
19
45
|
end
|
20
46
|
|
@@ -32,7 +58,7 @@ module Awful
|
|
32
58
|
|
33
59
|
desc 'dump NAME', 'dump security group with NAME [or ID] as yaml'
|
34
60
|
def dump(name)
|
35
|
-
first_matching_sg(name).
|
61
|
+
first_matching_sg(name).output do |sg|
|
36
62
|
puts YAML.dump(stringify_keys(sg.to_hash))
|
37
63
|
end
|
38
64
|
end
|
@@ -40,20 +66,44 @@ module Awful
|
|
40
66
|
desc 'inbound NAME', 'show inbound rules for named security group'
|
41
67
|
method_option :long, aliases: '-l', default: false, desc: 'Long listing'
|
42
68
|
def inbound(name)
|
43
|
-
first_matching_sg(name).ip_permissions.
|
69
|
+
first_matching_sg(name).ip_permissions.output do |perms|
|
44
70
|
sources = ->(perm) { perm.ip_ranges.map(&:cidr_ip) + perm.user_id_group_pairs.map(&:group_id) }
|
45
71
|
if options[:long]
|
46
72
|
perms.map do |p|
|
47
73
|
sources.call(p).map do |s|
|
48
74
|
[p.ip_protocol, p.from_port, p.to_port, s]
|
49
75
|
end
|
50
|
-
end.flatten(1).
|
76
|
+
end.flatten(1).output { |list| print_table list }
|
51
77
|
else
|
52
78
|
puts perms.map { |p| sources.call(p) }.flatten
|
53
79
|
end
|
54
80
|
end
|
55
81
|
end
|
56
82
|
|
57
|
-
|
83
|
+
desc 'revoke ID [IP_PERMISSIONS]', 'revoke rules from security group'
|
84
|
+
method_option :source_security_group_name, type: :string, default: nil, desc: 'ip permission'
|
85
|
+
method_option :source_security_group_owner_id, type: :string, default: nil, desc: 'ip permission'
|
86
|
+
method_option :ip_protocol, type: :string, default: nil, desc: 'ip permission'
|
87
|
+
method_option :from_port, type: :string, default: nil, desc: 'ip permission'
|
88
|
+
method_option :to_port, type: :string, default: nil, desc: 'ip permission'
|
89
|
+
method_option :cidr_ip, type: :string, default: nil, desc: 'ip permission'
|
90
|
+
def revoke(id, *ip_permissions)
|
91
|
+
## invoked from code, process ip_permissions objects as args
|
92
|
+
perms = ip_permissions.map do |p|
|
93
|
+
p.to_hash.tap do |h|
|
94
|
+
h[:user_id_group_pairs] = nil if h[:user_id_group_pairs].empty? # sdk will complain if this is empty
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
perms = nil if perms.empty?
|
99
|
+
|
100
|
+
## can set these on command-line
|
101
|
+
params = %i[source_security_group_name source_security_group_owner_id ip_protocol from_port to_port cidr_ip].each_with_object({}) do |k,h|
|
102
|
+
h[k] = options[k]
|
103
|
+
end
|
104
|
+
|
105
|
+
ec2.revoke_security_group_ingress(params.merge(group_id: id, ip_permissions: perms))
|
106
|
+
end
|
58
107
|
|
59
|
-
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/awful/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.132
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ric Lister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|