使用Ansible添加fstab选项

时间:2014-09-22 15:09:28

标签: regex ansible mount mount-point

我正在尝试将nodev添加到我的/etc/fstab文件中。我正在使用下面的Ansible命令,但没有运气。我的问题在于正则表达式,我不是正则表达式的专业人士。

- name: Add nodev to /etc/fstab
  lineinfile:
    dest=/etc/fstab
    backup=yes
    backrefs=yes
    state=present
    regexp='(^/dev[\w/_-]+(\s+(?!nodev)[\w,]+)*)'
    line='\1,nodev'

我要添加/etc/fstab的{​​{1}}其中一行是:

nodev

7 个答案:

答案 0 :(得分:15)

虽然这可能不是最优雅的答案,但它对我有用。

- name: Ensure fstab uses nodev
  mount:
    name: "{{ item.mount }}"
    src: "{{ item.device }}"
    fstype: "{{ item.fstype }}"
    opts: "{{ item.options }},nodev"
    state: present
  with_items: ansible_mounts
  when: item.options.find(",") >= 0 and item.options.find("nodev") == -1

答案 1 :(得分:3)

受Joe的回答启发我制作了这个版本,如果它已经存在,我会在/etc/fstab的特定行添加一个选项。这也将保留该行已有的任何其他选项。

main.yml

- import_tasks: fstab-opt-present.yml point=/home opt=nodev

的fstab-OPT-present.yml

- name: '/etc/fstab: Set opt "{{ opt }}" for mount point {{ point }}'
  lineinfile:
    path: /etc/fstab
    backup: yes
    backrefs: yes
    regexp: '^(\S+\s+{{ point }}\s+\S+\s+)(?!(?:\S*,)?{{ opt }}(?:,\S*)?\s+)(\S+)(\s+.+)$'
    line: '\1{{ opt }},\2\3'
  register: fstab

- name: 'If {{ point }} changed, remount'
  command: 'mount {{ point }} -o remount'
  when: fstab.changed

https://regex101.com/是构建和测试这类regexp的非常有用的工具。只需启用"多线"在那里选择并打开" Substitution"小组,您甚至可以粘贴到/etc/fstab,看看你的正则表达式将匹配哪些行以及它们将对它们做什么。只需记住在测试时使用实际值而不是Ansible变量{{ point }}

答案 2 :(得分:2)

我们开发了第三方ansible模块来添加,设置或删除挂载选项。看看吧!

  - mountopts:
      name: /
      option: nodev

https://github.com/Uberspace/ansible-mountopts

答案 3 :(得分:0)

登陆这里寻找答案,为我的用例滚动自己:

main.yml

- include: fstab-opts.yml point=/tmp opts=noexec,nodev,nosuid,noatime
- include: fstab-opts.yml point=/backup opts=noatime

的fstab-opts.yml

---

- name: 'Ensure {{ point }} flags'
  lineinfile:
    path: /etc/fstab
    # uses "(not-spaces spaces /tmp spaces )(not-spaces)(the rest)" pattern to match column content and capture args
    regexp: '^([^ ]+[ ]+\{{ point }}[ ]+[^ ]+[ ]+)([^ ]+)(.*)'
    line: '\1{{ opts }}\3'
    backrefs: yes
  register: fstab

- name: 'If {{ point }} changed, remount'
  command: mount -o remount {{ point }}
  when: fstab.changed

答案 4 :(得分:0)

经过测试并可以正常工作

  • 名称:设置nodev选项 更换: 路径:/ etc / fstab 备份:是的 regexp:'^(\ S + \ s +)(/ \ S +)(\ s +)((?: ext4 | xfs)\ s +)(?!(?:\ S *,)?nodev(?:,\ S * )?\ s +)(\ S +)(\ s +。+)$' 替换:'\ 1 \ 2 \ 4 \ 5,nodev \ 6'

它不包括将nodev添加到/(root),仅设置为ext4和xfs文件系统。不会添加到临时文件系统中。

注意:在测试regexp101时,请确保选择python

答案 5 :(得分:0)

我想指出的是,似乎有一个新的ansible模块,可以更轻松地覆盖所有内容: https://docs.ansible.com/ansible/latest/modules/mount_module.html

答案 6 :(得分:0)

我在 /etc/fstab 中为 /var/tmp 挂载点添加了 noexec,nodev,nosuid 选项。

要求是:

  1. 确保在 /var/tmp 分区上设置 noexec 选项
  2. 确保在 /var/tmp 分区上设置 nodev 选项
  3. 确保在 /var/tmp 分区上设置 nosuid 选项

如果需要,使用下面的命令安装 ansible.posix.mount 模块。

# ansible-galaxy collection install ansible.posix

剧本:

---
 - name: "STEP 1: Get /var/tmp mounted SRC device"
   shell: mount | grep -E '\s/var/tmp\s' | awk '{print $1}'
   register: "vartmpsrc"

 - debug:
     msg: "Validated the /var/tmp mount output: {{ vartmpsrc.stdout }}"

 - name: "Add mount noexec,nodev,nosuid options for /var/tmp"
   mount:
     path: "/var/tmp"
     src: "{{ vartmpsrc.stdout }}"
     fstype: "tmpfs"
     opts: "nosuid,nodev,noexec"
     state: "present"
   when: vartmpsrc.stdout == "/var/tmp"

 - name: 'Remount /var/tmp mounted volume with mount options noexec,nodev,nosuid"
   ansible.posix.mount:
    path: /var/tmp
    state: remounted
   when: vartmpsrc.stdout == "/var/tmp"

 - name: 'STEP 2: Validate noexec,nodev,nosuid option set on /var/tmp partition'
   shell: mount | grep -E '\s/var/tmp\s' | grep -v {{ item }}
   loop:
    - noexec
    - nodev
    - nosuid
   register: vartmp_exists
   ignore_errors: yes
   when: vartmpsrc.stdout == "/var/tmp"