awful 0.0.26 → 0.0.27
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/README.md +115 -8
- data/bin/dyn +7 -0
- data/lib/awful.rb +6 -0
- data/lib/awful/dynamodb.rb +76 -0
- data/lib/awful/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90734ed93f491b0260e20574e85270ede9a29983
|
4
|
+
data.tar.gz: 854a595c1d2d1bfe2be6ad69f169ebfe412060dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 796edf706246b369a0e0dcfb114e1cc938a458f7f58ae29f077336fd72229b98fba142d843e8096c6698502a6db8c58fb3dc6973da825345b5bf9ec999c38b05
|
7
|
+
data.tar.gz: 48d838269959f07d7e37fc348f04b989c2efe5bf01faaed7d84875a2ef6b5bef03c739be78afcd7224575e004d8421adfdb9bd3eb3acd7dd471a6b87fe4a980f
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Awful
|
2
2
|
|
3
|
-
|
3
|
+
The worst AWS command-line tool in the world.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,12 +20,119 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
```
|
24
|
+
$ for x in `ls bin`; do bin/$x help; done
|
25
|
+
|
26
|
+
Commands:
|
27
|
+
ami delete NAME # delete AMI
|
28
|
+
ami help [COMMAND] # Describe available commands or one specific command
|
29
|
+
ami last NAME # get last AMI matching NAME
|
30
|
+
ami ls [PATTERN] # list AMIs
|
31
|
+
ami tags ID [KEY=VALUE] # tag an image, or print tags
|
32
|
+
|
33
|
+
Options:
|
34
|
+
-e, [--env=ENV] # Load environment variables from file
|
35
|
+
-o, [--owners=OWNERS] # List images with this owner
|
36
|
+
# Default: self
|
37
|
+
|
38
|
+
Commands:
|
39
|
+
asg create [FILE] # create a new auto-scaling group
|
40
|
+
asg delete NAME # delete autoscaling group
|
41
|
+
asg dump NAME # dump existing autoscaling group as yaml
|
42
|
+
asg help [COMMAND] # Describe available commands or one specific command
|
43
|
+
asg instances # list instance IDs for instances in groups matching NAME
|
44
|
+
asg ips NAME # list IPs for instances in groups matching NAME
|
45
|
+
asg ls [PATTERN] # list autoscaling groups with name matching PATTERN
|
46
|
+
asg ssh NAME [ARGS] # ssh to an instance for this autoscaling group
|
47
|
+
asg stop NAME [NUMBER] # stop NUMBER instances in group NAME
|
48
|
+
asg terminate NAME [NUMBER] # terminate NUMBER instances in group NAME
|
49
|
+
asg update NAME [FILE] # update existing auto-scaling group
|
50
|
+
|
51
|
+
Options:
|
52
|
+
-e, [--env=ENV] # Load environment variables from file
|
53
|
+
|
54
|
+
Commands:
|
55
|
+
ec2 addresses # list elastic IP addresses
|
56
|
+
ec2 allocate # allocate a new elastic IP address
|
57
|
+
ec2 associate NAME IP # associate a public ip with an instance
|
58
|
+
ec2 create NAME # run new EC2 instance
|
59
|
+
ec2 delete NAME # terminate a running instance
|
60
|
+
ec2 dns NAME # get public DNS for named instance
|
61
|
+
ec2 dump NAME # dump EC2 instance with id or tag NAME as yaml
|
62
|
+
ec2 help [COMMAND] # Describe available commands or one specific command
|
63
|
+
ec2 ls [PATTERN] # list EC2 instances [with id or tags matching PATTERN]
|
64
|
+
ec2 start NAME # start a running instance
|
65
|
+
ec2 stop NAME # stop a running instance
|
66
|
+
ec2 update NAME # update an existing instance
|
67
|
+
|
68
|
+
Options:
|
69
|
+
-e, [--env=ENV] # Load environment variables from file
|
70
|
+
|
71
|
+
Commands:
|
72
|
+
elb create NAME # create new load-balancer
|
73
|
+
elb delete NAME # delete load-balancer
|
74
|
+
elb dns NAME # get DNS name for load-balancers matching NAME
|
75
|
+
elb dump NAME # dump VPC with id or tag NAME as yaml
|
76
|
+
elb health_check NAME # set health-check
|
77
|
+
elb help [COMMAND] # Describe available commands or one specific command
|
78
|
+
elb instances NAME # list instances and states for elb NAME
|
79
|
+
elb ls [PATTERN] # list vpcs [with any tags matching PATTERN]
|
80
|
+
|
81
|
+
Options:
|
82
|
+
-e, [--env=ENV] # Load environment variables from file
|
83
|
+
|
84
|
+
Commands:
|
85
|
+
lc clean NAME [NUM] # delete oldest NUM launch configs matching NAME
|
86
|
+
lc create NAME [FILE] # create a new launch configuration
|
87
|
+
lc delete NAME # delete launch configuration
|
88
|
+
lc dump NAME # dump existing launch_configuration as yaml
|
89
|
+
lc help [COMMAND] # Describe available commands or one specific command
|
90
|
+
lc latest # latest
|
91
|
+
lc ls [PATTERN] # list launch configs with name matching PATTERN
|
24
92
|
|
25
|
-
|
93
|
+
Options:
|
94
|
+
-e, [--env=ENV] # Load environment variables from file
|
26
95
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
96
|
+
Commands:
|
97
|
+
rds dns NAME # show DNS name and port for DB instance NAME
|
98
|
+
rds dump NAME # dump DB instance matching NAME
|
99
|
+
rds help [COMMAND] # Describe available commands or one specific command
|
100
|
+
rds ls [NAME] # list DB instances matching NAME
|
101
|
+
|
102
|
+
Options:
|
103
|
+
-e, [--env=ENV] # Load environment variables from file
|
104
|
+
|
105
|
+
Commands:
|
106
|
+
route dump NAME # dump route with id or tag NAME as yaml
|
107
|
+
route help [COMMAND] # Describe available commands or one specific command
|
108
|
+
route ls [PATTERN] # list routes
|
109
|
+
|
110
|
+
Options:
|
111
|
+
-e, [--env=ENV] # Load environment variables from file
|
112
|
+
|
113
|
+
Commands:
|
114
|
+
sg dump NAME # dump security group with NAME as yaml
|
115
|
+
sg help [COMMAND] # Describe available commands or one specific command
|
116
|
+
sg ls [NAME] # list security groups [matching NAME]
|
117
|
+
|
118
|
+
Options:
|
119
|
+
-e, [--env=ENV] # Load environment variables from file
|
120
|
+
|
121
|
+
Commands:
|
122
|
+
subnet create NAME # create subnet
|
123
|
+
subnet delete NAME # delete subnet with name or ID
|
124
|
+
subnet dump NAME # dump subnet with id or tag NAME as yaml
|
125
|
+
subnet help [COMMAND] # Describe available commands or one specific command
|
126
|
+
subnet ls [PATTERN] # list subnets [with any tags matching PATTERN]
|
127
|
+
|
128
|
+
Options:
|
129
|
+
-e, [--env=ENV] # Load environment variables from file
|
130
|
+
|
131
|
+
Commands:
|
132
|
+
vpc dump NAME # dump VPC with id or tag NAME as yaml
|
133
|
+
vpc help [COMMAND] # Describe available commands or one specific command
|
134
|
+
vpc ls [PATTERN] # list vpcs [with any tags matching PATTERN]
|
135
|
+
|
136
|
+
Options:
|
137
|
+
-e, [--env=ENV] # Load environment variables from file
|
138
|
+
```
|
data/bin/dyn
ADDED
data/lib/awful.rb
CHANGED
@@ -32,6 +32,10 @@ module Awful
|
|
32
32
|
@datapipeline ||= Aws::DataPipeline::Client.new
|
33
33
|
end
|
34
34
|
|
35
|
+
def dynamodb
|
36
|
+
@dynamodb ||= Aws::DynamoDB::Client.new
|
37
|
+
end
|
38
|
+
|
35
39
|
def symbolize_keys(thing)
|
36
40
|
if thing.is_a?(Hash)
|
37
41
|
Hash[ thing.map { |k,v| [ k.to_sym, symbolize_keys(v) ] } ]
|
@@ -52,6 +56,7 @@ module Awful
|
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
59
|
+
## merge options with config from erb-parsed yaml stdin or file
|
55
60
|
def load_cfg(options = {}, file = nil)
|
56
61
|
Dotenv.overload(options[:env]) if options[:env]
|
57
62
|
src = (file and File.read(file)) || ((not $stdin.tty?) and $stdin.read)
|
@@ -59,6 +64,7 @@ module Awful
|
|
59
64
|
symbolize_keys(cfg).merge(symbolize_keys(options.reject{ |_,v| v.nil? }))
|
60
65
|
end
|
61
66
|
|
67
|
+
## return a copy of hash, but with only listed keys
|
62
68
|
def only_keys_matching(hash, keylist)
|
63
69
|
hash.select do |key,_|
|
64
70
|
keylist.include?(key)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Awful
|
2
|
+
|
3
|
+
class DynamoDB < Cli
|
4
|
+
|
5
|
+
desc 'ls [PATTERN]', 'list dynamodb tables [matching PATTERN]'
|
6
|
+
method_option :long, aliases: '-l', default: false, desc: 'Long listing'
|
7
|
+
def ls(name = /./)
|
8
|
+
tables = dynamodb.list_tables.table_names.select do |table|
|
9
|
+
table.match(name)
|
10
|
+
end
|
11
|
+
|
12
|
+
if options[:long]
|
13
|
+
tables.map do |table|
|
14
|
+
dynamodb.describe_table(table_name: table).table
|
15
|
+
end.tap do |list|
|
16
|
+
print_table list.map { |t| [ t.table_name, t.table_status, t.item_count, t.table_size_bytes, t.creation_date_time ] }
|
17
|
+
end
|
18
|
+
else
|
19
|
+
tables.tap { |t| puts t }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'dump NAME', 'dump table with name'
|
24
|
+
def dump(name)
|
25
|
+
dynamodb.describe_table(table_name: name).table.tap do |table|
|
26
|
+
puts YAML.dump(stringify_keys(table.to_hash))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'scan NAME', 'scan table with NAME'
|
31
|
+
def scan(name, start_key = nil)
|
32
|
+
r = dynamodb.scan(table_name: name, exclusive_start_key: start_key) #.items.tap{ |x| p x.count }.tap do |table|
|
33
|
+
puts r.items.map { |item| JSON.generate(item) }.join("\n")
|
34
|
+
if r.last_evaluated_key # recurse if more data to get
|
35
|
+
scan(name, r.last_evaluated_key)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
desc 'create_table NAME', 'create table with NAME'
|
40
|
+
def create_table(name, file = nil)
|
41
|
+
opt = load_cfg(options, file)
|
42
|
+
params = only_keys_matching(opt, %i[attribute_definitions key_schema])
|
43
|
+
params[:table_name] = name
|
44
|
+
params[:provisioned_throughput] = only_keys_matching(opt[:provisioned_throughput], %i[read_capacity_units write_capacity_units])
|
45
|
+
params[:local_secondary_indexes] = opt[:local_secondary_indexes].map do |lsi|
|
46
|
+
only_keys_matching(lsi, %i[index_name key_schema projection])
|
47
|
+
end
|
48
|
+
params[:global_secondary_indexes] = opt[:global_secondary_indexes].map do |gsi|
|
49
|
+
only_keys_matching(gsi, %i[index_name key_schema projection]).tap do |g|
|
50
|
+
if gsi[:provisioned_throughput]
|
51
|
+
g[:provisioned_throughput] = only_keys_matching(gsi[:provisioned_throughput], %i[read_capacity_units write_capacity_units])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
dynamodb.create_table(params)
|
56
|
+
end
|
57
|
+
|
58
|
+
desc 'delete NAME', 'delete table with NAME'
|
59
|
+
def delete_table(name)
|
60
|
+
dynamodb.delete_table(table_name: name)
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'put_items NAME', 'puts json items into the table with NAME'
|
64
|
+
def put_items(name, file = nil)
|
65
|
+
io = (file and File.open(file)) || ((not $stdin.tty?) and $stdin)
|
66
|
+
count = 0
|
67
|
+
io.each_line do |line|
|
68
|
+
dynamodb.put_item(table_name: name, item: JSON.parse(line))
|
69
|
+
count += 1
|
70
|
+
end
|
71
|
+
count.tap { |c| puts "put #{c} items" }
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
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.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ric Lister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,6 +87,7 @@ executables:
|
|
87
87
|
- ami
|
88
88
|
- asg
|
89
89
|
- dp
|
90
|
+
- dyn
|
90
91
|
- ec2
|
91
92
|
- elb
|
92
93
|
- lc
|
@@ -107,6 +108,7 @@ files:
|
|
107
108
|
- bin/ami
|
108
109
|
- bin/asg
|
109
110
|
- bin/dp
|
111
|
+
- bin/dyn
|
110
112
|
- bin/ec2
|
111
113
|
- bin/elb
|
112
114
|
- bin/lc
|
@@ -119,6 +121,7 @@ files:
|
|
119
121
|
- lib/awful/ami.rb
|
120
122
|
- lib/awful/auto_scaling.rb
|
121
123
|
- lib/awful/datapipeline.rb
|
124
|
+
- lib/awful/dynamodb.rb
|
122
125
|
- lib/awful/ec2.rb
|
123
126
|
- lib/awful/elb.rb
|
124
127
|
- lib/awful/launch_config.rb
|