Class: OsCtld::Container::Adaptor::CGroup

Inherits:
Base
  • Object
show all
Defined in:
lib/osctld/container/adaptors/cgroup.rb

Instance Attribute Summary

Attributes inherited from Base

#config, #ct

Instance Method Summary collapse

Methods inherited from Base

#initialize, #log_type, register

Constructor Details

This class inherits a constructor from OsCtld::Container::Adaptor::Base

Instance Method Details

#adaptObject



7
8
9
10
# File 'lib/osctld/container/adaptors/cgroup.rb', line 7

def adapt
  send(:"to_cgroup_v#{CGroup.version}")
  config
end

#cgroup_v2_only_distro?(distribution, version) ⇒ Boolean (protected)

Returns:

  • (Boolean)


70
71
72
73
# File 'lib/osctld/container/adaptors/cgroup.rb', line 70

def cgroup_v2_only_distro?(distribution, version)
  distribution == 'arch' \
    || (distribution == 'debian' && (version.start_with?('testing-') || version.start_with?('unstable-')))
end

#systemd_distrosObject (protected)



66
67
68
# File 'lib/osctld/container/adaptors/cgroup.rb', line 66

def systemd_distros
  %w[almalinux arch centos debian fedora gentoo opensuse rocky ubuntu]
end

#systemd_opt_force_v1Object (protected)



58
59
60
# File 'lib/osctld/container/adaptors/cgroup.rb', line 58

def systemd_opt_force_v1
  'systemd.unified_cgroup_hierarchy=0'
end

#systemd_opt_force_v2Object (protected)



62
63
64
# File 'lib/osctld/container/adaptors/cgroup.rb', line 62

def systemd_opt_force_v2
  'systemd.unified_cgroup_hierarchy=1'
end

#to_cgroup_v1Object (protected)



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/osctld/container/adaptors/cgroup.rb', line 14

def to_cgroup_v1
  return unless systemd_distros.include?(config['distribution'])

  config['init_cmd'] ||= ['/sbin/init']

  cgroup_v2_only = cgroup_v2_only_distro?(config['distribution'], config['version'])

  if config['init_cmd'].include?(systemd_opt_force_v1)
    if cgroup_v2_only
      log(:info, "Removing option #{systemd_opt_force_v1} from init command")
      config['init_cmd'].delete(systemd_opt_force_v1)
    end
  elsif !cgroup_v2_only
    log(:info, "Adding option #{systemd_opt_force_v1} to init command")
    config['init_cmd'] << systemd_opt_force_v1
  end

  if config['init_cmd'].include?(systemd_opt_force_v2)
    unless cgroup_v2_only
      log(:info, "Removing option #{systemd_opt_force_v2} from init command")
      config['init_cmd'].delete(systemd_opt_force_v2)
    end
  elsif cgroup_v2_only
    log(:info, "Adding option #{systemd_opt_force_v2} to init command")
    config['init_cmd'] << systemd_opt_force_v2
  end
end

#to_cgroup_v2Object (protected)



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/osctld/container/adaptors/cgroup.rb', line 42

def to_cgroup_v2
  if systemd_distros.include?(config['distribution']) \
     && config['init_cmd'] \
     && config['init_cmd'].include?(systemd_opt_force_v1)
    log(:info, "Removing option #{systemd_opt_force_v1} from init command")
    config['init_cmd'].delete(systemd_opt_force_v1)
  end

  if systemd_distros.include?(config['distribution']) \
     && config['init_cmd'] \
     && config['init_cmd'].include?(systemd_opt_force_v2)
    log(:info, "Removing option #{systemd_opt_force_v2} from init command")
    config['init_cmd'].delete(systemd_opt_force_v2)
  end
end