2017-06-29 1 views
0

Beim Hinzufügen einer Variablenliste in Ansible wie würde man eine Spanne ähnlicher Werte erreichen? Zum Beispiel "000-100" - in einer Ansible-Host-Datei kann dies durch Auflistung wie folgt geschehen, "hostname- [a: v] .com". Wäre dieser Prozess ähnlich in einer Variablenliste?Ansible varible list span

Mein Anwendungsfall ist die Bereitstellung vieler VMs innerhalb von oVirt in einem einzigen Durchlauf, ohne dass eine zeilenweise Liste erstellt werden muss.

--- 
- name: Create VM based on template 
    hosts: ovirt-engine 
    become: yes 
    become_method: sudo 

    vars: 
    - temp: '{{temp_fedora25}}' 
    - iname: 
     - db-aa 
     - db-ab 
     - db-ac 

    tasks: 

    - name: Giving Birth to lil Baby VM's 
     ovirt: 
      user: '{{ovirt_usr}}' 
      password: '{{ovirt_pass}}' 
      url: '{{engine_url}}' 
      instance_name: "{{item}}" 
      instance_nic: ovirtmgmt 
      resource_type: template 
      image: '{{temp}}' 
      zone: superblade-a 
      disk_alloc: preallocated 
     with_items: "{{iname}}" 

Antwort

0

können Sie verwenden sequence Lookup:

- name: numeric 
    debug: 
    msg: "{{ item }}" 
    with_sequence: start=1 count=10 format=server-%0d 


- name: characters from small 'a' 
    debug: 
    msg: "{{ item }}" 
    with_sequence: start=0x61 count=10 format=server-%c 

- name: save for future use 
    set_fact: 
    my_seq: "{{ lookup('sequence','start={} count={} format={}{}'.format(beg,cnt,pref,fmt),wantlist=True) }}" 
    vars: 
    beg: 1 
    cnt: 10 
    pref: host- 
    fmt: '%0d' 

können Sie set_fact überspringen und definieren my_seq in Vars Abschnitt, aber wenn Sie my_seq verwenden viel, wird die Liste Generation intern jedes Mal durchgeführt werden. Mit set_fact wird die Liste einmal generiert.

+0

Ja, genau dort in der docs ... funktioniert gut, mit einigen Optimierungen für meinen Fall natürlich. Ich frage mich, ob diese Werte als registrierte Variablen wiederverwendet werden können? Ich füge eine andere Antwort mit meiner vollständigen Lösung hinzu, nur um gründlich zu sein. – arkitoure

+0

hinzugefügt Beispiel mit 'set_fact'. –

+0

Super ... macht den Trick.Ich muss meine Playbooks vergrößern, um die Weitergabe dieser Variablen zu testen. – arkitoure

0

Im Hinblick auf die richtige Antwort von Konstantin, ich hinzufüge, die vollständige Lösung wie pro meinem Fall ....

Mein Ziel passiert die sequenzierten Werte als registrierte Variablen, um wieder zu verwenden zu können, ist der Instanzname zum Hostnamen. Das funktioniert soweit, aber ich bin mir sicher, dass es durch Verschachteln von Variablen gestrafft werden kann.

--- 
- name: Create VM based on template 
    hosts: ovirt-engine 
    become: yes 
    become_method: sudo 

    vars: 
    - temp: '{{temp_fedora25}}' 
    - host_pre: db 
    - host_seq: a%c 
    - host_cnt: 3 
    - host_srt: 0x61 

    tasks: 

    - name: Giving Birth to lil Baby VM's 
     ovirt: 
     user: '{{ovirt_usr}}' 
     password: '{{ovirt_pass}}' 
     url: '{{engine_url}}' 
     instance_name: "{{item}}" 
     instance_nic: ovirtmgmt 
     resource_type: template 
     image: '{{temp}}' 
     zone: superblade-a 
     disk_alloc: preallocated 
     with_sequence: start="{{host_srt}}" count="{{host_cnt}}" format="{{host_pre}}-{{host_seq}}"