Ich weiß über Ansible-Umgebung: Befehl oben im Playbook, aber ich glaube nicht, dass es für mich funktionieren wird, da ich den Variablenwert vor der Ausführung des Playbooks nicht kenne. Ich versuche, Paketversionen und PHP-Module abzurufen und sie in einer Datei zu protokollieren. Ich möchte Regex verwenden, um die Version zu erfassen und in einer Umgebungsvariablen zu speichern. Dann möchte ich diese Variable mit dem Wert dieser Variablen in eine Umgebungsdatei mit einem Shell-Befehl schreiben. Ich möchte auch ein Array aus der Umgebung ziehen und durchlaufen. Ansible scheint die Shell-Umgebung nicht beizubehalten und die Umgebungsvariable wird zwischen den Befehlen gelöscht. Das ist einfach in Bash. Ist das in Ansible möglich? Ich versuche:Ansible Set Dynamische Umgebungsvariablen
---
- hosts: all
become: yes
vars:
site_variables:
code_directory: /home/
dependency_versions:
WGET_VERSION: placeholder
PHP_MODULES: placeholder
tasks:
- name: Retrieve Environment
shell: export WGET_VERSION=$(wget --version | grep -o 'Wget [0-9]*.[0-9]*\+')
shell: export PHP_MODULES=$(php -m)
shell: echo "export {{ item }}={{ lookup('env', item) }}" >> {{ site_variables.code_directory }}/.env.log
with_items:
- WGET_VERSION
- name: Write PHP Modules Out
shell: export PHP_MODULES=$(php -m)
shell: export PHP_MODULES=$(echo {{ lookup('env', 'PHP_MODULES') }} | sed 's/\[PHP Modules\]//g')
shell: export PHP_MODULES=$(echo {{ lookup('env', 'PHP_MODULES') }} | sed 's/\[Zend Modules\]//g')
shell: export PHP_MODULES=({{ lookup('env', 'PHP_MODULES') }})
shell: echo "# - {{ item.0 }}" >> {{ site_variables.code_directory }}/.env.log
with_items:
- "{{ lookup('env', 'PHP_MODULES') }}"
nicht sicher, ob ich Sie ganz bin nach. Ich ssh'ed in den Remote-Host und setze WGET_VERSION manuell ... also sagen wir WGET_VERSION = 1.1.1. {{lookup ('env', item)}} hat tatsächlich die Umgebungsvariable aus dem remote_host gezogen, den ich manuell eingerichtet habe (1.1.1) und ihn entsprechend protokolliert habe. Es hat den neuen Wert nicht nur über Ansible in der Shell gesetzt: export WGET_VERSION = $ (wget --version | grep -o 'Wget [0-9] *. [0-9] * \ +'). Ich muss wahrscheinlich nur darüber nachdenken, da ich definitiv am Ende alles durch ein Array füttern muss. Vielleicht ist Ansible einfach nicht der richtige Weg dafür. – Nabsta
Vielen Dank für Ihren Rat! Ich bin neu bei Ansible und es ist definitiv hilfreich. – Nabsta
Danke nochmal! Ich habe es funktioniert mit set_fact, eine Reihe von parallelen Arrays und entkam Regex-Anweisungen. Es scheint, als wäre in diesem Fall die direkte Bash besser geeignet und sauberer: P. – Nabsta