cookbooks/fb_systemd/attributes/default.rb (105 lines of code) (raw):
# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2
#
# Copyright (c) 2016-present, Facebook, Inc.
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
tmpfiles = {}
{
'/dev/log' => '/run/systemd/journal/dev-log',
'/dev/initctl' => '/run/systemd/initctl/fifo',
}.each do |dev, target|
if File.exist?(target)
tmpfiles[dev] = {
'type' => 'L+',
'argument' => target,
}
end
end
esp_path = nil
%w{
/boot/efi
/efi
/boot
}.each do |path|
# we test for node.filesystem_data as the plugin can occasionally fail
# in case of e.g. hung NFS mounts, and would cause a very early Chef failure
# with a misleading error
if node.filesystem_data && node.filesystem_data['by_mountpoint'] &&
node.filesystem_data['by_mountpoint'][path] &&
node.filesystem_data['by_mountpoint'][path]['fs_type'] == 'vfat' &&
(File.exist?("#{path}/EFI") || File.exist?("#{path}/efi"))
esp_path = path
break
end
end
loader = {
'timeout' => 3,
}
if node['machine_id']
loader['default'] = "#{node['machine_id']}-*"
end
# Starting from 18.04, Ubuntu uses networkd, resolved and timesyncd by default,
# so default to enabling them there to prevent breakage
if node.ubuntu? &&
FB::Version.new(node['platform_version']) >= FB::Version.new('18.04')
enable_networkd = true
enable_resolved = true
enable_nss_resolve = true
enable_timesyncd = true
else
enable_networkd = false
enable_resolved = false
enable_nss_resolve = false
enable_timesyncd = false
end
# This enables a workaround in Fedora systemd-nspawn containers
# so that tmpfiles can be created
# See https://bugzilla.redhat.com/show_bug.cgi?id=1945775
need_nspawn_workaround = node.fedora? &&
node['virtualization'] &&
node['virtualization']['role'] == 'guest' &&
node['virtualization']['system'] == 'nspawn'
default['fb_systemd'] = {
'default_target' => 'multi-user.target',
'modules' => [],
'system' => {},
'user' => {},
'udevd' => {
# no enable here as systemd-udevd cannot be disabled
'config' => {},
'hwdb' => {},
'rules' => [],
},
'journald' => {
# no enable here as systemd-journald cannot be disabled
'config' => {
'Storage' => 'auto',
},
},
'journal-gatewayd' => {
'enable' => false,
},
'journal-remote' => {
'enable' => false,
'config' => {},
},
'journal-upload' => {
'enable' => false,
'config' => {},
},
'logind' => {
'enable' => true,
'config' => {},
},
'networkd' => {
'enable' => enable_networkd,
'config' => {},
},
'resolved' => {
'enable' => enable_resolved,
'enable_nss_resolve' => enable_nss_resolve,
'config' => {},
},
'timesyncd' => {
'enable' => enable_timesyncd,
'config' => {},
},
'coredump' => {},
'tmpfiles' => tmpfiles,
'tmpfiles_excluded_prefixes' => [],
'preset' => {},
'manage_systemd_packages' => true,
'boot' => {
'enable' => false,
'path' => esp_path,
'loader' => loader,
'entries' => {},
},
'ignore_targets' => [],
'fedora_nspawn_workaround' => need_nspawn_workaround,
}