Files
puppet-swift/manifests/storage/disk.pp
Takashi Kajinami f781eb9e34 Avoid hard-coding OS user/group in each manifest
and replace hard-codes by definition in params.pp .

Change-Id: I7bb32a93bbd0299917f6e7e13b84e808e179e5cc
2022-02-22 01:09:15 +09:00

104 lines
3.4 KiB
Puppet

# This Puppet resource is based on the following
# instructions for creating a disk device:
# https://docs.openstack.org/swift/latest/development_saio.html
#
# ==Add a raw disk to a swift storage node==
#
# It will do two steps to create a disk device:
# - creates a disk table, use the whole disk instead
# to make the partition (e.g. use sdb as a whole)
# - formats the partition to an xfs device and
# mounts it as a block device at /srv/node/$name
#
# ATTENTION: You should not use the disk that your Operating System
# is installed on (typically /dev/sda/).
#
# === Parameters:
#
# [*base_dir*]
# (optional) The directory where the flat files will be stored that house
# the file system to be loop back mounted.
# Defaults to '/dev', assumes local disk devices
#
# [*mnt_base_dir*]
# (optional) The directory where the flat files that store the file system
# to be loop back mounted are actually mounted at.
# Defaults to '/srv/node', base directory where disks are mounted to
#
# [*byte_size*]
# (optional) The byte size that dd uses when it creates the file system.
# Defaults to '1024', block size for the disk. For very large partitions, this should be larger
#
# [*ext_args*]
# (optional) The external command that will be used in parted command.
# Default to ''. For making partitions, it would be 'mkpart primary 0% 100%'.
#
# [*manage_partition*]
# (optional) If set to false, skip calling parted which can, in some cases,
# increase the load on the server. This is to set to false only after the
# server is fully setup or if the partition was created outside of puppet.
# Defaults to true.
#
# [*manage_filesystem*]
# (optional) If set to false, skip calling xfs_admin -l to check if a
# partition needs to be formated with mkfs.xfs, which can, in some cases,
# increase the load on the server. This is to set to false only after the
# server is fully setup, or if the filesystem was created outside of puppet.
# Defaults to true.
#
# =Example=
#
# Simply add one disk sdb:
#
# swift::storage::disk { "sdb":}
#
# Add more than one disks and overwrite byte_size:
#
# swift::storage::disk {['sdb','sdc','sdd']:
# byte_size => '2048',
# }
#
# TODO(yuxcer): maybe we can remove param $base_dir
#
define swift::storage::disk(
$base_dir = '/dev',
$mnt_base_dir = '/srv/node',
$byte_size = '1024',
$ext_args = '',
$manage_partition = true,
$manage_filesystem = true,
) {
include swift::deps
include swift::params
if(!defined(File[$mnt_base_dir])) {
file { $mnt_base_dir:
ensure => directory,
owner => $::swift::params::user,
group => $::swift::params::group,
require => Anchor['swift::config::begin'],
before => Anchor['swift::config::end'],
}
}
if $manage_partition {
exec { "create_partition_label-${name}":
command => "parted -s ${base_dir}/${name} mklabel gpt ${ext_args}",
path => ['/usr/bin/', '/sbin','/bin'],
onlyif => ["test -b ${base_dir}/${name}","parted ${base_dir}/${name} print|tail -1|grep 'Error'"],
before => Anchor['swift::config::end'],
}
Exec["create_partition_label-${name}"] ~> Swift::Storage::Xfs<| title == $name |>
}
swift::storage::xfs { $name:
device => "${base_dir}/${name}",
mnt_base_dir => $mnt_base_dir,
byte_size => $byte_size,
loopback => false,
manage_filesystem => $manage_filesystem,
}
}