cps-property-generator 0.2.2 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|