capistrano-config 0.0.4 → 0.0.5
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/capistrano-config.gemspec +2 -0
- data/lib/capistrano-config.rb +39 -104
- data/lib/capistrano-config/version.rb +1 -1
- metadata +34 -2
data/capistrano-config.gemspec
CHANGED
data/lib/capistrano-config.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "capistrano-config/version"
|
2
|
-
require
|
3
|
-
require
|
2
|
+
require "capistrano/configuration/actions/file_transfer_ext"
|
3
|
+
require "capistrano/configuration/resources/file_resources"
|
4
|
+
require "erb"
|
4
5
|
|
5
6
|
module Capistrano
|
6
7
|
module ConfigRecipe
|
@@ -15,97 +16,26 @@ module Capistrano
|
|
15
16
|
_cset(:config_use_shared, false)
|
16
17
|
_cset(:config_shared_path) { File.join(shared_path, 'config') }
|
17
18
|
|
18
|
-
_cset(:config_readable_mode, "
|
19
|
+
_cset(:config_readable_mode, "a+r")
|
19
20
|
_cset(:config_readable_files, [])
|
20
|
-
_cset(:config_writable_mode, "
|
21
|
+
_cset(:config_writable_mode, "a+rw")
|
21
22
|
_cset(:config_writable_files, [])
|
22
|
-
_cset(:config_executable_mode, "
|
23
|
+
_cset(:config_executable_mode, "a+rx")
|
23
24
|
_cset(:config_executable_files, [])
|
24
25
|
_cset(:config_remove_files, [])
|
25
26
|
|
26
|
-
def tempfile(name)
|
27
|
-
f = Tempfile.new(name)
|
28
|
-
path = f.path
|
29
|
-
f.close(true) # close and remove tempfile immediately
|
30
|
-
path
|
31
|
-
end
|
32
|
-
|
33
|
-
def template(config)
|
34
|
-
if File.file?(config)
|
35
|
-
File.read(config)
|
36
|
-
elsif File.file?("#{config}.erb")
|
37
|
-
ERB.new(File.read("#{config}.erb")).result(binding)
|
38
|
-
else
|
39
|
-
abort("config: no such template found: #{config} or #{config}.erb")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def update_one(source, target, options={})
|
44
|
-
try_sudo = options[:use_sudo] ? sudo : ""
|
45
|
-
execute = []
|
46
|
-
dirs = [ File.dirname(source), File.dirname(target) ].uniq
|
47
|
-
execute << "#{try_sudo} mkdir -p #{dirs.map { |d| d.dump }.join(' ')}"
|
48
|
-
execute << "( #{try_sudo} diff -u #{target.dump} #{source.dump} || #{try_sudo} mv -f #{source.dump} #{target.dump} )"
|
49
|
-
|
50
|
-
execute << "#{try_sudo} chmod #{config_readable_mode} #{target.dump}" if options[:readable_files].include?(target)
|
51
|
-
execute << "#{try_sudo} chmod #{config_writable_mode} #{target.dump}" if options[:writable_files].include?(target)
|
52
|
-
execute << "#{try_sudo} chmod #{config_executable_mode} #{target.dump}" if options[:executable_files].include?(target)
|
53
|
-
execute << "#{try_sudo} rm -f #{config_remove_files.map { |f| f.dump }.join(' ')}" if options[:remove_files].include?(target)
|
54
|
-
|
55
|
-
execute.join(' && ')
|
56
|
-
end
|
57
|
-
|
58
|
-
def update_all(files={}, options={})
|
59
|
-
srcs = files.map { |src, dst| src }
|
60
|
-
tmps = files.map { tempfile("capistrano-config") }
|
61
|
-
dsts = files.map { |src, dst| dst }
|
62
|
-
begin
|
63
|
-
srcs.zip(tmps).each do |src, tmp|
|
64
|
-
put(template(src), tmp)
|
65
|
-
end
|
66
|
-
tmps.zip(dsts).each do |tmp, dst|
|
67
|
-
run(update_one(tmp, dst, options.merge(:use_sudo => fetch(:config_use_sudo_remotely, false))))
|
68
|
-
end
|
69
|
-
ensure
|
70
|
-
run("rm -f #{tmps.map { |f| f.dump }.join(' ')}") unless tmps.empty?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def update_all_locally(files={}, options={})
|
75
|
-
srcs = files.map { |src, dst| src }
|
76
|
-
tmps = files.map { tempfile("capistrano-config") }
|
77
|
-
dsts = files.map { |src, dst| dst }
|
78
|
-
begin
|
79
|
-
srcs.zip(tmps).each do |src, tmp|
|
80
|
-
File.open(tmp, 'wb') { |fp| fp.write(template(src)) } unless dry_run
|
81
|
-
end
|
82
|
-
tmps.zip(dsts).each do |tmp, dst|
|
83
|
-
run_locally(update_one(tmp, dst, options.merge(:use_sudo => fetch(:config_use_sudo_locally, false))))
|
84
|
-
end
|
85
|
-
ensure
|
86
|
-
run_locally("rm -f #{tmps.map { |f| f.dump }.join(' ')}") unless tmps.empty?
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def symlink_all(files={}, options={})
|
91
|
-
execute = []
|
92
|
-
files.each do |src, dst|
|
93
|
-
execute << "( rm -f #{dst.dump} && ln -s #{src.dump} #{dst.dump} )"
|
94
|
-
end
|
95
|
-
run(execute.join(' && '))
|
96
|
-
end
|
97
|
-
|
98
27
|
desc("Setup shared application config.")
|
99
28
|
task(:setup, :roles => :app, :except => { :no_release => true }) {
|
100
29
|
if config_use_shared
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
)
|
30
|
+
config_files.each do |f|
|
31
|
+
safe_put(template(f, :path => config_template_path), File.join(config_shared_path, f), :place => :if_modified)
|
32
|
+
end
|
33
|
+
execute = []
|
34
|
+
execute << "#{try_sudo} chmod #{config_readable_mode} #{config_readable_files.map { |f| File.join(config_shared_path, f).dump }.join(' ')}" unless config_readable_files.empty?
|
35
|
+
execute << "#{try_sudo} chmod #{config_writable_mode} #{config_writable_files.map { |f| File.join(config_shared_path, f).dump }.join(' ')}" unless config_writable_files.empty?
|
36
|
+
execute << "#{try_sudo} chmod #{config_executable_mode} #{config_executable_files.map { |f| File.join(config_shared_path, f).dump }.join(' ')}" unless config_executable_files.empty?
|
37
|
+
execute << "#{try_sudo} rm -f #{config_remove_files.map { |f| File.join(config_shared_path, f).dump }.join(' ')}" unless config_remove_files.empty?
|
38
|
+
run(execute.join(" && ")) unless execute.empty?
|
109
39
|
end
|
110
40
|
}
|
111
41
|
after 'deploy:setup', 'config:setup'
|
@@ -121,30 +51,35 @@ module Capistrano
|
|
121
51
|
|
122
52
|
task(:update_remotely, :roles => :app, :except => { :no_release => true }) {
|
123
53
|
if config_use_shared
|
124
|
-
|
125
|
-
|
126
|
-
|
54
|
+
execute = []
|
55
|
+
config_files.each do |f|
|
56
|
+
execute << "( rm -f #{File.join(config_path, f).dump}; " +
|
57
|
+
"ln -sf #{File.join(config_shared_path, f).dump} #{File.join(config_path, f).dump} )"
|
58
|
+
end
|
59
|
+
run(execute.join(" && ")) unless execute.empty?
|
127
60
|
else
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
)
|
61
|
+
config_files.each do |f|
|
62
|
+
safe_put(template(f, :path => config_template_path), File.join(config_path, f), :place => :if_modified)
|
63
|
+
end
|
64
|
+
execute = []
|
65
|
+
execute << "#{try_sudo} chmod #{config_readable_mode} #{config_readable_files.map { |f| File.join(config_path, f).dump }.join(' ')}" unless config_readable_files.empty?
|
66
|
+
execute << "#{try_sudo} chmod #{config_writable_mode} #{config_writable_files.map { |f| File.join(config_path, f).dump }.join(' ')}" unless config_writable_files.empty?
|
67
|
+
execute << "#{try_sudo} chmod #{config_executable_mode} #{config_executable_files.map { |f| File.join(config_path, f).dump }.join(' ')}" unless config_executable_files.empty?
|
68
|
+
execute << "#{try_sudo} rm -f #{config_remove_files.map { |f| File.join(config_path, f).dump }.join(' ')}" unless config_remove_files.empty?
|
69
|
+
run(execute.join(" && ")) unless execute.empty?
|
136
70
|
end
|
137
71
|
}
|
138
72
|
|
139
73
|
task(:update_locally, :roles => :app, :except => { :no_release => true }) {
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
)
|
74
|
+
config_files.each do |f|
|
75
|
+
File.write(File.join(config_path_local, f), template(f, :path => config_template_path))
|
76
|
+
end
|
77
|
+
execute = []
|
78
|
+
execute << "#{try_sudo} chmod #{config_readable_mode} #{config_readable_files.map { |f| File.join(config_path_local, f).dump }.join(' ')}" unless config_readable_files.empty?
|
79
|
+
execute << "#{try_sudo} chmod #{config_writable_mode} #{config_writable_files.map { |f| File.join(config_path_local, f).dump }.join(' ')}" unless config_writable_files.empty?
|
80
|
+
execute << "#{try_sudo} chmod #{config_executable_mode} #{config_executable_files.map { |f| File.join(config_path_local, f).dump }.join(' ')}" unless config_executable_files.empty?
|
81
|
+
execute << "#{try_sudo} rm -f #{config_remove_files.map { |f| File.join(config_path_local, f).dump }.join(' ')}" unless config_remove_files.empty?
|
82
|
+
run(execute.join(" && ")) unless execute.empty?
|
148
83
|
}
|
149
84
|
}
|
150
85
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: capistrano-file-resources
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: capistrano-file-transfer-ext
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.0.3
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.3
|
30
62
|
description: a capistrano recipe to manage configurations files.
|
31
63
|
email:
|
32
64
|
- yamashita@geishatokyo.com
|