[英]How to append entries in `/etc/fstab` of disks using Ansible-playbook?
我正在使用下面的劇本將條目寫入/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"
輸出/輸出:
"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"
現在只有當它不存在時才會添加該行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.