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.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/cloudspin/stack/instance_configuration.rb', line 20

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

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

  @stack_name = @stack_values['name'] || stack_definition.name
  @instance_identifier = if @instance_values['identifier']
    instance_values['identifier']
  elsif @instance_values['group']
    stack_name + '-' + @instance_values['group']
  else
    stack_name
  end

  @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.



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

def base_folder
  @base_folder
end

#instance_identifierObject (readonly)

Returns the value of attribute instance_identifier.



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

def instance_identifier
  @instance_identifier
end

#instance_valuesObject (readonly)

Returns the value of attribute instance_values.



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

def instance_values
  @instance_values
end

#parameter_valuesObject (readonly)

Returns the value of attribute parameter_values.



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

def parameter_values
  @parameter_values
end

#resource_valuesObject (readonly)

Returns the value of attribute resource_values.



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

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.



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

def stack_name
  @stack_name
end

#stack_valuesObject (readonly)

Returns the value of attribute stack_values.



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

def stack_values
  @stack_values
end

#terraform_backendObject (readonly)

Returns the value of attribute terraform_backend.



18
19
20
# File 'lib/cloudspin/stack/instance_configuration.rb', line 18

def terraform_backend
  @terraform_backend
end

Class Method Details

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



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/cloudspin/stack/instance_configuration.rb', line 50

def self.from_files(
    *configuration_files,
    stack_definition:,
    base_folder: '.'
)
  configuration_values = load_configuration_values(configuration_files)
  self.new(
    stack_definition: stack_definition,
    base_folder: base_folder,
    configuration_values: configuration_values
  )
end

.load_configuration_values(configuration_files) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/cloudspin/stack/instance_configuration.rb', line 63

def self.load_configuration_values(configuration_files)
  configuration_values = {}
  configuration_files.flatten.each { |config_file|
    # puts "DEBUG: Reading configuration file: #{config_file}"
    configuration_values = configuration_values.deep_merge(yaml_file_to_hash(config_file))
  }
  configuration_values
end

.yaml_file_to_hash(yaml_file) ⇒ Object



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

def self.yaml_file_to_hash(yaml_file)
  if File.exists?(yaml_file)
    YAML.load_file(yaml_file) || {}
  else
    puts "No configuration file: #{yaml_file}"
    {}
  end
end

Instance Method Details

#default_state_folderObject



93
94
95
96
# File 'lib/cloudspin/stack/instance_configuration.rb', line 93

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

#default_state_keyObject



98
99
100
# File 'lib/cloudspin/stack/instance_configuration.rb', line 98

def default_state_key
  "#{instance_identifier}.tfstate"
end

#has_local_state_configuration?Boolean

Returns:

  • (Boolean)


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

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

#has_remote_state_configuration?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/cloudspin/stack/instance_configuration.rb', line 89

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

#local_statefileObject



85
86
87
# File 'lib/cloudspin/stack/instance_configuration.rb', line 85

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

#to_sObject



102
103
104
105
106
107
108
109
110
# File 'lib/cloudspin/stack/instance_configuration.rb', line 102

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