Ich bin neu in Ansible und frage mich, wie ich das machen soll, da das Folgende nicht funktioniert hat
ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
Wo django_fixtures
ist meine Variable?
Ich bin neu in Ansible und frage mich, wie ich das machen soll, da das Folgende nicht funktioniert hat
ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
Wo django_fixtures
ist meine Variable?
Antworten:
Beim Lesen der Dokumente finde ich den Abschnitt Übergeben von Variablen in der Befehlszeile , der dieses Beispiel enthält:
ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
Andere Beispiele zeigen, wie aus einer JSON- Zeichenfolge (≥ 1.2
) oder einer Datei (≥ 1.3
) geladen wird.
key=value
Syntax übergebene Werte werden als Zeichenfolgen interpretiert . Verwenden Sie das JSON-Format, wenn Sie etwas übergeben müssen, das keine Zeichenfolge sein sollte (Boolesche Werte, Ganzzahlen, Gleitkommazahlen, Listen usw.). Zum Beispiel:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
Andere Antworten geben an, wie die Befehlszeilenvariablen übergeben werden, nicht jedoch, wie auf sie zugegriffen werden soll. Wenn Sie dies also tun:
--extra-vars "version=1.23.45 other_variable=foo"
In Ihrer yml-Datei weisen Sie diese Variablen mit Gültigkeitsbereich zu, indem Sie Folgendes tun:
vars:
my_version: "{{ version }}"
my_other_variable: {{ other_variable }}
Eine Alternative zur Verwendung von Befehlszeilenargumenten besteht darin, Umgebungsvariablen zu verwenden, die bereits in Ihrer Sitzung definiert sind. Sie können diese in Ihren ansible-yml-Dateien wie folgt referenzieren:
vars:
my_version: "{{ lookup('env', 'version') }}"
my_other_variable: {{ lookup('env', 'other_variable') }}
lookup('env', SOMETHING)
ist der 12 Faktor angepasst.
version: {{ version }}
ist falsch, wie das Definieren version
von selbst.
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"
-e
Flagge ist die Kurzform von--extra-vars
--extra-vars "@some_file.json"
--extra-vars
Flag benötigen , um Variablen zu übergeben, die nicht in der Datei enthalten sind. Zum Beispiel--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
Sie können die --extra-vars
Option verwenden. Siehe die Dokumente
Aus irgendeinem Grund hat keine der oben genannten Antworten für mich funktioniert. Da ich in Ansbile 2.2.0 mehrere zusätzliche Vars an mein Playbook übergeben muss, habe ich es so zum Laufen gebracht (beachten Sie die Option -e vor jeder VAR):
ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2
-e
ist die Kurzform von--extra-vars
-e
Flagge angeben können
-e "firstvar=false second_var=value2"
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"
In der yml-Datei können Sie sie so verwenden
---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"
Auch --extra-vars
und -e
gleich sind, können Sie einen von ihnen verwenden.
s3_sync:
bucket: ansible-harshika
file_root: "{{ pathoftsfiles }}"
validate_certs: false
mode: push
key_prefix: "{{ folder }}"
Hier werden die Variablen mit den Namen 'pathoftsfiles' und 'folder' verwendet. Jetzt kann der Wert für diese Variable mit dem folgenden Befehl angegeben werden
sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"
Hinweis: Verwenden Sie keine Anführungszeichen, während Sie die Werte im Shell-Befehl an die Variable übergeben
ansible-playbook release.yml --extra-vars "username=hello password=bye"
#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"
Dies hat auch bei mir funktioniert, wenn Sie Shell-Umgebungsvariablen verwenden möchten:
ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"
ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"
Sie können den obigen Befehl in den folgenden Playbooks verwenden.
---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
--extra-vars
Variablen die im Playbook definierten Variablen überschreiben.