2017-06-30 5 views
0

Ich habe den größten Teil des Tages versucht, dieses Problem zu lösen und bisher gescheitert. Ich baue einige Spielbücher, um Funktionen in Splunk zu automatisieren, und versuche, eine Liste von Hosts aus einer Bestandsgruppe E.G. zu konvertieren.Ansible concat vars zu string

[search_head] 
1.2.3.4 
5.6.7.8 

(Edited) Mein erwartet (gewünschtes) Ergebnis aus der Debug-Ausgabe des Spiels sein soll: https://1-2-3-4-ansible_nodename:8089, https://5.6.7.8-ansible_nodename:8089

ich mit dem folgende Textbuch mit einem laufenden Host dies abzuschließen bin versucht:

--- 
    - name: Build search head list to initialize the captain 
    hosts: search_head 
    remote_user: ansible 
    vars: 
     inventory_file: ./inventory-ec2-single-site 
     search_head_uri: "{{ lookup('template', './bootstrap-sh-deployer.j2') }}" 
pre_tasks: 
    - include_vars: 
     dir: 'group_vars' 
     extensions: 
     - yml 
     - yaml 
tasks: 
    - name: dump array 
    debug: 
     msg: "{{ search_head_uri }}"` 

Mit der Vorlage bootstrap-sh-deployer.j2 (Edited):

{%- set search_head_uri = [] %} 
{% for host in groups['search_head'] %} 
    {%- if search_head_uri.append("https://" + [host][ansible_nodename] + ":8089") %} 
{%- endif %} 
{%- if not loop.last %}, {% endif -%} 
{%- endfor %} 

(Edited) jedoch die aktuellen Spielfehler mit: "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: {{ lookup('template', './bootstrap-sh-deployer.j2') }}: 'list object' has no attribute u'ip-10-10-0-55'\n\nThe error appears to have been in '/Users/christophergarrett/dev/splunk-ansible/deploy_ec2_testing.yml': line 16, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: dump array\n ^here\n"

Edit: Beitrag editiert Versuch zu reflektieren Host Fakten zu sammeln. Ursprünglich hatte ich versucht, die IP der Hosts aus der Inventardatei zu bekommen, die ich vorher hatte.

Antwort

1

Sobald Sie einen Jinja2-Ausdruck oder eine Anweisung öffnen, sollten Sie die Jinja2-Syntax verwenden. Sie können sie nicht verschachteln (d. H., Sie können {{ }} nicht innerhalb von {% %} verwenden).

{%- if search_head_uri.append("https://" + host + ":8089") %} 
+0

Ehrfürchtig hörte es auf, sich zu verirren. Jetzt versuche ich den 'ansible_nodename' von jedem Host in der'inventar' Datei zu bekommen. '{% - set search_head_uri = [true]%} {% für den Host in Gruppen ['search_head']%} {% - if search_head_uri.append (" https: // "+ [Host] [ansible_nodename] + ": 8089")%} {% endif -%} {% - wenn nicht loop.last%}, {% endif -%} {% - endfor%} ' – AlmostGosu

+0

Fehler mit: ' fatal: [ 1.2.3.4]: AUSGEFALLEN! => { "failed": true, "msg": "Das Feld 'args' hat einen ungültigen Wert, der scheinbar eine undefinierte Variable enthält. Der Fehler war: {{lookup ('template', '. /bootstrap-sh-deployer.j2 ')}}:' Listenobjekt 'hat kein Attribut u'ip-1-2-3-4' \ n \ nDer Fehler scheint in '/ Users/christophergarrett/dev/splunk-ansible/deploy_ec2_testing.yml: Zeile 16, Spalte 9, kann aber abhängig vom genauen Syntaxproblem \ nwo anders in der Datei sein. \ n \ nDie folgende Zeile scheint zu sein: \ n \ n tasks: \ n - name : dump array \ n^here \ n " }' – AlmostGosu

+0

Wenn Sie ein anderes Problem haben, stellen Sie bitte eine andere Frage. Denken Sie über den Grund nach, warum Sie "Host" in eckige Klammern eingeschlossen haben. – techraf

0

Das funktionierte - Kombination der Antwort oben jinja Formatierung und mit hostvars zu beheben, um die ansible_nodename zu bekommen.

{%- set search_head_uri = [] %} 
{% for host in groups['search_head'] %} 
    {{ "https://" + hostvars[host]['ansible_nodename'] + ":8089" }} 
    {%- if not loop.last %}, {% endif -%} 
{%- endfor %} 
Verwandte Themen