danarchy_deploy 0.2.6 → 0.2.8

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.asdf_versions.json +5 -0
  3. data/.tool-versions +1 -0
  4. data/CHANGELOG.md +15 -0
  5. data/Gemfile.lock +9 -8
  6. data/danarchy_deploy.gemspec +4 -4
  7. data/lib/danarchy_deploy/groups.rb +0 -1
  8. data/lib/danarchy_deploy/services/init/openrc.rb +10 -6
  9. data/lib/danarchy_deploy/services/init.rb +28 -18
  10. data/lib/danarchy_deploy/services.rb +0 -1
  11. data/lib/danarchy_deploy/system/centos.rb +7 -0
  12. data/lib/danarchy_deploy/system/debian.rb +6 -0
  13. data/lib/danarchy_deploy/system/gentoo.rb +83 -23
  14. data/lib/danarchy_deploy/system/opensuse.rb +6 -0
  15. data/lib/danarchy_deploy/system.rb +22 -10
  16. data/lib/danarchy_deploy/templater.rb +26 -9
  17. data/lib/danarchy_deploy/users.rb +50 -42
  18. data/lib/danarchy_deploy/version.rb +1 -1
  19. data/lib/danarchy_deploy.rb +61 -19
  20. data/templates/applications/nginx/domain.conf.erb +38 -0
  21. data/templates/applications/php/phpfpm.conf.erb +19 -0
  22. data/templates/applications/php/user.conf.erb +19 -0
  23. data/templates/applications/wordpress/mysql_user_privileges.sql.erb +2 -0
  24. data/templates/applications/wordpress/wp-config.php.erb +82 -0
  25. data/templates/asdf/asdf.sh.erb +52 -0
  26. data/templates/deploy_template.json +76 -50
  27. data/templates/distcc/distccd.erb +14 -0
  28. data/templates/distcc/hosts.erb +2 -0
  29. data/templates/portage/make.conf.erb +30 -0
  30. data/templates/portage/package.use/bindist +3 -0
  31. data/templates/portage/package.use/documentation +3 -0
  32. data/templates/services/memcached/memcached.erb +40 -0
  33. data/templates/services/mysql/my.cnf.erb +143 -0
  34. data/templates/services/mysql/root_my.cnf.erb +11 -0
  35. data/templates/services/mysql/user_db_grants.sql.erb +33 -0
  36. data/templates/services/mysql/user_db_grants.sql.erb_cleanupUsers +52 -0
  37. data/templates/services/nginx/nginx.conf.erb +48 -0
  38. data/templates/services/php/php-fpm.conf.erb +2 -0
  39. data/templates/services/postfix/localmail.initial_setup.sh +19 -0
  40. data/templates/services/postfix/localmail.main.cf.erb +41 -0
  41. data/templates/services/postfix/mailname.erb +1 -0
  42. data/templates/services/postfix/mailrelayhost_main.cf.erb +33 -0
  43. data/templates/services/postfix/main.cf.erb +28 -0
  44. data/templates/services/postfix/master.cf.erb +124 -0
  45. data/templates/services/postfix/mysql-virtual-alias-maps.cf.erb +5 -0
  46. data/templates/services/postfix/mysql-virtual-mailbox-domains.cf.erb +5 -0
  47. data/templates/services/postfix/mysql-virtual-mailbox-maps.cf.erb +5 -0
  48. data/templates/system/authorized_keys.erb +5 -0
  49. data/templates/system/crontab.erb +8 -0
  50. data/templates/system/dmcrypt.erb +17 -0
  51. data/templates/system/exports.erb +4 -0
  52. data/templates/system/fstab.erb +4 -0
  53. data/templates/system/sudoers.erb +5 -0
  54. metadata +44 -11
  55. data/.ruby-gemset +0 -1
  56. data/.ruby-version +0 -1
  57. /data/bin/{setup → setup-dd} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4665ec27120f6fda4337da5a2b2cb465511534cef96b47c2a11791076012f64
4
- data.tar.gz: e12104840e0273bf38d37a0465752ebc5bacc53d2d0f4a5b5783a936f5810afb
3
+ metadata.gz: 637fb3a1e9810606d864cbc0acab785194ce1fd101c1d74b1135cda4cf489229
4
+ data.tar.gz: 8886abdb6002348b7fe4fe1d9b27e90766bfd568b30513d246460b2c2dadd188
5
5
  SHA512:
6
- metadata.gz: 4bc766ba4a3e8f6e0e691dd1904029f9c08cd6b040146214ae31fb0c18b3a779bae3258b033b1b50205f70c02ebfdbc1fcdd5756ae5ef7b727ce8225397cb4b4
7
- data.tar.gz: 7b22f9218392944730cec707bbf62cf9cc9c696fd411eccf02e6d7ceff54748b141c76b2b3de6750867287e9221a17f0be08be524a29c58e14b38b6741da4036
6
+ metadata.gz: 1bd45a91ea250c523e7ddaca5f8b06e91f8ebd52ede360389fb612354e383720b316f9652aa94400d6ec1204b02205b3556dcabf47842a17350e04c46389b1e9
7
+ data.tar.gz: 74283e5e2b7ee9d6d3abb15791fc9a742c1e8329eba28d680185380e4682799749b13c848923f3c6b77b2c9ed3fa8585f3f8b0619289aecd11eae363737f9e12
@@ -0,0 +1,5 @@
1
+ {
2
+ "ruby": [
3
+ "latest:3.2.2"
4
+ ]
5
+ }
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ patch_0.2.8
2
+ - Switch support from RVM to ASDF
3
+ - users.rb: use Templater to handle authorized_users and sudoers
4
+ - danarchy_deploy.rb: ignore WARNs in gem install
5
+ - danarchy_deploy.rb: use sudo -i to load environment
6
+ - Templater: add builtin templates
7
+ - Gentoo: wait_for_sync
8
+ - System::Init: OpenRC runlevel support
9
+
10
+ patch_0.2.7
11
+ - Patch Templater ERB.new for Ruby versions higher than 2.6
12
+ - Allow builtin:: templates in Templater
13
+ - System: allow :system:updates in template to control what to install/update
14
+ - System: do not return if :system is not defined in template
15
+
1
16
  patch_0.2.6
2
17
  - DanarchyDeploy: gem install --bindir
3
18
  - DanarchyDeploy: return from each class if not defined in a deployment
data/Gemfile.lock CHANGED
@@ -1,26 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danarchy_deploy (0.2.6)
4
+ danarchy_deploy (0.2.8)
5
5
  danarchy_couchdb (~> 0.1)
6
- mongo (~> 2.17)
6
+ mongo (~> 2.20)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- bson (4.14.1)
11
+ bson (5.0.1)
12
12
  danarchy_couchdb (0.1.3)
13
- mongo (2.17.0)
14
- bson (>= 4.8.2, < 5.0.0)
15
- rake (13.0.6)
13
+ mongo (2.20.1)
14
+ bson (>= 4.14.1, < 6.0.0)
15
+ rake (13.2.1)
16
16
 
17
17
  PLATFORMS
18
+ ruby
18
19
  x86_64-linux
19
20
 
20
21
  DEPENDENCIES
21
- bundler (~> 2.3)
22
+ bundler (~> 2.5)
22
23
  danarchy_deploy!
23
24
  rake (~> 13.0)
24
25
 
25
26
  BUNDLED WITH
26
- 2.3.9
27
+ 2.5.11
@@ -28,10 +28,10 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency "danarchy_couchdb", "~> 0.1"
31
+ spec.add_dependency 'danarchy_couchdb', '~> 0.1'
32
32
 
33
- spec.add_development_dependency "bundler", "~> 2.3"
34
- spec.add_development_dependency "rake", "~> 13.0"
33
+ spec.add_development_dependency 'bundler', '~> 2.5'
34
+ spec.add_development_dependency 'rake', '~> 13.0'
35
35
 
36
- spec.add_runtime_dependency "mongo", "~> 2.17"
36
+ spec.add_runtime_dependency 'mongo', '~> 2.20'
37
37
  end
@@ -18,7 +18,6 @@ module DanarchyDeploy
18
18
  end
19
19
  end
20
20
 
21
- # [groupadd_result, groupdel_result]
22
21
  deployment
23
22
  end
24
23
 
@@ -3,9 +3,10 @@ module DanarchyDeploy
3
3
  module Services
4
4
  class Init
5
5
  class Openrc
6
- def initialize(service, options)
7
- @service = service
8
- @options = options
6
+ def initialize(service, runlevel, options)
7
+ @service = service
8
+ @runlevel = runlevel
9
+ @options = options
9
10
  end
10
11
 
11
12
  def status
@@ -58,13 +59,16 @@ module DanarchyDeploy
58
59
  end
59
60
 
60
61
  def enable
61
- cmd = "rc-update add #{@service} default"
62
+ cmd = "rc-update add #{@service} #{@runlevel}"
62
63
  DanarchyDeploy::Helpers.run_command(cmd, @options)
63
64
  end
64
65
 
65
66
  def disable
66
- cmd = "rc-update del #{@service} default"
67
- DanarchyDeploy::Helpers.run_command(cmd, @options)
67
+ Dir["/etc/runlevels/*/#{@service}"].each do |svc|
68
+ runlevel, service = svc.split('/')[3,4]
69
+ cmd = "rc-update del #{service} #{runlevel}"
70
+ DanarchyDeploy::Helpers.run_command(cmd, @options)
71
+ end
68
72
  end
69
73
  end
70
74
  end
@@ -10,42 +10,52 @@ module DanarchyDeploy
10
10
 
11
11
  deployment[:services].each do |service, params|
12
12
  next if ! params[:init]
13
- orig_actions = params[:init]
14
- puts "\n > Init actions for #{service}: #{params[:init].join(', ')}"
15
- params[:init].each do |action|
16
- puts " |+ Taking action: #{action} on #{service}"
13
+ if params[:init].class == Array
14
+ # one-time update for :init to new format
15
+ params[:init] = if deployment[:os] == 'gentoo'
16
+ { runlevel: 'default', actions: params[:init] }
17
+ else
18
+ { actions: params[:init] }
19
+ end
20
+ end
21
+
22
+ init_manager(deployment[:os], service, params[:init][:runlevel], options)
23
+ puts "\n > Init actions for #{service}: #{params[:init][:actions].join(', ')}"
24
+ params[:init][:actions].each do |action|
25
+ puts " |> Taking action: #{action} on #{service}"
17
26
  if options[:pretend]
18
- puts " Fake run: #{action} #{service}"
27
+ puts " |- Fake run: #{action} #{service}"
19
28
  else
20
- init_manager(deployment[:os], service, action, options)
29
+ init_run(action)
21
30
  end
22
31
  end
23
-
24
- params[:init] = orig_actions
25
32
  end
26
33
 
27
34
  deployment
28
35
  end
29
36
 
30
- def self.init_manager(os, service, action, options)
31
- init = if os == 'gentoo'
32
- DanarchyDeploy::Services::Init::Openrc.new(service, options)
33
- else
34
- DanarchyDeploy::Services::Init::Systemd.new(service, options)
35
- end
37
+ private
38
+ def self.init_manager(os, service, runlevel='default', options)
39
+ @init = if os == 'gentoo'
40
+ DanarchyDeploy::Services::Init::Openrc.new(service, runlevel, options)
41
+ else
42
+ DanarchyDeploy::Services::Init::Systemd.new(service, options)
43
+ end
44
+ end
36
45
 
37
- init_result = init.send(action)
46
+ def self.init_run(action)
47
+ init_result = @init.send(action)
38
48
 
39
49
  if stderr = init_result[:stderr]
40
50
  if stderr.include?('unknown function')
41
- puts " ! Action: #{action} not available for service: #{service}.\n" +
51
+ puts " ! Action: #{action} not available for service.\n" +
42
52
  " ! A restart may be needed! Otherwise, remove this action from the deployment.\n" +
43
53
  " ! Not taking any action here.\n"
44
54
  else
45
- abort(" ! Action: #{action} #{service} failed!")
55
+ abort(" ! Action: #{action} failed!")
46
56
  end
47
57
  else
48
- puts " |+ Action: #{action} #{service} succeeded."
58
+ puts " |+ Action: #{action} succeeded."
49
59
  end
50
60
  end
51
61
  end
@@ -10,7 +10,6 @@ module DanarchyDeploy
10
10
  puts "\n" + self.name
11
11
 
12
12
  deployment[:services].each do |service, params|
13
- next if service == :init
14
13
  puts "\nConfiguring service: #{service}"
15
14
 
16
15
  if params[:archives] && !params[:archives].empty?
@@ -6,12 +6,19 @@ module DanarchyDeploy
6
6
  puts "\n" + self.name
7
7
  puts "#{deployment[:os].capitalize} detected! Using yum."
8
8
  # needs more testing
9
+
10
+ set_hostname(deployment[:hostname]) if !options[:pretend]
9
11
  installer = 'yum install -y '
10
12
  updater = 'yum upgrade -y'
11
13
  cleaner = 'yum clean all'
12
14
 
13
15
  [installer, updater, cleaner]
14
16
  end
17
+
18
+ private
19
+ def set_hostname(hostname)
20
+ `hostnamectl hostname #{hostname}`
21
+ end
15
22
  end
16
23
  end
17
24
  end
@@ -7,6 +7,7 @@ module DanarchyDeploy
7
7
  puts "\n" + self.name
8
8
  puts "#{deployment[:os].capitalize} detected! Using apt."
9
9
 
10
+ set_hostname(deployment[:hostname]) if !options[:pretend]
10
11
  if deployment[:apt]
11
12
  if deployment[:apt][:templates]
12
13
  puts "\nChecking Apt configs."
@@ -56,6 +57,11 @@ module DanarchyDeploy
56
57
  end
57
58
  end
58
59
  end
60
+
61
+ private
62
+ def set_hostname(hostname)
63
+ `hostnamectl hostname #{hostname}`
64
+ end
59
65
  end
60
66
  end
61
67
  end
@@ -6,12 +6,7 @@ module DanarchyDeploy
6
6
  puts "\n" + self.name
7
7
  puts 'Gentoo detected! Using emerge.'
8
8
 
9
- hostname = deployment[:hostname]
10
- if check_hostname(hostname) == false
11
- puts "Setting hostname to: #{hostname}"
12
- set_hostname(hostname)
13
- end
14
-
9
+ set_hostname(deployment[:hostname]) if !options[:pretend]
15
10
  installer = 'emerge --usepkg --buildpkg --quiet --noreplace '
16
11
  # This needs cpuid2cpuflags to build make.conf; don't --pretend here.
17
12
  system("qlist -I cpuid2cpuflags &>/dev/null || #{installer} cpuid2cpuflags &>/dev/null")
@@ -23,43 +18,108 @@ module DanarchyDeploy
23
18
  cleaner = 'emerge --depclean --quiet '
24
19
  cleaner += '--pretend ' if options[:pretend]
25
20
 
21
+ if emerge_sync_in_progress
22
+ puts "\n > Waiting for emerge sync to complete."
23
+ emerge_sync_wait
24
+ end
25
+
26
26
  if deployment[:portage]
27
27
  if deployment[:portage][:templates]
28
28
  puts "\nChecking Portage configs."
29
29
  DanarchyDeploy::Templater.new(deployment[:portage][:templates], options)
30
30
  end
31
31
 
32
- emerge_sync(options) if deployment[:portage][:sync]
32
+ emerge_sync(deployment[:portage][:sync], options)
33
33
  end
34
34
 
35
35
  [installer, updater, cleaner]
36
36
  end
37
37
 
38
38
  private
39
+ def self.emerge_sync_in_progress
40
+ repo_path = `emerge --info | grep location`.chomp.split(': ').last
41
+ Dir.exist?(repo_path + '/.tmp-unverified-download-quarantine')
42
+ end
39
43
 
40
- def self.emerge_sync(options)
41
- File.open('/tmp/datetime', 'a+') do |f|
42
- last_sync = f.getbyte ? DateTime.parse(f.read) : (DateTime.now - 2)
43
-
44
- if (DateTime.now - last_sync).to_i != 0
45
- puts "\nUpdating Portage repo..."
46
- DanarchyDeploy::Helpers.run_command('emerge --sync --quiet 2>/dev/null', options)
47
- f.truncate(0)
48
- f.write DateTime.now
49
- end
44
+ def self.emerge_sync_wait
45
+ while emerge_sync_in_progress
46
+ sleep 3
47
+ end
48
+ puts " |> Continuing with emerge!"
49
+ end
50
50
 
51
- f.close
51
+ def self.emerge_sync(sync, options)
52
+ if sync.nil?
53
+ install_cron_template(sync, options)
54
+ elsif sync == false
55
+ puts "\nNot running emerge sync; set to: #{sync}"
56
+ install_cron_template(sync, options)
57
+ elsif sync == true
58
+ File.delete('/var/spool/cron/crontabs/portage') if File.exist?('/var/spool/cron/crontabs/portage')
59
+ DanarchyDeploy::Helpers.run_command('emerge --sync &>/var/log/emerge-sync.log', options)
60
+ elsif sync =~ /([0-9]{1,2}|\*|\@[a-z]{4,7})/i
61
+ install_cron_template(sync, options)
62
+ else
63
+ puts "\nUnknown sync cron time: #{sync}. Not running emerge sync!"
52
64
  end
53
65
  end
54
66
 
55
67
  def self.set_hostname(hostname)
56
- confd_hostname = "hostname=\"#{hostname}\""
57
- File.write('/etc/conf.d/hostname', confd_hostname)
58
- `hostname #{hostname}`
68
+ if `hostname`.chomp != hostname
69
+ puts "Setting hostname to: #{hostname}"
70
+ confd_hostname = "hostname=\"#{hostname}\""
71
+ File.write('/etc/conf.d/hostname', confd_hostname)
72
+ `hostname #{hostname}`
73
+ end
59
74
  end
60
75
 
61
- def self.check_hostname(hostname)
62
- `hostname`.chomp == hostname
76
+ def self.install_cron_template(sync, options)
77
+ templates = if sync.nil? || sync == false
78
+ [
79
+ {
80
+ target: '/var/spool/cron/crontabs/portage',
81
+ remove: true
82
+ }
83
+ ]
84
+ else
85
+ [
86
+ {
87
+ source: 'builtin::system/crontab.erb',
88
+ target: '/var/spool/cron/crontabs/portage',
89
+ dir_perms: {
90
+ owner: 'root',
91
+ group: 'crontab',
92
+ mode: '1730'
93
+ },
94
+ file_perms: {
95
+ owner: 'portage',
96
+ group: 'crontab',
97
+ mode: '0600'
98
+ },
99
+ variables: {
100
+ shell: '/bin/bash',
101
+ path: '/usr/local/sbin:/usr/local/bin:/usr/bin',
102
+ env: '',
103
+ jobs: [
104
+ {
105
+ schedule: sync,
106
+ command: 'emerge --sync &>/var/log/emerge-sync.log'
107
+ },
108
+ {
109
+ schedule: '@daily',
110
+ command: 'eclean-dist &>/dev/null'
111
+ },
112
+ {
113
+ schedule: '@daily',
114
+ command: 'eclean-pkg &>/dev/null'
115
+ }
116
+ ]
117
+ }
118
+ }
119
+ ]
120
+ end
121
+
122
+ DanarchyDeploy::Templater.new(templates, options)
63
123
  end
64
124
  end
65
125
  end
@@ -6,6 +6,7 @@ module DanarchyDeploy
6
6
  puts "\n" + self.name
7
7
  puts "#{deployment[:os].capitalize} detected! Using zypper."
8
8
 
9
+ set_hostname(deployment[:hostname]) if !options[:pretend]
9
10
  puts "Updating zypper repositories..."
10
11
  DanarchyDeploy::Helpers.run_command('sudo zypper refresh', options)
11
12
 
@@ -17,6 +18,11 @@ module DanarchyDeploy
17
18
 
18
19
  [installer, updater, cleaner]
19
20
  end
21
+
22
+ private
23
+ def set_hostname(hostname)
24
+ `hostnamectl hostname #{hostname}`
25
+ end
20
26
  end
21
27
  end
22
28
  end
@@ -3,32 +3,43 @@ require_relative 'system/debian'
3
3
  require_relative 'system/gentoo'
4
4
  require_relative 'system/opensuse'
5
5
 
6
- require_relative 'system/cryptsetup'
6
+ # require_relative 'system/cryptsetup'
7
7
  require_relative 'system/fstab'
8
8
 
9
9
  module DanarchyDeploy
10
10
  module System
11
11
  def self.new(deployment, options)
12
12
  abort('Operating System not defined! Exiting!') if !deployment[:os]
13
- return deployment if ! deployment[:system]
14
13
  puts "\n" + self.name
15
14
 
16
15
  installer, updater, cleaner = prep_operating_system(deployment, options)
17
- install_result = nil
18
- if deployment[:packages] && !deployment[:packages].empty?
16
+ install_result, updater_result = nil, nil
17
+
18
+ puts "\n > Package Installation"
19
+ if [true, 'all', 'selected', nil].include?(deployment[:system][:update]) &&
20
+ deployment[:packages].any?
19
21
  packages = deployment[:packages].join(' ')
20
- puts "\nInstalling packages..."
22
+ puts "\n - Installing packages..."
21
23
  install_result = DanarchyDeploy::Helpers.run_command("#{installer} #{packages}", options)
22
24
  puts install_result[:stdout] if install_result[:stdout]
23
25
  else
24
- puts "\nNo packages to install."
26
+ puts "\n - Not installing packages."
27
+ puts " |_ Packages selected: #{deployment[:packages].count}"
28
+ puts " |_ Updates selected: #{deployment[:system][:update]}"
25
29
  end
26
30
 
27
- if !options[:pretend]
28
- puts "\nRunning system updates..."
31
+ puts "\n > #{deployment[:os].capitalize} System Updates"
32
+ if [true, 'all', 'system', nil].include?(deployment[:system][:update])
33
+ puts "\n - Running system updates..."
29
34
  updater_result = DanarchyDeploy::Helpers.run_command(updater, options)
30
35
  puts updater_result[:stdout] if updater_result[:stdout]
31
- puts "\nCleaning up unused packages..."
36
+ else
37
+ puts "\n - Not running #{deployment[:os].capitalize} system updates."
38
+ puts " |_ Updates selected: #{deployment[:system][:update]}"
39
+ end
40
+
41
+ if install_result || updater_result
42
+ puts "\n - Cleaning up unused packages..."
32
43
  cleanup_result = DanarchyDeploy::Helpers.run_command(cleaner, options)
33
44
  puts cleanup_result[:stdout] if cleanup_result[:stdout]
34
45
  end
@@ -52,7 +63,8 @@ module DanarchyDeploy
52
63
  DanarchyDeploy::Templater.new(deployment[:system][:templates], options)
53
64
  end
54
65
 
55
- DanarchyDeploy::System::Cryptsetup.new(deployment[:os], deployment[:system][:cryptsetup], options)
66
+ # Disabled due to Init changes; re-writing and splitting LVM/CryptSetup
67
+ # DanarchyDeploy::System::Cryptsetup.new(deployment[:os], deployment[:system][:cryptsetup], options)
56
68
 
57
69
  if deployment[:system][:fstab]
58
70
  DanarchyDeploy::System::Fstab.new(deployment[:os], deployment[:system][:fstab], options)
@@ -3,6 +3,15 @@ require 'fileutils'
3
3
 
4
4
  module DanarchyDeploy
5
5
  class Templater
6
+ def self.load_source(source)
7
+ if source =~ /^builtin::/
8
+ source = File.expand_path('../../', __dir__) + '/templates/' + source.split('::').last
9
+ end
10
+
11
+ abort("Source file does not exist at: #{source}") if ! File.exist?(source)
12
+ source
13
+ end
14
+
6
15
  def self.new(templates, options)
7
16
  puts "\n" + self.name
8
17
 
@@ -13,12 +22,17 @@ module DanarchyDeploy
13
22
 
14
23
  templates.each do |template|
15
24
  next if template[:remove]
16
- abort("No target destination set for template: #{template[:source]}!") if !template[:target]
17
- abort("No source or data for template: #{template[:target]}") if !template[:source] && !template[:data]
18
- abort("Source file does not exist at: #{template[:source]}") if ! File.exist?(template[:source])
25
+ source = if !template[:target]
26
+ abort("No target destination set for template: #{template[:source]}!")
27
+ elsif template[:source].nil? && template[:data].nil?
28
+ abort("No source or data for template: #{template[:target]}")
29
+ elsif template[:data]
30
+ '-- encoded data --'
31
+ else
32
+ load_source(template[:source])
33
+ end
19
34
 
20
35
  target = template[:target]
21
- source = template[:source] || '-- encoded data --'
22
36
  dir_perms = template[:dir_perms]
23
37
  file_perms = template[:file_perms]
24
38
  @variables = template[:variables] || nil
@@ -43,7 +57,11 @@ module DanarchyDeploy
43
57
  end
44
58
 
45
59
  File.open(tmpfile, 'w') do |f|
46
- result = ERB.new(File.read(source), nil, '-').result(binding)
60
+ result = if RUBY_VERSION >= '2.6'
61
+ ERB.new(File.read(source), trim_mode: '-').result(binding)
62
+ else
63
+ ERB.new(File.read(source), nil, '-').result(binding)
64
+ end
47
65
  f.write(result)
48
66
  f.close
49
67
  end
@@ -54,7 +72,7 @@ module DanarchyDeploy
54
72
  puts "\n - Fake Run: Not changing '#{target}'."
55
73
  result[:verify_permissions][File.dirname(tmpfile)] = verify_permissions(File.dirname(tmpfile), dir_perms, options)
56
74
  result[:verify_permissions][tmpfile] = verify_permissions(tmpfile, file_perms, options)
57
- elsif md5sum(target,tmpfile) == true
75
+ elsif files_identical?(target,tmpfile)
58
76
  puts "\n - No change in '#{target}': Nothing to update here."
59
77
  result[:verify_permissions][File.dirname(target)] = verify_permissions(File.dirname(target), dir_perms, options)
60
78
  result[:verify_permissions][target] = verify_permissions(target, file_perms, options)
@@ -77,13 +95,12 @@ module DanarchyDeploy
77
95
  chmod = nil
78
96
  puts "\n > Verifying ownership and permissions for '#{target}'"
79
97
  if perms
80
- puts " |+ Setting file mode to: #{perms[:mode]}"
81
98
  (owner, group, mode) = perms[:owner], perms[:group], perms[:mode]
82
99
  else
83
100
  if File.stat(target).mode & 07777 == '0777'.to_i(8)
84
101
  puts " ! '#{target}' has 0777 permissions! Setting those to something more sane."
85
102
  if File.ftype(target) == 'directory'
86
- puts " |+ Setting file mode to: 0775"
103
+ puts " |+ Setting directory mode to: 0775"
87
104
  chmod = File.chmod(0775, target) ? true : false if !options[:pretend]
88
105
  elsif File.ftype(target) == 'file'
89
106
  puts " |+ Setting file mode to: 0644"
@@ -141,7 +158,7 @@ module DanarchyDeploy
141
158
  [owner, uid, group, gid]
142
159
  end
143
160
 
144
- def self.md5sum(target, tmpfile)
161
+ def self.files_identical?(target, tmpfile)
145
162
  if File.exist?(target) && File.exist?(tmpfile)
146
163
  FileUtils.identical?(target, tmpfile)
147
164
  elsif File.exist?(target) && !File.exist?(tmpfile)