如何使用Ansible挂载fstab上列出的所有分区

时间:2016-12-22 22:59:59

标签: ansible

在使用Ansible的lineinfile模块向/etc/fstab添加多个挂载点之后,我想运行一个简单的mount -a来实现这些挂载点。

它可以与

一起使用
  - name: mount all
    command: mount -a
    become: true

然而,ansible坚持建议使用mount模块

[WARNING]: Consider using mount module rather than running mount

但据我所知,没有简单的选择。

我错过了什么吗?

3 个答案:

答案 0 :(得分:7)

您说得对,当前版本的Ansible中的mount模块基于每个版本工作,并且不允许挂载/etc/fstab中定义的所有文件系统。您实施任务的方式是正确的。

您在输出中看到的是警告:

  

[警告]:考虑使用mount模块而不是运行mount

Ansible通过mount模块检查您正在运行command命令,并建议使用本机模块。

Ansible不会执行高级语法分析来验证您在命令调用中使用的特定参数集是否可以使用本机模块参数实现。

您可以通过将shell参数设置为command来为每个任务禁用warnno模块的警告:

- name: mount all
  command: mount -a
  args:
    warn: no
  become: true

答案 1 :(得分:3)

只需注意,您可以使用mount模块添加FS选项卡条目,并使用“present”状态。这样,就不会发生安装,您可以使用mount all挂载所有条目。

- name: Mount drive
  mount:
    name: new mount
    src: /dev/xvdb1
    fstype: ext4
    state: present

我基本上使用这种方法,因为在尝试安装分区时使用标志“remount”的ansible。例如,这个标志与glusterfs不能很好地匹配,因为它会抛出“已经安装了驱动器”的错误,这会破坏你的运行。

答案 2 :(得分:0)

当前fstab的备份:

#cp -a /etc/fstab /etc/fstab.bk

使用 sed awk 处理 lsblk -f 的输出,并将输出重定向到fstab:

#lsblk -f|sed 's/\[SWAP]/swap /g'|awk '/(-)/{printf"UUID=%-36s %-23s %-7s defaults 
           0 0\n", $3, ($4==""?mnt"NR:$4), $2}'>/etc/fstab

通过调用

挂载新的挂载点
#mount -a