proctor 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rspec +1 -0
- data/TODO +28 -0
- data/bin/proctor +55 -85
- data/bin/showlog +5 -0
- data/bin/showtime +5 -0
- data/lib/proctor/command/asset_list_cmd.rb +56 -0
- data/lib/proctor/{presenter/show.rb → command/asset_show_cmd.rb} +7 -2
- data/lib/proctor/command/file_cleanup_cmd.rb +81 -0
- data/lib/proctor/command/file_export_cmd.rb +79 -0
- data/lib/proctor/command/helpers/command.rb +27 -0
- data/lib/proctor/command/render_group_cmd.rb +39 -0
- data/lib/proctor/command/render_service_cmd.rb +34 -0
- data/lib/proctor/command/start_cmd.rb +70 -0
- data/lib/proctor/config/app_file.rb +54 -0
- data/lib/proctor/config/app_files.rb +50 -0
- data/lib/proctor/config/env.rb +35 -0
- data/lib/proctor/config/template_file.rb +41 -0
- data/lib/proctor/config/template_files.rb +39 -0
- data/lib/proctor/manager.rb +36 -3
- data/lib/proctor/managers.rb +38 -0
- data/lib/proctor/node.rb +26 -0
- data/lib/proctor/nodes.rb +38 -0
- data/lib/proctor/resource/erb.rb +95 -0
- data/lib/proctor/resource/lookup.rb +82 -0
- data/lib/proctor/service.rb +28 -3
- data/lib/proctor/services.rb +38 -0
- data/lib/proctor/util/helpers.rb +13 -0
- data/lib/proctor/util/version.rb +3 -0
- data/proctor.gemspec +2 -1
- data/proctor/Proctorfile +35 -34
- data/proctor/templates/foreman_default_g.erb +3 -0
- data/proctor/templates/monit_default_s.erb +3 -6
- data/proctor/templates/monit_faye_s.erb +3 -3
- data/proctor/templates/upstart_default_g.erb +1 -0
- data/proctor/templates/upstart_default_s.erb +1 -3
- data/proctor/templates/upstart_passenger_s.erb +3 -0
- data/spec/acceptance/asset_list_spec.rb +16 -0
- data/spec/acceptance/asset_show_spec.rb +16 -0
- data/spec/acceptance/file_cleanup_spec.rb +16 -0
- data/spec/acceptance/file_export_spec.rb +16 -0
- data/spec/acceptance/render_group_spec.rb +15 -0
- data/spec/acceptance/render_service_spec.rb +16 -0
- data/spec/acceptance/start_spec.rb +16 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/unit/command/file_export_cmd_spec.rb +46 -0
- data/spec/unit/command/file_list_cmd_spec.rb +30 -0
- data/spec/unit/command/render_group_cmd_spec.rb +44 -0
- data/spec/unit/command/render_service_cmd_spec.rb +42 -0
- data/spec/unit/{app_file_spec.rb → config/app_file_spec.rb} +27 -7
- data/spec/unit/config/app_files_spec.rb +55 -0
- data/spec/unit/config/env_spec.rb +37 -0
- data/spec/unit/config/template_file_spec.rb +55 -0
- data/spec/unit/config/template_files_spec.rb +32 -0
- data/spec/unit/manager_spec.rb +30 -10
- data/spec/unit/managers_spec.rb +40 -0
- data/spec/unit/node_spec.rb +34 -0
- data/spec/unit/nodes_spec.rb +36 -0
- data/spec/unit/service_spec.rb +31 -10
- data/spec/unit/services_spec.rb +34 -0
- metadata +86 -31
- data/Proctorfile +0 -4
- data/lib/proctor/app_config.rb +0 -23
- data/lib/proctor/app_file.rb +0 -44
- data/lib/proctor/cmd_state.rb +0 -39
- data/lib/proctor/presenter/list.rb +0 -67
- data/lib/proctor/presenter/render.rb +0 -39
- data/lib/proctor/template.rb +0 -5
- data/lib/proctor/template_config.rb +0 -22
- data/lib/proctor/template_file.rb +0 -44
- data/lib/proctor/util.rb +0 -12
- data/lib/proctor/version.rb +0 -3
- data/proctor/templates/foreman_default_n.erb +0 -9
- data/proctor/templates/monit_web_s.erb +0 -0
- data/proctor/templates/upstart_default_n.erb +0 -0
- data/spec/acceptance/help_spec.rb +0 -36
- data/spec/acceptance/list_spec.rb +0 -17
- data/spec/unit/app_config_spec.rb +0 -30
- data/spec/unit/template_config_spec.rb +0 -12
- data/spec/unit/template_file_spec.rb +0 -16
- data/spec/unit/template_spec.rb +0 -8
data/.rspec
CHANGED
data/TODO
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Next Steps:
|
2
|
+
|
3
|
+
- Finish use cases
|
4
|
+
- Refactor
|
5
|
+
|
6
|
+
Use Cases:
|
7
|
+
- Manager: upstart, monit, foreman
|
8
|
+
- Services: showtime, showlog
|
9
|
+
- Pid files to shared/pid
|
10
|
+
- Logging to log directory
|
11
|
+
|
12
|
+
Features:
|
13
|
+
- Multi-level template import
|
14
|
+
- Add 'generate' command [-p (proctorfile) -t (templates)]
|
15
|
+
- Enforce unique asset names
|
16
|
+
- Global option '-d EXPORT_DIRECTORY'
|
17
|
+
- Global option '-t TEMPLATE_DIRECTORY'
|
18
|
+
|
19
|
+
- Full-screen status demon
|
20
|
+
- Asset inheritance "extends: XXX"
|
21
|
+
- Asset override: "manager.setting: YYY"
|
22
|
+
- Tab completion / 1st level / 2nd level / 3rd level
|
23
|
+
- Check should deep-check all Proctorfiles
|
24
|
+
- Better ERB error messages
|
25
|
+
|
26
|
+
Docco:
|
27
|
+
- intro video
|
28
|
+
- github website
|
data/bin/proctor
CHANGED
@@ -10,171 +10,141 @@ require 'proctor'
|
|
10
10
|
include GLI
|
11
11
|
include Proctor
|
12
12
|
|
13
|
-
APP_CONFIG=
|
14
|
-
|
15
13
|
# ---- global options ----------------------------------------------------
|
16
14
|
|
17
15
|
version Proctor::VERSION
|
18
16
|
program_desc 'proctor - an application process manager'
|
19
17
|
|
20
18
|
desc 'Select Proctorfile'
|
21
|
-
default_value 'Proctorfile'
|
22
19
|
arg_name 'PROCTORFILE'
|
23
20
|
flag [:f,:proctorfile]
|
24
21
|
|
25
22
|
# ----- commands ---------------------------------------------------------
|
26
23
|
|
27
|
-
desc '
|
28
|
-
|
24
|
+
desc 'Lists handles, names and paths for proctor assets'
|
25
|
+
long_desc <<-EOF
|
26
|
+
Lists the name or path of each Proctor asset. Asset types include Templates,
|
27
|
+
AppFiles, Managers, Services, and Nodes. Managers, Services and Nodes are
|
28
|
+
defined within an AppFile. AppFile values from multiple files are merged
|
29
|
+
together. When there is a conflict, the last value take precedence.
|
30
|
+
EOF
|
31
|
+
command :asset_list do |c|
|
29
32
|
c.action do |global,options,args|
|
30
|
-
|
33
|
+
Command::AssetListCmd.new(global, options, args).list
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
|
-
desc '
|
37
|
+
desc 'Shows content of a proctor asset'
|
35
38
|
long_desc <<-EOF
|
36
|
-
|
37
|
-
|
39
|
+
Displays a raw asset (Template, AppFile, Manager, Service, Node)
|
40
|
+
to the console. View asset handles using 'proctor list'. (asset
|
41
|
+
handles are three character strings at the start of each line)
|
38
42
|
EOF
|
39
|
-
arg_name
|
40
|
-
command :
|
43
|
+
arg_name 'HANDLE'
|
44
|
+
command :asset_show do |c|
|
41
45
|
c.action do |global,options,args|
|
42
|
-
|
46
|
+
Command::AssetShowCmd.new(global, options, args).show
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
|
-
desc '
|
50
|
+
desc 'Removes exported proctor assets'
|
47
51
|
long_desc <<-EOF
|
48
|
-
Requires a
|
49
|
-
all
|
52
|
+
Requires a MANAGER and a NODE name. To see
|
53
|
+
all MANAGERs and NODEs , use 'proctor list'.
|
50
54
|
EOF
|
51
|
-
arg_name "NODE
|
52
|
-
command :
|
55
|
+
arg_name "MANAGER NODE"
|
56
|
+
command :file_cleanup do |c|
|
53
57
|
c.action do |global,options,args|
|
54
|
-
|
58
|
+
Command::FileCleanupCmd.new(global, options, args).cleanup
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
58
|
-
desc '
|
62
|
+
desc 'Exports assets to a management tool'
|
59
63
|
long_desc <<-EOF
|
60
|
-
|
61
|
-
|
62
|
-
defined within an AppFile.
|
63
|
-
|
64
|
-
AppFile values from multiple files are merged together. When there is a conflict,
|
65
|
-
the last value take precedence.
|
64
|
+
Requires a MANAGER and a NODE name. To see
|
65
|
+
all MANAGERs and NODEs , use 'proctor list'.
|
66
66
|
EOF
|
67
|
-
|
68
|
-
|
69
|
-
opt_str = opt_arr.join('|')
|
70
|
-
c.desc "One of: [#{opt_str}]"
|
71
|
-
c.default_value 'all'
|
72
|
-
c.arg_name 'ASSET_TYPE'
|
73
|
-
c.flag [:t, :type]
|
67
|
+
arg_name "MANAGER NODE"
|
68
|
+
command :file_export do |c|
|
74
69
|
c.action do |global,options,args|
|
75
|
-
|
76
|
-
raise "unrecognized type (#{options[:type]}) must be one of [#{opt_str}]"
|
77
|
-
end
|
78
|
-
Presenter::List.new(global, options, args).render
|
70
|
+
Command::FileExportCmd.new(global, options, args).export
|
79
71
|
end
|
80
72
|
end
|
81
73
|
|
82
|
-
desc 'Renders
|
83
|
-
arg_name 'MANAGER
|
74
|
+
desc 'Renders a Group-ERB template to the console'
|
75
|
+
arg_name 'MANAGER NODE'
|
84
76
|
long_desc <<-EOF
|
85
|
-
Requires a MANAGER and a
|
86
|
-
MANAGERs and
|
77
|
+
Requires a MANAGER and a NODE. To see all
|
78
|
+
MANAGERs and NODEs, use 'proctor asset_list'.
|
87
79
|
EOF
|
88
|
-
command :
|
80
|
+
command :render_group do |c|
|
89
81
|
c.action do |global,options,args|
|
90
|
-
|
91
|
-
|
92
|
-
Presenter::Render.new(global, options, args).render
|
82
|
+
Command::RenderGroupCmd.new(global, options, args).render
|
93
83
|
end
|
94
84
|
end
|
95
85
|
|
96
|
-
desc '
|
86
|
+
desc 'Renders a Service-ERB template to the console'
|
87
|
+
arg_name 'MANAGER SERVICE'
|
97
88
|
long_desc <<-EOF
|
98
|
-
|
99
|
-
|
100
|
-
handles are three character strings at the start of each line)
|
89
|
+
Requires a MANAGER and a SERVICE. To see all
|
90
|
+
MANAGERs and SERVICEs, use 'proctor asset_list'.
|
101
91
|
EOF
|
102
|
-
|
103
|
-
command :show do |c|
|
92
|
+
command :render_service do |c|
|
104
93
|
c.action do |global,options,args|
|
105
|
-
|
106
|
-
Presenter::Show.new(global, options, args).show
|
94
|
+
Command::RenderServiceCmd.new(global, options, args).render
|
107
95
|
end
|
108
96
|
end
|
109
97
|
|
110
98
|
desc 'Starts the application'
|
111
|
-
arg_name
|
99
|
+
arg_name 'MANAGER NODE'
|
112
100
|
long_desc <<-EOF
|
113
101
|
Requires a NODE and a MANAGER name. To see
|
114
|
-
all NODEs and MANAGERs, use 'proctor
|
102
|
+
all NODEs and MANAGERs, use 'proctor asset_list'.
|
115
103
|
EOF
|
116
104
|
command :start do |c|
|
117
|
-
|
118
105
|
c.action do |global_options,options,args|
|
119
|
-
|
106
|
+
Command::StartCmd.new(global_options, options, args).start
|
120
107
|
end
|
121
108
|
end
|
122
109
|
|
123
110
|
desc 'Stops the application'
|
124
|
-
arg_name
|
111
|
+
arg_name 'MANAGER NODE'
|
125
112
|
long_desc <<-EOF
|
126
|
-
Requires a
|
127
|
-
all
|
113
|
+
Requires a MANAGER and a NODE name. To see
|
114
|
+
all MANAGERs and NODEs, use 'proctor asset_list'.
|
128
115
|
EOF
|
129
116
|
command :stop do |c|
|
130
|
-
c.desc 'Describe a switch to start'
|
131
|
-
c.switch :s
|
132
|
-
|
133
|
-
c.desc 'Describe a flag to start'
|
134
|
-
c.default_value 'default'
|
135
|
-
c.flag :f
|
136
117
|
c.action do |global_options,options,args|
|
137
|
-
|
138
|
-
|
118
|
+
raise "Usage 'stop MANAGER NODE'" unless args.length == 2
|
119
|
+
puts "STOP"
|
139
120
|
end
|
140
121
|
end
|
141
122
|
|
142
123
|
desc 'Displays the application status'
|
143
|
-
arg_name
|
124
|
+
arg_name 'MANAGER NODE'
|
144
125
|
long_desc <<-EOF
|
145
|
-
Requires a
|
146
|
-
all
|
126
|
+
Requires a MANAGER and a NODE name. To see
|
127
|
+
all MANAGERs and NODEs, use 'proctor asset_list'.
|
147
128
|
EOF
|
148
129
|
command :status do |c|
|
149
|
-
c.desc 'Describe a switch to start'
|
150
|
-
c.switch :s
|
151
|
-
|
152
|
-
c.desc 'Describe a flag to start'
|
153
|
-
c.default_value 'default'
|
154
|
-
c.flag :f
|
155
130
|
c.action do |global,options,args|
|
156
|
-
|
131
|
+
raise "Usage 'status MANAGER NODE'" unless args.length == 2
|
132
|
+
puts "STATUS"
|
157
133
|
end
|
158
134
|
end
|
159
135
|
|
160
|
-
|
161
136
|
# ----- pre/post --------------------------------------------------------------
|
162
137
|
|
163
138
|
pre do |global,command,options,args|
|
164
|
-
|
165
|
-
options[
|
166
|
-
|
167
|
-
# Return true to proceed; false to abort and not call the chosen command
|
168
|
-
# Use skips_pre before a command to skip this block on that command only
|
139
|
+
params = [global, options, args]
|
140
|
+
options['env'] = Proctor::Config::Env.new(params)
|
169
141
|
true
|
170
142
|
end
|
171
143
|
|
172
144
|
post do |global,command,options,args|
|
173
|
-
# Use skips_post before a command to skip this block on that command only
|
174
145
|
end
|
175
146
|
|
176
147
|
on_error do |exception|
|
177
|
-
# return false to skip default error handling
|
178
148
|
true
|
179
149
|
end
|
180
150
|
|
data/bin/showlog
ADDED
data/bin/showtime
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Proctor
|
2
|
+
module Command
|
3
|
+
class AssetListCmd
|
4
|
+
|
5
|
+
def initialize(global, options, args)
|
6
|
+
@global = global
|
7
|
+
@options = options
|
8
|
+
@args = args
|
9
|
+
@env = @options['env']
|
10
|
+
end
|
11
|
+
|
12
|
+
def gen_list
|
13
|
+
list_all
|
14
|
+
end
|
15
|
+
|
16
|
+
def list
|
17
|
+
puts gen_list
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def format_list(list)
|
23
|
+
list.map {|item| "#{item.handle}: #{item.name}\n"}.join
|
24
|
+
end
|
25
|
+
|
26
|
+
def list_templates
|
27
|
+
"[Templates]\n" + format_list(@env.template_files.all)
|
28
|
+
end
|
29
|
+
|
30
|
+
def list_appfiles
|
31
|
+
"[AppFiles]\n" + format_list(@env.app_files.all)
|
32
|
+
end
|
33
|
+
|
34
|
+
def list_managers
|
35
|
+
"[Managers]\n" + format_list(@env.managers.all)
|
36
|
+
end
|
37
|
+
|
38
|
+
def list_services
|
39
|
+
"[Services]\n" + format_list(@env.services.all)
|
40
|
+
end
|
41
|
+
|
42
|
+
def list_nodes
|
43
|
+
"[Nodes]\n" + format_list(@env.nodes.all)
|
44
|
+
end
|
45
|
+
|
46
|
+
def list_all
|
47
|
+
list_templates +
|
48
|
+
list_appfiles +
|
49
|
+
list_managers +
|
50
|
+
list_services +
|
51
|
+
list_nodes
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,11 +1,16 @@
|
|
1
|
+
require_relative './helpers/command'
|
2
|
+
|
1
3
|
module Proctor
|
2
|
-
module
|
3
|
-
class
|
4
|
+
module Command
|
5
|
+
class AssetShowCmd
|
6
|
+
|
7
|
+
include Helpers::Command
|
4
8
|
|
5
9
|
def initialize(global, options, args)
|
6
10
|
@global = global
|
7
11
|
@options = options
|
8
12
|
@args = args
|
13
|
+
check_number_of_args(args, 1, 'show HANDLE')
|
9
14
|
validate_handle(args[0])
|
10
15
|
end
|
11
16
|
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require_relative "./helpers/command"
|
2
|
+
require_relative "../resource/erb"
|
3
|
+
require_relative "../resource/lookup"
|
4
|
+
|
5
|
+
module Proctor
|
6
|
+
module Command
|
7
|
+
class FileCleanupCmd
|
8
|
+
|
9
|
+
include Helpers::Command
|
10
|
+
include Proctor::Resource::Erb
|
11
|
+
include Proctor::Resource::Lookup
|
12
|
+
|
13
|
+
def initialize(global, options, args)
|
14
|
+
@env = options['env']
|
15
|
+
@manager = args[0]
|
16
|
+
@node = args[1]
|
17
|
+
opts = {'MANAGERS' => @env.managers.names, 'NODES' => @env.nodes.names}
|
18
|
+
check_number_of_args(args, 2, 'cleanup MANAGER NODE', opts)
|
19
|
+
end
|
20
|
+
|
21
|
+
def cleanup
|
22
|
+
manager = lookup_valid_manager(@manager, @env)
|
23
|
+
#update_manager_with_cl_options(manager)
|
24
|
+
use_node = manager.data["use_node_template"] # default = false
|
25
|
+
use_service = manager.data["use_service_template"]
|
26
|
+
use_service = true if use_service.nil?
|
27
|
+
node = lookup_valid_node(@node, @env)
|
28
|
+
env = @env
|
29
|
+
manager.data.each_pair do |k,v|
|
30
|
+
manager.data[k] = ERB.new(v).result(binding) if v.class == String
|
31
|
+
end
|
32
|
+
if use_node
|
33
|
+
services = lookup_valid_services_hash(node.name, @env)
|
34
|
+
template = lookup_valid_group_template(manager.name, node.name, @env)
|
35
|
+
remove_node_text_from_disk(manager, node, @env)
|
36
|
+
end
|
37
|
+
if use_service
|
38
|
+
node.services.each do |service_name|
|
39
|
+
service = lookup_valid_service(service_name, @env)
|
40
|
+
template = lookup_valid_service_template(manager.name, service.name, @env)
|
41
|
+
remove_service_text_from_disk(manager, service, @env)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def remove_service_text_from_disk(manager, service, env)
|
49
|
+
export_dir = manager.data["export_directory"]
|
50
|
+
export_file = manager.data["service_filename"] || env.app['name']
|
51
|
+
export_path = "#{export_dir}/#{export_file}"
|
52
|
+
begin
|
53
|
+
system "rm -f #{export_path}" if File.exist?(export_path)
|
54
|
+
rescue
|
55
|
+
msg = "couldn't remove service file (#{export_path})"
|
56
|
+
raise FileRemoveError, msg
|
57
|
+
end
|
58
|
+
puts "Removed service template for #{manager.name}/#{service.name} from #{export_path}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def remove_node_text_from_disk(manager, node, env)
|
62
|
+
export_dir = manager.data["export_directory"]
|
63
|
+
export_file = manager.data["node_filename"] || env.app['name']
|
64
|
+
export_path = "#{export_dir}/#{export_file}"
|
65
|
+
begin
|
66
|
+
system "rm -f #{export_path}" if File.exist?(export_path)
|
67
|
+
rescue
|
68
|
+
msg = "couldn't remove node file (#{export_path})"
|
69
|
+
raise FileRemoveError, msg
|
70
|
+
end
|
71
|
+
puts "Removed group template for #{manager.name}/#{node.name} from #{export_path}"
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
class FileRemoveError < RuntimeError
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative "./helpers/command"
|
2
|
+
require_relative "../resource/erb"
|
3
|
+
require_relative "../resource/lookup"
|
4
|
+
|
5
|
+
module Proctor
|
6
|
+
module Command
|
7
|
+
class FileExportCmd
|
8
|
+
|
9
|
+
include Helpers::Command
|
10
|
+
include Proctor::Resource::Erb
|
11
|
+
include Proctor::Resource::Lookup
|
12
|
+
|
13
|
+
def initialize(global, options, args)
|
14
|
+
@env = options['env']
|
15
|
+
@manager = args[0]
|
16
|
+
@node = args[1]
|
17
|
+
opts = {'MANAGERS' => @env.managers.names, 'NODES' => @env.nodes.names}
|
18
|
+
check_number_of_args(args, 2, 'file_export MANAGER NODE', opts)
|
19
|
+
end
|
20
|
+
|
21
|
+
def export
|
22
|
+
manager = lookup_valid_manager(@manager, @env)
|
23
|
+
#update_manager_with_cl_options(manager)
|
24
|
+
node = lookup_valid_node(@node, @env)
|
25
|
+
if manager.data["group_data"]
|
26
|
+
services = lookup_valid_services_hash(node.name, @env)
|
27
|
+
template = lookup_valid_group_template(manager.name, node.name, @env)
|
28
|
+
text = render_group_template(manager, node, services, template, @env)
|
29
|
+
write_group_text_to_disk(manager, node, text, @env)
|
30
|
+
end
|
31
|
+
if manager.data["service_data"]
|
32
|
+
node.services.each do |service_name|
|
33
|
+
service = lookup_valid_service(service_name, @env)
|
34
|
+
template = lookup_valid_service_template(manager.name, service.name, @env)
|
35
|
+
text = render_service_template(manager, service, template, @env)
|
36
|
+
write_service_text_to_disk(manager, service, text, @env)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def write_service_text_to_disk(manager, service, text, env)
|
45
|
+
export_dir = manager.data["export_directory"]
|
46
|
+
export_file = manager.data["service_filename"] || env.app['name']
|
47
|
+
export_path = "#{export_dir}/#{export_file}"
|
48
|
+
begin
|
49
|
+
system "mkdir -p #{export_dir}"
|
50
|
+
File.open("#{export_dir}/#{export_file}", 'w') {|f| f.puts text}
|
51
|
+
rescue
|
52
|
+
msg = "couldn't open export file (#{export_dir}/#{export_file})"
|
53
|
+
raise FileWriteError, msg
|
54
|
+
end
|
55
|
+
#puts "Exported service template for #{manager.name}/#{service.name} to #{export_path}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def write_group_text_to_disk(manager, node, text, env)
|
59
|
+
export_dir = manager.data["export_directory"]
|
60
|
+
export_file = manager.data["group_data"]["conf_filename"] || env.app['name']
|
61
|
+
export_path = "#{export_dir}/#{export_file}"
|
62
|
+
begin
|
63
|
+
system "mkdir -p #{export_dir}"
|
64
|
+
File.open("#{export_dir}/#{export_file}", 'w') {|f| f.puts text}
|
65
|
+
rescue
|
66
|
+
msg = "couldn't open export file (#{export_dir}/#{export_file})"
|
67
|
+
raise FileWriteError, msg
|
68
|
+
end
|
69
|
+
#puts "Exported group template for #{manager.name}/#{node.name} to #{export_path}"
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
class FileWriteError < RuntimeError
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|