Class: CFA::Grub2::Default

Inherits:
BaseModel
  • Object
show all
Defined in:
lib/cfa/grub2/default.rb

Overview

Represents grub configuration in /etc/default/grub Main features:

  • Do not overwrite files

  • When setting value first try to just change value if key already exists

  • When key is not set, then try to find commented out line with key and replace it with real config

  • When even commented out code is not there, then append configuration to the end of file

Defined Under Namespace

Classes: KernelParams

Constant Summary collapse

PARSER =
AugeasParser.new("sysconfig.lns")
PATH =
"/etc/default/grub"
VALID_TERMINAL_OPTIONS =
[:serial, :console, :gfxterm]

Instance Method Summary collapse

Constructor Details

#initialize(file_handler: nil) ⇒ Default

Returns a new instance of Default.



28
29
30
# File 'lib/cfa/grub2/default.rb', line 28

def initialize(file_handler: nil)
  super(PARSER, PATH, file_handler: file_handler)
end

Instance Method Details

#cryptodiskObject



96
97
98
# File 'lib/cfa/grub2/default.rb', line 96

def cryptodisk
  @cryptodisk ||= BooleanValue.new("GRUB_ENABLE_CRYPTODISK", self)
end

#kernel_paramsObject



63
64
65
66
67
# File 'lib/cfa/grub2/default.rb', line 63

def kernel_params
  @kernel_params ||= KernelParams.new(
    data["GRUB_CMDLINE_LINUX_DEFAULT"], "GRUB_CMDLINE_LINUX_DEFAULT"
  )
end

#loadObject



44
45
46
47
48
49
50
51
52
53
# File 'lib/cfa/grub2/default.rb', line 44

def load
  super

  kernels = [kernel_params, xen_hypervisor_params, xen_kernel_params,
             recovery_params]
  kernels.each do |kernel|
    param_line = data[kernel.key]
    kernel.replace(param_line) if param_line
  end
end

#os_proberObject



55
56
57
58
59
60
61
# File 'lib/cfa/grub2/default.rb', line 55

def os_prober
  @os_prober ||= BooleanValue.new(
    "GRUB_DISABLE_OS_PROBER", self,
    # grub key is disable, so use reverse logic
    true_value: "false", false_value: "true"
  )
end

#recovery_entryObject



88
89
90
91
92
93
94
# File 'lib/cfa/grub2/default.rb', line 88

def recovery_entry
  @recovery ||= BooleanValue.new(
    "GRUB_DISABLE_RECOVERY", self,
    # grub key is disable, so use reverse logic
    true_value: "false", false_value: "true"
  )
end

#recovery_paramsObject



82
83
84
85
86
# File 'lib/cfa/grub2/default.rb', line 82

def recovery_params
  @recovery_params ||= KernelParams.new(
    data["GRUB_CMDLINE_LINUX_RECOVERY"], "GRUB_CMDLINE_LINUX_RECOVERY"
  )
end

#save(changes_only: false) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/cfa/grub2/default.rb', line 32

def save(changes_only: false)
  # serialize kernel params object before save
  kernels = [@kernel_params, @xen_hypervisor_params, @xen_kernel_params,
             @recovery_params]
  kernels.each do |params|
    # FIXME: this empty prevent writing explicit empty kernel params.
    generic_set(params.key, params.serialize) if params && !params.empty?
  end

  super
end

#serial_consoleObject



125
126
127
# File 'lib/cfa/grub2/default.rb', line 125

def serial_console
  data["GRUB_SERIAL_COMMAND"]
end

#serial_console=(value) ⇒ Object



120
121
122
123
# File 'lib/cfa/grub2/default.rb', line 120

def serial_console=(value)
  self.terminal = :serial
  generic_set("GRUB_SERIAL_COMMAND", value)
end

#terminalObject



100
101
102
103
104
105
106
107
108
109
# File 'lib/cfa/grub2/default.rb', line 100

def terminal
  case data["GRUB_TERMINAL"]
  when "", nil   then nil
  when "console" then :console
  when "serial"  then :serial
  when "gfxterm" then :gfxterm
  else
    raise "unknown GRUB_TERMINAL option #{data["GRUB_TERMINAL"].inspect}"
  end
end

#terminal=(value) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/cfa/grub2/default.rb', line 112

def terminal=(value)
  if !VALID_TERMINAL_OPTIONS.include?(value)
    raise ArgumentError, "invalid value #{value.inspect}"
  end

  generic_set("GRUB_TERMINAL", value.to_s)
end

#xen_hypervisor_paramsObject



69
70
71
72
73
74
# File 'lib/cfa/grub2/default.rb', line 69

def xen_hypervisor_params
  @xen_hypervisor_params ||= KernelParams.new(
    data["GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT"],
    "GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT"
  )
end

#xen_kernel_paramsObject



76
77
78
79
80
# File 'lib/cfa/grub2/default.rb', line 76

def xen_kernel_params
  @xen_kernel_params ||= KernelParams.new(
    data["GRUB_CMDLINE_LINUX_XEN"], "GRUB_CMDLINE_LINUX_XEN"
  )
end