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
38
# 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



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 40

def self.from_files(
    *configuration_files,
    stack_name: nil,
    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,
    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
# 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
    {}
  end
end

Instance Method Details

#default_state_folderObject



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

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

#default_state_keyObject



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

def default_state_key
  "#{instance_identifier}.tfstate"
end

#has_local_state_configuration?Boolean

Returns:

  • (Boolean)


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

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

#has_remote_state_configuration?Boolean

Returns:

  • (Boolean)


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

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

#instance_identifierObject



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

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



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

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

#to_sObject



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

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