Class: Cloudspin::Stack::InstanceConfiguration

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudspin/stack/instance_configuration.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration_values: {}, stack_definition:, base_folder: '.') ⇒ InstanceConfiguration

Returns a new instance of InstanceConfiguration.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/cloudspin/stack/instance_configuration.rb', line 18

def initialize(
    configuration_values: {},
    stack_definition:,
    base_folder: '.'
)
  @stack_definition = stack_definition
  @stack_name = stack_definition.name
  @base_folder = base_folder

  @instance_values = configuration_values['instance'] || {}
  @parameter_values = configuration_values['parameters'] || {}
  @resource_values = configuration_values['resources'] || {}

  @terraform_backend = configuration_values['terraform_backend'] || {}
  if @terraform_backend.empty?
    @terraform_backend['statefile_folder'] = default_state_folder
  else
    @terraform_backend['key'] = default_state_key
  end
end

Instance Attribute Details

#base_folderObject (readonly)

Returns the value of attribute base_folder.



10
11
12
# File 'lib/cloudspin/stack/instance_configuration.rb', line 10

def base_folder
  @base_folder
end

#instance_valuesObject (readonly)

Returns the value of attribute instance_values.



12
13
14
# File 'lib/cloudspin/stack/instance_configuration.rb', line 12

def instance_values
  @instance_values
end

#parameter_valuesObject (readonly)

Returns the value of attribute parameter_values.



13
14
15
# File 'lib/cloudspin/stack/instance_configuration.rb', line 13

def parameter_values
  @parameter_values
end

#resource_valuesObject (readonly)

Returns the value of attribute resource_values.



14
15
16
# File 'lib/cloudspin/stack/instance_configuration.rb', line 14

def resource_values
  @resource_values
end

#stack_definitionObject (readonly)

Returns the value of attribute stack_definition.



8
9
10
# File 'lib/cloudspin/stack/instance_configuration.rb', line 8

def stack_definition
  @stack_definition
end

#stack_nameObject (readonly)

Returns the value of attribute stack_name.



9
10
11
# File 'lib/cloudspin/stack/instance_configuration.rb', line 9

def stack_name
  @stack_name
end

#terraform_backendObject (readonly)

Returns the value of attribute terraform_backend.



16
17
18
# File 'lib/cloudspin/stack/instance_configuration.rb', line 16

def terraform_backend
  @terraform_backend
end

Class Method Details

.from_files(*configuration_files, stack_definition:, base_folder: '.') ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cloudspin/stack/instance_configuration.rb', line 39

def self.from_files(
    *configuration_files,
    stack_definition:,
    base_folder: '.'
)
  configuration_values = {}
  configuration_files.flatten.each { |config_file|
    configuration_values = configuration_values.deep_merge(yaml_file_to_hash(config_file))
  }
  self.new(
    stack_definition: stack_definition,
    base_folder: base_folder,
    configuration_values: configuration_values
  )
end

.yaml_file_to_hash(yaml_file) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/cloudspin/stack/instance_configuration.rb', line 55

def self.yaml_file_to_hash(yaml_file)
  if File.exists?(yaml_file)
    YAML.load_file(yaml_file) || {}
  else
    {}
  end
end

Instance Method Details

#default_state_folderObject



75
76
77
78
# File 'lib/cloudspin/stack/instance_configuration.rb', line 75

def default_state_folder
  FileUtils.mkdir_p "#{base_folder}/state"
  Pathname.new("#{base_folder}/state/#{instance_identifier}").realdirpath.to_s
end

#default_state_keyObject



80
81
82
# File 'lib/cloudspin/stack/instance_configuration.rb', line 80

def default_state_key
  "#{instance_identifier}.tfstate"
end

#has_local_state_configuration?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/cloudspin/stack/instance_configuration.rb', line 63

def has_local_state_configuration?
  ! @terraform_backend['statefile_folder'].nil?
end

#has_remote_state_configuration?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/cloudspin/stack/instance_configuration.rb', line 71

def has_remote_state_configuration?
  ! @terraform_backend['key'].nil?
end

#instance_identifierObject



84
85
86
87
88
89
90
91
92
# File 'lib/cloudspin/stack/instance_configuration.rb', line 84

def instance_identifier
  if instance_values['identifier']
    instance_values['identifier']
  elsif instance_values['group']
    stack_name + '-' + instance_values['group']
  else
    stack_name
  end
end

#local_statefileObject



67
68
69
# File 'lib/cloudspin/stack/instance_configuration.rb', line 67

def local_statefile
  "#{@terraform_backend['statefile_folder']}/#{instance_identifier}.tfstate"
end

#to_sObject



94
95
96
97
98
99
100
101
102
# File 'lib/cloudspin/stack/instance_configuration.rb', line 94

def to_s
  {
    'instance_identifier' => instance_identifier,
    'instance' => instance_values,
    'parameters' => parameter_values,
    'resources' => resource_values,
    'terraform_backend' => terraform_backend
  }.to_s
end