environments-list-builder 0.2.0 → 0.3.0

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: 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