awful 0.0.154 → 0.0.155

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: e2bd24fb889ffd0a4f8e3d4570a4e74fa66e4373
4
- data.tar.gz: 67688dcd9f19ecd29307959cd6f031a9b1f51e01
3
+ metadata.gz: 3066108e8af44c4e49963df6e3939454cd62cd70
4
+ data.tar.gz: a9f3bec7a08eef96b2b72d9c795c682b565cc436
5
5
  SHA512:
6
- metadata.gz: bdb25917f93b8debe1b61cfae9a19c138aad86d56174b086b67046536e03e3f469d43fe94f780a3686d6b83501c2f9aec89ecc00c69dfde0340ec387a95b14e6
7
- data.tar.gz: cc732c8f9b8f83f9d603f6ec832a9be05c48a80b7d9c395e145a04bf0468b1004b8628b8b25bad21f4dc0073cf3af7463f32a28ce96f896817b7cb0b7cc6554c
6
+ metadata.gz: 915ff6520f33673d422daa38275626cbfeabc6eeae7b739ed49730a5c33703138bb5a1e7f7bf8f2da23767905f7a57e06e94d2016e5e5a64ba123e7b1b378e99
7
+ data.tar.gz: ab8d2e34eaae205dcc563990b9a50222e208f8ee2058fc8ca4b66d75508239604e1e22a3bfe8dff246329a7821e92ed9cbd5691629568c09dbf410185993a4d2
@@ -38,6 +38,17 @@ module Awful
38
38
  end
39
39
  end
40
40
 
41
+ ## return instances for named ASGs
42
+ def asg_instances(*names)
43
+ autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: names).auto_scaling_groups.map(&:instances).flatten
44
+ end
45
+
46
+ ## lookup ec2 details for instances in named ASGs
47
+ def asg_instance_details(*names)
48
+ ids = asg_instances(*names).map(&:instance_id)
49
+ ec2.describe_instances(instance_ids: ids).map(&:reservations).flatten.map(&:instances).flatten.sort_by(&:launch_time)
50
+ end
51
+
41
52
  def instance_lifecycle_state(*instance_ids)
42
53
  autoscaling.describe_auto_scaling_instances(instance_ids: instance_ids).auto_scaling_instances.map(&:lifecycle_state)
43
54
  end
@@ -76,7 +87,7 @@ module Awful
76
87
  method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
77
88
  method_option :describe, aliases: '-d', type: :boolean, default: false, desc: 'make extra call to get ASG name for each instance'
78
89
  def instances(*names)
79
- instances = autoscaling.describe_auto_scaling_groups(auto_scaling_group_names: names).auto_scaling_groups.map(&:instances).flatten
90
+ instances = asg_instances(*names)
80
91
 
81
92
  ## make extra call to get asg name as part of object
82
93
  if options[:describe]
@@ -101,14 +112,10 @@ module Awful
101
112
  end
102
113
  end
103
114
 
104
- desc 'ips NAME', 'list IPs for instances in groups matching NAME'
115
+ desc 'ips NAMES', 'list IPs for instances in named groups'
105
116
  method_option :long, aliases: '-l', default: false, desc: 'Long listing'
106
- def ips(name)
107
- ## get instance IDs for matching ASGs
108
- ids = all_matching_asgs(name).map(&:instances).flatten.map(&:instance_id)
109
-
110
- ## get instance details for these IDs
111
- ec2.describe_instances(instance_ids: ids).map(&:reservations).flatten.map(&:instances).flatten.sort_by(&:launch_time).output do |instances|
117
+ def ips(*names)
118
+ asg_instance_details(*names).output do |instances|
112
119
  if options[:long]
113
120
  print_table instances.map { |i|
114
121
  [ i.public_ip_address, i.private_ip_address, i.instance_id, i.image_id, i.instance_type, i.placement.availability_zone, color(i.state.name), i.launch_time ]
@@ -117,18 +124,29 @@ module Awful
117
124
  puts instances.map(&:public_ip_address)
118
125
  end
119
126
  end
120
-
121
127
  end
122
128
 
123
129
  desc 'ssh NAME [ARGS]', 'ssh to an instance for this autoscaling group'
124
- method_option :all, aliases: '-a', default: false, desc: 'ssh to all instances'
125
- method_option :number, aliases: '-n', default: 1, desc: 'number of instances to ssh'
126
- method_option :login_name, aliases: '-l', default: nil, desc: 'login name to pass to ssh'
130
+ method_option :all, aliases: '-a', type: :boolean, default: false, desc: 'ssh to all instances'
131
+ method_option :number, aliases: '-n', type: :numeric, default: 1, desc: 'number of instances to ssh'
132
+ method_option :login_name, aliases: '-l', type: :string, default: nil, desc: 'login name to pass to ssh'
133
+ method_option :instances, aliases: '-i', type: :array, default: nil, desc: 'list of partial instance IDs to filter'
134
+ method_option :verbose, aliases: '-v', type: :boolean, default: false, desc: 'show IPs before running ssh'
127
135
  def ssh(name, *args)
128
- ips = ips(name).map(&:public_ip_address)
136
+ instances = asg_instance_details(name)
137
+
138
+ ## filter by list of instance id patterns
139
+ if options[:instances]
140
+ instances.select! do |i|
141
+ options[:instances].map{ |pattern| i.instance_id.match(pattern) }.any?
142
+ end
143
+ end
144
+
145
+ ips = instances.map(&:public_ip_address)
129
146
  num = options[:all] ? ips.count : options[:number].to_i
130
147
  login_name = options[:login_name] ? "-l #{options[:login_name]}" : ''
131
148
  ips.last(num).each do |ip|
149
+ puts ip if options[:verbose]
132
150
  system "ssh #{login_name} #{ip} #{Array(args).join(' ')}"
133
151
  end
134
152
  end
@@ -1,3 +1,3 @@
1
1
  module Awful
2
- VERSION = '0.0.154'
2
+ VERSION = '0.0.155'
3
3
  end
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.154
4
+ version: 0.0.155
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-12-14 00:00:00.000000000 Z
11
+ date: 2016-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler