2017-09-09 3 views
1

Ich mache eine Ansible Playbook CSF einzurichten. Ich habe alles außer dem letzten Teil erledigt.Ansible: Ersetzen Sie das Wort in der Datei

Ich möchte Port 22 in der /etc/csf/csf.conf Datei deaktivieren. So TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995" benötigt 22 entfernt. Ich möchte nicht die gesamte Zeile ersetzen, da einige Zeilen unterschiedlich sind, einige haben Port 2087 geöffnet, oder 2222 zum Beispiel. Gibt es eine Möglichkeit, dass ich nur auf 22 filtern kann?

Vielen Dank im Voraus!

Antwort

3

Sie haben mehrere Möglichkeiten:

Diese Lösung verwendet das Modul replace, um nach einer Zeile zu suchen, die mit TCP_OUT = beginnt, und ,22, durch , in der Zeile ersetzen.

tasks: 
    - name: Strip port 22 
    replace: 
     dest: /etc/csf/csf.conf 
     regexp: '^TCP_OUT\s*=\s*(.*),22,(.*)$' 
     replace: 'TCP_OUT = \1,\2' 
  • \ s * - Spiele null oder mehr Leerräume (Blanks, Tabs etc.)
  • \ 1 - was auch immer in der ersten Gruppe abgestimmt
  • (*). \ 2 - (. *) Was auch immer in der zweiten Gruppe abgestimmt
+0

Ah perfekt. Würde es dir etwas ausmachen, wenn es nicht zu viel verlangt ist, es zu brechen? Ich weiß '' s 'ist eine Whiteline,'^'beginnen und' $ 'Ende ... Was genau stellt sicher, dass es auf BEIDE passt, auch nicht? das '='? – Florius

+0

@Florius sehe mein Update auf die Antwort. – helloV

1

-Code Arbeits Beweis

>>> TCP_OUT = '20,21,22,25,53,80,110,113,443,587,993,995,2087,2222,22' 
>>> print(','.join([port for port in TCP_OUT.split(',') if port != '22'])) 
'20,21,25,53,80,110,113,443,587,993,995,2087,2222' 
+0

Die Standardkonfiguration ist ' "20,21,22,25,53,80,110,113,443,587,993,995"', sondern ein cPanel-Server 2087 in ihm haben würde. Würde es "Ihren Weg" bedeuten, würde ich Port 2222 und 2087 auf allen Servern, Nicht-Directadmin und cPanel Servern öffnen müssen? – Florius

+0

Oh ich sehe, ich denke, ich kann etwas Datei lesen Code und auch eine Prüfung hinzufügen, um die ersetzen in der Zeile mit der Zeichenfolge "TCP_OUT =". Das klingt gut? – KingMak

0

könnten Sie template verwenden. Machen Sie eine Kopie Ihrer /etc/csf/csf.conf Datei und für die TCP_OUT Linie ersetzt es mit einer ansible Variable:

TCP_OUT = {{ port_list }} 

Dann stellen Sie die Liste vor der Zeit in einer Variablen mit dem Ports, die Sie in der Datei wünschen.

vars: 
    port_list = "20,21,25,53,80,110,113,443,587,993,995" 
+0

Wenn alle Server gleich wären, wäre das perfekt, aber wie gesagt, ich habe auch cPanel und DirectAdmin Server. Wäre es nicht sinnvoll mehrere verschiedene Playbooks zu haben? – Florius

Verwandte Themen