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_name: nil, 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_name: nil,
    stack_definition:,
    base_folder: '.'
)
  @stack_definition = stack_definition
  @stack_name = 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_name: nil, stack_definition:, base_folder: '.') ⇒ Object



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

def self.from_files(
    *configuration_files,
    stack_name: nil,
    stack_definition:,
    base_folder: '.'
)
  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))
  }
  self.new(
    stack_definition: stack_definition,
    stack_name: stack_name,
    base_folder: base_folder,
    configuration_values: configuration_values
  )
end

.yaml_file_to_hash(yaml_file) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/cloudspin/stack/instance_configuration.rb', line 58

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



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

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

#default_state_keyObject



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

def default_state_key
  "#{instance_identifier}.tfstate"
end

#has_local_state_configuration?Boolean

Returns:

  • (Boolean)


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

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

#has_remote_state_configuration?Boolean

Returns:

  • (Boolean)


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

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

#instance_identifierObject



88
89
90
91
92
93
94
95
96
# File 'lib/cloudspin/stack/instance_configuration.rb', line 88

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



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

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

#to_sObject



98
99
100
101
102
103
104
105
106
# File 'lib/cloudspin/stack/instance_configuration.rb', line 98

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