2017-06-30 5 views
2

Ist es möglich, den Wert des Arguments innerhalb eines Playbooks auf die Option "--limit" zu setzen? Ich möchte etwas zu tun, wie das ist:Wie erhält man --limit Argumente in einem Ansible Playbook?

--- 
- hosts: all 
    remote user: root 
    tasks: 
    - name: The value of the --limit argument 
    debug: 
     msg: "argument of --limit is {{ ansible-limit-arg }}" 

Dann, wenn ich, dass er Befehl ausführen:

$ ansible-playbook getLimitArg.yaml --limit webhosts 

ich diese Ausgabe bekommen:

argument of --limit is webhost 

Natürlich habe ich nach oben der Name der Variablen "ansible-limit-arg", aber gibt es einen gültigen Weg, dies zu tun? Ich könnte "Webhosts" zweimal spezifizieren, das zweite Mal mit --Extra-Args, aber das scheint ein umständlicher Weg zu sein, dies zu tun.

+0

Warum müssen Sie diese Informationen bekommen? Die '--limit'-Option (die eine Liste aufnehmen kann, BTW) begrenzt das Ziel deiner Spiele. Wenn Sie die reduzierte Liste wirklich kennen müssen, verwenden Sie die 'ansible_play_hosts'-Variable – zigarn

+0

Die Anwendung, für die dies gilt, ist eine SAP-HANA-Datenbank. Der Hostgruppenname für ansible, das Argument für die Option "--limit", ist mit dem Umgebungsnamen für den Datenbankcluster identisch. Wenn ich den "--limit" -Wert innerhalb des Playbooks wiederherstellen kann, muss ich den Umgebungsnamen nicht separat angeben. Es ist eine Frage der Bequemlichkeit, aber auch der Genauigkeit, wenn andere SysAmins meine Spielbücher benutzen. – awrobinson

Antwort

0

Sie können dies nicht ohne zusätzliches Plugin/Modul tun. Wenn Sie das unbedingt brauchen, schreiben Sie das Action-Plugin und die Optionen unter cli.options (siehe example).

P.S. Wenn Sie versuchen, --limit zu verwenden, um Playbooks gegen verschiedene Umgebungen laufen zu lassen, tun Sie es nicht, Sie können versehentlich Ihre gesamte Infrastruktur sprengen - verwenden Sie stattdessen andere Inventare.

0

Hier ist der kleine Codeblock der gleichen

- block: 
    - shell: 'echo {{inventory_hostname}} >> /tmp/hosts' 
    - shell: cat /tmp/hosts 
    register: servers 
    - file: 
     path: /tmp/hosts 
     state: absent 
    delegate_to: 127.0.0.1 
    - debug: var=servers.stdout_lines 

Dann nutzen stdout_lines Ausgabe als u wie meine

- add_host: 
    name: "{{ item }}" 
    groups: cluster 
    ansible_user: "ubuntu" 
    with_items: 
    - "{{ servers.stdout_lines }}" 
0

Haben Sie darüber nachgedacht mit dem {{ ansible_play_batch }} integrierten Variable erreichen will?

- hosts: all become: "False" gather_facts: "False" tasks: - name: The value of the --limit argument debug: msg: "argument of --limit is {{ ansible_play_batch }}" delegate_to: localhost

Es wird Ihnen nicht genau sagen, was als Argument eingegeben wurde, aber es wird Ihnen sagen, wie ansible die --limit arg interpretiert.

0

In ansible 2.5 (eine aktuelle Entwicklerversion von heute) Sie den Wert über einen neuen Zauber Variable ansible_limit, so zugreifen:

- debug: 
    var: ansible_limit 
Verwandte Themen