idlc-sdk-deploy 1.0.11 → 1.0.12

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
- SHA1:
3
- metadata.gz: 55f1fb707783b9236f5dd7d117f57cc7e9429408
4
- data.tar.gz: 34b87e6c7f73172749914df6539aecd34474fec2
2
+ SHA256:
3
+ metadata.gz: 0a80d2a39a02c2bdc8c471068b422f9511794ac368bed6051217270746cfbd21
4
+ data.tar.gz: b404bd025951c6b183672aebd8b50d2d280114128ebf85c13b5ab166e6ceae03
5
5
  SHA512:
6
- metadata.gz: 9a62afbc7c8dba838f7e6db5bb6b28bb8c5347748cc1ac4caca73791ead73ca0a7222d4519162e061cfc86dc2c997085cab7ff9b939e097f2433acbf4dfdb529
7
- data.tar.gz: 64c8b84d1999d5a52e322d07d25118c0464ba6e5c476a209cc64324d8b186e4eb6d5a835d2f71327f4e3be65730f73ef65e7578ebe9390ed0edd35a284eade5a
6
+ metadata.gz: e471ff597f02e73f0a2435f51c3adde4dd627ba51ceaad8805b4cade420f096ae1fc5b9473a98e4adecda6c376d4c3215675a88ba1b208cd570ae8167b0fdbb1
7
+ data.tar.gz: df78e0e97c73a1959b9b5554f3c7126112510833a130347bdd2a2e4d03896db90d9226ff534c1d3117ce2c389c91f6cd8421e9ea8b600d996622c791d456cf53
@@ -1,6 +1,8 @@
1
1
  require 'aws-sdk-elasticsearchservice'
2
+ require 'aws-sdk-ec2'
2
3
  require 'aws-sigv4'
3
4
  require 'net/https'
5
+ require 'net/http'
4
6
  require 'net-telnet'
5
7
  require 'rspec/core/rake_task'
6
8
  require 'sshkey'
@@ -22,43 +22,23 @@ module Idlc
22
22
  `#{Terraform::Binary::Command.binary} output #{key}`.strip!
23
23
  end
24
24
 
25
- def get_env_metadata(env_key)
26
- client = Idlc::AWSLambdaProxy.new()
27
-
28
- request = {
29
- service: 'deploy',
30
- method: 'GET',
31
- lambda: 'metadata',
32
- pathParameters: {
33
- jobName: env_key
34
- }
35
- }
36
- metadata = client.fetch(request)['deployments'].first
37
-
38
- request = {
39
- service: 'config',
40
- method: 'GET',
41
- lambda: "accounts",
42
- pathParameters: {
43
- accountName: metadata['environment']['account_alias']
44
- }
45
- }
46
- account = client.fetch(request)
25
+ def whoami
26
+ # This method is meant to be run on an instance inside of a chef run to
27
+ # provision instance and environment metadata.
47
28
 
48
- metadata['account'] = account['accounts'].first
29
+ # `default` is a reserved var available in a Chef run
49
30
 
50
- request = {
51
- service: 'config',
52
- method: 'GET',
53
- lambda: "applications",
54
- pathParameters: {
55
- appName: metadata['environment']['application_name'].downcase
56
- }
57
- }
58
- application = client.fetch(request)
31
+ ENV['AWS_REGION'] = 'us-east-1' if ENV['AWS_REGION'].nil?
32
+ default['aws']['region'] = ENV['AWS_REGION']
33
+
34
+ # Get the current instance id from the instance metadata.
35
+ instance = get_instance
59
36
 
60
- metadata['application'] = application['applications'].first
61
- metadata
37
+ default['environment_key'] = instance['tags']['environment_key']
38
+ default['curr_node']['hostname'] = set_hostname(instance)
39
+
40
+ # return environment metadata
41
+ get_env_metadata(instance['tags']['environment_key'])
62
42
  end
63
43
  end
64
44
 
@@ -99,6 +79,93 @@ module Idlc
99
79
 
100
80
  private
101
81
 
82
+ def get_instance
83
+ # Get the current instance id from the instance metadata.
84
+ metadata_endpoint = 'http://169.254.169.254/latest/meta-data/'
85
+ instance_id = Net::HTTP.get( URI.parse( metadata_endpoint + 'instance-id' ) )
86
+
87
+ # Create instance object with instance id.
88
+ instance = Aws::EC2::Instance.new( id: instance_id, region: ENV['AWS_REGION'] )
89
+ instance['instance_id'] = instance_id
90
+
91
+ instance.tags.each do |tag|
92
+ # Grab all of the tags as node attributes
93
+ instance['tags'][tag.key] = tag.value
94
+ end
95
+
96
+ instance
97
+ end
98
+
99
+ def set_hostname (instance)
100
+ hostname = instance['tags']['Name']
101
+
102
+ unless (instance['tags']['Name'].start_with? 'db')
103
+ # Use instance id for unique hostname
104
+ hostname = instance['tags']['Name'][0..4] + '-' + instance['instance_id'][2..10]
105
+ end
106
+
107
+ instance.create_tags(
108
+ dry_run: false,
109
+ tags: [ # required
110
+ {
111
+ key: 'hostname',
112
+ value: hostname
113
+ }
114
+ ]
115
+ )
116
+
117
+ #return
118
+ hostname
119
+ end
120
+
121
+ def get_env_metadata(env_key)
122
+ client = Idlc::AWSLambdaProxy.new()
123
+
124
+ request = {
125
+ service: 'deploy',
126
+ method: 'GET',
127
+ lambda: 'metadata',
128
+ pathParameters: {
129
+ jobName: env_key
130
+ }
131
+ }
132
+ metadata = client.fetch(request)['deployments'].first
133
+
134
+ request = {
135
+ service: 'config',
136
+ method: 'GET',
137
+ lambda: "accounts",
138
+ pathParameters: {
139
+ accountName: metadata['environment']['account_alias']
140
+ }
141
+ }
142
+ account = client.fetch(request)
143
+
144
+ metadata['account'] = account['accounts'].first
145
+
146
+ request = {
147
+ service: 'config',
148
+ method: 'GET',
149
+ lambda: "applications",
150
+ pathParameters: {
151
+ appName: metadata['environment']['application_name'].downcase
152
+ }
153
+ }
154
+ application = client.fetch(request)
155
+
156
+ metadata['application'] = application['applications'].first
157
+
158
+ # find db instance
159
+ metadata['instances'].each do |instance|
160
+ if instance['hostname'].start_with? 'db'
161
+ metadata['db_instance'] = instance
162
+ break
163
+ end
164
+ end
165
+
166
+ metadata
167
+ end
168
+
102
169
  def configure_tfstatev8(bucket, sub_bucket, working_directory)
103
170
  args = []
104
171
  args << '-backend=s3'
@@ -1,5 +1,5 @@
1
1
  module Idlc
2
2
  module Deploy
3
- VERSION = '1.0.11'.freeze
3
+ VERSION = '1.0.12'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idlc-sdk-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Cazell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-26 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -224,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
224
  version: '0'
225
225
  requirements: []
226
226
  rubyforge_project:
227
- rubygems_version: 2.6.11
227
+ rubygems_version: 2.7.3
228
228
  signing_key:
229
229
  specification_version: 4
230
230
  summary: IDLC SDK for AWS resources - Deploy