Fix new lint errors detected when full of the voxpupili lint plugins are enabled. Change-Id: Ifb5b50d7ae23c3e69a70721598e2719dbafa14d5 Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Puppet
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Puppet
		
	
	
	
	
	
#
 | 
						|
# === Parameters:
 | 
						|
#
 | 
						|
# [*device*]
 | 
						|
#   (optional) Path to the device.
 | 
						|
#   Defaults to "/dev/${name}"
 | 
						|
#
 | 
						|
# [*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) Byte size to use for every inode in the created filesystem.
 | 
						|
#   Defaults to '1024'. It is recommended to use 1024 to ensure that
 | 
						|
#   the metadata can fit in a single inode.
 | 
						|
#
 | 
						|
# [*loopback*]
 | 
						|
#   (optional) Define if the device must be mounted as a loopback or not
 | 
						|
#   Defaults to false.
 | 
						|
#
 | 
						|
# [*mount_type*]
 | 
						|
#   (optional) Define if the device is mounted by the device partition path,
 | 
						|
#   UUID, or filesystem label.
 | 
						|
#   Defaults to 'path'.
 | 
						|
#
 | 
						|
# [*manage_filesystem*]
 | 
						|
#   (optional) If set to false, skip calling xfs_admin -l to check if a
 | 
						|
#   partition needs to be formatted 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.
 | 
						|
#
 | 
						|
# [*label*]
 | 
						|
#   (optional) Filesystem label.
 | 
						|
#   Defaults to $name.
 | 
						|
#
 | 
						|
# Sample usage:
 | 
						|
#
 | 
						|
# swift::storage::xfs {
 | 
						|
#   ['sdb', 'sdc', 'sde', 'sdf', 'sdg', 'sdh', 'sdi', 'sdj', 'sdk']:
 | 
						|
#     mnt_base_dir => '/srv/node',
 | 
						|
#     mount_type  => 'uuid',
 | 
						|
#     require      => Class['swift'];
 | 
						|
# }
 | 
						|
#
 | 
						|
# Creates /srv/node if dir does not exist, formats sdbX with XFS unless
 | 
						|
# it already has an XFS FS, and mounts de FS in /srv/node/sdX
 | 
						|
#
 | 
						|
define swift::storage::xfs (
 | 
						|
  Stdlib::Absolutepath $device              = "/dev/${name}",
 | 
						|
  $byte_size                                = '1024',
 | 
						|
  Stdlib::Absolutepath $mnt_base_dir        = '/srv/node',
 | 
						|
  Boolean $loopback                         = false,
 | 
						|
  Enum['path', 'uuid', 'label'] $mount_type = 'path',
 | 
						|
  Boolean $manage_filesystem                = true,
 | 
						|
  String[1] $label                          = $name,
 | 
						|
) {
 | 
						|
  include swift::deps
 | 
						|
  include swift::params
 | 
						|
  include swift::xfs
 | 
						|
 | 
						|
  # Currently, facter doesn't support to fetch the device's uuid, only the partition's.
 | 
						|
  # If you want to mount device by uuid, you should set $ext_args to 'mkpart primary 0% 100%'
 | 
						|
  # in swift::storage::disk to make a partition. Also, the device name should change accordingly.
 | 
						|
  # For example: from 'sda' to 'sda1'.
 | 
						|
  # The code does NOT work in existing Swift cluster.
 | 
						|
  case $mount_type {
 | 
						|
    'uuid': {
 | 
						|
      $mount_device = dig44($facts, ['partitions', $device, 'uuid'])
 | 
						|
      if !$mount_device {
 | 
						|
        fail("Unable to fetch uuid of ${device}")
 | 
						|
      }
 | 
						|
    }
 | 
						|
    'label': {
 | 
						|
      $mount_device = "LABEL=${label}"
 | 
						|
    }
 | 
						|
    default: { # path
 | 
						|
      $mount_device = $device
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if !defined(File[$mnt_base_dir]) {
 | 
						|
    file { $mnt_base_dir:
 | 
						|
      ensure  => directory,
 | 
						|
      owner   => 'root',
 | 
						|
      group   => 'root',
 | 
						|
      require => Anchor['swift::config::begin'],
 | 
						|
      before  => Anchor['swift::config::end'],
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  # We use xfs_admin -l to print FS label
 | 
						|
  # If it's not a valid XFS FS, command will return 1
 | 
						|
  # so we format it. If device has a valid XFS FS, command returns 0
 | 
						|
  # So we do NOT touch it.
 | 
						|
  if $manage_filesystem {
 | 
						|
    $mkfs_command = ['mkfs.xfs', '-f', '-i', "size=${byte_size}"]
 | 
						|
    $mkfs_label_opt = $mount_type ? {
 | 
						|
      'label' => ['-L', $label],
 | 
						|
      default => []
 | 
						|
    }
 | 
						|
 | 
						|
    exec { "mkfs-${name}":
 | 
						|
      command => $mkfs_command + $mkfs_label_opt + [$device],
 | 
						|
      path    => ['/sbin/', '/usr/sbin/'],
 | 
						|
      unless  => "xfs_admin -l ${device}",
 | 
						|
      before  => Anchor['swift::config::end'],
 | 
						|
    }
 | 
						|
    Package<| title == 'xfsprogs' |>
 | 
						|
    ~> Exec["mkfs-${name}"]
 | 
						|
    ~> Swift::Storage::Mount<| title == $name |>
 | 
						|
  } else {
 | 
						|
    Package<| title == 'xfsprogs' |>
 | 
						|
    ~> Swift::Storage::Mount<| title == $name |>
 | 
						|
  }
 | 
						|
 | 
						|
  swift::storage::mount { $name:
 | 
						|
    device       => $mount_device,
 | 
						|
    mnt_base_dir => $mnt_base_dir,
 | 
						|
    loopback     => $loopback,
 | 
						|
  }
 | 
						|
}
 |