sortinghat 0.3.0 → 0.3.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: f9889a8fb4851b45b061c057c8fd958c42c2c5cd
4
- data.tar.gz: 124f2e6179e1eda555a010f35b221ce9782cdf60
3
+ metadata.gz: 7796fcee5c89e9eccdf90a2cd275c921c787b8d6
4
+ data.tar.gz: f00f7b9af41f75647fba8f6bfb191fa7c8985ee2
5
5
  SHA512:
6
- metadata.gz: 74410f415bc0043c707bd07e72ee96e69e838ecb309cd0b2fa2975f6f8d65aab5528460e8754a36e3c9aacd6c51375c258ba433d91cd76f101369c6e8f25424d
7
- data.tar.gz: 127e62bd80ff09c4640ad3d92c6f12656622bdc4f49076fffb86339e3791f1edc1469d6eb25879a091711ac795977d0e61186061fa714385c26873f8c4122006
6
+ metadata.gz: e64c35725349723129787d1548ababb0f52bb6fe792d22b8557d47189521f58f02d2bf8ab8e94d9c2d771ffb0e063f1566dff1baa4d6b79fc7beef7756cbac40
7
+ data.tar.gz: ae90d2230a8661404b43c33fe7240731dcc4317f9551b15c154fca77764b895bac994415f0d81a4a42a10fc88687c89c5f5c7a40ad385bad5cf9e7da19893855
data/README.md CHANGED
@@ -28,9 +28,11 @@ Install however you please to your AMI(s) with:
28
28
  The gem itself was developed under Ruby 2.0.0 to work with CentOS 7.
29
29
 
30
30
  It requires the following gems:
31
- * aws-sdk ~> 2
31
+ * aws-sdk 2.1.2
32
32
  * pure_json
33
33
 
34
+ The v2.1.2 dependency comes from the fact that as of this writting the latest codedeploy-agent (installed via .rpm) breaks if it does not have v2.1.2.
35
+
34
36
  During actually usage, the gem requires that the instance have the following IAM actions allowed via policy:
35
37
  * autoscaling:DescribeAutoScalingInstances
36
38
  * autoscaling:DescribeAutoScalingGroups
@@ -38,31 +38,34 @@ module Sortinghat
38
38
  def start!
39
39
 
40
40
  # Best thing to avoid run conditions are to wait
41
- sleep rand(5)
41
+ sleep rand(10)
42
42
 
43
43
  # Find out who is who, instances alive
44
- # If discover() returns an Array full of nil(s), alive will be nil
45
- alive = cleanup!(@aws.discover())
44
+ # If discover() returns an Array full of nil(s), alive will become an empty Array
45
+ alive = cleanup(@aws.discover())
46
46
 
47
47
  # Given the alive instances, find our prefix
48
- # If alive is nil, selection will return the number '1'
48
+ # If alive an empty array, selection will return the number '1'
49
49
  @prefix = ensurezero(selection(alive))
50
50
 
51
51
  # Put together hostname/fqdn
52
52
  construction()
53
53
 
54
+ # Set the Name tag on this instance
54
55
  @aws.settag!(@hostname)
55
56
 
56
57
  # Find out who is who, instances alive
57
- # If discover() returns an Array full of nil(s), alive will be nil
58
- alive = cleanup!(@aws.discover())
58
+ # If discover() returns an Array full of nil(s), alive will become an empty Array
59
+ alive = cleanup(@aws.discover())
59
60
 
61
+ # Only enter recursion if the uniq() length of the alive array does not equal the actual length
62
+ # On AutoScalingGroup initalization, the cleanup() should ensure the alive array is empty not nil so uniq() works
60
63
  unless alive.uniq.length == alive.length
61
64
  # There are duplicates, remove tag, wait, restart
62
65
  @aws.removetag!()
63
66
  sleep rand(10)
64
67
  start!()
65
- end
68
+ end
66
69
 
67
70
  # Register in DNS
68
71
  @aws.setroute53(@options[:zone], @fqdn)
@@ -88,6 +91,7 @@ module Sortinghat
88
91
 
89
92
  private
90
93
 
94
+ # Method to check that we have write permissions to /etc/*
91
95
  def checkpermissions()
92
96
  unless File.stat('/etc/hosts').writable?
93
97
  # We found it, log error and exit successfully
@@ -96,40 +100,46 @@ module Sortinghat
96
100
  end
97
101
  end
98
102
 
99
- def cleanup!(array)
100
- array.reject! { |item| item.nil? }
101
- return [] if array.empty?
102
- array.select! { |name| name.include?(@options[:env]) and name.include?(@options[:client]) and name.include?(@options[:type]) }
103
+ # Method to cleanup the array returned by aws.discover()
104
+ # Remove nil values basically
105
+ def cleanup(array)
106
+ clean = array.reject { |item| item.nil? }
107
+ return [] if clean.empty?
108
+ clean
103
109
  end
104
110
 
111
+ # Method to consume the alive array and figure out what this instance's prefix should be
105
112
  def selection(array)
106
- # If array is nil, just return 01
107
- return 1 if array.nil?
113
+ # If array is empty, just return 01
114
+ return 1 if array.empty?
108
115
 
109
- # Array to store the numbers already taken
116
+ # Array to store the numbers already taken
110
117
  taken = Array.new
111
-
118
+
112
119
  # Filter the incoming array, find the numbers and store them in the taken Array
113
120
  array.each { |string| taken << string.scan(/\d./).join('').sub(/^0+/, '').to_i }
114
-
121
+
115
122
  # We have two digits, define our range of numbers
116
123
  limits = (1..99).to_a
117
124
 
118
- # Return the first value once we find what isn't taken in our range of numbers
125
+ # Return the first value once we find what isn't taken in our range of numbers
119
126
  (limits - taken)[0]
120
127
  end
121
128
 
129
+ # Method to ensure our prefix always has a leading 0 if < 10
122
130
  def ensurezero(prefix)
123
131
  if prefix < 10
124
132
  prefix.to_s.rjust(2, "0")
125
133
  end
126
134
  end
127
135
 
136
+ # Method to construct our instance variables @hostname and @fqdn
128
137
  def construction()
129
138
  @hostname = "#{@options[:client]}-#{@options[:env]}-#{@options[:type]}#{@prefix.to_s}-#{@options[:region]}"
130
139
  @fqdn = "#{@options[:client]}-#{@options[:env]}-#{@options[:type]}#{@prefix.to_s}-#{@options[:region]}.#{@options[:zone]}"
131
140
  end
132
141
 
142
+ # Method to set the local hostname on this instance
133
143
  def setlocal()
134
144
  if system("hostnamectl set-hostname #{@fqdn}")
135
145
  @log.info("Set the localhost hostname to #{@fqdn}.")
@@ -139,9 +149,9 @@ module Sortinghat
139
149
  def sethostsfile()
140
150
  # Store the ip address so we only make one metadata call here
141
151
  privateip = @aws.privateip()
142
- if File.readlines('/etc/hosts').grep(/#{@hostname}|#{privateip}/).size < 1
152
+ if File.readlines('/etc/hosts').grep(/#{@hostname}|#{privateip}/).size < 1
143
153
  File.open('/etc/hosts', 'a') do |file|
144
- file.puts "#{@privateip} \t #{@hostname} #{@fqdn}"
154
+ file.puts "#{privateip} \t #{@hostname} #{@fqdn}"
145
155
  end
146
156
  @log.info("Added hostname(s) to /etc/hosts.")
147
157
  else
@@ -1,3 +1,3 @@
1
1
  module Sortinghat
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sortinghat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - D. Pramann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-18 00:00:00.000000000 Z
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler