Class: Cloudspin::Stack::Rake::StackTask

Inherits:
Rake::TaskLib
  • Object
show all
Defined in:
lib/cloudspin/stack/rake/stack_task.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment = nil, definition_location: nil, base_folder: '.', configuration_files: nil) ⇒ StackTask

Returns a new instance of StackTask.



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 11

def initialize(
    environment = nil,
    definition_location: nil,
    base_folder: '.',
    configuration_files: nil
)
  @environment = environment
  @base_folder = base_folder
  set_configuration_files(configuration_files)

  @definition_location = definition_location
  define
end

Instance Attribute Details

#configuration_filesObject (readonly)

Returns the value of attribute configuration_files.



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

def configuration_files
  @configuration_files
end

#environmentObject (readonly)

Returns the value of attribute environment.



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

def environment
  @environment
end

Instance Method Details

#default_configuration_filesObject



41
42
43
44
45
46
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 41

def default_configuration_files
  [
    "#{@base_folder}/stack-instance-defaults.yaml",
    "#{@base_folder}/stack-instance-local.yaml"
  ]
end

#defineObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 56

def define

  desc "Create or update stack instance"
  task :up do
    puts terraform_runner.init_dry
    puts terraform_runner.up_dry
    instance.prepare
    puts terraform_runner.up
  end

  desc "Plan changes to stack instance"
  task :plan do
    puts terraform_runner.init_dry
    puts terraform_runner.plan_dry
    instance.prepare
    puts terraform_runner.plan
  end

  desc "Show command line to be run for stack instance"
  task :dry do
    puts terraform_runner.init_dry
    puts terraform_runner.up_dry
  end

  desc "Destroy stack instance"
  task :down do
    puts terraform_runner.init_dry
    puts terraform_runner.down_dry
    instance.prepare
    puts terraform_runner.down
  end

  task :refresh do
    instance.prepare
    puts terraform_runner.refresh
  end
end

#environment_config_fileObject



48
49
50
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 48

def environment_config_file
  "#{@base_folder}/environments/stack-instance-#{@environment}.yaml"
end

#full_path_of(supplied_path) ⇒ Object



52
53
54
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 52

def full_path_of(supplied_path)
  Pathname.new(supplied_path).realdirpath.to_s
end

#instanceObject



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

def instance
  @instance ||= Cloudspin::Stack::Instance.from_folder(
    @configuration_files,
    definition_location: @definition_location,
    base_folder: @base_folder,
    base_working_folder: "#{@base_folder}/work"
  )
end

#set_configuration_files(additional_configuration_files) ⇒ Object



25
26
27
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 25

def set_configuration_files(additional_configuration_files)
  @configuration_files = (the_usual_configuration_files << additional_configuration_files).flatten.compact
end

#terraform_runnerObject



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

def terraform_runner
  @terraform_runner ||= Cloudspin::Stack::Terraform.new(
    working_folder: instance.working_folder,
    terraform_variables: instance.terraform_variables,
    terraform_init_arguments: instance.terraform_init_arguments,
    terraform_command_arguments: instance.terraform_command_arguments
  )
end

#the_usual_configuration_filesObject



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/cloudspin/stack/rake/stack_task.rb', line 29

def the_usual_configuration_files
  file_list = default_configuration_files
  if @environment
    if File.exists? full_path_of(environment_config_file)
      file_list << environment_config_file
    else
      raise "Missing configuration file for environment #{@environment} (#{environment_config_file})"
    end
  end
  file_list
end