2016-12-09 1 views
0

Ich versuche, Vars in meinem Ansible Playbook zu verwenden. ENV wird als Eingabe von der Befehlszeile übergeben.Verwenden von Vars als Argument in Ansible

--- 
- hosts: development 
    sudo: yes 
    sudo_user: root 
    vars: 
     env: "{{ ENV|default('DEV') }}" 
    roles: 
     # Copy conf files 
     - { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7000/data/ } 
     - { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7200/data/ } 
     - { role: copy, src: ./conf/ems/7000/"{{ env }}"/*.conf , dest: /apps/tibco/config/ems/7004/data/ } 

Ich betreibe dieses Textbuch durch den Befehl

ansible-playbook -e 'ENV=DEV' --ask-sudo-pass install-ems-plybook.yml 

ich

 # Copy conf files 
     - { role: copy, src: ./conf/ems/7000/" {{env}} "/*.conf , dest: /apps/tibco/config/ems/7000/data/ } 
              ^
We could be wrong, but this one looks like it might be an issue with 
missing quotes. Always quote template expression brackets when they 
start a value. For instance: 

    with_items: 
     - {{ foo }} 

Should be written as: 

    with_items: 
     - "{{ foo }}" 

Bitte explizit in Antwort sein, wie ich noch ein Kleinkind in ansible bin.

Antwort

0

Hauptproblem:

Sie sollten keine Anführungszeichen in der Mitte der Zeichenfolge enthalten (./conf/ems/7000/"{{ env }}"/*.conf) - das ist, was eine Fehlermeldung bekam etwa - es sollte "./conf/ems/7000/{{ env }}/*.conf"

Andere Probleme :

Sie scheinen wirklich Aufgaben nicht Rollen definieren möchten; Ich nehme das von der Benennung der Parameter an.

Sie haben nicht angegeben (in Worten), was Sie erreichen möchten, ich nehme an, Sie wollten Dateien aus einem lokalen Verzeichnis in ein Verzeichnis auf dem Zielknoten kopieren.

Ein großes Problem ist, dass Sie keine Platzhalter in copy Modul verwenden können; mehrere Dateien kopieren Sie with_fileglob verwenden sollten, finden Sie Looping over Fileglobs

Ein weiteres kleines Problem ist, dass sudo und sudo_user sind veraltet und ersetzt mit become und become_user, sie sind immer noch Aliase Warnmeldungen produzieren, aber es gibt keine Garantie, 1 Tag verschwinden.

Ein Arbeitsbeispiel Textbuch kann wie folgt aussehen:

--- 
- hosts: development 
    become: yes 
    become_user: root 
    vars: 
    env: "{{ ENV|default('DEV') }}" 
    tasks: 
    - copy: 
     src: "{{ item }}" 
     dest: /apps/tibco/config/ems/7000/data/ 
     with_fileglob: 
     - "./conf/ems/7000/{{ env }}/*.conf" 

schließlich in Ihrem Beispiel, können Sie den gleichen Satz von Dateien aus dem Verzeichnis mit 7000 auf Verzeichnisse kopieren enthalten 7000, 7200 und 7004. Ich bin mir nicht sicher, ob dies beabsichtigt ist, aber ich überlasse das Ihrer Anpassung. Sie können Aufgaben wie im obigen Beispiel hinzufügen.

+0

wird in 1,9 der tans_user unterstützt? –

+0

Ja, nach [docs] (https://docs.ansible.com/ansible/become.html#for-those-from-pre-1-9-sudo-and-su-still-work) 'werden' -Parameter wurden in 1.9 eingeführt. – techraf

Verwandte Themen