Blockinfile funktioniert nicht in Ansible

Blockinfile funktioniert nicht in Ansible

Ich muss mit Ansible einen Datenblock auf einem Remote-Host eingeben. Ich habe „blockinfile“ ausprobiert, aber ohne Erfolg.

Aber wenn ich das gleiche auf meinen lokalen Hosts ausführe, funktioniert es einwandfrei. Ich weiß nicht, warum

---
 - 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

Antwort1

Ich sehe zwei (vielleicht drei) Probleme mit Ihrem Playbook. Der Parameter Blockexistiert nicht, er hat blockein kleines b. Dann ist der Block nicht richtig eingerückt. Sie müssen den Block über die Einrückung des Blockparameters hinaus einrücken. Auch das schlägt fehl, wenn die Datei /tmp/fire.txtnicht existiert.

Hier ist das Playbook in einer funktionierenden Form:

---
 - 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

Antwort2

Gibt es einen bestimmten Grund, warum Sie das Blockinfile-Modul verwenden, anstatt die gesamte Datei lokal auf Ihrem Computer unter /tmp/fire.txt zu speichern und dann das Kopiermodul zu verwenden?

---
 - hosts: 1.1.0.1
   tasks:
    - name: putting /tmp/fire.txt File on all machine.
      copy:
          src: /tmp/fire.txt
          dest: /tmp/fire.txt

Wenn Sie blockinfile verwenden, existiert die Datei tatsächlich am Ziel?

verwandte Informationen