Blockinfile이 앤서블에서 작동하지 않습니다.

Blockinfile이 앤서블에서 작동하지 않습니다.

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

while 파일을 컴퓨터의 /tmp/fire.txt에 로컬로 저장한 다음 복사 모듈을 사용하는 것과 반대로 blockinfile 모듈을 사용하는 특별한 이유가 있습니까?

---
 - 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을 사용할 때 파일이 실제로 대상에 존재합니까?

관련 정보