cloudspin-stack 0.1.14 → 0.1.15
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/lib/cloudspin/stack/definition.rb +19 -29
- data/lib/cloudspin/stack/instance.rb +51 -42
- data/lib/cloudspin/stack/instance_configuration.rb +66 -0
- data/lib/cloudspin/stack/version.rb +1 -1
- data/lib/cloudspin/stack.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52f063b9cb944926767a548fc4e404c6943a5c4c
|
4
|
+
data.tar.gz: daf3e7c38fa7d9373541d7b3b68d2d618fede492
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 135e7bb6999312d2028af2bee79348a154b0f0f65a5a256f30064fe24b7e73e0817e476aca0cb51e33ba5bad30df3fa3466313dcf5c2fc95823ecc7bb03ff661
|
7
|
+
data.tar.gz: cb2d6e3b39bb4fff1f69bf89aa32b41f291bc491f21b620fad0a944251b3c6a7bf56b42baefa37b0ab4ed0161aa0aba4d17e2e0cc59c21cb881eb590eedbc8a1
|
@@ -6,43 +6,33 @@ module Cloudspin
|
|
6
6
|
|
7
7
|
attr_reader :name
|
8
8
|
attr_reader :version
|
9
|
-
attr_reader :
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
resource_names: [],
|
16
|
-
stack: {})
|
17
|
-
@terraform_source_path = terraform_source_path
|
18
|
-
@parameter_names = parameter_names
|
19
|
-
@resource_names = resource_names
|
20
|
-
@name = stack[:name] || 'NO_NAME'
|
21
|
-
@version = stack[:version] || '0'
|
9
|
+
attr_reader :source_path
|
10
|
+
|
11
|
+
def initialize(source_path:, stack_name:, stack_version: '0')
|
12
|
+
@source_path = source_path
|
13
|
+
@name = stack_name
|
14
|
+
@version = stack_version
|
22
15
|
end
|
23
16
|
|
24
17
|
def self.from_file(specfile)
|
25
|
-
raise
|
18
|
+
raise NoStackDefinitionConfigurationFile unless File.exists?(specfile)
|
19
|
+
source_path = File.dirname(specfile)
|
26
20
|
spec_hash = YAML.load_file(specfile)
|
27
|
-
|
28
|
-
|
29
|
-
|
21
|
+
self.new(
|
22
|
+
source_path: source_path,
|
23
|
+
stack_name: spec_hash.dig('stack', 'name'),
|
24
|
+
stack_version: spec_hash.dig('stack', 'version')
|
25
|
+
)
|
30
26
|
end
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
def self.symbolize(obj)
|
35
|
-
return obj.inject({}){ |memo, (k,v)|
|
36
|
-
memo[k.to_sym] = symbolize(v)
|
37
|
-
memo
|
38
|
-
} if obj.is_a? Hash
|
39
|
-
return obj.inject([]) { |memo, v|
|
40
|
-
memo << symbolize(v)
|
41
|
-
memo
|
42
|
-
} if obj.is_a? Array
|
43
|
-
return obj
|
28
|
+
def self.from_folder(definition_folder)
|
29
|
+
from_file("#{definition_folder}/stack-definition.yaml")
|
44
30
|
end
|
45
31
|
|
46
32
|
end
|
33
|
+
|
34
|
+
|
35
|
+
class NoStackDefinitionConfigurationFile < StandardError; end
|
36
|
+
|
47
37
|
end
|
48
38
|
end
|
@@ -11,33 +11,57 @@ module Cloudspin
|
|
11
11
|
:working_folder,
|
12
12
|
:backend_config,
|
13
13
|
:statefile_folder,
|
14
|
-
:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
:configuration
|
15
|
+
|
16
|
+
def initialize(
|
17
|
+
id:,
|
18
|
+
stack_definition:,
|
19
|
+
backend_config:,
|
20
|
+
working_folder:,
|
21
|
+
statefile_folder:,
|
22
|
+
configuration:
|
23
|
+
)
|
23
24
|
validate_id(id)
|
24
25
|
@id = id
|
25
26
|
@stack_definition = stack_definition
|
26
27
|
@backend_config = backend_config
|
27
28
|
@working_folder = working_folder
|
28
29
|
@statefile_folder = Pathname.new(statefile_folder).realdirpath.to_s
|
29
|
-
@
|
30
|
-
@resource_values = {}
|
30
|
+
@configuration = configuration
|
31
31
|
end
|
32
32
|
|
33
|
-
def self.
|
33
|
+
def self.from_folder(
|
34
|
+
*instance_configuration_files,
|
35
|
+
definition_folder:,
|
36
|
+
backend_config:,
|
37
|
+
working_folder:,
|
38
|
+
statefile_folder:
|
39
|
+
)
|
40
|
+
self.from_files(
|
41
|
+
instance_configuration_files,
|
42
|
+
stack_definition: Definition.from_folder(definition_folder),
|
43
|
+
backend_config: backend_config,
|
44
|
+
working_folder: working_folder,
|
45
|
+
statefile_folder: statefile_folder
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.from_files(
|
50
|
+
*instance_configuration_files,
|
51
|
+
stack_definition:,
|
52
|
+
backend_config:,
|
53
|
+
working_folder:,
|
54
|
+
statefile_folder:
|
55
|
+
)
|
56
|
+
instance_configuration = InstanceConfiguration.from_files(stack_definition, instance_configuration_files)
|
34
57
|
self.new(
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
58
|
+
id: instance_configuration.instance_identifier,
|
59
|
+
stack_definition: stack_definition,
|
60
|
+
backend_config: backend_config,
|
61
|
+
working_folder: working_folder,
|
62
|
+
statefile_folder: statefile_folder,
|
63
|
+
configuration: instance_configuration
|
64
|
+
)
|
41
65
|
end
|
42
66
|
|
43
67
|
def validate_id(raw_id)
|
@@ -46,33 +70,18 @@ module Cloudspin
|
|
46
70
|
raise "Stack instance ID '#{raw_id}' won't work. First character should be a letter." if /^[^A-Za-z]/ =~ raw_id
|
47
71
|
end
|
48
72
|
|
49
|
-
def
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
def add_resource_values(new_resource_values)
|
54
|
-
@resource_values.merge!(new_resource_values)
|
73
|
+
def parameter_values
|
74
|
+
configuration.parameter_values
|
55
75
|
end
|
56
76
|
|
57
|
-
def
|
58
|
-
|
59
|
-
add_parameter_values(config['parameters']) if config['parameters']
|
60
|
-
add_resource_values(config['resources']) if config['resources']
|
77
|
+
def resource_values
|
78
|
+
configuration.resource_values
|
61
79
|
end
|
62
80
|
|
63
|
-
def load_config_file(yaml_file)
|
64
|
-
if File.exists?(yaml_file)
|
65
|
-
YAML.load_file(yaml_file) || {}
|
66
|
-
else
|
67
|
-
{}
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
81
|
def plan(plan_destroy: false)
|
73
82
|
RubyTerraform.clean(directory: working_folder)
|
74
83
|
mkdir_p File.dirname(working_folder)
|
75
|
-
cp_r @stack_definition.
|
84
|
+
cp_r @stack_definition.source_path, working_folder
|
76
85
|
Dir.chdir(working_folder) do
|
77
86
|
RubyTerraform.init(backend_config: backend_config)
|
78
87
|
RubyTerraform.plan(
|
@@ -98,7 +107,7 @@ module Cloudspin
|
|
98
107
|
def up
|
99
108
|
RubyTerraform.clean(directory: working_folder)
|
100
109
|
mkdir_p File.dirname(working_folder)
|
101
|
-
cp_r @stack_definition.
|
110
|
+
cp_r @stack_definition.source_path, working_folder
|
102
111
|
Dir.chdir(working_folder) do
|
103
112
|
RubyTerraform.init(backend_config: backend_config)
|
104
113
|
RubyTerraform.apply(
|
@@ -123,7 +132,7 @@ module Cloudspin
|
|
123
132
|
def down
|
124
133
|
RubyTerraform.clean(directory: working_folder)
|
125
134
|
mkdir_p File.dirname(working_folder)
|
126
|
-
cp_r @stack_definition.
|
135
|
+
cp_r @stack_definition.source_path, working_folder
|
127
136
|
Dir.chdir(working_folder) do
|
128
137
|
RubyTerraform.init(backend_config: backend_config)
|
129
138
|
RubyTerraform.destroy(
|
@@ -146,9 +155,9 @@ module Cloudspin
|
|
146
155
|
end
|
147
156
|
|
148
157
|
def terraform_variables
|
149
|
-
|
158
|
+
parameter_values.merge(resource_values) { |key, oldval, newval|
|
150
159
|
raise "Duplicate values for terraform variable '#{key}' ('#{oldval}' and '#{newval}')"
|
151
|
-
}
|
160
|
+
}.merge({ 'instance_identifier' => id })
|
152
161
|
end
|
153
162
|
|
154
163
|
def terraform_statefile
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'ruby_terraform'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Cloudspin
|
5
|
+
module Stack
|
6
|
+
class InstanceConfiguration
|
7
|
+
|
8
|
+
attr_reader :stack_definition
|
9
|
+
attr_reader :stack_name
|
10
|
+
|
11
|
+
attr_reader :instance_values
|
12
|
+
attr_reader :parameter_values
|
13
|
+
attr_reader :resource_values
|
14
|
+
|
15
|
+
def initialize(stack_definition)
|
16
|
+
@stack_definition = stack_definition
|
17
|
+
@stack_name = stack_definition.name
|
18
|
+
@instance_values = {}
|
19
|
+
@parameter_values = {}
|
20
|
+
@resource_values = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.from_files(stack_definition, *configuration_files)
|
24
|
+
config = self.new(stack_definition)
|
25
|
+
configuration_files.flatten.each { |config_file|
|
26
|
+
config.add_values(load_file(config_file))
|
27
|
+
}
|
28
|
+
config
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.load_file(yaml_file)
|
32
|
+
if File.exists?(yaml_file)
|
33
|
+
YAML.load_file(yaml_file) || {}
|
34
|
+
else
|
35
|
+
{}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_values(values)
|
40
|
+
@instance_values.merge!(values['instance']) if values['instance']
|
41
|
+
@parameter_values.merge!(values['parameters']) if values['parameters']
|
42
|
+
@resource_values.merge!(values['resources']) if values['resources']
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def instance_identifier
|
47
|
+
if instance_values['identifier']
|
48
|
+
instance_values['identifier']
|
49
|
+
else
|
50
|
+
stack_name
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
{
|
56
|
+
'instance' => instance_values,
|
57
|
+
'parameters' => parameter_values,
|
58
|
+
'resources' => resource_values
|
59
|
+
}.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
data/lib/cloudspin/stack.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudspin-stack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 'kief '
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-terraform
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- lib/cloudspin/stack.rb
|
105
105
|
- lib/cloudspin/stack/definition.rb
|
106
106
|
- lib/cloudspin/stack/instance.rb
|
107
|
+
- lib/cloudspin/stack/instance_configuration.rb
|
107
108
|
- lib/cloudspin/stack/version.rb
|
108
109
|
homepage: https://github.com/cloudspinners
|
109
110
|
licenses:
|