在使用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
但据我所知,没有简单的选择。
我错过了什么吗?
答案 0 :(得分:7)
您说得对,当前版本的Ansible中的mount
模块基于每个版本工作,并且不允许挂载/etc/fstab
中定义的所有文件系统。您实施任务的方式是正确的。
您在输出中看到的是警告:
[警告]:考虑使用mount模块而不是运行mount
Ansible通过mount
模块检查您正在运行command
命令,并建议使用本机模块。
Ansible不会执行高级语法分析来验证您在命令调用中使用的特定参数集是否可以使用本机模块参数实现。
您可以通过将shell
参数设置为command
来为每个任务禁用warn
和no
模块的警告:
- 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