dust-deploy 0.12.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,47 +9,55 @@ class Limits < Recipe
9
9
  'sigpending', 'msgqueue', 'nice', 'rtprio', 'chroot' ]
10
10
 
11
11
  unless @node.dir_exists? '/etc/security/limits.d'
12
- return ::Dust.print_failed 'your system does not support /etc/security/limits.d'
12
+ return @node.messages.add('your system does not support /etc/security/limits.d').failed
13
13
  end
14
- puts
14
+
15
+ clean
15
16
 
16
17
  @config.each do |name, rules|
17
18
  limits_conf = ''
18
- ::Dust.print_msg "assembling system limits according to rule '#{name}'\n"
19
+ @node.messages.add("assembling system limits according to rule '#{name}'\n")
19
20
  rules.to_array.each do |rule|
20
21
 
21
22
  # check if entry is valid
22
23
  unless rule['domain']
23
- ::Dust.print_failed "domain cannot be empty, skipping", :indent => 2
24
+ @node.messages.add("domain cannot be empty, skipping", :indent => 2).failed
24
25
  next
25
26
  end
26
27
 
27
28
  unless rule['value']
28
- ::Dust.print_failed "value cannot be empty, skipping", :indent => 2
29
+ @node.messages.add("value cannot be empty, skipping", :indent => 2).failed
29
30
  next
30
31
  end
31
32
 
32
33
  unless items.include? rule['item']
33
- ::Dust.print_failed "'#{rule['item']}' is not a valid item, skipping. valid items: #{items.join(',')}", :indent => 2
34
+ @node.messages.add("'#{rule['item']}' is not a valid item, skipping. valid items: #{items.join(',')}", :indent => 2).failed
34
35
  next
35
36
  end
36
37
 
37
38
  unless types.include? rule['type']
38
- ::Dust.print_failed "'#{rule['type']}' is not a valid type, skipping. valid types: #{types.join(',')}", :indent => 2
39
+ @node.messages.add("'#{rule['type']}' is not a valid type, skipping. valid types: #{types.join(',')}", :indent => 2).failed
39
40
  next
40
41
  end
41
42
 
42
43
  # assemble rule
43
44
  line = "#{rule['domain']}\t#{rule['type']}\t#{rule['item']}\t#{rule['value']}\n"
44
- ::Dust.print_ok "adding '#{line.chomp}'", :indent => 2
45
+ @node.messages.add("adding '#{line.chomp}'", :indent => 2).ok
45
46
  limits_conf << line
46
47
  end
47
48
 
48
49
  # deploy rule file
49
- ::Dust.print_msg "deploying limits to /etc/security/limits.d/#{name}"
50
- ::Dust.print_result @node.write("/etc/security/limits.d/#{name}", limits_conf, :quiet => true)
51
- puts
50
+ msg = @node.messages.add("deploying limits to /etc/security/limits.d/#{name}")
51
+ msg.parse_result(@node.write("/etc/security/limits.d/#{name}", limits_conf, :quiet => true))
52
52
  end
53
53
  end
54
54
 
55
+
56
+ private
57
+
58
+ # removes all files in /etc/security/limits.d
59
+ def clean
60
+ msg = @node.messages.add('cleaning all files from /etc/security/limits.d')
61
+ msg.parse_result(@node.rm('/etc/security/limits.d/*', :quiet => true))
62
+ end
55
63
  end
@@ -1,36 +1,36 @@
1
1
  class Locale < Recipe
2
2
  desc 'locale:deploy', 'configures system locale'
3
- def deploy
3
+ def deploy
4
4
  # ubuntu needs a proper language pack
5
5
  language = @config.split('_').first
6
6
  @node.install_package "language-pack-#{language}-base" if @node.is_ubuntu?
7
-
7
+
8
8
  if @node.uses_apt?
9
- ::Dust.print_msg "setting locale to '#{@config}'"
9
+ msg = @node.messages.add("setting locale to '#{@config}'")
10
10
  @node.write '/etc/default/locale', "LANGUAGE=#{@config}\nLANG=#{@config}\nLC_ALL=#{@config}\nLC_CTYPE=#{@config}\n", :quiet => true
11
- ::Dust.print_ok
11
+ msg.ok
12
12
  elsif @node.uses_rpm?
13
- ::Dust.print_msg "setting locale to '#{@config}'"
13
+ msg = @node.messages.add("setting locale to '#{@config}'")
14
14
  @node.write '/etc/sysconfig/i18n', "LANG=\"#{@config}\"\nLC_ALL=\"#{@config}\"\nSYSFONT=\"latarcyrheb-sun16\"\n", :quiet => true
15
- ::Dust.print_ok
15
+ msg.ok
16
16
  else
17
- ::Dust.print_failed 'os not supported'
17
+ @node.message.add('os not supported').failed
18
18
  end
19
19
  end
20
-
20
+
21
21
  desc 'locale:status', 'shows current locale'
22
22
  def status
23
- ::Dust.print_msg 'getting current locale'
23
+ msg = @node.messages.add('getting current locale')
24
24
 
25
25
  if @node.uses_apt?
26
26
  ret = @node.exec 'cat /etc/default/locale'
27
27
  elsif @node.uses_rpm?
28
28
  ret = @node.exec 'cat /etc/sysconfig/i18n'
29
29
  else
30
- return ::Dust.print_failed
30
+ return msg.failed
31
31
  end
32
-
33
- ::Dust.print_result ret[:exit_code]
34
- ::Dust.print_ret ret
35
- end
32
+
33
+ msg.parse_result(ret[:exit_code])
34
+ msg.print_output(ret)
35
+ end
36
36
  end
@@ -4,10 +4,10 @@ class Logrotate < Recipe
4
4
  return unless @node.install_package 'logrotate'
5
5
 
6
6
  @config.each do |name, rule|
7
- ::Dust.print_msg "deploying logrotate entry for '#{name}'\n"
7
+ @node.messages.add("deploying logrotate entry for '#{name}'\n")
8
8
 
9
9
  unless rule['path']
10
- ::Dust.print_failed 'path not specified', :indent => 2
10
+ @node.messages.add('path not specified', :indent => 2).failed
11
11
  next
12
12
  end
13
13
 
@@ -30,7 +30,7 @@ class Logrotate < Recipe
30
30
 
31
31
  desc 'logrotate:status', 'displays filenames of installed logrotate rules'
32
32
  def status
33
- ::Dust.print_ret @node.exec('ls /etc/logrotate.d/*')
33
+ @node.messages.add.print_output(@node.exec('ls /etc/logrotate.d/*'))
34
34
  end
35
35
 
36
36
 
@@ -0,0 +1,29 @@
1
+ class Make < Recipe
2
+ desc 'make:deploy', 'configure, make, make install'
3
+ def deploy
4
+ # install dependencies (defaults, build-essential | make, gcc)
5
+ @node.install_package 'build-essential'
6
+
7
+ # create temporary directory
8
+ ret = @node.exec 'mktemp -d --tmpdir dust_make.XXXXXXXXX'
9
+ return ::Dust.print_failed 'error creating temporary directory' if ret[:exit_code] != 0
10
+ tempdir = ret[:stdout].chomp
11
+
12
+ url = 'http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz'
13
+
14
+ if url =~ /\.(tar.gz|tgz)$/
15
+ elsif url.end_with? '.tar.bz2'
16
+ elsif url.end_with? '.zip'
17
+ else
18
+ end
19
+
20
+ # if @config['svn']
21
+ # if @config['git']
22
+
23
+ # get url, svn, git repository
24
+ # unpack bz2, tgz, zip
25
+
26
+ # run commands (default [ './configure --prefix=/usr/local/', 'make', 'make install' ]
27
+ # symlink
28
+ end
29
+ end
@@ -6,9 +6,9 @@ class Motd < Recipe
6
6
 
7
7
  desc 'motd:status', 'shows current message of the day'
8
8
  def status
9
- ::Dust.print_msg 'getting /etc/motd'
9
+ msg = @node.messages.add('getting /etc/motd')
10
10
  ret = @node.exec 'cat /etc/motd'
11
- ::Dust.print_result ret[:exit_code]
12
- ::Dust.print_ret ret
11
+ msg.parse_result(ret[:exit_code])
12
+ msg.print_output(ret)
13
13
  end
14
14
  end
@@ -6,11 +6,11 @@ class Mysql < Recipe
6
6
 
7
7
  @config = default_config.deep_merge @config
8
8
 
9
- ::Dust.print_msg "configuring mysql\n"
10
- ::Dust.print_ok "listen on #{@config['mysqld']['bind-address']}:#{@config['mysqld']['port']}", :indent => 2
9
+ @node.messages.add("configuring mysql\n")
10
+ @node.messages.add("listen on #{@config['mysqld']['bind-address']}:#{@config['mysqld']['port']}", :indent => 2).ok
11
11
 
12
12
  @config['mysqld']['innodb_buffer_pool_size'] ||= get_innodb_buffer_pool_size
13
- ::Dust.print_ok "set innodb buffer pool to '#{@config['mysqld']['innodb_buffer_pool_size']}'", :indent => 2
13
+ @node.messages.add("set innodb buffer pool to '#{@config['mysqld']['innodb_buffer_pool_size']}'", :indent => 2).ok
14
14
 
15
15
  @node.write '/etc/mysql/my.cnf', generate_my_cnf
16
16
 
@@ -78,7 +78,7 @@ class Mysql < Recipe
78
78
  # allocate 70% of the available ram to mysql
79
79
  # but leave max 1gb to system
80
80
  unless @config['mysqld']['innodb_buffer_pool_size']
81
- ::Dust.print_msg 'autoconfiguring innodb buffer size', :indent => 2
81
+ msg = @node.messages.add('autoconfiguring innodb buffer size', :indent => 2)
82
82
  @node.collect_facts :quiet => true
83
83
 
84
84
  # get system memory (in kb)
@@ -87,7 +87,7 @@ class Mysql < Recipe
87
87
  # allocate 80% of the available ram to mysql
88
88
  buffer_pool = (system_mem * 0.7).to_i
89
89
 
90
- ::Dust.print_ok
90
+ msg.ok
91
91
  "#{buffer_pool / 1024}M"
92
92
  end
93
93
  end
@@ -1,21 +1,21 @@
1
1
  class Newrelic < Recipe
2
2
  desc 'newrelic:deploy', 'installs and configures newrelic system monitoring'
3
- def deploy
3
+ def deploy
4
4
  return Dust.print_failed 'no key specified' unless @config
5
5
  return unless @node.uses_apt? :quiet=>false
6
6
 
7
7
  if @options.restart? or @options.reload?
8
- ::Dust.print_msg 'updating repositories'
9
- ::Dust.print_result @node.exec('aptitude update')[:exit_code]
8
+ msg = @node.messages.add('updating repositories')
9
+ msg.parse_result(@node.exec('aptitude update')[:exit_code])
10
10
  end
11
11
 
12
12
  unless @node.install_package 'newrelic-sysmond'
13
- ::Dust.print_failed 'installing newrelic monitoring daemon failed, did you setup the newrelic repositories?'
13
+ @node.messages.add('installing newrelic monitoring daemon failed, did you setup the newrelic repositories?').failed
14
14
  return
15
15
  end
16
16
 
17
- ::Dust.print_msg 'configuring new relic server monitoring tool'
18
- return unless ::Dust.print_result @node.exec("nrsysmond-config --set ssl=true license_key=#{@config}")[:exit_code]
17
+ msg = @node.messages.add('configuring new relic server monitoring tool')
18
+ return unless msg.parse_result(@node.exec("nrsysmond-config --set ssl=true license_key=#{@config}")[:exit_code])
19
19
 
20
20
  @node.restart_service 'newrelic-sysmond' if options.restart?
21
21
  end
@@ -7,35 +7,35 @@ class Nginx < Recipe
7
7
  @node.deploy_file "#{@template_path}/nginx.conf", '/etc/nginx/nginx.conf'
8
8
 
9
9
  # remove old sites that may be present
10
- ::Dust.print_msg 'deleting old sites in /etc/nginx/sites-*'
10
+ msg = @node.messages.add('deleting old sites in /etc/nginx/sites-*')
11
11
  @node.rm '/etc/nginx/sites-*/*', :quiet => true
12
- ::Dust.print_ok
12
+ msg.ok
13
13
 
14
14
  @config.each do |state, sites|
15
15
  sites.to_array.each do |site|
16
16
  @node.deploy_file "#{@template_path}/sites/#{site}", "/etc/nginx/sites-available/#{site}", :binding => binding
17
-
17
+
18
18
  # symlink to sites-enabled if this is listed as an enabled site
19
19
  if state == 'sites-enabled'
20
- ::Dust.print_msg "enabling #{site}", :indent => 2
21
- ::Dust.print_result @node.exec("cd /etc/nginx/sites-enabled && ln -s ../sites-available/#{site} #{site}")[:exit_code]
20
+ msg = @node.messages.add("enabling #{site}", :indent => 2)
21
+ msg.parse_result(@node.exec("cd /etc/nginx/sites-enabled && ln -s ../sites-available/#{site} #{site}")[:exit_code])
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
26
  # check configuration and restart nginx
27
- ::Dust.print_msg 'checking nginx configuration'
27
+ msg = @node.messages.add('checking nginx configuration')
28
28
  if @node.exec('/etc/init.d/nginx configtest')[:exit_code] == 0
29
- ::Dust.print_ok
29
+ msg.ok
30
30
  @node.restart_service('nginx') if options.restart?
31
31
  else
32
- ::Dust.print_failed
32
+ msg.failed
33
33
  end
34
34
  end
35
-
35
+
36
36
  desc 'nginx:status', 'displays nginx status'
37
37
  def status
38
38
  return unless @node.package_installed? 'nginx'
39
39
  @node.print_service_status 'nginx'
40
- end
40
+ end
41
41
  end
@@ -4,20 +4,16 @@ class Ntpd < Recipe
4
4
  # warn if other ntp package is installed
5
5
  [ 'openntpd', 'chrony' ].each do |package|
6
6
  if @node.package_installed? package, :quiet => true
7
- ::Dust.print_warning "#{package} installed, might conflict with ntpd, might be deleted"
7
+ @node.messages.add("#{package} installed, might conflict with ntpd, might be deleted").warning
8
8
  end
9
9
  end
10
10
 
11
11
  @node.install_package 'ntp'
12
-
12
+
13
13
  service = @node.uses_apt? ? 'ntp' : 'ntpd'
14
14
 
15
15
  @node.autostart_service service
16
16
  @node.restart_service service if options.restart?
17
17
  end
18
-
19
-
20
- private
21
-
22
18
  end
23
19
 
@@ -35,9 +35,9 @@ class Pacemaker < Recipe
35
35
 
36
36
  desc 'pacemaker:status', 'shows status of pacemaker/corosync cluster'
37
37
  def status
38
- ::Dust.print_msg 'running crm_mon'
38
+ msg = @node.messages.add('running crm_mon')
39
39
  ret = @node.exec 'crm_mon -1'
40
- ::Dust.print_result ret[:exit_code]
41
- ::Dust.print_ret ret
40
+ msg.parse_result(ret[:exit_code])
41
+ msg.print_output(ret)
42
42
  end
43
43
  end
@@ -6,7 +6,7 @@ class Postgres < Recipe
6
6
  # profile: [ dedicated|standard, zabbix, pacemaker ]
7
7
  # service_name: "service name for init scripts"
8
8
 
9
- return ::Dust.print_failed 'please specify version in your config file, e.g. "version: 9.1"' unless @config['version']
9
+ return @node.messages.add('please specify version in your config file, e.g. "version: 9.1"').failed unless @config['version']
10
10
  return unless install_postgres
11
11
 
12
12
  # default cluster on debian-like systems is 'main'
@@ -52,7 +52,7 @@ class Postgres < Recipe
52
52
  elsif @node.uses_emerge?
53
53
  package = 'postgresql-server'
54
54
  else
55
- return ::Dust.print_failed 'os not supported, please specify "package: <package name>" in your config'
55
+ return @node.messages.add('os not supported, please specify "package: <package name>" in your config').failed
56
56
  end
57
57
 
58
58
  @node.install_package package
@@ -75,7 +75,7 @@ class Postgres < Recipe
75
75
  @config['service_name'] ||= "postgresql-#{@config['version']}"
76
76
  else
77
77
  # on non-debian and non-emerge systems, print a warning since I'm not sure if service name is correct.
78
- Dust.print_warning 'service_name not specified in config, defaulting to "postgresql"' unless @node.uses_apt?
78
+ @node.messages.add('service_name not specified in config, defaulting to "postgresql"').warning unless @node.uses_apt?
79
79
  @config['service_name'] ||= 'postgresql'
80
80
  end
81
81
 
@@ -164,31 +164,31 @@ class Postgres < Recipe
164
164
  @node.collect_facts :quiet => true
165
165
  system_mem = ::Dust.convert_size(@node['memorysize']).to_f
166
166
 
167
- ::Dust.print_msg "calculating recommended settings for a dedicated databse server with #{kb2mb system_mem} ram\n"
167
+ msg = @node.messages.add("calculating recommended settings for a dedicated databse server with #{kb2mb system_mem} ram\n")
168
168
 
169
169
  # every connection uses up to work_mem memory, so make sure that even if
170
170
  # max_connections is reached, there's still a bit left.
171
171
  # total available memory / (2 * max_connections)
172
172
  @config['postgresql.conf']['work_mem'] ||= kb2mb(system_mem * 0.9 / @config['postgresql.conf']['max_connections'])
173
- ::Dust.print_ok "work_mem: #{@config['postgresql.conf']['work_mem']}", :indent => 2
173
+ @node.messages.add("work_mem: #{@config['postgresql.conf']['work_mem']}", :indent => 2).ok
174
174
 
175
175
  # shared_buffers should be 0.2 - 0.3 of system ram
176
176
  # unless ram is lower than 1gb, then less (32mb maybe)
177
177
  @config['postgresql.conf']['shared_buffers'] ||= kb2mb(system_mem * 0.25)
178
- ::Dust.print_ok "shared_buffers: #{@config['postgresql.conf']['shared_buffers']}", :indent => 2
178
+ @node.messages.add("shared_buffers: #{@config['postgresql.conf']['shared_buffers']}", :indent => 2).ok
179
179
 
180
180
  # maintenance_work_mem, should be a lot higher than work_mem
181
181
  # recommended value: 50mb for each 1gb of system ram
182
182
  @config['postgresql.conf']['maintenance_work_mem'] ||= kb2mb(system_mem / 1024 * 50)
183
- ::Dust.print_ok "maintenance_work_mem: #{@config['postgresql.conf']['maintenance_work_mem']}", :indent => 2
183
+ @node.messages.add("maintenance_work_mem: #{@config['postgresql.conf']['maintenance_work_mem']}", :indent => 2).ok
184
184
 
185
185
  # effective_cache_size between 0.6 and 0.8 of system ram
186
186
  @config['postgresql.conf']['effective_cache_size'] ||= kb2mb(system_mem * 0.75)
187
- ::Dust.print_ok "effective_cache_size: #{@config['postgresql.conf']['effective_cache_size']}", :indent => 2
187
+ @node.messages.add("effective_cache_size: #{@config['postgresql.conf']['effective_cache_size']}", :indent => 2).ok
188
188
 
189
189
  # wal_buffers should be between 2-16mb
190
190
  @config['postgresql.conf']['wal_buffers'] ||= '12MB'
191
- ::Dust.print_ok "wal_buffers: #{@config['postgresql.conf']['wal_buffers']}", :indent => 2
191
+ @node.messages.add("wal_buffers: #{@config['postgresql.conf']['wal_buffers']}", :indent => 2).ok
192
192
  end
193
193
 
194
194
  # converts plain kb value to "1234MB"
@@ -221,35 +221,35 @@ class Postgres < Recipe
221
221
  # adds zabbix user to postgres group
222
222
  # creates zabbix user in postgres and grant access to postgres database
223
223
  def configure_for_zabbix
224
- ::Dust.print_msg "configuring postgres for zabbix monitoring\n"
225
- ::Dust.print_msg 'adding zabbix user to postgres group', :indent => 2
226
- ::Dust.print_result @node.exec('usermod -a -G postgres zabbix')[:exit_code]
224
+ @node.messages.add("configuring postgres for zabbix monitoring\n")
225
+ msg = @node.messages.add('adding zabbix user to postgres group', :indent => 2)
226
+ msg.parse_result(@node.exec('usermod -a -G postgres zabbix')[:exit_code])
227
227
 
228
228
  if is_master? :indent => 2
229
- ::Dust.print_msg 'checking if zabbix user exists in postgres', :indent => 3
230
- ret = ::Dust.print_result @node.exec('psql -U postgres -c ' +
229
+ msg = @node.messages.add('checking if zabbix user exists in postgres', :indent => 3)
230
+ ret = msg.parse_result(@node.exec('psql -U postgres -c ' +
231
231
  ' "SELECT usename FROM pg_user WHERE usename = \'zabbix\'"' +
232
- ' postgres |grep -q zabbix')[:exit_code]
232
+ ' postgres |grep -q zabbix')[:exit_code])
233
233
 
234
234
  # if user was not found, create him
235
235
  unless ret
236
- ::Dust.print_msg 'create zabbix user in postgres', :indent => 4
237
- ::Dust.print_result @node.exec('createuser -U postgres zabbix -RSD')[:exit_code]
236
+ msg = @node.messages.add('create zabbix user in postgres', :indent => 4)
237
+ msg.parse_result(@node.exec('createuser -U postgres zabbix -RSD')[:exit_code])
238
238
  end
239
239
 
240
- ::Dust.print_msg 'GRANT zabbix user access to postgres database', :indent => 3
241
- ::Dust.print_result( @node.exec('psql -U postgres -c "GRANT SELECT ON pg_stat_database TO zabbix" postgres')[:exit_code] )
240
+ msg = @node.messages.add('GRANT zabbix user access to postgres database', :indent => 3)
241
+ msg.parse_result(@node.exec('psql -U postgres -c "GRANT SELECT ON pg_stat_database TO zabbix" postgres')[:exit_code])
242
242
  end
243
243
  end
244
244
 
245
245
  # checks if this server is a postgres master
246
246
  def is_master? options = {}
247
- ::Dust.print_msg 'checking if this host is the postgres master: ', options
247
+ msg = @node.messages.add('checking if this host is the postgres master: ', options)
248
248
  if @node.file_exists? "#{@config['postgresql.conf']['data_directory']}/recovery.done", :quiet => true
249
- ::Dust.print_ok 'yes', :indent => 0
249
+ msg.ok('yes')
250
250
  return true
251
251
  else
252
- ::Dust.print_ok 'no', :indent => 0
252
+ msg.ok('no')
253
253
  return false
254
254
  end
255
255
  end
@@ -3,13 +3,13 @@ class RcLocal < Recipe
3
3
  def deploy
4
4
 
5
5
  if @node.uses_apt?
6
- ::Dust.print_msg "configuring custom startup script\n"
6
+ @node.messages.add("configuring custom startup script\n")
7
7
 
8
8
  rc = ''
9
9
  @config.to_array.each do |cmd|
10
- ::Dust.print_msg "adding command: #{cmd}", :indent => 2
10
+ msg = @node.messages.add("adding command: #{cmd}", :indent => 2)
11
11
  rc << "#{cmd}\n"
12
- ::Dust.print_ok
12
+ msg.ok
13
13
  end
14
14
  rc << "\nexit 0\n"
15
15
 
@@ -17,15 +17,15 @@ class RcLocal < Recipe
17
17
  @node.chown 'root:root', '/etc/rc.local'
18
18
  @node.chmod '755', '/etc/rc.local'
19
19
  else
20
- ::Dust.print_failed 'os not supported'
20
+ @node.messages.add('os not supported').failed
21
21
  end
22
22
  end
23
-
23
+
24
24
  desc 'rc_local:status', 'shows current /etc/rc.local'
25
25
  def status
26
- ::Dust.print_msg 'getting /etc/rc.local'
26
+ msg = @node.messages.add('getting /etc/rc.local')
27
27
  ret = @node.exec 'cat /etc/rc.local'
28
- ::Dust.print_result ret[:exit_code]
29
- ::Dust.print_ret ret
28
+ msg.parse_result(ret[:exit_code])
29
+ msg.print_output(ret)
30
30
  end
31
31
  end