我需要使用 ansible 在远程主机上输入一个数据块,我尝试过“blockinfile”但不成功。
但是当我在本地主机上运行相同的东西时,它工作正常,不知道为什么
---
- hosts: 1.1.0.1
tasks:
- name: putting /tmp/fire.txt File on all machine.
blockinfile:
dest: /tmp/fire.txt
Block: |
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 23 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 3260 -j ACCEPT --comment "Enable iscsi port"
-A INPUT -p tcp --dport 119 -j ACCEPT --comment "Enable nfs TCP port"
-A INPUT -p tcp --dport 2049 -j ACCEPT --comment "Enable nfs UDP port"
COMMIT
答案1
我发现您的剧本有两个(也许三个)问题。该参数Block
不存在,为block
小写b。那么该块没有正确缩进。您需要将块缩进超出块参数的缩进。如果文件/tmp/fire.txt
不存在,这也会失败。
这是可行的剧本:
---
- hosts: 1.1.0.1
tasks:
- name: putting /tmp/fire.txt File on all machine.
blockinfile:
dest: /tmp/fire.txt
block: |
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 23 -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 3260 -j ACCEPT --comment "Enable iscsi port"
-A INPUT -p tcp --dport 119 -j ACCEPT --comment "Enable nfs TCP port"
-A INPUT -p tcp --dport 2049 -j ACCEPT --comment "Enable nfs UDP port"
COMMIT
答案2
您使用 blockinfile 模块而不是将 while 文件本地保存在计算机上的 /tmp/fire.txt 然后使用复制模块的任何具体原因?
---
- hosts: 1.1.0.1
tasks:
- name: putting /tmp/fire.txt File on all machine.
copy:
src: /tmp/fire.txt
dest: /tmp/fire.txt
否则,当您使用 blockinfile 时,该文件实际上是否存在于目标上?