cloudspin-stack-rake 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ee478496cbc9de0bde65e5c9042368314b4d9933fc8f4faa50d378d52440f37
4
- data.tar.gz: cfae6c7dfc0fca45d3082d1f7ea75674fbd5f75be26420fd97099086c9647d67
3
+ metadata.gz: 9cb50ddbe7b944e4c063c276a1335bf0b219110bd0f4dfb51e71ece1d2668002
4
+ data.tar.gz: c00796dde1fb865b0cb8c2e382f01fd1a06a39c1b3c0582909d05941305c8123
5
5
  SHA512:
6
- metadata.gz: 28ad525d94a06dc03008cece8aa7b3c470bb0f405b7c2a0d3b4397d84a65f7af4d64735702943d815f60ba2b80e28c9899d57f224f4fde1604c82bb416c9f2d4
7
- data.tar.gz: 6c283412f94090f2d667116d23d6fee8a0ec97c6de8c32da77a5c0451f5424b2b2bde43a2338413d7a2b490d15662a8d98d2978428a37b2a111a59c1e796652b
6
+ metadata.gz: a7f0adf65a6c4647acf85293f640e48172ce672fa985eb47b88182050b656e7403b7060891ef728e5234dbcea5c0e5b9cc4a7e442a74b0f3985617f16408bd88
7
+ data.tar.gz: fd79b3e9bac5863d4459e632eca893d96adcdda27308076c78617b8a901bd38005bcdd306cd6a6473b701458a9b3a2644dbac76f73ee120627d78c95c3f596f6
@@ -5,15 +5,16 @@ module Cloudspin
5
5
 
6
6
  class StackTask < ::Rake::TaskLib
7
7
 
8
- attr_reader :instance
9
8
  attr_reader :environment
10
9
  attr_reader :role
10
+ attr_reader :definition_folder
11
11
  attr_reader :configuration_files
12
12
 
13
13
  def initialize(
14
14
  environment = nil,
15
15
  role: 'instance',
16
- definition_folder: './src',
16
+ definition_folder: nil, # Should be deprecated
17
+ definition_location: nil,
17
18
  base_folder: '.',
18
19
  configuration_files: nil
19
20
  )
@@ -22,15 +23,45 @@ module Cloudspin
22
23
  @base_folder = base_folder
23
24
  @configuration_files = configuration_files || the_usual_configuration_files
24
25
 
25
- @instance = Cloudspin::Stack::Instance.from_folder(
26
- @configuration_files,
27
- definition_folder: definition_folder,
28
- base_folder: @base_folder,
29
- base_working_folder: "#{@base_folder}/work"
30
- )
26
+ # TODO: Pick this up from the configuration files?
27
+ @definition_location = if definition_location
28
+ definition_location
29
+ elsif definition_folder
30
+ puts "'definition_folder': is deprecated for Cloudspin::Stack::Rake::StackTask - use 'definition_location' instead"
31
+ definition_folder
32
+ else
33
+ './src'
34
+ end
35
+
36
+ # @remote_zipfile = remote_zipfile
31
37
  define
32
38
  end
33
39
 
40
+ def instance
41
+ @instance ||= begin
42
+ local_definition_folder = fetch_definition
43
+ puts "Will use local stack definition files in #{local_definition_folder}"
44
+ Cloudspin::Stack::Instance.from_folder(
45
+ @configuration_files,
46
+ definition_folder: local_definition_folder,
47
+ base_folder: @base_folder,
48
+ base_working_folder: "#{@base_folder}/work"
49
+ )
50
+ end
51
+ end
52
+
53
+ def fetch_definition
54
+ if /^http.*\.zip$/.match @definition_location
55
+ puts "Downloading stack definition source from a remote zipfile"
56
+ fetch_definition_zipfile
57
+ elsif /^[\.\/]/.match @definition_location
58
+ puts "Using local stack definition source"
59
+ @definition_location
60
+ else
61
+ raise UnsupportedStackDefinitionLocationError, @definition_location
62
+ end
63
+ end
64
+
34
65
  def the_usual_configuration_files
35
66
  file_list = default_configuration_files
36
67
  if @environment
@@ -60,36 +91,86 @@ module Cloudspin
60
91
 
61
92
  def define
62
93
 
63
- desc "Create or update stack #{@instance.id}"
94
+ desc "Create or update stack instance"
64
95
  task :up do
65
- puts @instance.init_dry
66
- puts @instance.up_dry
67
- puts @instance.up
96
+ puts instance.init_dry
97
+ puts instance.up_dry
98
+ puts instance.up
68
99
  end
69
100
 
70
- desc "Plan changes to stack #{@instance.id}"
101
+ desc "Plan changes to stack instance"
71
102
  task :plan do
72
- puts @instance.init_dry
73
- puts @instance.plan_dry
74
- puts @instance.plan
103
+ puts instance.init_dry
104
+ puts instance.plan_dry
105
+ puts instance.plan
75
106
  end
76
107
 
77
- desc "Show command line to be run for stack #{@instance.id}"
108
+ desc "Show command line to be run for stack instance"
78
109
  task :dry do
79
- puts @instance.init_dry
80
- puts @instance.up_dry
110
+ puts instance.init_dry
111
+ puts instance.up_dry
81
112
  end
82
113
 
83
- desc "Destroy stack #{@instance.id}"
114
+ desc "Destroy stack instance"
84
115
  task :down do
85
- puts @instance.init_dry
86
- puts @instance.down_dry
87
- puts @instance.down
116
+ puts instance.init_dry
117
+ puts instance.down_dry
118
+ puts instance.down
88
119
  end
120
+ end
89
121
 
122
+ # TODO: This stuff belongs in a core class, so the CLI and other stuff can use it, too.
123
+
124
+ def fetch_definition_zipfile
125
+ unpack(download_artefact(@definition_location), '.cloudspin/definitions')
126
+ end
127
+
128
+ def download_artefact(artefact_url)
129
+ download_dir = Dir.mktmpdir(['cloudspin-', '-download'])
130
+ zipfile = "#{download_dir}/undetermined-spin-stack-artefact.zip"
131
+ puts "Downloading artefact from #{artefact_url} to #{zipfile}"
132
+ File.open(zipfile, 'wb') do |saved_file|
133
+ open(artefact_url, 'rb') do |read_file|
134
+ saved_file.write(read_file.read)
135
+ end
136
+ end
137
+ zipfile
138
+ end
139
+
140
+ def unpack(zipfile, where_to_put_it)
141
+ folder_name = path_of_source_in(zipfile)
142
+ puts "Unzipping #{zipfile} to #{where_to_put_it}"
143
+ Zip::File.open(zipfile) { |zip_file|
144
+ zip_file.each { |f|
145
+ puts "-> #{f.name}"
146
+ f_path = File.join(where_to_put_it, f.name)
147
+ FileUtils.mkdir_p(File.dirname(f_path))
148
+ zip_file.extract(f, f_path) unless File.exist?(f_path)
149
+ }
150
+ }
151
+ puts "Definition unpacked to #{where_to_put_it}/#{folder_name}"
152
+ "#{where_to_put_it}/#{folder_name}"
153
+ end
154
+
155
+ def path_of_source_in(zipfile_path)
156
+ File.dirname(path_of_configuration_file_in(zipfile_path))
157
+ end
158
+
159
+ def path_of_configuration_file_in(zipfile_path)
160
+ zipfile = Zip::File.open(zipfile_path)
161
+ begin
162
+ zipfile.entries.select { |entry|
163
+ /\/stack-definition.yaml$/.match entry.name
164
+ }.first.name
165
+ ensure
166
+ zipfile.close
167
+ end
90
168
  end
91
169
 
92
170
  end
171
+
172
+ class UnsupportedStackDefinitionLocationError < StandardError; end
173
+
93
174
  end
94
175
  end
95
176
  end
@@ -1,7 +1,7 @@
1
1
  module Cloudspin
2
2
  module Stack
3
3
  module Rake
4
- VERSION = '0.1.14'
4
+ VERSION = '0.1.15'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudspin-stack-rake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'kief '
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-24 00:00:00.000000000 Z
11
+ date: 2018-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cloudspin-stack