Verwenden gesammelter Fakten in bedingten Aufgaben
Eine der leistungsstärksten Anwendungen gesammelter Fakten ist die Implementierung bedingter Logik in Ihren Playbooks. In diesem Schritt erstellen wir ein Playbook, das Fakten verwendet, um Entscheidungen darüber zu treffen, welche Aufgaben ausgeführt werden sollen.
Verstehen bedingter Aufgaben in Ansible
Ansible ermöglicht es Ihnen, das Schlüsselwort when
zu verwenden, um Aufgaben bedingt auf der Grundlage von Variablen, Fakten oder Aufgabenergebnissen auszuführen. Dies ermöglicht es Ihnen, dynamischere und anpassungsfähigere Playbooks zu erstellen.
Erstellen eines Playbooks mit bedingten Aufgaben
Erstellen wir ein Playbook, das je nach Betriebssystem unterschiedliche Aktionen ausführt:
- Navigieren Sie im WebIDE zum Verzeichnis
/home/labex/project/ansible
.
- Erstellen Sie eine neue Datei namens
conditional_facts_playbook.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
- name: Conditional Tasks Based on Facts
hosts: local
gather_facts: true
tasks:
- name: Display OS information
debug:
msg: "Running on {{ ansible_distribution }} {{ ansible_distribution_version }}"
- name: Task for Ubuntu systems
debug:
msg: "This is an Ubuntu system. Would run apt commands here."
when: ansible_distribution == "Ubuntu"
- name: Task for CentOS systems
debug:
msg: "This is a CentOS system. Would run yum commands here."
when: ansible_distribution == "CentOS"
- name: Task for systems with at least 2GB RAM
debug:
msg: "This system has {{ ansible_memtotal_mb }} MB RAM, which is sufficient for our application."
when: ansible_memtotal_mb >= 2048
- name: Task for systems with less than 2GB RAM
debug:
msg: "This system has only {{ ansible_memtotal_mb }} MB RAM, which may not be sufficient."
when: ansible_memtotal_mb < 2048
Dieses Playbook:
- Sammelt alle Fakten über das System.
- Zeigt die Betriebssysteminformationen an.
- Führt Aufgaben bedingt auf der Grundlage des Betriebssystemtyps aus.
- Führt Aufgaben bedingt auf der Grundlage der RAM-Menge aus.
Ausführen des bedingten Playbooks
Führen wir das Playbook aus, um bedingte Aufgaben in Aktion zu sehen:
cd ~/project/ansible
ansible-playbook -i hosts conditional_facts_playbook.yml
Da wir auf Ubuntu ausführen, sollten Sie eine Ausgabe ähnlich dieser sehen:
PLAY [Conditional Tasks Based on Facts] **************************************
TASK [Gathering Facts] *******************************************************
ok: [localhost]
TASK [Display OS information] ************************************************
ok: [localhost] => {
"msg": "Running on Ubuntu 22.04"
}
TASK [Task for Ubuntu systems] ***********************************************
ok: [localhost] => {
"msg": "This is an Ubuntu system. Would run apt commands here."
}
TASK [Task for CentOS systems] ***********************************************
skipping: [localhost]
TASK [Task for systems with at least 2GB RAM] ********************************
ok: [localhost] => {
"msg": "This system has 3907 MB RAM, which is sufficient for our application."
}
TASK [Task for systems with less than 2GB RAM] *******************************
skipping: [localhost]
PLAY RECAP *******************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
Beachten Sie, wie einige Aufgaben ausgeführt werden, während andere basierend auf den Bedingungen übersprungen werden. Die CentOS-Aufgabe wird übersprungen, da wir auf Ubuntu ausführen, und die Aufgabe "weniger als 2 GB RAM" wird übersprungen, da unser System mehr als 2 GB RAM hat.
Erstellen eines praktischeren Beispiels
Erstellen wir nun ein praktischeres Beispiel, das in einer realen Umgebung verwendet werden könnte:
- Erstellen Sie im WebIDE eine neue Datei namens
practical_conditional_playbook.yml
.
- Fügen Sie den folgenden Inhalt hinzu:
---
- name: Practical Conditional Playbook
hosts: local
gather_facts: true
vars:
app_dir: "/home/labex/project/app"
tasks:
- name: Create application directory
file:
path: "{{ app_dir }}"
state: directory
mode: "0755"
- name: Configure for production environment
copy:
dest: "{{ app_dir }}/config.yml"
content: |
environment: production
memory_limit: high
debug: false
when: ansible_memtotal_mb >= 4096
- name: Configure for development environment
copy:
dest: "{{ app_dir }}/config.yml"
content: |
environment: development
memory_limit: low
debug: true
when: ansible_memtotal_mb < 4096
- name: Display configuration
command: cat {{ app_dir }}/config.yml
register: config_content
- name: Show configuration
debug:
msg: "{{ config_content.stdout_lines }}"
Dieses Playbook:
- Erstellt ein Verzeichnis für eine Anwendung.
- Schreibt eine andere Konfigurationsdatei basierend auf dem verfügbaren Systemspeicher.
- Zeigt die resultierende Konfiguration an.
Führen Sie das praktische Playbook aus:
ansible-playbook -i hosts practical_conditional_playbook.yml
Dieses Beispiel zeigt, wie Sie gesammelte Fakten verwenden können, um Konfigurationen automatisch an Systemmerkmale anzupassen.