cloudspin-stack 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|