nat-monitor 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3665bd673f7f721528355cfacc695941a2f98063
4
- data.tar.gz: aa462845fffc6a241368013dc1b90b609bb3b1bd
3
+ metadata.gz: 536dfbc820599ad1fe2c10cfeffb86da7dcac84a
4
+ data.tar.gz: 045f897aec8ddd8bb83a58a540dbabab4812458f
5
5
  SHA512:
6
- metadata.gz: f6bd6266e6104e3f42baea9a2c408ec45b9a714511cfc1263ae7f2937b26fdbb87c856817edc214d5f0a0ade6307e65190a1ccc457d6897e63dc0d40d9f5346a
7
- data.tar.gz: 3c86db404315f8e6dfc0aeae92fd0ac9969b3823b258791913f24e2110fe198ba053eb93bf78e45e0b3ddfb0fe4aac47e6c0261546efa34d11767eab3d076db4
6
+ metadata.gz: f0726a3d02e59a92ac2775d0da561eb95490037ce89e3aeb33d99aff93f3fc5337ec4ec5148d86ed2fc23e19886e7962d2115f70de88f82cdf5934c6949c9229
7
+ data.tar.gz: 601a1532fc1707059f20bde496e5329694884d6cfa18a68ce64415d0a395b38234baaf8265d710a5cf78ce53eb164cdfd89af74ad350d659c9d35fc087f43eef
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Nat::Monitor
1
+ # nat-monitor
2
2
 
3
3
  Monitors a quorum of NAT servers for an outage and reassigns the specified EC2 route table to point to a working server.
4
4
 
data/bin/nat-monitor CHANGED
File without changes
data/lib/nat-monitor.rb CHANGED
@@ -6,8 +6,11 @@ module EtTools
6
6
  require 'yaml'
7
7
 
8
8
  def initialize(conf_file = nil)
9
- @conf = YAML.load_file(conf_file || '/etc/nat_monitor.yml')
10
- @conf = defaults.merge @conf
9
+ @conf = defaults.merge load_conf(conf_file)
10
+ end
11
+
12
+ def load_conf(conf_file = nil)
13
+ YAML.load_file(conf_file || '/etc/nat_monitor.yml')
11
14
  end
12
15
 
13
16
  def run
@@ -58,6 +61,7 @@ module EtTools
58
61
  def steal_route
59
62
  output 'Stealing route 0.0.0.0/0 on route table ' \
60
63
  "#{@conf['route_table_id']}"
64
+ return if @conf['mocking']
61
65
  connection.replace_route(
62
66
  @conf['route_table_id'],
63
67
  '0.0.0.0/0',
@@ -1,5 +1,5 @@
1
1
  module EtTools
2
2
  class NatMonitor
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
@@ -16,8 +16,9 @@ describe EtTools::NatMonitor do
16
16
  ).merge(@other_nodes) }
17
17
 
18
18
  filepath = 'bogus_filename.yml'
19
- allow(YAML).to receive(:load_file).with(filepath)
20
- .and_return(@yaml_conf)
19
+
20
+ allow_any_instance_of(EtTools::NatMonitor).to receive(:load_conf)
21
+ .with(filepath).and_return(@yaml_conf)
21
22
 
22
23
  @nat_monitor = EtTools::NatMonitor.new(filepath)
23
24
 
@@ -26,7 +27,6 @@ describe EtTools::NatMonitor do
26
27
  'heartbeat_interval' => 10 }
27
28
 
28
29
  allow(@nat_monitor).to receive(:my_instance_id).and_return(@my_instance_id)
29
- allow(@nat_monitor).to receive(:steal_route).and_return(true)
30
30
  end
31
31
 
32
32
  context 'fewer than 3 nodes are specified' do
@@ -48,9 +48,8 @@ describe EtTools::NatMonitor do
48
48
  end
49
49
 
50
50
  context 'invalid route is specified' do
51
- # connection.route_tables.map(&:id).include? route_id
52
51
  before do
53
- allow_any_instance_of(Fog::Compute::AWS).to receive(:route_tables)
52
+ expect(@nat_monitor.connection).to receive(:route_tables)
54
53
  .and_return [
55
54
  double('route_tables',
56
55
  id: 'rtb-99999999')
@@ -58,8 +57,6 @@ describe EtTools::NatMonitor do
58
57
  end
59
58
 
60
59
  it 'exits with status 2' do
61
- expect(@nat_monitor).to receive(:route_exists?).with(@route_table_id)
62
- .and_return false
63
60
  expect(@nat_monitor).to receive(:exit).with(2)
64
61
  @nat_monitor.validate!
65
62
  end
@@ -129,8 +126,6 @@ describe EtTools::NatMonitor do
129
126
  end
130
127
 
131
128
  it 'counts unreachable nodes correctly' do
132
- allow(@nat_monitor).to receive(:other_nodes)
133
- .and_return(@other_nodes)
134
129
  expect(@nat_monitor).to receive(:unreachable_nodes)
135
130
  .and_return(@other_nodes)
136
131
  @nat_monitor.heartbeat
@@ -144,35 +139,53 @@ describe EtTools::NatMonitor do
144
139
  end
145
140
  end
146
141
 
147
- context 'and can\'t ping the master' do
142
+ context 'and only can\'t ping the master' do
148
143
  before do
149
144
  allow(@nat_monitor).to receive(:pingable?).with('1.1.1.2')
150
145
  .and_return false
151
146
  allow(@nat_monitor).to receive(:pingable?).with('1.1.1.3')
152
147
  .and_return true
153
- allow_any_instance_of(Fog::Compute::AWS).to receive(:replace_route)
154
- .with(@route_table_id, '0.0.0.0', @my_instance_id)
155
- .and_return true
156
148
  end
157
149
 
158
150
  it 'computes the list of other nodes correctly' do
151
+ allow(@nat_monitor).to receive(:steal_route).and_return true
159
152
  expect(@nat_monitor).to receive(:other_nodes)
160
153
  .exactly(2).times.and_return(@other_nodes)
161
154
  @nat_monitor.heartbeat
162
155
  end
163
156
 
164
157
  it 'finds i-00000002 unreachable' do
158
+ allow(@nat_monitor).to receive(:steal_route).and_return true
165
159
  expect(@nat_monitor).to receive(:unreachable_nodes)
166
160
  .and_return('i-00000002' => '1.1.1.2')
167
161
  @nat_monitor.heartbeat
168
162
  end
169
163
 
170
164
  it 'tries to steal the route' do
171
- allow(@nat_monitor).to receive(:other_nodes)
172
- .and_return(@other_nodes)
173
165
  expect(@nat_monitor).to receive(:steal_route)
174
166
  @nat_monitor.heartbeat
175
167
  end
168
+
169
+ it 'sends correct replace route command' do
170
+ expect(@nat_monitor.connection).to receive(:replace_route)
171
+ .with(@route_table_id, '0.0.0.0/0', @my_instance_id)
172
+ .and_return true
173
+ @nat_monitor.heartbeat
174
+ end
175
+ end
176
+
177
+ context 'mocking and can\'t ping the master' do
178
+ before do
179
+ @nat_monitor.instance_variable_set(
180
+ :@conf,
181
+ @yaml_conf.merge('mocking' => true).merge(@defaults)
182
+ )
183
+ end
184
+
185
+ it 'does not steal the route when mocking is enabled' do
186
+ expect(@nat_monitor.connection).to_not receive(:replace_route)
187
+ @nat_monitor.heartbeat
188
+ end
176
189
  end
177
190
  end
178
191
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nat-monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Herot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-05 00:00:00.000000000 Z
11
+ date: 2015-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler