如何使用Ansible剧本在磁盘的"/etc/fstab"中添加条目



我正在使用下面的剧本向/etc/fstab写入条目。并创建swap文件:

---
- name: Configure SWAP
hosts: localhost
become: yes
become_user: root
tasks:
- name: Configuring a SWAP
command: "{{ item }}"
loop:
- mkswap -f "{{ ebs_swap }}"
- echo "UUID=$(blkid -s UUID -o value {{ ebs_swap }})   swap    swap   defaults  0   0" | sudo tee -a /etc/fstab
- swapon -a
register: output
- name: Display the variable
debug:
msg: "{{ output}}"

我们使用命令运行它:ansible-playbook mount.yml -e "ebs_swap=/dev/xvdj"

O/p:

"item": "echo "UUID=$(blkid -s UUID -o value /dev/xvdj)   swap    swap   defaults  0   0" | sudo tee -a /etc/fstab",
"rc": 0,
"start": "2020-04-09 14:51:23.890047",
"stderr": "",
"stderr_lines": [],
"stdout": "UUID=$(blkid -s UUID -o value /dev/xvdj)   swap    swap   defaults  0   0 | sudo tee -a /etc/fstab",
"stdout_lines": [
"UUID=$(blkid -s UUID -o value /dev/xvdj)   swap    swap   defaults  0   0 | sudo tee -a /etc/fstab"

有人能告诉我为什么我不能在/etc/fstab&当我试图超越命令时,它就会成功。

我使用以下方法解决了这个问题:

- name: Dispaly uuid & store in variable
command: blkid -s UUID -o value {{ ebs_swap }}
register: uuid_swap
- name: Add the below lines
blockinfile:
path: /etc/fstab
state: present
block: |
UUID={{ uuid_swap.stdout }}   swap      swap defaults                         0   0

根据模块文档https://docs.ansible.com/ansible/latest/modules/command_module.html:

如果您想通过shell运行命令(比如您正在使用<、>、|等(,实际上您需要的是shell模块。如果引用不正确,解析shell元字符可能会导致执行意外命令,因此在可能的情况下使用命令模块更安全。

无论如何,我认为您不希望在每次运行此剧本时都将这一行添加到您的文件中,请使用lineinfile来确保这一行存在:

- shell: blkid -s UUID -o value {{ ebs_swap }})
register: blkid_out
- lineinfile:
path: /etc/fstab
regexp: "^UUID={{ blkid_out.stdout }}"
line: "UUID={{ blkid_out.stdout }}   swap    swap   defaults  0   0"

现在,只有当不存在时,才会添加该行

相关内容

  • 没有找到相关文章

最新更新