dust-deploy 0.13.17 → 0.13.18
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/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
|