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 +4 -4
- data/README.md +1 -0
- data/lib/generator/generator.rb +1 -0
- data/lib/generator/service.rb +16 -11
- data/lib/helpers/helpers.rb +23 -3
- data/lib/linter/config_linter.rb +3 -3
- data/lib/linter/services_linter.rb +12 -8
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33e9da4826b7c811df4e0bdf35383788e850bb26
|
4
|
+
data.tar.gz: 47dec9e45bb96c348427ecbaab2a9bc045fada2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/generator/generator.rb
CHANGED
@@ -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
|
data/lib/generator/service.rb
CHANGED
@@ -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
|
-
|
31
|
-
|
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].
|
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
|
data/lib/helpers/helpers.rb
CHANGED
@@ -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
|
-
|
66
|
-
|
67
|
-
|
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
|
data/lib/linter/config_linter.rb
CHANGED
@@ -14,7 +14,7 @@ module PropertyGenerator
|
|
14
14
|
else
|
15
15
|
tests = ['config_has_correct_keys',
|
16
16
|
'environment_configs_match_environments_list',
|
17
|
-
'
|
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
|
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
|
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 = [
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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.
|
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
|