2017-03-22 1 views
1

Ich möchte mein Ansible-Playbook so konfigurieren, dass bestimmte Zeilen aus meiner /etc/hosts Datei in eine temporäre Datei kopiert werden. Dies sollte einfach tun:Wie man Ansible Befehl mit Einzelteilen benutzt?

--- 
hosts: 127.0.0.1 
gather_facts: False 
tasks: 
    - command: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 
    with_items: 
     - web 
     - database 

Ich denke, würde dies funktionieren würde, aber ich erhalte eine Fehlermeldung:

TypeError: string indicies must be integers, not str

ich ansible wissen ist pingelig unquoted Klammern so habe ich in doppelte Anführungszeichen die gesamte Befehlszeile, aber ich bekomme immer noch den Fehler.

- command: "grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup" 

Antwort

2

Ich habe keine Ahnung, warum Sie den Fehler erhalten Sie behaupten, Sie bekommen (vielleicht ist es ein OS-bezogene Sache, wenn Ihr System eine seltsame Fehlermeldung ansible zurückgibt).

Eine Sache ist sicher, dass Sie keine Dateiumleitung mit command Modul verwenden können. Stattdessen müssen Sie shell Modul verwenden, so ersetzen Sie die Aktion mit:

- shell: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 

Other than that, gibt es kein Problem mit with_items in Ihrer Aufgabe. Es gibt keine für das Spiel.

Der folgende Code funktioniert:

--- 
- hosts: 127.0.0.1 
    gather_facts: False 
    tasks: 
    - shell: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 
     with_items: 
     - web 
     - database 
+0

Sie richtig sind. Ich brauchte Shell statt Befehl. Vielen Dank. – William