stackfu 0.1.1 → 0.1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Manifest +36 -4
- data/Rakefile +1 -1
- data/autotest/discover.rb +1 -0
- data/firewall/config/01-controls.yml +5 -0
- data/firewall/config/02-requirements.yml +4 -0
- data/firewall/config/03-executions.yml +6 -0
- data/firewall/config/03-scripts.yml +6 -0
- data/firewall/config/04-validations.yml +4 -0
- data/firewall/executables/configure_ufw.sh.erb +9 -0
- data/firewall/executables/install_ufw.sh.erb +7 -0
- data/firewall/script/configure_ufw.sh.erb +9 -0
- data/firewall/script/install_ufw.sh.erb +7 -0
- data/firewall/script.yml +8 -0
- data/lib/stackfu/api_hooks.rb +2 -2
- data/lib/stackfu/app.rb +5 -5
- data/lib/stackfu/commands/command.rb +7 -3
- data/lib/stackfu/commands/config_command.rb +1 -1
- data/lib/stackfu/commands/deploy_command.rb +53 -61
- data/lib/stackfu/commands/dump_command.rb +46 -40
- data/lib/stackfu/commands/generate_command.rb +10 -12
- data/lib/stackfu/commands/help_command.rb +1 -1
- data/lib/stackfu/commands/list_command.rb +76 -22
- data/lib/stackfu/commands/publish_command.rb +35 -18
- data/lib/stackfu/commands/server_command.rb +124 -124
- data/lib/stackfu/date_helper.rb +111 -0
- data/lib/stackfu.rb +4 -2
- data/spec/fixtures/scripts/all.json +11 -0
- data/spec/fixtures/scripts/create.json +10 -0
- data/spec/fixtures/scripts/delete.json +10 -0
- data/spec/fixtures/scripts/firewall.json +12 -0
- data/spec/fixtures/scripts/none.json +12 -0
- data/spec/fixtures/scripts/not_found.json +11 -0
- data/spec/fixtures/scripts/script_not_found.json +11 -0
- data/spec/fixtures/servers/all.json +12 -0
- data/spec/fixtures/servers/cannot_deploy.json +0 -0
- data/spec/fixtures/servers/deploy.json +290 -0
- data/spec/fixtures/servers/none.json +12 -0
- data/spec/fixtures/servers/not_found.json +11 -0
- data/spec/fixtures/servers/webbynode/deploy.json +12 -0
- data/spec/fixtures/servers/webbynode.json +12 -0
- data/spec/spec_helper.rb +191 -0
- data/spec/stackfu/api_hooks_spec.rb +7 -0
- data/spec/stackfu/commands/deploy_command_spec.rb +65 -0
- data/spec/stackfu/commands/dump_command_spec.rb +47 -0
- data/spec/stackfu/commands/generate_command_spec.rb +90 -0
- data/spec/stackfu/commands/list_command_spec.rb +53 -0
- data/spec/stackfu/commands/publish_command_spec.rb +67 -0
- data/stackfu.gemspec +4 -4
- data/templates/02-requirements.yml.erb +8 -10
- data/templates/{03-scripts.yml.erb → 03-executions.yml.erb} +3 -3
- data/templates/04-validations.yml.erb +1 -2
- data/templates/stack.yml.erb +4 -13
- data/test/support/fixtures.rb +1 -1
- data/test/unit/commands/test_server_command.rb +259 -259
- metadata +42 -7
- data/test/stack.yml +0 -26
- /data/stackfu-installer/config/{03-scripts.yml → 03-executions.yml} +0 -0
data/Gemfile
ADDED
data/Manifest
CHANGED
@@ -1,9 +1,21 @@
|
|
1
1
|
CHANGELOG
|
2
|
+
Gemfile
|
2
3
|
Manifest
|
3
4
|
README
|
4
5
|
README.md
|
5
6
|
Rakefile
|
7
|
+
autotest/discover.rb
|
6
8
|
bin/stackfu
|
9
|
+
firewall/config/01-controls.yml
|
10
|
+
firewall/config/02-requirements.yml
|
11
|
+
firewall/config/03-executions.yml
|
12
|
+
firewall/config/03-scripts.yml
|
13
|
+
firewall/config/04-validations.yml
|
14
|
+
firewall/executables/configure_ufw.sh.erb
|
15
|
+
firewall/executables/install_ufw.sh.erb
|
16
|
+
firewall/script.yml
|
17
|
+
firewall/script/configure_ufw.sh.erb
|
18
|
+
firewall/script/install_ufw.sh.erb
|
7
19
|
lib/stackfu.rb
|
8
20
|
lib/stackfu/api_hooks.rb
|
9
21
|
lib/stackfu/app.rb
|
@@ -16,12 +28,34 @@ lib/stackfu/commands/help_command.rb
|
|
16
28
|
lib/stackfu/commands/list_command.rb
|
17
29
|
lib/stackfu/commands/publish_command.rb
|
18
30
|
lib/stackfu/commands/server_command.rb
|
31
|
+
lib/stackfu/date_helper.rb
|
19
32
|
lib/stackfu/helpers/providers_credentials.rb
|
20
33
|
lib/stackfu/helpers/rendering.rb
|
21
34
|
lib/stackfu/operating_systems.rb
|
35
|
+
spec/fixtures/scripts/all.json
|
36
|
+
spec/fixtures/scripts/create.json
|
37
|
+
spec/fixtures/scripts/delete.json
|
38
|
+
spec/fixtures/scripts/firewall.json
|
39
|
+
spec/fixtures/scripts/none.json
|
40
|
+
spec/fixtures/scripts/not_found.json
|
41
|
+
spec/fixtures/scripts/script_not_found.json
|
42
|
+
spec/fixtures/servers/all.json
|
43
|
+
spec/fixtures/servers/cannot_deploy.json
|
44
|
+
spec/fixtures/servers/deploy.json
|
45
|
+
spec/fixtures/servers/none.json
|
46
|
+
spec/fixtures/servers/not_found.json
|
47
|
+
spec/fixtures/servers/webbynode.json
|
48
|
+
spec/fixtures/servers/webbynode/deploy.json
|
49
|
+
spec/spec_helper.rb
|
50
|
+
spec/stackfu/api_hooks_spec.rb
|
51
|
+
spec/stackfu/commands/deploy_command_spec.rb
|
52
|
+
spec/stackfu/commands/dump_command_spec.rb
|
53
|
+
spec/stackfu/commands/generate_command_spec.rb
|
54
|
+
spec/stackfu/commands/list_command_spec.rb
|
55
|
+
spec/stackfu/commands/publish_command_spec.rb
|
22
56
|
stackfu-installer/config/01-controls.yml
|
23
57
|
stackfu-installer/config/02-requirements.yml
|
24
|
-
stackfu-installer/config/03-
|
58
|
+
stackfu-installer/config/03-executions.yml
|
25
59
|
stackfu-installer/config/04-validations.yml
|
26
60
|
stackfu-installer/script/dotfiles_installation.sh.erb
|
27
61
|
stackfu-installer/script/github_credentials_setup.sh.erb
|
@@ -31,10 +65,9 @@ stackfu-installer/script/resque_installation.sh.erb
|
|
31
65
|
stackfu-installer/script/ruby_environment.sh.erb
|
32
66
|
stackfu-installer/script/stackfu.sh.erb
|
33
67
|
stackfu-installer/stack.yml
|
34
|
-
stackfu.gemspec
|
35
68
|
templates/01-controls.yml.erb
|
36
69
|
templates/02-requirements.yml.erb
|
37
|
-
templates/03-
|
70
|
+
templates/03-executions.yml.erb
|
38
71
|
templates/04-validations.yml.erb
|
39
72
|
templates/script.sh.erb
|
40
73
|
templates/stack.yml.erb
|
@@ -97,7 +130,6 @@ test/fixtures/stacks_with_controls
|
|
97
130
|
test/fixtures/users
|
98
131
|
test/fixtures/users_no_credentials
|
99
132
|
test/fixtures/users_update
|
100
|
-
test/stack.yml
|
101
133
|
test/support/custom_matchers.rb
|
102
134
|
test/support/fixtures.rb
|
103
135
|
test/support/io_stub.rb
|
data/Rakefile
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/firewall/script.yml
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
---
|
2
|
+
name: firewall
|
3
|
+
type: script
|
4
|
+
description: |-
|
5
|
+
Set up a firewall for your server to improve security.
|
6
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
7
|
+
Praesent eget erat libero, id malesuada tortor.
|
8
|
+
Donec pharetra sapien et nulla ultricies ac pharetra neque vulputate.
|
data/lib/stackfu/api_hooks.rb
CHANGED
@@ -7,12 +7,12 @@ module StackFu
|
|
7
7
|
class Server < Resource; end
|
8
8
|
class User < Resource; end
|
9
9
|
class Stack < Resource; end
|
10
|
-
class
|
10
|
+
class Script < Resource; end
|
11
11
|
class Provider < Resource; end
|
12
12
|
class Deployment < Resource; end
|
13
13
|
|
14
14
|
def initialize_api(config)
|
15
|
-
[Server, User, Stack,
|
15
|
+
[Server, User, Stack, Script, Provider, Deployment].each do |model_class|
|
16
16
|
model_class.user = $config[:token]
|
17
17
|
model_class.password = "X"
|
18
18
|
model_class.site = StackFu::API
|
data/lib/stackfu/app.rb
CHANGED
@@ -19,7 +19,7 @@ module StackFu
|
|
19
19
|
def execute
|
20
20
|
begin
|
21
21
|
command = @args.delete_at(0)
|
22
|
-
cmd = Command.create(command, @args)
|
22
|
+
cmd = Commands::Command.create(command, @args)
|
23
23
|
cmd.run
|
24
24
|
rescue Errno::ECONNREFUSED
|
25
25
|
error "Could not connect to StackFu server.",
|
@@ -36,13 +36,13 @@ module StackFu
|
|
36
36
|
"Please report this problem at support@stackfu.com or try again in a few minutes."
|
37
37
|
raise if $dev
|
38
38
|
|
39
|
-
rescue Exceptions::UnknownCommand
|
39
|
+
rescue Commands::Exceptions::UnknownCommand
|
40
40
|
error "Command #{command} does not exist", "Try using 'stackfu help' for a summary of available commands."
|
41
41
|
|
42
|
-
rescue Exceptions::InvalidCommand
|
42
|
+
rescue Commands::Exceptions::InvalidCommand
|
43
43
|
error "Command #{command} is invalid", $!.message
|
44
44
|
|
45
|
-
rescue Exceptions::InvalidSubcommand
|
45
|
+
rescue Commands::Exceptions::InvalidSubcommand
|
46
46
|
error "Invalid usage for command #{command}", $!.message
|
47
47
|
end
|
48
48
|
end
|
@@ -54,7 +54,7 @@ module StackFu
|
|
54
54
|
puts ""
|
55
55
|
puts "To get you up to speed, we need you to provide us a couple of configuration settings that will follow."
|
56
56
|
puts
|
57
|
-
ConfigCommand.new.run
|
57
|
+
Commands::ConfigCommand.new.run
|
58
58
|
true
|
59
59
|
end
|
60
60
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module StackFu
|
1
|
+
module StackFu::Commands
|
2
2
|
class Command
|
3
3
|
include StackFu::OperatingSystems
|
4
4
|
include StackFu::Rendering
|
@@ -15,7 +15,7 @@ module StackFu
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def command_for(command)
|
18
|
-
StackFu.const_get("#{command.camelize}Command")
|
18
|
+
StackFu::Commands.const_get("#{command.camelize}Command")
|
19
19
|
rescue NameError
|
20
20
|
raise Exceptions::UnknownCommand
|
21
21
|
end
|
@@ -97,7 +97,10 @@ module StackFu
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def parse_options(args)
|
100
|
-
|
100
|
+
if self.class.subcommand_options and !self.class.subcommand_options.empty?
|
101
|
+
@subcommand = args.pop unless args.last =~ /^-(.*)/
|
102
|
+
end
|
103
|
+
|
101
104
|
@subcommand ||= "default"
|
102
105
|
@parameters = []
|
103
106
|
@options = {}
|
@@ -121,6 +124,7 @@ module StackFu
|
|
121
124
|
end
|
122
125
|
end
|
123
126
|
|
127
|
+
|
124
128
|
@subcommand = self.class.send(:resolve, @subcommand)
|
125
129
|
end
|
126
130
|
end
|
@@ -1,27 +1,17 @@
|
|
1
|
-
module StackFu
|
1
|
+
module StackFu::Commands
|
2
2
|
class DeployCommand < Command
|
3
|
-
include ApiHooks
|
3
|
+
include StackFu::ApiHooks
|
4
4
|
|
5
|
-
error_messages :missing_subcommand => "You have to tell what you want to deploy
|
5
|
+
# error_messages :missing_subcommand => "You have to tell what you want to deploy and to which server."
|
6
|
+
# subcommand :script, :required_parameters => [:plugin_name, :server]
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def plugin(parameters, options)
|
11
|
-
execute "plugin", parameters, options, false do |target|
|
8
|
+
def default(parameters, options)
|
9
|
+
execute "script", parameters, options, false do |target|
|
12
10
|
puts "*** Preparing: #{target.name.foreground(:yellow).bright}"
|
13
11
|
puts " #{target.description}"
|
14
12
|
puts ""
|
15
13
|
end
|
16
14
|
end
|
17
|
-
|
18
|
-
def stack(parameters, options)
|
19
|
-
execute "stack", parameters, options, true do |target|
|
20
|
-
puts "*** Deploying: #{target.name.foreground(:yellow).bright} (based on #{os_name(target.operating_system.to_sym).foreground(:yellow)})"
|
21
|
-
puts " #{target.description}"
|
22
|
-
puts ""
|
23
|
-
end
|
24
|
-
end
|
25
15
|
|
26
16
|
private
|
27
17
|
|
@@ -30,26 +20,44 @@ module StackFu
|
|
30
20
|
server_name = parameters[1]
|
31
21
|
|
32
22
|
target_class = StackFu::ApiHooks.const_get(target.capitalize)
|
33
|
-
|
34
|
-
|
35
|
-
|
23
|
+
begin
|
24
|
+
target = target_class.find(target_name)
|
25
|
+
rescue ActiveResource::ResourceNotFound
|
26
|
+
error "#{target.capitalize} '#{target_name}' was not found"
|
27
|
+
return
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
target = target_class.find(target_name)
|
32
|
+
rescue ActiveResource::ResourceNotFound
|
33
|
+
error "#{target.capitalize} '#{target_name}' was not found"
|
34
|
+
return
|
35
|
+
end
|
36
|
+
|
37
|
+
unless target
|
36
38
|
error "#{target.capitalize} '#{target_name}' was not found"
|
37
39
|
return
|
38
40
|
end
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
begin
|
43
|
+
server = Server.find(server_name)
|
44
|
+
rescue ActiveResource::ResourceNotFound
|
45
|
+
error "Server '#{server_name}' was not found"
|
44
46
|
return
|
45
47
|
end
|
46
48
|
|
47
|
-
return
|
49
|
+
return target, server
|
48
50
|
end
|
49
51
|
|
50
52
|
def execute(target_name, parameters, options, stack)
|
53
|
+
if parameters.size < 2
|
54
|
+
puts "You have to tell which script you want to deploy and to which server."
|
55
|
+
puts "Usage: stackfu deploy [script] [server]"
|
56
|
+
return
|
57
|
+
end
|
58
|
+
|
51
59
|
target, server = extract_settings(target_name)
|
52
|
-
return unless target
|
60
|
+
return unless target and server
|
53
61
|
|
54
62
|
yield target
|
55
63
|
|
@@ -78,31 +86,15 @@ module StackFu
|
|
78
86
|
puts ""
|
79
87
|
end
|
80
88
|
|
81
|
-
|
82
|
-
warning "This will destroy current contents of your server. Are you sure?\n"
|
83
|
-
else
|
84
|
-
agree "Continue with plugin installation?\n"
|
85
|
-
end
|
86
|
-
|
87
|
-
unless continue
|
89
|
+
unless agree "Continue with script installation?\n"
|
88
90
|
puts "Aborted."
|
89
91
|
return false
|
90
92
|
end
|
91
|
-
|
92
|
-
item = target if stack
|
93
|
-
hash = { :stack => item, :server_id => server.first.id, :params => params }
|
94
|
-
|
95
|
-
unless stack
|
96
|
-
hash[:plugin_ids] = [target.id]
|
97
|
-
end
|
98
93
|
|
99
|
-
|
94
|
+
server_id = server.id
|
95
|
+
server.id = server.slug
|
96
|
+
deployment = server.post(:deploy, {}, { :id => server_id, :script_id => target.slug, :params => params }.to_json)
|
100
97
|
|
101
|
-
unless deployment.save
|
102
|
-
error "There was a problem submitting your deployment: #{deployment.errors.full_messages.to_s}"
|
103
|
-
return
|
104
|
-
end
|
105
|
-
|
106
98
|
if options[:"no-follow"]
|
107
99
|
puts "Your deployment have been submitted"
|
108
100
|
return
|
@@ -110,22 +102,22 @@ module StackFu
|
|
110
102
|
|
111
103
|
verbose = options[:verbose]
|
112
104
|
|
113
|
-
from = nil
|
114
|
-
while true
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
105
|
+
# from = nil
|
106
|
+
# while true
|
107
|
+
# opts = {:formatted => "true", :from => from}
|
108
|
+
# opts.merge!(:verbose => "true") if verbose
|
109
|
+
#
|
110
|
+
# status = spinner {
|
111
|
+
# Deployment.find(deployment.id).get(:logs, opts)
|
112
|
+
# }
|
113
|
+
#
|
114
|
+
# if status["id"]
|
115
|
+
# show_log status["log"]
|
116
|
+
# from = status["id"]
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# break if status["state"] == "finished" or status["state"] == "failed"
|
120
|
+
# end
|
129
121
|
|
130
122
|
end
|
131
123
|
|
@@ -1,33 +1,41 @@
|
|
1
|
-
module StackFu
|
1
|
+
module StackFu::Commands
|
2
2
|
class DumpCommand < Command
|
3
|
-
include ApiHooks
|
3
|
+
include StackFu::ApiHooks
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def default(parameters, options)
|
6
|
+
script_name = parameters[0]
|
7
|
+
|
8
|
+
unless script_name
|
9
|
+
puts "You have to tell which script you want to dump."
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
13
|
+
script = spinner {
|
14
|
+
begin
|
15
|
+
Script.find(script_name)
|
16
|
+
rescue ActiveResource::ResourceNotFound
|
17
|
+
end
|
18
|
+
}
|
11
19
|
|
12
|
-
if
|
13
|
-
if directory?(
|
14
|
-
unless agree("There is already a folder called '#{
|
20
|
+
if script
|
21
|
+
if directory?(script_name)
|
22
|
+
unless agree("There is already a folder called '#{script_name}'. Do you want to overwrite its contents?")
|
15
23
|
puts "Aborted."
|
16
24
|
return false
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
20
|
-
create_folder(
|
21
|
-
create_file "#{
|
22
|
-
"type" => "
|
23
|
-
"name" =>
|
24
|
-
"description" =>
|
28
|
+
create_folder(script_name)
|
29
|
+
create_file "#{script_name}/script.yml", {
|
30
|
+
"type" => "script",
|
31
|
+
"name" => script.name,
|
32
|
+
"description" => script.respond_to?(:description) ? script.description : ""
|
25
33
|
}.to_yaml
|
26
34
|
|
27
|
-
create_folder "#{
|
35
|
+
create_folder "#{script_name}/config"
|
28
36
|
|
29
|
-
if
|
30
|
-
controls = map
|
37
|
+
if script.respond_to?(:controls)
|
38
|
+
controls = map script.controls, "controls" do |c|
|
31
39
|
{ "name" => c.name,
|
32
40
|
"label" => c.label,
|
33
41
|
"type" => c._type }
|
@@ -36,18 +44,17 @@ module StackFu
|
|
36
44
|
controls = []
|
37
45
|
end
|
38
46
|
|
39
|
-
if
|
40
|
-
requirements = map
|
41
|
-
{ "data"
|
42
|
-
"
|
43
|
-
"type" => req._type }
|
47
|
+
if script.respond_to?(:requirements)
|
48
|
+
requirements = map script.requirements, "requirements" do |req|
|
49
|
+
{ "data" => req.params.attributes["data"],
|
50
|
+
"type" => req._type }
|
44
51
|
end
|
45
52
|
else
|
46
53
|
requirements = []
|
47
54
|
end
|
48
55
|
|
49
|
-
if
|
50
|
-
executions = map
|
56
|
+
if script.respond_to?(:executions)
|
57
|
+
executions = map script.executions, "executions" do |exec|
|
51
58
|
{ "description" => exec.description,
|
52
59
|
"file" => exec.description.downcase.gsub(" ", "_") }
|
53
60
|
end
|
@@ -56,29 +63,28 @@ module StackFu
|
|
56
63
|
end
|
57
64
|
|
58
65
|
|
59
|
-
if
|
60
|
-
validations = map
|
61
|
-
{ "data"
|
62
|
-
"
|
63
|
-
"type" => val._type }
|
66
|
+
if script.respond_to?(:validations)
|
67
|
+
validations = map script.validations, "validations" do |val|
|
68
|
+
{ "data" => val.params.attributes["data"],
|
69
|
+
"type" => val._type }
|
64
70
|
end
|
65
71
|
else
|
66
72
|
validations = []
|
67
73
|
end
|
68
74
|
|
69
|
-
create_file "#{
|
70
|
-
create_file "#{
|
71
|
-
create_file "#{
|
72
|
-
create_file "#{
|
75
|
+
create_file "#{script_name}/config/01-controls.yml", controls
|
76
|
+
create_file "#{script_name}/config/02-requirements.yml", requirements
|
77
|
+
create_file "#{script_name}/config/03-executions.yml", executions
|
78
|
+
create_file "#{script_name}/config/04-validations.yml", validations
|
73
79
|
|
74
|
-
create_folder "#{
|
75
|
-
|
76
|
-
create_file "#{
|
80
|
+
create_folder "#{script_name}/executables"
|
81
|
+
script.executions.each do |script|
|
82
|
+
create_file "#{script_name}/executables/#{script.description.downcase.gsub(" ", "_")}.sh.erb", script.body
|
77
83
|
end
|
78
84
|
|
79
|
-
puts "
|
85
|
+
puts "Script #{script_name} dumped successfully..."
|
80
86
|
else
|
81
|
-
puts "
|
87
|
+
puts "Script '#{script_name}' was not found"
|
82
88
|
end
|
83
89
|
end
|
84
90
|
|
@@ -1,12 +1,9 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
|
-
module StackFu
|
4
|
+
module StackFu::Commands
|
5
5
|
class GenerateCommand < Command
|
6
6
|
aliases :create
|
7
|
-
subcommand :stack, :required_parameters => [:stack_name]
|
8
|
-
subcommand :plugin, :required_parameters => [:plugin_name]
|
9
|
-
error_messages :missing_subcommand => "You have to tell what you want to generate: a stack or a plugin."
|
10
7
|
|
11
8
|
Types = {
|
12
9
|
[:checkbox, :numericbox, :combobox, :password, :radio, :textbox] => :control
|
@@ -30,7 +27,8 @@ module StackFu
|
|
30
27
|
generate("stack", parameters, options)
|
31
28
|
end
|
32
29
|
|
33
|
-
def
|
30
|
+
def default(parameters, options)
|
31
|
+
what = 'script'
|
34
32
|
begin
|
35
33
|
item_name = parameters.shift
|
36
34
|
items = {}
|
@@ -38,8 +36,8 @@ module StackFu
|
|
38
36
|
name, type = p.split(":")
|
39
37
|
|
40
38
|
case type(type)
|
41
|
-
when :script
|
42
|
-
(items["
|
39
|
+
when :execution, :script
|
40
|
+
(items["executions"]||=[]) << [name, template("script.sh.erb", {
|
43
41
|
"filename" => name,
|
44
42
|
"description" => name.titleize
|
45
43
|
})]
|
@@ -56,13 +54,13 @@ module StackFu
|
|
56
54
|
|
57
55
|
stack = template("stack.yml.erb", {
|
58
56
|
"name" => item_name,
|
59
|
-
"description" => "Enter a description for this
|
57
|
+
"description" => "Enter a description for this script here"
|
60
58
|
})
|
61
59
|
|
62
60
|
create("#{item_name}", "#{what}.yml", stack)
|
63
61
|
|
64
62
|
i = 1
|
65
|
-
%w[controls requirements
|
63
|
+
%w[controls requirements executions validations].each do |item|
|
66
64
|
template_name = "0#{i}-#{item}.yml"
|
67
65
|
create "#{item_name}/config", template_name, template("#{template_name}.erb", {
|
68
66
|
item => items[item]
|
@@ -70,9 +68,9 @@ module StackFu
|
|
70
68
|
i += 1
|
71
69
|
end
|
72
70
|
|
73
|
-
items["
|
74
|
-
create("#{item_name}/
|
75
|
-
end or create("#{item_name}/
|
71
|
+
items["executions"].try(:each) do |item|
|
72
|
+
create("#{item_name}/executables", "#{item.first}.sh.erb", item.last)
|
73
|
+
end or create("#{item_name}/executables")
|
76
74
|
|
77
75
|
puts "#{what.titleize} #{item_name} created successfully"
|
78
76
|
rescue Exceptions::InvalidParameter
|