cps-property-generator 0.2.2 → 0.2.8

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: c2c3182d3570596a66dae2274f6932e625d547b8
4
- data.tar.gz: '081fb7ebbca1109a6491ad198098fd3aec6ecae7'
3
+ metadata.gz: 33e9da4826b7c811df4e0bdf35383788e850bb26
4
+ data.tar.gz: 47dec9e45bb96c348427ecbaab2a9bc045fada2e
5
5
  SHA512:
6
- metadata.gz: f899e27e4e8044eedf0adfcc4a4b0ad1a05f33611089efad77e74c70262148e80567ec2407afb58ea96c3ff4d13efad33ce4518d29184b918f868a73e1cfc7a6
7
- data.tar.gz: f39a9fa400e9a5b84b9ef20ef8ada773e7f7a8c0c9010af97cf65cec5d130ef6ec8e1c48792dce7318818f1c4af2eadbea8447c0f2cb834c1cb836c61554125c
6
+ metadata.gz: 2a4a98b7de3530d277542c38b1bff58d1b8a1b821eeec9bfe1e5c31222c05d7372fa38882f88f0896dff22da878f76c0427e6dbe21fd346a5b60f667835350fa
7
+ data.tar.gz: f135b5a38316ca0db25d998a85867749638ff897d863458b0d0168a9accb4f0b3debd82ff846f04bf29c21dbd74788eabc6fab241c4680cd86bae5253b7c8522
data/README.md CHANGED
@@ -24,6 +24,7 @@ In the config.yml file we need three keys set to explain our project to the gene
24
24
  * The one to one mapping or aws regions to environments.
25
25
  * The account a environment lives in.
26
26
  * Interpolations for a given environment. Interpolations will be explained in a separate section.
27
+ 4. The `vpc` key can be added under the environment name in the environment configs if you would like to run multiple environments in the same region. If you specify a VPC in one environment then a VPC must be specified in all environments. You can only specify one VPC per environment.
27
28
 
28
29
  Here is a example config.yml
29
30
  ```yaml
@@ -24,6 +24,7 @@ module PropertyGenerator
24
24
  def generate
25
25
  output = []
26
26
  @service_list.each do | service, path|
27
+ PropertyGenerator.config_enforcer(@configs.environment_configs)
27
28
  service_instance = PropertyGenerator::Service.new(YAML.load_file(path), @configs, @globals)
28
29
  service_instance.service
29
30
  service_instance.interpolate
@@ -1,6 +1,10 @@
1
1
  module PropertyGenerator
2
+
2
3
  class Service
4
+ require 'active_support/core_ext/hash'
5
+
3
6
  attr_accessor :service
7
+
4
8
  def initialize(service_data, config, globals)
5
9
  @service_data = service_data
6
10
  @environments = config.environments
@@ -26,19 +30,20 @@ module PropertyGenerator
26
30
  #get the map of config for a env
27
31
  interpolations = @environment_configs[env]['interpolations']
28
32
 
29
- #interate through the properties for an environment and gsub the config
30
- @service[env].each do | property_key, property_value|
31
- property_value_dup = property_value.dup
32
- interpolations.each do |matcher_key, matcher_value|
33
- if property_value.class == String && property_value_dup.include?("{#{matcher_key}}")
34
- @service[env][property_key] = property_value_dup.gsub!("{#{matcher_key}}", matcher_value)
35
- end
36
- end
37
- end
33
+ # Recursively interate through the properties for an environment and gsub the config
34
+ # with defined interpolations.
35
+ interpolate_nested_properties(@service[env], interpolations)
38
36
  end
39
37
  service
40
38
  end
41
39
 
40
+ def interpolate_nested_properties(service_env, interpolations)
41
+ interpolations.each do |matcher_key, matcher_value|
42
+ service_env.each { |k,v| service_env[k] = v.gsub("{#{matcher_key}}", matcher_value) if v.class == String && v.include?("{#{matcher_key}}")}
43
+ service_env.values.each { |v| interpolate_nested_properties(v, interpolations) if v.class == Hash }
44
+ end
45
+ end
46
+
42
47
  def merge_env_default(data, environments)
43
48
  #creates a hash of the enviornments merged with the defaults
44
49
  # {service => {env1 => {properties},
@@ -56,7 +61,7 @@ module PropertyGenerator
56
61
  environment_data = data['environments'][env].dup
57
62
  if data['encrypted']
58
63
  encrypted = data['encrypted'][env].dup unless data['encrypted'][env].nil?
59
- environment_data = data['environments'][env].merge(encrypted) unless encrypted.nil?
64
+ environment_data = data['environments'][env].deep_merge(encrypted) unless encrypted.nil?
60
65
  end
61
66
  if default_clone.nil?
62
67
  merged = environment_data
@@ -84,6 +89,6 @@ module PropertyGenerator
84
89
  output
85
90
  end
86
91
 
87
-
88
92
  end
93
+
89
94
  end
@@ -62,9 +62,17 @@ module PropertyGenerator
62
62
  account = environmental_configs[env]["account"]
63
63
  region = environmental_configs[env]["region"]
64
64
  json = JSON.pretty_generate({"properties" => finalized[env]})
65
- FileUtils.mkdir_p("#{output_path}/#{account}/#{region}/") unless Dir.exist?("#{output_path}/#{account}/#{region}/")
66
- File.write("#{output_path}/#{account}/#{region}/#{service_name}.json", json)
67
- output << "#{output_path}/#{account}/#{region}/#{service_name}.json"
65
+ #IF users are specifing a vpc then we will drop property files under the dir that corresponds to the vpc
66
+ if environmental_configs[env].key?("vpc") && !environmental_configs[env]["vpc"].nil?
67
+ vpc_dir = "#{output_path}/#{account}/#{region}/#{environmental_configs[env]["vpc"]}"
68
+ FileUtils.mkdir_p("#{vpc_dir}/") unless Dir.exist?(vpc_dir)
69
+ File.write("#{output_path}/#{account}/#{region}/#{environmental_configs[env]["vpc"]}/#{service_name}.json", json)
70
+ output << "#{output_path}/#{account}/#{region}/#{environmental_configs[env]["vpc"]}/#{service_name}.json"
71
+ else
72
+ FileUtils.mkdir_p("#{output_path}/#{account}/#{region}/") unless Dir.exist?("#{output_path}/#{account}/#{region}/")
73
+ File.write("#{output_path}/#{account}/#{region}/#{service_name}.json", json)
74
+ output << "#{output_path}/#{account}/#{region}/#{service_name}.json"
75
+ end
68
76
  end
69
77
  output
70
78
  end
@@ -78,5 +86,17 @@ module PropertyGenerator
78
86
  obj.upload_file(file)
79
87
  end
80
88
 
89
+ #Force users to specify VPCs for all environments if specified for one environment.
90
+ #This allows us to skip having conditional logic downstream in CPS requests
91
+ def config_enforcer(environment_configs)
92
+ a_vpc_exists = false
93
+ environment_configs.each do |environment, config|
94
+ if config.key?("vpc")
95
+ a_vpc_exists = true
96
+ elsif a_vpc_exists
97
+ raise("If you are using VPCs then a VPC must be specified for all environments in the environment_configs")
98
+ end
99
+ end
100
+ end
81
101
  end
82
102
  end
@@ -14,7 +14,7 @@ module PropertyGenerator
14
14
  else
15
15
  tests = ['config_has_correct_keys',
16
16
  'environment_configs_match_environments_list',
17
- 'environment_configs_have_matching_region_and_account_values',
17
+ 'environment_configs_have_valid_region_and_account_values',
18
18
  'environment_configs_have_well_formatted_interpolations',
19
19
  'config_file_is_present']
20
20
  end
@@ -61,12 +61,12 @@ module PropertyGenerator
61
61
  status
62
62
  end
63
63
 
64
- def environment_configs_have_matching_region_and_account_values
64
+ def environment_configs_have_valid_region_and_account_values
65
65
  status = {status: 'pass', error: ''}
66
66
  environments_missmatch_values = []
67
67
  any_missmatches = false
68
68
  @configs['environment_configs'].keys.each do |environment|
69
- unless @configs['environments'].include?(@configs['environment_configs'][environment]['region']) && @configs['accounts'].include?(@configs['environment_configs'][environment]['account'])
69
+ unless (@configs['environment_configs'][environment].key?('region')) && @configs['accounts'].include?(@configs['environment_configs'][environment]['account'])
70
70
  environments_missmatch_values << environment
71
71
  any_missmatches = true
72
72
  end
@@ -13,14 +13,16 @@ module PropertyGenerator
13
13
  end
14
14
 
15
15
  def run_services_tests
16
- tests = ['services_have_accepted_keys',
17
- 'service_environments_are_not_empty',
18
- 'service_defaults_have_no_hashes_as_values',
19
- 'service_environments_match_config_environments',
20
- 'service_environments_have_no_hashes_as_values',
21
- 'service_encrypted_environments_match_config_environments',
22
- 'service_encrypted_fields_are_correct',
23
- 'service_encrypted_region_field_is_accepted']
16
+ tests = [
17
+ 'services_have_accepted_keys',
18
+ 'service_environments_are_not_empty',
19
+ 'service_defaults_have_no_hashes_as_values',
20
+ 'service_environments_match_config_environments',
21
+ 'service_environments_have_no_hashes_as_values',
22
+ 'service_encrypted_environments_match_config_environments',
23
+ 'service_encrypted_fields_are_correct',
24
+ 'service_encrypted_region_field_is_accepted'
25
+ ]
24
26
  results = PropertyGenerator.test_runner(self, tests)
25
27
  results
26
28
  end
@@ -162,6 +164,8 @@ module PropertyGenerator
162
164
  properties.each do |property, value|
163
165
  if value == nil
164
166
  services_with_unacceptable_keys << {path => {environment => property}}
167
+ elsif value['$ssm'] == nil
168
+ services_with_unacceptable_keys << {path => {environment => property}}
165
169
  else
166
170
  if value['$ssm'] != nil
167
171
  value['$ssm'].keys.each do |key|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cps-property-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Call
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.2.11.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.2.11.1
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: terminal-table
43
57
  requirement: !ruby/object:Gem::Requirement