dust-deploy 0.13.17 → 0.13.18
Sign up to get free protection for your applications and to get access to all the features.
- data/changelog.md +9 -0
- data/lib/dust/helper.rb +1 -2
- data/lib/dust/recipes/iptables.rb +2 -2
- data/lib/dust/recipes/newrelic.rb +0 -6
- data/lib/dust/recipes/packages.rb +3 -3
- data/lib/dust/recipes/repositories.rb +32 -15
- data/lib/dust/recipes/skel.rb +2 -2
- data/lib/dust/server.rb +61 -25
- data/lib/dust/version.rb +1 -1
- metadata +2 -2
data/changelog.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
Changelog
|
2
2
|
=============
|
3
3
|
|
4
|
+
0.13.18
|
5
|
+
------------
|
6
|
+
|
7
|
+
- adds support for ppa-repositories
|
8
|
+
- fixes small bug with iptables ipv6 workaround
|
9
|
+
- newrelic now works with non-apt systems
|
10
|
+
- packages recipe now accepts https, http and ftp urls
|
11
|
+
|
12
|
+
|
4
13
|
0.13.17
|
5
14
|
------------
|
6
15
|
|
data/lib/dust/helper.rb
CHANGED
@@ -263,14 +263,14 @@ class Iptables < Recipe
|
|
263
263
|
def workaround_setup
|
264
264
|
# openwrt always needs the workaround
|
265
265
|
if @node.uses_opkg?
|
266
|
-
@workaround
|
266
|
+
@workaround ||= { 'path' => '/etc/firewall.sh' }
|
267
267
|
|
268
268
|
# iptables-persistent < version 0.5.1 doesn't support ipv6
|
269
269
|
# so doing a workaround
|
270
270
|
elsif @node.uses_apt? and @ip_version == 6
|
271
271
|
unless @node.package_min_version?('iptables-persistent', '0.5.1', :quiet => true)
|
272
272
|
@node.messages.add('iptables-persistent too old (< 0.5.1), using workaround for ipv6').warning
|
273
|
-
@workaround
|
273
|
+
@workaround ||= { 'path' => '/etc/network/if-pre-up.d/ip6tables' }
|
274
274
|
end
|
275
275
|
end
|
276
276
|
|
@@ -2,12 +2,6 @@ class Newrelic < Recipe
|
|
2
2
|
desc 'newrelic:deploy', 'installs and configures newrelic system monitoring'
|
3
3
|
def deploy
|
4
4
|
return Dust.print_failed 'no key specified' unless @config
|
5
|
-
return unless @node.uses_apt? :quiet=>false
|
6
|
-
|
7
|
-
if @options.restart? or @options.reload?
|
8
|
-
msg = @node.messages.add('updating repositories')
|
9
|
-
msg.parse_result(@node.exec('aptitude update')[:exit_code])
|
10
|
-
end
|
11
5
|
|
12
6
|
unless @node.install_package 'newrelic-sysmond'
|
13
7
|
@node.messages.add('installing newrelic monitoring daemon failed, did you setup the newrelic repositories?').failed
|
@@ -16,7 +16,7 @@ class Repositories < Recipe
|
|
16
16
|
# deletes all .list files under /etc/apt/sources.list.d
|
17
17
|
def delete_old_repositories
|
18
18
|
msg = @node.messages.add('deleting old repositories')
|
19
|
-
@node.rm
|
19
|
+
@node.rm('/etc/apt/sources.list.d/*.list', :quiet => true) if @node.uses_apt?
|
20
20
|
msg.ok
|
21
21
|
end
|
22
22
|
|
@@ -26,37 +26,43 @@ class Repositories < Recipe
|
|
26
26
|
# if repo is present but not a hash use defaults
|
27
27
|
repo = {} unless repo.is_a? Hash
|
28
28
|
|
29
|
-
merge_with_default_settings
|
29
|
+
merge_with_default_settings(repo)
|
30
30
|
|
31
31
|
# the default repository in /etc/apt/sources.list (debian)
|
32
32
|
if name == 'default'
|
33
|
-
msg = @node.messages.add('deploying default repository'
|
34
|
-
sources = generate_default_repo
|
35
|
-
msg.parse_result(@node.write('/etc/apt/sources.list', sources, :quiet => true)
|
33
|
+
msg = @node.messages.add('deploying default repository')
|
34
|
+
sources = generate_default_repo(repo)
|
35
|
+
msg.parse_result(@node.write('/etc/apt/sources.list', sources, :quiet => true))
|
36
36
|
else
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
if repo['ppa']
|
38
|
+
@node.messages.add("adding ppa repository '#{name}'\n")
|
39
|
+
add_ppa(repo)
|
40
|
+
else
|
41
|
+
msg = @node.messages.add("adding repository '#{name}' to sources")
|
42
|
+
sources = generate_repo(repo)
|
43
|
+
msg.parse_result(@node.write("/etc/apt/sources.list.d/#{name}.list", sources, :quiet => true))
|
44
|
+
add_repo_key(name, repo)
|
45
|
+
end
|
41
46
|
end
|
42
47
|
end
|
43
48
|
end
|
44
49
|
|
45
50
|
# merge repo configuration with default settings
|
46
|
-
def merge_with_default_settings
|
51
|
+
def merge_with_default_settings(repo)
|
47
52
|
# setting defaults
|
48
53
|
repo['url'] ||= 'http://ftp.debian.org/debian/' if @node.is_debian?
|
49
54
|
repo['url'] ||= 'http://archive.ubuntu.com/ubuntu/' if @node.is_ubuntu?
|
50
55
|
|
51
56
|
repo['release'] ||= @node['lsbdistcodename']
|
52
|
-
repo['components'] ||= 'main'
|
57
|
+
repo['components'] ||= [ 'main' ]
|
58
|
+
repo['components'] = repo['components'].to_array.join(' ')
|
53
59
|
|
54
60
|
# ||= doesn't work for booleans
|
55
61
|
repo['source'] = repo['source'].nil? ? true : repo['source']
|
56
62
|
repo['binary'] = repo['binary'].nil? ? true : repo['binary']
|
57
63
|
end
|
58
64
|
|
59
|
-
def generate_default_repo
|
65
|
+
def generate_default_repo(repo)
|
60
66
|
sources = ''
|
61
67
|
sources << "deb #{repo['url']} #{repo['release']} #{repo['components']}\n"
|
62
68
|
sources << "deb-src #{repo['url']} #{repo['release']} #{repo['components']}\n\n"
|
@@ -89,7 +95,18 @@ class Repositories < Recipe
|
|
89
95
|
sources
|
90
96
|
end
|
91
97
|
|
92
|
-
def
|
98
|
+
def add_ppa(repo)
|
99
|
+
return false unless @node.install_package('python-software-properties', :indent => 2)
|
100
|
+
msg = @node.messages.add('running add-apt-repository', :indent => 2)
|
101
|
+
cmd = "add-apt-repository -y ppa:#{repo['ppa']}"
|
102
|
+
if repo['keyserver']
|
103
|
+
@node.messages.add("using custom keyserver '#{repo['keyserver']}'").ok
|
104
|
+
cmd << " -k #{repo['keyserver']}"
|
105
|
+
end
|
106
|
+
msg.parse_result(@node.exec(cmd)[:exit_code])
|
107
|
+
end
|
108
|
+
|
109
|
+
def generate_repo(repo)
|
93
110
|
# add url to sources.list
|
94
111
|
sources = ''
|
95
112
|
repo['release'].to_array.each do |release|
|
@@ -99,14 +116,14 @@ class Repositories < Recipe
|
|
99
116
|
sources
|
100
117
|
end
|
101
118
|
|
102
|
-
def add_repo_key
|
119
|
+
def add_repo_key(name, repo)
|
103
120
|
# add the repository key
|
104
121
|
if repo['key']
|
105
122
|
msg = @node.messages.add("adding #{name} repository key")
|
106
123
|
|
107
124
|
# if the key is a .deb, download and install it
|
108
125
|
if repo['key'].match /\.deb$/
|
109
|
-
ret = @node.exec
|
126
|
+
ret = @node.exec('mktemp --tmpdir dust.XXXXXXXXXX')
|
110
127
|
if ret[:exit_code] != 0
|
111
128
|
msg.failed('could not create temporary file on server')
|
112
129
|
return false
|
data/lib/dust/recipes/skel.rb
CHANGED
@@ -4,8 +4,8 @@ class Skel < Recipe
|
|
4
4
|
@config.to_array.each do |user|
|
5
5
|
@node.messages.add("deploying homedir skeleton for #{user}\n")
|
6
6
|
Dir["#{@template_path}/.*"].each do |file|
|
7
|
-
next unless File.file?
|
8
|
-
@node.deploy_file
|
7
|
+
next unless File.file?(file)
|
8
|
+
@node.deploy_file(file, "#{@node.get_home(user)}/#{File.basename(file)}", { :binding => binding, :indent => 2 })
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/dust/server.rb
CHANGED
@@ -163,13 +163,8 @@ module Dust
|
|
163
163
|
|
164
164
|
# if in sudo mode, copy file to temporary place, then move using sudo
|
165
165
|
if @node['sudo']
|
166
|
-
|
167
|
-
|
168
|
-
msg.failed('could not create temporary file (needed for sudo)')
|
169
|
-
return false
|
170
|
-
end
|
171
|
-
|
172
|
-
tmpfile = ret[:stdout].chomp
|
166
|
+
tmpfile = mktemp
|
167
|
+
return msg.failed('could not create temporary file (needed for sudo)') unless tmpfile
|
173
168
|
|
174
169
|
# allow user to write file without sudo (for scp)
|
175
170
|
# then change file back to root, and copy to the destination
|
@@ -319,32 +314,66 @@ module Dust
|
|
319
314
|
msg.failed
|
320
315
|
end
|
321
316
|
|
322
|
-
def install_package
|
323
|
-
options = default_options.merge
|
317
|
+
def install_package(package, options = {})
|
318
|
+
options = default_options.merge(options)
|
324
319
|
options[:env] ||= ''
|
325
320
|
|
326
|
-
if package_installed?
|
321
|
+
if package_installed?(package, :quiet => true)
|
327
322
|
return messages.add("package #{package} already installed", options).ok
|
328
323
|
end
|
329
324
|
|
330
|
-
|
325
|
+
# if package is an url, download and install the package file
|
326
|
+
if package =~ /^(http:\/\/|https:\/\/|ftp:\/\/)/
|
327
|
+
if uses_apt?
|
328
|
+
messages.add("installing #{package}\n", options)
|
329
|
+
return false unless install_package('wget')
|
331
330
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
331
|
+
msg = messages.add('downloading package', options.merge(:indent => options[:indent] + 1))
|
332
|
+
|
333
|
+
# creating temporary file
|
334
|
+
tmpfile = mktemp
|
335
|
+
return msg.failed('could not create temporary file') unless tmpfile
|
336
|
+
|
337
|
+
msg.parse_result(exec("wget #{package} -O #{tmpfile}")[:exit_code])
|
338
|
+
|
339
|
+
msg = messages.add('installing package', options.merge(:indent => options[:indent] + 1))
|
340
|
+
ret = msg.parse_result(exec("dpkg -i #{tmpfile}")[:exit_code])
|
341
|
+
|
342
|
+
msg = messages.add('deleting downloaded file', options.merge(:indent => options[:indent] + 1))
|
343
|
+
msg.parse_result(rm(tmpfile, :quiet => true))
|
344
|
+
|
345
|
+
return ret
|
346
|
+
|
347
|
+
elsif uses_rpm?
|
348
|
+
msg = messages.add("installing #{package}", options)
|
349
|
+
return msg.parse_result(exec("rpm -U #{package}")[:exit_code])
|
350
|
+
|
351
|
+
else
|
352
|
+
return msg.failed("\ninstalling packages from url not yet supported " +
|
353
|
+
"for your distribution. feel free to contribute!").failed
|
354
|
+
end
|
355
|
+
|
356
|
+
# package is not an url, use package manager
|
342
357
|
else
|
343
|
-
|
344
|
-
|
358
|
+
msg = messages.add("installing #{package}", options)
|
359
|
+
|
360
|
+
if uses_apt?
|
361
|
+
exec "DEBIAN_FRONTEND=noninteractive aptitude install -y #{package}"
|
362
|
+
elsif uses_emerge?
|
363
|
+
exec "#{options[:env]} emerge #{package}"
|
364
|
+
elsif uses_rpm?
|
365
|
+
exec "yum install -y #{package}"
|
366
|
+
elsif uses_pacman?
|
367
|
+
exec "echo y |pacman -S #{package}"
|
368
|
+
elsif uses_opkg?
|
369
|
+
exec "opkg install #{package}"
|
370
|
+
else
|
371
|
+
return msg.failed("install_package only supports apt, emerge and yum systems at the moment")
|
372
|
+
end
|
345
373
|
|
346
|
-
|
347
|
-
|
374
|
+
# check if package actually was installed
|
375
|
+
return msg.parse_result(package_installed?(package, :quiet => true))
|
376
|
+
end
|
348
377
|
end
|
349
378
|
|
350
379
|
# check if installed package is at least version min_version
|
@@ -760,6 +789,13 @@ module Dust
|
|
760
789
|
end
|
761
790
|
end
|
762
791
|
|
792
|
+
# create a temporary file
|
793
|
+
def mktemp
|
794
|
+
ret = exec('mktemp --tmpdir dust.XXXXXXXXXX')
|
795
|
+
return false if ret[:exit_code] != 0
|
796
|
+
ret[:stdout].chomp
|
797
|
+
end
|
798
|
+
|
763
799
|
|
764
800
|
private
|
765
801
|
|
data/lib/dust/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dust-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.18
|
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: 2012-07-
|
12
|
+
date: 2012-07-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|