我正在使用以下剧本来写入条目/etc/fstab
并创建交换文件:
---
- 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
我们使用以下命令运行它:
ansible-playbook mount.yml -e "ebs_swap=/dev/xvdj"
有人能告诉我为什么我无法输入内容/etc/fstab
并且当我尝试运行上述命令时它成功了。
答案1
您正在使用 Ansiblecommand
模块,该模块需要独立的二进制文件,但echo...
需要将该行输入到 shell 中才能对其进行解释。将其替换command:
为shell:
,您的剧本就可以正常工作了。
您还可以安全地从命令中删除“sudo”,因为该命令将以 root 身份执行...
...但为了实现这一点,您可能需要在命令中指定--ask-become-pass
标志(简称-K
)ansible-playbook
,因此,
ansible-playbook mount.yml -K -e "ebs_swap=/dev/xvdj"
答案2
我已经解决如下问题:
---
- name: Configure SWAP
hosts: localhost
become: yes
become_user: root
tasks:
- name: Dispaly swap uuid & store in variable
command: blkid -s UUID -o value {{ ebs_swap }}
register: uuid_swap
- name: Adding arguments as CIS benchmark to /etc/fstab file
blockinfile:
path: /etc/fstab
state: present
block: |
UUID={{ uuid_swap.stdout }} swap swap defaults 0 0