environments-list-builder 0.2.0 → 0.3.0

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: 3b2b20fdbab58465704fda937945c41e9540e121
4
- data.tar.gz: 82c7d922fc1be3b139ec96a2c0f536d8a71e8326
3
+ metadata.gz: d8bffe360af78d91a16d39cc846005da7d71a322
4
+ data.tar.gz: 38b99640addaf84a77dfd9a4177230d97bd67940
5
5
  SHA512:
6
- metadata.gz: 558440a865cb918b61da36274e6ce574afa41f240169a3941b90247a304e3c4443789eef42d0b29d3ee60573b12e028fbfad269270bd674e1af1089996e131e7
7
- data.tar.gz: d63e21fa73dd64e2f30d3a489d7d8851e0910a3005cbc35bc03e8f1efcba54d3337a318e822068df712fdfdac0adff3373847144ffcb7818d9806804a6c3cd10
6
+ metadata.gz: 82d806b20e546257194fa20107d3d316a5c6b60e832aa3412898a918bfbde9748860341d778d578b6f7e54c830f96f4a20c4cc081e419ddb2a18a3a142c9202f
7
+ data.tar.gz: a589f3446a8b10784400f9cb3ed99d1f9f4376c09c4dc5c860f42873f1066dd32c760ae8ac8b29d05129f01892403b25fd814cc99592e503c314eccc8c1642ce
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- environments-list-builder (0.2.0)
4
+ environments-list-builder (0.3.0)
5
5
  archive-tar-minitar (= 0.5.2)
6
6
  awesome_print
7
7
  aws-sdk (>= 2.0, < 2.1)
@@ -24,7 +24,7 @@ PATH
24
24
  PATH
25
25
  remote: ../cicd-builder
26
26
  specs:
27
- cicd-builder (0.9.60)
27
+ cicd-builder (0.9.61)
28
28
  artifactory (>= 2.2.1, < 2.3)
29
29
  awesome_print (>= 1.6, < 2.0)
30
30
  aws-sdk (>= 2.0, < 2.1)
@@ -31,15 +31,34 @@ module CiCd
31
31
  }
32
32
  end
33
33
 
34
+ # ---------------------------------------------------------------------------------------------------------------
35
+ def checkEnvironment()
36
+ @logger.step CLASS+'::'+__method__.to_s
37
+ # We fake some of the keys that the will need later ...
38
+ fakes = @default_options[:env_keys].select{|key| key =~ /^(CLASSES|REPO_PRODUCTS|MANIFEST_FILE)/}
39
+ faked = {}
40
+ fakes.each do |key|
41
+ unless ENV.has_key?(key)
42
+ ENV[key]='faked'
43
+ faked[key] = true
44
+ end
45
+ end
46
+ ret = super
47
+ faked.each do |k,_|
48
+ ENV.delete k
49
+ @default_options[:env_unused].delete k if @default_options[:env_unused]
50
+ end
51
+ @default_options[:env_unused] = @default_options[:env_unused].select{|k| k !~ /^(ARTIFACTORY|AWS_INI)/} if @default_options[:env_unused]
52
+ ret
53
+ end
54
+
34
55
  # ---------------------------------------------------------------------------------------------------------------
35
56
  def setup()
36
57
  $stdout.write("EnvironmentsListBuilder v#{CiCd::Builder::EnvironmentsList::VERSION}\n")
37
58
  @default_options[:env_keys] << %w(
38
- REPO_PRODUCTS
39
59
  ARTIFACTORY_RELEASE_REPO
40
60
  ARTIFACTORY_ENVIRONMENTS_MODULE
41
61
  )
42
- @default_options[:env_keys] = @default_options[:env_keys].select{|key| key !~ /^CLASSES/}
43
62
  super
44
63
  end
45
64
 
@@ -26,6 +26,25 @@ module CiCd
26
26
  @vars[:return_code]
27
27
  end
28
28
 
29
+ # ---------------------------------------------------------------------------------------------------------------
30
+ def loadEnvironments(filename,version,changed=false)
31
+ require 'hashie'
32
+ @vars[:environments] = {
33
+ file: filename,
34
+ version: version,
35
+ changed: (changed or not File.exists?(filename)),
36
+ }
37
+ data = IO.read(filename) rescue '{}'
38
+ json = begin
39
+ JSON.parse(data)
40
+ rescue
41
+ eval(data)
42
+ end
43
+ IO.write(filename, JSON.pretty_generate(json, {indent: "\t", space: ' '})) # Just to be tidy :)
44
+ @vars[:environments][:data] = Hashie::Mash.new(json)
45
+ @logger.info "#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']}-#{version}"
46
+ end
47
+
29
48
  # ---------------------------------------------------------------------------------------------------------------
30
49
  def getLatestEnvironments(oldver=nil)
31
50
  version = @repo.latestArtifactoryVersion(ENV['ARTIFACTORY_ENVIRONMENTS_MODULE'], ENV['ARTIFACTORY_RELEASE_REPO'])
@@ -37,23 +56,7 @@ module CiCd
37
56
  @logger.error "Too many versions found for #{ENV['ARTIFACTORY_RELEASE_REPO']}/#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']}-#{version} during preparation?"
38
57
  @vars[:return_code] = Errors::ARTIFACT_MULTI_MATCH
39
58
  else
40
- require 'hashie'
41
- filename = objects[0].download()
42
- @vars[:environments] = {
43
- file: filename,
44
- # artifact: objects[0],
45
- version: version,
46
- changed: false,
47
- }
48
- data = IO.read(filename)
49
- json = begin
50
- JSON.parse(data)
51
- rescue
52
- eval(data)
53
- end
54
- IO.write(filename, JSON.pretty_generate(json, {indent: "\t", space: ' '})) # Just to be tidy :)
55
- @vars[:environments][:data] = Hashie::Mash.new(json)
56
- @logger.info "#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']}-#{version}"
59
+ loadEnvironments(objects[0].download(), version)
57
60
  end
58
61
  else
59
62
  @logger.error "Version not found for #{ENV['ARTIFACTORY_RELEASE_REPO']}/#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']}-#{version} during preparation?"
@@ -63,8 +66,9 @@ module CiCd
63
66
  @logger.info "Alread have the latest version (#{oldver})"
64
67
  end
65
68
  else
66
- @logger.error "No version found for #{ENV['ARTIFACTORY_RELEASE_REPO']}/#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']} during preparation?"
67
- @vars[:return_code] = Errors::ARTIFACT_NOT_FOUND
69
+ @logger.warn "No version found for #{ENV['ARTIFACTORY_RELEASE_REPO']}/#{ENV['ARTIFACTORY_ENVIRONMENTS_MODULE']} during preparation?"
70
+ # @vars[:return_code] = Errors::ARTIFACT_NOT_FOUND
71
+ loadEnvironments('/tmp/environments.json', '1', true)
68
72
  end
69
73
  @vars[:return_code]
70
74
  end
@@ -97,13 +101,19 @@ module CiCd
97
101
  helper.options[:profiles] = ENV['AWS_PROFILES'] if ENV['AWS_PROFILES']
98
102
  helper.prepare_accounts
99
103
  if helper.accounts.size > 0
100
- helper.get_environments()
101
- if helper.environments.size > 0
104
+ helper_environments = loadCachedEnvironments()
105
+ unless helper_environments.size > 0
106
+ helper.get_environments()
107
+ helper_environments = helper.environments
108
+ saveCachedEnvironments(helper_environments)
109
+ end
110
+
111
+ if helper_environments.size > 0
102
112
  getLatestEnvironments(@vars[:environments][:version])
103
113
  if 0 == @vars[:return_code]
104
114
  environments = Hashie::Mash.new(@vars[:environments][:data])
105
115
  exclude_regex = ENV['ENVS_EXCLUDE_REGEX'] || '-repo'
106
- helper.environments.select{|e,_| e !~ /#{exclude_regex}/ }.each do |envnam,_|
116
+ helper_environments.select{|e,_| e !~ /#{exclude_regex}/ }.each do |envnam,_|
107
117
  environments[envnam] ||= {}
108
118
  end
109
119
  if environments.size != @vars[:environments][:data].size
@@ -129,6 +139,32 @@ module CiCd
129
139
 
130
140
  protected
131
141
 
142
+ CACHE_FILE = '/tmp/aws_cloudformation_environments_stacks.json'
143
+ # ---------------------------------------------------------------------------------------------------------------
144
+ def loadCachedEnvironments
145
+ hash = {}
146
+ # if File.exists?(CACHE_FILE)
147
+ # end
148
+ begin
149
+ stat = File.stat(CACHE_FILE)
150
+ age = (Time.now - stat.mtime)
151
+ @logger.info "Environment stacks cache #{CACHE_FILE} age is #{age}s"
152
+ if age < 3600
153
+ hash = JSON.parse(IO.read(CACHE_FILE))
154
+ else
155
+ hash = {}
156
+ end
157
+ rescue
158
+ hash = {}
159
+ end
160
+ hash
161
+ end
162
+
163
+ # ---------------------------------------------------------------------------------------------------------------
164
+ def saveCachedEnvironments(environments)
165
+ IO.write(CACHE_FILE,JSON.pretty_generate(environments,{ indent: "\t", space: ' '}))
166
+ end
167
+
132
168
  def prepare_accounts
133
169
  @accounts = []
134
170
  if @options[:iniglob]
@@ -2,7 +2,7 @@ module CiCd
2
2
  module Builder
3
3
  module EnvironmentsList
4
4
  # environments-list-builder version
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  MAJOR, MINOR, TINY = VERSION.split('.')
7
7
  PATCH = TINY
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: environments-list-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christo De Lange
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: manifest-builder