genome 0.1.0 → 0.1.1
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/.gitignore +1 -1
- data/lib/genome/builder.rb +21 -15
- data/lib/genome/error.rb +8 -0
- data/lib/genome/parameter.rb +71 -0
- data/lib/genome/resource.rb +23 -5
- data/lib/genome/resources/documentdb.rb +79 -13
- data/lib/genome/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65776260dc82ffcf09195b7d88e38b9c0c6531e26689140fde6db61041718df4
|
4
|
+
data.tar.gz: 7474b6aed06682d8fa85191137b0cccedd91c832fab09a3a11a70d8c2d091e0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4df7c0bb09d173c65ea59be9cd7b5f47bf6eb0a7447eec9322e69f74721421ae2d4c6ab0dca2f02806f130e0a7a3d59cc862ba4ffb2de3bc8ac2cffb44a73010
|
7
|
+
data.tar.gz: 54b94dd8b505d0d002fabbfa00f2677b38aa1675be332f48b4a81b8b1446afdbeb36d7eb9c1d4c5d3c961d212eb419b37cda72d9b581d0833c72577b667ebeb8
|
data/.gitignore
CHANGED
data/lib/genome/builder.rb
CHANGED
@@ -9,16 +9,22 @@ module Genome
|
|
9
9
|
resources = {}
|
10
10
|
|
11
11
|
resource.templates.each do |template_name, template|
|
12
|
-
|
12
|
+
properties = evaluate_properties(template[:properties])
|
13
13
|
|
14
14
|
dependencies = template[:dependencies]
|
15
15
|
|
16
|
-
resource_template = template[:klass].new(template_name,
|
16
|
+
resource_template = template[:klass].new(template_name, properties, dependencies)
|
17
17
|
|
18
18
|
resources.merge!(resource_template.to_h)
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
parameters = {}
|
22
|
+
|
23
|
+
resource.parameters.each do |_parameter_name, parameter|
|
24
|
+
parameters.merge!(parameter.to_h)
|
25
|
+
end
|
26
|
+
|
27
|
+
generate_document(resources: resources, parameters: parameters, description: resource.resource_description)
|
22
28
|
end
|
23
29
|
|
24
30
|
def self.generate_document(metadata: {}, description: nil, resources: {}, parameters: {}, outputs: {})
|
@@ -32,27 +38,27 @@ module Genome
|
|
32
38
|
}
|
33
39
|
end
|
34
40
|
|
35
|
-
def self.
|
36
|
-
# TODO: convert classes and helper functions into appropriate
|
37
|
-
|
41
|
+
def self.evaluate_properties(properties)
|
42
|
+
# TODO: convert classes and helper functions into appropriate properties
|
43
|
+
processed_properties = {}
|
38
44
|
|
39
|
-
|
40
|
-
|
45
|
+
properties.each do |properties_name, properties_value|
|
46
|
+
processed_properties[properties_name] = evaluate_properties_value(properties_value)
|
41
47
|
end
|
42
48
|
|
43
|
-
|
49
|
+
processed_properties
|
44
50
|
end
|
45
51
|
|
46
|
-
def self.
|
47
|
-
case
|
52
|
+
def self.evaluate_properties_value(properties_value)
|
53
|
+
case properties_value
|
48
54
|
when Array
|
49
|
-
|
50
|
-
|
55
|
+
properties_value.map do |single_properties_value|
|
56
|
+
evaluate_properties_value(single_properties_value)
|
51
57
|
end
|
52
58
|
when Genome::Reference
|
53
|
-
{ Ref:
|
59
|
+
{ Ref: properties_value.reference_name }
|
54
60
|
else
|
55
|
-
|
61
|
+
properties_value
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
data/lib/genome/error.rb
CHANGED
@@ -5,5 +5,13 @@ module Genome
|
|
5
5
|
class DuplicateProperty < Base; end
|
6
6
|
|
7
7
|
class DuplicateTemplate < Base; end
|
8
|
+
|
9
|
+
class DuplicateParameter < Base; end
|
10
|
+
|
11
|
+
class MissingParameterName < Base; end
|
12
|
+
|
13
|
+
class UnknownParameter < Base; end
|
14
|
+
|
15
|
+
class InvalidParameterType < Base; end
|
8
16
|
end
|
9
17
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative 'error'
|
2
|
+
|
3
|
+
module Genome
|
4
|
+
class Parameter
|
5
|
+
PARAMETERS = {
|
6
|
+
AllowedPattern: { type: :string },
|
7
|
+
AllowedValues: { type: :array },
|
8
|
+
ConstraintDescription: { type: :string },
|
9
|
+
Default: { type: :any },
|
10
|
+
Description: { type: :string },
|
11
|
+
MaxLength: { type: :integer },
|
12
|
+
MaxValue: { type: :integer },
|
13
|
+
MinLength: { type: :integer },
|
14
|
+
MinValue: { type: :integer },
|
15
|
+
NoEcho: { type: :boolean },
|
16
|
+
Type: { type: :string },
|
17
|
+
}.freeze
|
18
|
+
|
19
|
+
attr_reader :parameter_name
|
20
|
+
attr_accessor :parameter_options
|
21
|
+
|
22
|
+
def initialize(parameter_name:, parameter_options: {})
|
23
|
+
validate_parameter_options!(parameter_options)
|
24
|
+
|
25
|
+
@parameter_name = parameter_name
|
26
|
+
@parameter_options = parameter_options
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_parameter_options!(parameter_options)
|
30
|
+
parameter_options.each do |parameter_option_name, parameter_option_value|
|
31
|
+
parameter_option_rules = PARAMETERS[parameter_option_name]
|
32
|
+
|
33
|
+
raise Error::UnknownParameter, "Unknown parameter '#{parameter_option_name}'" unless parameter_option_rules
|
34
|
+
|
35
|
+
allowed_parameter_type = parameter_option_rules[:type]
|
36
|
+
|
37
|
+
raise Error::InvalidParameterType, "Invalid parameter type #{{
|
38
|
+
parameter_value: parameter_value,
|
39
|
+
allowed_parameter_type: allowed_parameter_type,
|
40
|
+
}}" unless check_parameter_type(parameter_option_value, allowed_parameter_type)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def check_parameter_type(parameter_value, allowed_parameter_type)
|
45
|
+
case allowed_parameter_type
|
46
|
+
when :string
|
47
|
+
parameter_value.is_a?(String)
|
48
|
+
when :integer
|
49
|
+
begin
|
50
|
+
Integer(parameter_value)
|
51
|
+
|
52
|
+
true
|
53
|
+
rescue
|
54
|
+
false
|
55
|
+
end
|
56
|
+
when :boolean
|
57
|
+
['true', 'false'].include?(parameter_value.to_s.downcase)
|
58
|
+
when :array
|
59
|
+
parameter_value.is_a?(Array)
|
60
|
+
when :any
|
61
|
+
true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_h
|
66
|
+
{
|
67
|
+
parameter_name => parameter_options
|
68
|
+
}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/genome/resource.rb
CHANGED
@@ -3,6 +3,7 @@ require 'active_support/concern'
|
|
3
3
|
require 'active_support/core_ext'
|
4
4
|
|
5
5
|
require_relative 'error'
|
6
|
+
require_relative 'parameter'
|
6
7
|
require_relative 'reference'
|
7
8
|
|
8
9
|
module Genome
|
@@ -11,19 +12,20 @@ module Genome
|
|
11
12
|
|
12
13
|
included do
|
13
14
|
class_attribute :templates, default: {}
|
15
|
+
class_attribute :parameters, default: {}
|
14
16
|
class_attribute :references, default: []
|
15
|
-
class_attribute :
|
17
|
+
class_attribute :resource_description
|
16
18
|
end
|
17
19
|
|
18
20
|
module ClassMethods
|
19
|
-
def template(template_name, template_klass,
|
20
|
-
raise Error::DuplicateTemplate, "Duplicate template name defined '#{template_name}'" if
|
21
|
+
def template(template_name, template_klass, template_properties)
|
22
|
+
raise Error::DuplicateTemplate, "Duplicate template name defined '#{template_name}'" if templates.key?(template_name)
|
21
23
|
|
22
|
-
dependencies =
|
24
|
+
dependencies = template_properties.delete(:DependsOn)
|
23
25
|
|
24
26
|
templates[template_name] = {
|
25
27
|
klass: template_klass,
|
26
|
-
|
28
|
+
properties: template_properties,
|
27
29
|
dependencies: dependencies,
|
28
30
|
}
|
29
31
|
end
|
@@ -33,6 +35,22 @@ module Genome
|
|
33
35
|
remove_dependencies(template_name)
|
34
36
|
end
|
35
37
|
|
38
|
+
def description(description)
|
39
|
+
@resource_description = description
|
40
|
+
end
|
41
|
+
|
42
|
+
def parameter(parameter_name, parameter_options = {})
|
43
|
+
raise Error::DuplicateParameter, "Duplicate parameter name defined '#{parameter_name}'" if parameters.key?(parameter_name)
|
44
|
+
|
45
|
+
parameters[parameter_name] = Parameter.new(parameter_name: parameter_name, parameter_options: parameter_options)
|
46
|
+
end
|
47
|
+
|
48
|
+
def override_parameter(parameter_name, parameter_options = {})
|
49
|
+
raise Error::MissingParameterName, "Parameter name not defined '#{parameter_name}'" unless parameters.key?(parameter_name)
|
50
|
+
|
51
|
+
parameters[parameter_name].parameter_options.merge!(parameter_options)
|
52
|
+
end
|
53
|
+
|
36
54
|
def remove_dependencies(*dependencies)
|
37
55
|
templates.each do |template_name, template_parameters|
|
38
56
|
dependencies.each do |dependency|
|
@@ -11,6 +11,62 @@ module Genome
|
|
11
11
|
class DocumentDB
|
12
12
|
include Resource
|
13
13
|
|
14
|
+
parameter :DocumentDBMasterUsername,
|
15
|
+
Default: 'master',
|
16
|
+
NoEcho: "true",
|
17
|
+
Description: "The database admin account username",
|
18
|
+
Type: "String",
|
19
|
+
MinLength: "1",
|
20
|
+
MaxLength: "16",
|
21
|
+
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*",
|
22
|
+
ConstraintDescription: "Must begin with a letter and contain only alphanumeric characters."
|
23
|
+
|
24
|
+
parameter :DocumentDBMasterPassword,
|
25
|
+
Default: 'anotverysecurepassword9876',
|
26
|
+
NoEcho: "true",
|
27
|
+
Description: "The database admin account password",
|
28
|
+
Type: "String",
|
29
|
+
MinLength: "1",
|
30
|
+
MaxLength: "41",
|
31
|
+
AllowedPattern: "[a-zA-Z0-9]+",
|
32
|
+
ConstraintDescription: "Must contain only alphanumeric characters."
|
33
|
+
|
34
|
+
parameter :DocumentDBSubnetGroupName,
|
35
|
+
Default: 'documentdb-subnet-group',
|
36
|
+
Description: "Subnet group name",
|
37
|
+
Type: "String",
|
38
|
+
MinLength: "1",
|
39
|
+
MaxLength: "64",
|
40
|
+
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*",
|
41
|
+
ConstraintDescription: "Must begin with a letter and contain only alphanumeric characters."
|
42
|
+
|
43
|
+
parameter :DocumentDBParameterGroupName,
|
44
|
+
Default: 'documentdb-parameter-group',
|
45
|
+
Description: "Parameter group name",
|
46
|
+
Type: "String",
|
47
|
+
MinLength: "1",
|
48
|
+
MaxLength: "64",
|
49
|
+
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*",
|
50
|
+
ConstraintDescription: "Must begin with a letter and contain only alphanumeric characters."
|
51
|
+
|
52
|
+
parameter :DocumentDBClusterIdentifier,
|
53
|
+
Default: 'documentdb-cluster',
|
54
|
+
Description: "Cluster identifier",
|
55
|
+
Type: "String",
|
56
|
+
MinLength: "1",
|
57
|
+
MaxLength: "64",
|
58
|
+
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*",
|
59
|
+
ConstraintDescription: "Must begin with a letter and contain only alphanumeric characters."
|
60
|
+
|
61
|
+
parameter :DocumentDBInstanceIdentifier,
|
62
|
+
Default: 'documentdb-instance',
|
63
|
+
Description: "Instance identifier",
|
64
|
+
Type: "String",
|
65
|
+
MinLength: "1",
|
66
|
+
MaxLength: "64",
|
67
|
+
AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*",
|
68
|
+
ConstraintDescription: "Must begin with a letter and contain only alphanumeric characters."
|
69
|
+
|
14
70
|
template :DocumentDBEC2SVPC, Core::Templates::EC2VPC,
|
15
71
|
CidrBlock: '10.50.0.0/16',
|
16
72
|
EnableDnsSupport: true,
|
@@ -54,7 +110,7 @@ module Genome
|
|
54
110
|
|
55
111
|
template :DocumentDBSubnetGroup, Core::Templates::DocumentDBSubnetGroup,
|
56
112
|
DBSubnetGroupDescription: 'Maintained by Genome: Default DocumentDB Subnet Group',
|
57
|
-
DBSubnetGroupName:
|
113
|
+
DBSubnetGroupName: reference(:DocumentDBSubnetGroupName),
|
58
114
|
SubnetIds: [
|
59
115
|
reference(:DocumentDBEC2SubnetUSEast1A),
|
60
116
|
reference(:DocumentDBEC2SubnetUSEast1B),
|
@@ -71,9 +127,9 @@ module Genome
|
|
71
127
|
|
72
128
|
template :DocumentDBInstance, Core::Templates::DocumentDBInstance,
|
73
129
|
AutoMinorVersionUpgrade: true,
|
74
|
-
DBClusterIdentifier:
|
130
|
+
DBClusterIdentifier: reference(:DocumentDBClusterIdentifier),
|
75
131
|
DBInstanceClass: :'db.r4.large',
|
76
|
-
DBInstanceIdentifier:
|
132
|
+
DBInstanceIdentifier: reference(:DocumentDBInstanceIdentifier),
|
77
133
|
Tags: [
|
78
134
|
{ Key: :Resource, Value: :DocumentDBCluster }
|
79
135
|
],
|
@@ -84,7 +140,7 @@ module Genome
|
|
84
140
|
template :DocumentDBParameterGroup, Core::Templates::DocumentDBParameterGroup,
|
85
141
|
Description: 'Maintained by Genome: Default DocumentDB Parameter Group',
|
86
142
|
Family: 'docdb3.6',
|
87
|
-
Name:
|
143
|
+
Name: reference(:DocumentDBParameterGroupName),
|
88
144
|
Parameters: {
|
89
145
|
audit_logs: :enabled,
|
90
146
|
tls: :enabled,
|
@@ -95,11 +151,11 @@ module Genome
|
|
95
151
|
]
|
96
152
|
|
97
153
|
template :DocumentDBCluster, Core::Templates::DocumentDBCluster,
|
98
|
-
DBClusterIdentifier:
|
99
|
-
DBClusterParameterGroupName:
|
100
|
-
DBSubnetGroupName:
|
101
|
-
MasterUsername:
|
102
|
-
MasterUserPassword:
|
154
|
+
DBClusterIdentifier: reference(:DocumentDBClusterIdentifier),
|
155
|
+
DBClusterParameterGroupName: reference(:DocumentDBParameterGroupName),
|
156
|
+
DBSubnetGroupName: reference(:DocumentDBSubnetGroupName),
|
157
|
+
MasterUsername: reference(:DocumentDBMasterUsername),
|
158
|
+
MasterUserPassword: reference(:DocumentDBMasterPassword),
|
103
159
|
StorageEncrypted: true,
|
104
160
|
Tags: [
|
105
161
|
{ Key: :Resource, Value: :DocumentDBCluster }
|
@@ -120,19 +176,29 @@ module Genome
|
|
120
176
|
remove_template(:DocumentDBEC2SubnetUSEast1C)
|
121
177
|
end
|
122
178
|
|
179
|
+
def self.disable_tls
|
180
|
+
templates[:DocumentDBParameterGroup][:properties][:Parameters].merge!(
|
181
|
+
tls: :disabled
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
123
185
|
def self.subnet_ids(subnet_ids)
|
124
|
-
templates[:DocumentDBSubnetGroup][:
|
186
|
+
templates[:DocumentDBSubnetGroup][:properties].merge!(
|
187
|
+
SubnetIds: subnet_ids
|
188
|
+
)
|
125
189
|
end
|
126
190
|
|
127
191
|
def self.security_group_ids(security_group_ids)
|
128
|
-
templates[:DocumentDBCluster][:
|
192
|
+
templates[:DocumentDBCluster][:properties].merge!(
|
193
|
+
VpcSecurityGroupIds: security_group_ids
|
194
|
+
)
|
129
195
|
end
|
130
196
|
|
131
197
|
def self.add_cluster_dependencies(*dependencies)
|
132
|
-
cluster_dependencies = templates[:DocumentDBCluster][:
|
198
|
+
cluster_dependencies = templates[:DocumentDBCluster][:properties][:DependsOn] || []
|
133
199
|
cluster_dependencies += dependencies
|
134
200
|
|
135
|
-
templates[:DocumentDBCluster][:
|
201
|
+
templates[:DocumentDBCluster][:properties][:DependsOn] = cluster_dependencies
|
136
202
|
end
|
137
203
|
end
|
138
204
|
end
|
data/lib/genome/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hypernova2002
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-cloudformation
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/genome/core/templates/ecs_cluster.rb
|
131
131
|
- lib/genome/core/templates/sqs_queue.rb
|
132
132
|
- lib/genome/error.rb
|
133
|
+
- lib/genome/parameter.rb
|
133
134
|
- lib/genome/reference.rb
|
134
135
|
- lib/genome/resource.rb
|
135
136
|
- lib/genome/resources/documentdb.rb
|
@@ -156,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
157
|
- !ruby/object:Gem::Version
|
157
158
|
version: '0'
|
158
159
|
requirements: []
|
159
|
-
rubygems_version: 3.0.
|
160
|
+
rubygems_version: 3.0.2
|
160
161
|
signing_key:
|
161
162
|
specification_version: 4
|
162
163
|
summary: A library for create and maintaining cloud formation stacks
|