我想挂载aws临时设备
/dev/xvde on /mnt/ephemeral0
/dev/xvdf on /mnt/ephemeral1
/dev/xvdg on /mnt/ephemeral2
/dev/xvdh on /mnt/ephemeral3例如。如果我选择较小的机器大小,我有更少的临时设备,因此它必须是设备的动态发现。
我在使用facter时有类似的想法,但我在puppet语法方面遇到了很大的困难。
按照要求,这里是一台具有2个临时设备的机器上的facter的输出:
./facter |grep xv
blockdevice_xvda_size => 8589934592
blockdevice_xvdf_size => 16380329984
blockdevice_xvdg_size => 16380329984
blockdevices => xvda,xvdf,xvdg因此,我希望生成/etc/fstab挂载,这样xvde和xvdf就可以分别在/mnt/efmeral0和/mnt/efmeral1上使用。
class mystuff::ephemeral () {
mount { $blockdevices:
pseudecode:
loop through blockdevice that don't match xvda, reset ephemeral counter to 0
if blockdevice match regex xvd[e-h] create an entry in fstab for /dev/xvd[which ever was matched] /mnt/ephemeral$counter
increase counter by 1
mount -a
}
}更新:下面是我用来让自己摆脱陈规的肮脏黑客:
mount { 'unmount_mnt':
name => '/mnt',
ensure => absent,
}
exec { 'fstab':
command => 'X=0; for i in $(/bin/cat /proc/partitions | /bin/awk \'{print $4}\' |/bin/grep xvd[f-i]);do /bin/mkdir /mnt/ephemeral$X; /bin/echo /dev/$i /mnt/ephemeral$X ext3 defaults,nofail,noexec 0 2 ; X=$((X+1)) ; done >> /etc/fstab && mount -a',
unless => '/bin/grep ephemeral /etc/fstab >/dev/null 2>&1',
provider => shell,
notify => Service['auditd'],
path => ["/bin"],
require => Mount['unmount_mnt'],
}我需要关于如何使用facter的建议,以及如何在不使用puppet exec的情况下以一种优雅的方式构建循环。
发布于 2014-12-13 14:17:04
在查看完您的请求和更新的信息后,我建议您通过这种方式解决它。应该从已经安装了facter的AMI镜像创建实例。
当启动(创建)一个新的实例时,在user data下面插入(提前选项),这样它就会自动挂载新的磁盘。
#!/usr/bin/env bash
emphemeral=$(facter|awk -F "_" '/xvd[f-i]/&&/_size/{print $2}' )
let x=0
for i in ${emphemeral}
do
mkfs.ext4 -E nodiscard /dev/${i}
mkdir -p /mnt/ephemeral${x}
mount /dev/${i} /mnt/ephemeral${x}
echo "/dev/${i} /mnt/ephemeral${x} auto defaults,nofail,nobootwait,comment=cloudconfig 0 2" >> /etc/fstab
(( x++ ))
done

这是旧的答案,它不适合你的问题,但这是另一个指定的临时磁盘的解决办法。
define mystuff::ephemeral(
$device,
$name,
) {
mount { "${name}":
device => $device,
fstype => "ext4",
ensure => "mounted",
options => "defaults",
atboot => "true",
}
}您可以应用如下清单:
mystuff::ephemeral {'ephemeral0':
device => '/dev/xvde',
name => '/mnt/ephemeral0,
}https://stackoverflow.com/questions/27449383
复制相似问题