2017-03-03 2 views
0

mit Ansible Ich muss ein Skript in verschiedenen Clients/Hosts kopieren, dann muss ich eine Zeile im Skript ändern. Die Zeile hängt vom Client ab und ist nicht immer gleich. Jeder Host hat denselben Namen. Der Name jedes Clients ist unterschiedlich.Ansible Verschiedene Hosts, unterschiedliche Aktion

So etwas:

lineinfile: > 
     state=present 
     dest=/path/to/myscript 
     line="/personal line 
    when: {{ clients/hosts }} is {{ client/host }} 

Wie Sie sehen können, habe ich keine Ahnung über den Weg zu gehen.

+1

Vielleicht versuchen Sie zuerst [die Dokumentation] (https://docs.ansible.com/) zu lesen. Es enthält Beispiele, wie Sie tun können, was Sie wollen. Ansonsten ist es "Mach es für mich" Anfrage. – techraf

+0

Danke für Ihre Antwort. Natürlich habe ich zuerst die Dokumentation gelesen und lese sie in diesem Moment noch. Ich habe gerade nicht gefunden, was ich suche. – Tiki

Antwort

0

Es klingt, als gäbe es einige Clients, denen bestimmte Hosts zugeordnet sind, und die Zeile in diesem Skript hängt vom Client ab.

In diesem Fall sollten Sie Gruppe Vars verwenden. Ich habe unten ein vereinfachtes Beispiel eingefügt.

[client1] 
host1 
host2 

[client2] 
host3 
host4 

Verwendung Gruppenvariablen wie folgt aus::

Datei group_vars/client1:

variable_script_line: echo "this is client 1" 

Datei group_vars/client2:

variable_script_line: echo "this is client 2" 

Ihre Gastgeber wie diese Datei einrichten

Erstellen Sie eine Vorlage Datei mit dem Namen yourscript.sh.j2:

#!/bin/bash 
# {{ ansible_managed }} 

script line 1 
script line 2 
# below is the line that should be dynamic 
{{ variable_script_line }} 

Und dann das Template Modul wie folgt verwenden:

--- 
- hosts: all 
    tasks: 
    - name: Deploy script to remote hosts 
     template: 
     src: /path/to/yourscript.sh.j2 
     dest: /path/to/location/yourscript.sh 
     mode: 0755 

Beachten Sie, dass der Pfad Vorlage Ihre Quelle wird anders sein, wenn Sie Verwenden einer [Rolle] [1].

Schließlich, wenn das Spiel auf client1 vs client2 ausgeführt wird, wird der Inhalt der Vorlage basierend auf der Variablen anders geschrieben (siehe mehr über variable scopes).

+0

Ein wirklich großer Dank für Ihre Antwort. Ich habe gestern Nachmittag einen Nachmittag verbracht und schließlich den Weg aufgegeben, eine Variable mit einer Zeichenfolge zu vergleichen. – Tiki

+1

Verdammt, ich habe meinen Schnitt verpasst: Ein wirklich großer Dank für deine Antwort an einen Neuling. Ich habe gestern Nachmittag einen Nachmittag verbracht und schließlich den Weg aufgegeben, eine Variable mit einer Zeichenfolge zu vergleichen. Da ich nur eine Zeichenfolge im Skript ändern muss, lege ich den Pfad in eine Variable und habe die Funktionen "regexp" und "replace" verwendet. Es ist einfacher. Aber Ihre Lösung mit Vorlagen ist besser, wenn ich mehr als eine Variable ändern muss. Ich habe viel gelernt, danke dir dafür. Ein wenig Hilfe ist größer und produktiver als ein RT * M. Ich habe das Handbuch zuerst gelesen !!! – Tiki

Verwandte Themen