Module: ForemanMaintain::Concerns::OsFacts

Included in:
SystemHelpers, RepositoryManager::El
Defined in:
lib/foreman_maintain/concerns/os_facts.rb

Constant Summary collapse

OS_RELEASE_FILE =
'/etc/os-release'.freeze
FALLBACK_OS_RELEASE_FILE =
'/usr/lib/os-release'.freeze

Instance Method Summary collapse

Instance Method Details

#debian?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 53

def debian?
  File.exist?('/etc/debian_version')
end

#el7?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 57

def el7?
  el_major_version == 7
end

#el8?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 61

def el8?
  el_major_version == 8
end

#el?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 49

def el?
  File.exist?('/etc/redhat-release')
end

#el_major_versionObject



65
66
67
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 65

def el_major_version
  return os_version_id.to_i if el?
end

#factsObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 19

def facts
  unless defined?(@facts)
    @facts = {}
    regex = /^(["'])(.*)(\1)$/
    File.open(os_release_file) do |file|
      file.readlines.each do |line|
        line.strip! # drop any whitespace, including newlines from start and end of the line
        next if line.start_with?('#') # ignore comments
        # split at most into 2 items, if the value ever contains an =
        key, value = line.split('=', 2)
        next unless key && value
        @facts[key] = value.gsub(regex, '\2').delete('\\')
      end
    end
  end
  @facts
end

#os_idObject



41
42
43
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 41

def os_id
  facts.fetch('ID')
end

#os_id_like_listObject



45
46
47
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 45

def os_id_like_list
  facts.fetch('ID_LIKE', '').split
end

#os_release_fileObject



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 7

def os_release_file
  if File.file?(OS_RELEASE_FILE)
    return OS_RELEASE_FILE
  elsif File.file?(FALLBACK_OS_RELEASE_FILE)
    return FALLBACK_OS_RELEASE_FILE
  else
    puts "The #{OS_RELEASE_FILE} and #{FALLBACK_OS_RELEASE_FILE} files are missing! "\
         "Can't continue the execution without Operating System's facts!"
    exit 1
  end
end

#os_version_idObject



37
38
39
# File 'lib/foreman_maintain/concerns/os_facts.rb', line 37

def os_version_id
  facts.fetch('VERSION_ID')
end