Class: DanarchyDeploy::Installer

Inherits:
Object
  • Object
show all
Defined in:
lib/danarchy_deploy/installer.rb

Class Method Summary collapse

Class Method Details

.new(deployment, options) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/danarchy_deploy/installer.rb', line 4

def self.new(deployment, options)
  # available opts: { pretend: true|false }
  abort('Operating System not defined! Exiting!') if !deployment[:os]
  puts "\n" + self.name

  installer, updater, cleaner = prep_operating_system(deployment, options)
  install_result = nil
  if deployment[:packages]
    packages = deployment[:packages].join(' ')
    install_result = DanarchyDeploy::Helpers.run_command("#{installer} #{packages}", options)
  else
    puts 'No packages to install.'
  end

  if !options[:pretend]
    puts "\nRunning system updates..."
    updater_result = DanarchyDeploy::Helpers.run_command(updater, options)
    puts updater_result[:stdout] if updater_result[:stdout]
    puts "\nCleaning up unused packages..."
    cleanup_result = DanarchyDeploy::Helpers.run_command(cleaner, options)
    puts cleanup_result[:stdout] if cleanup_result[:stdout]
  end

  # [install_result, cleanup_result, updater_result]
  deployment
end

.prep_operating_system(deployment, options) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/danarchy_deploy/installer.rb', line 32

def self.prep_operating_system(deployment, options)
  (installer, updater, cleaner) = nil
  os = deployment[:os]

  if os.downcase == 'gentoo'
    puts "#{os.capitalize} detected! Using emerge."
    installer  =  'emerge --usepkg --quiet --noreplace '
    installer += '--pretend ' if options[:pretend]

    # Build packages if template instance
    installer.gsub('usepkg', 'buildpkg') if deployment[:hostname] =~ /^(image|template)/

    cleaner  = 'emerge --depclean --quiet '
    cleaner += '--pretend ' if options[:pretend]

    updater  = 'emerge --update --deep --newuse --quiet --with-bdeps=y @world'
    updater += ' --pretend' if options[:pretend]
  elsif %w[debian ubuntu].include?(os.downcase)
    puts "#{os.capitalize} detected! Using apt."
    installer  = 'export DEBIAN_FRONTEND=noninteractive ; apt install -y -qq '
    installer += '--dry-run ' if options[:pretend]
    updater = 'apt-get upgrade -y -qq'
    cleaner = 'apt-get autoclean -y -qq'
  elsif os.downcase == 'opensuse'
    puts "#{os.capitalize} detected! Using zypper."
    installer = 'zypper install '
    updater = nil
    cleaner = nil
    # Needs package checking & testing
  elsif %w[centos redhat].include?(os.downcase)
    # needs more testing
    puts "#{os.capitalize} detected! Using yum."
    installer = 'yum install -y '

      # packages.each do |pkg|
      #   IO.popen("rpm -q #{pkg}") do |o|
      #     packages.delete(pkg) if !o.read.include?('not installed')
      #   end
      # end

    updater = nil
    cleaner = nil
  end

  [installer, updater, cleaner]
end