首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环通过facter块设备来挂载aws临时磁盘

如何循环通过facter块设备来挂载aws临时磁盘
EN

Stack Overflow用户
提问于 2014-12-13 01:55:55
回答 1查看 482关注 0票数 0

我想挂载aws临时设备

代码语言:javascript
复制
/dev/xvde on /mnt/ephemeral0
/dev/xvdf on /mnt/ephemeral1
/dev/xvdg on /mnt/ephemeral2
/dev/xvdh on /mnt/ephemeral3

例如。如果我选择较小的机器大小,我有更少的临时设备,因此它必须是设备的动态发现。

我在使用facter时有类似的想法,但我在puppet语法方面遇到了很大的困难。

按照要求,这里是一台具有2个临时设备的机器上的facter的输出:

代码语言:javascript
复制
./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上使用。

代码语言:javascript
复制
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
    }
}

更新:下面是我用来让自己摆脱陈规的肮脏黑客:

代码语言:javascript
复制
    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的情况下以一种优雅的方式构建循环。

EN

回答 1

Stack Overflow用户

发布于 2014-12-13 14:17:04

在查看完您的请求和更新的信息后,我建议您通过这种方式解决它。应该从已经安装了facter的AMI镜像创建实例。

当启动(创建)一个新的实例时,在user data下面插入(提前选项),这样它就会自动挂载新的磁盘。

代码语言:javascript
复制
#!/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

这是旧的答案,它不适合你的问题,但这是另一个指定的临时磁盘的解决办法。

代码语言:javascript
复制
define mystuff::ephemeral(
        $device,
        $name,
      ) {
           mount { "${name}":
             device  => $device,
             fstype  => "ext4",
             ensure  => "mounted",
             options => "defaults",
             atboot  => "true",
        }

}

您可以应用如下清单:

代码语言:javascript
复制
mystuff::ephemeral {'ephemeral0':
      device  => '/dev/xvde',
      name    => '/mnt/ephemeral0,  
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27449383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档