Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| linux:ansible:playbook_example_08 [01.06.2024 13:23. ] – [Aufgabenstellung 2 - "erweiterte" Grund-/Basis-Installation für Ansible-Vault] django | linux:ansible:playbook_example_08 [26.07.2025 15:58. ] (aktuell) – [Fazit und Ausblick] django | ||
|---|---|---|---|
| Zeile 313: | Zeile 313: | ||
| Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen des Verzeichnisses und des Ansible-Scripts überspringen. Mit Folgendem Befehl erledigt man dies sozusagen auf einem Rutsch: | Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen des Verzeichnisses und des Ansible-Scripts überspringen. Mit Folgendem Befehl erledigt man dies sozusagen auf einem Rutsch: | ||
| - | < | + | < |
| - | Anschliessend kann man, nachdem man die Variable | + | Anschliessend kann man, nachdem man die Variablen wie z.B. **'' |
| </ | </ | ||
| === Script anlegen === | === Script anlegen === | ||
| Zeile 323: | Zeile 323: | ||
| </ | </ | ||
| - | Als erstes legen wir manuell einmal das Verzeichnis **'' | + | Als erstes legen wir manuell einmal das Verzeichnis **'' |
| - | $ mkdir -p ~/ | + | $ mkdir -p ~/devel/ |
| Hier legen wir nun unser Ansible-Playbook/ | Hier legen wir nun unser Ansible-Playbook/ | ||
| $ vim ~/ | $ vim ~/ | ||
| - | <file c++ ~/ | + | {{gh> https://gitlab.nausch.org/ |
| - | # Ansible Playbook zum initialen Einrichten der Ansible-Umgebung | + | |
| - | # | + | |
| - | # Aufruf aus dem entsprechenden Arbeits-Verzeichnis via: | + | |
| - | # ansible-playbook playbooks/ | + | |
| - | + | ||
| - | - name: ansible_grundconfig_v2.yml | + | |
| - | gather_facts: | + | |
| - | hosts: localhost | + | |
| - | become: true | + | |
| - | vars: | + | |
| - | ansible_working_dir: | + | |
| - | ansible_config: | + | |
| - | admin_user: "{{ lookup(' | + | |
| - | admin_mail: django@nausch.org | + | |
| - | vars_prompt: | + | |
| - | - name: pass_secret | + | |
| - | prompt: "Enter password for password-store?" | + | |
| - | - name: pass_secret_2nd | + | |
| - | prompt: " | + | |
| - | - name: become_secret | + | |
| - | prompt: "Enter become-password for sudo?" | + | |
| - | - name: become_secret_2nd | + | |
| - | prompt: " | + | |
| - | + | ||
| - | tasks: | + | |
| - | - name: " | + | |
| - | fail: | + | |
| - | msg: " | + | |
| - | when: | + | |
| - | - pass_secret != pass_secret_2nd | + | |
| - | + | ||
| - | - name: " | + | |
| - | fail: | + | |
| - | msg: " | + | |
| - | when: | + | |
| - | - become_secret != become_secret_2nd | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.stat: | + | |
| - | path: '{{ ansible_config }}' | + | |
| - | register: check_ansible_config | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.fail: | + | |
| - | msg: " | + | |
| - | when: check_ansible_config.stat.exists != 1 | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.copy: | + | |
| - | dest: '/home/{{ admin_user }}/ | + | |
| - | group: '{{ admin_user }}' | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | src: '{{ ansible_config }}' | + | |
| - | mode: ' | + | |
| - | + | ||
| - | | + | |
| - | ansible.builtin.lineinfile: | + | |
| - | line: "{{ item.line }}" | + | |
| - | path: "/home/{{ admin_user }}/.ansible.cfg" | + | |
| - | regexp: "{{ item.regexp }}" | + | |
| - | state: present | + | |
| - | with_items: | + | |
| - | - { | + | |
| - | regexp: " | + | |
| - | line: " | + | |
| - | # default: | + | |
| - | } | + | |
| - | - { | + | |
| - | regexp: " | + | |
| - | line: "# Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!\n\ | + | |
| - | # default: # | + | |
| - | inventory | + | |
| - | } | + | |
| - | - { | + | |
| - | regexp: " | + | |
| - | line: "# Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!\n\ | + | |
| - | # default: # | + | |
| - | roles_path | + | |
| - | } | + | |
| - | - { | + | |
| - | regexp: " | + | |
| - | line: "# Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually!\n\ | + | |
| - | # default: # | + | |
| - | vault_password_file = ~/ | + | |
| - | } | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | state: directory | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | group: '{{ admin_user }}' | + | |
| - | mode: ' | + | |
| - | with_items: | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: "playbooks/"} | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | - {directory: " | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | state: touch | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | group: '{{ admin_user }}' | + | |
| - | mode: ' | + | |
| - | with_items: | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | - {file: " | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.package: | + | |
| - | name: pass | + | |
| - | update_cache: | + | |
| - | state: latest | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | group: '{{ admin_user }}' | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | state: directory | + | |
| - | mode: ' | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.copy: | + | |
| - | dest: '/ | + | |
| - | content: | | + | |
| - | # | + | |
| - | # Ansible generated, do not edit manually! | + | |
| - | pass show ansible-vault-password | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | group: '{{ admin_user }}' | + | |
| - | mode: ' | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | state: absent | + | |
| - | + | ||
| - | - name: " | + | |
| - | become_user: | + | |
| - | become: true | + | |
| - | shell: | | + | |
| - | set -o pipefail && pass init '{{ admin_mail }}' && / | + | |
| - | changed_when: | + | |
| - | args: | + | |
| - | executable: /bin/bash | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | state: absent | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.copy: | + | |
| - | dest: '/ | + | |
| - | content: | | + | |
| - | # Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually! | + | |
| - | ansible_become_pass: | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | group: '{{ admin_user }}' | + | |
| - | mode: ' | + | |
| - | + | ||
| - | - name: " | + | |
| - | become_user: | + | |
| - | become: true | + | |
| - | shell: | | + | |
| - | ansible-vault encrypt /home/{{ admin_user }}/ | + | |
| - | changed_when: | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.file: | + | |
| - | path: '/ | + | |
| - | state: absent | + | |
| - | + | ||
| - | - name: " | + | |
| - | ansible.builtin.copy: | + | |
| - | dest: '/ | + | |
| - | content: | | + | |
| - | # Generated by Ansible on {{ ansible_date_time.date }}, do not edit manually! | + | |
| - | ansible_become: | + | |
| - | ansible_become_method: | + | |
| - | ansible_become_user: | + | |
| - | ansible_become_ask_pass: | + | |
| - | owner: '{{ admin_user }}' | + | |
| - | group: '{{ admin_user }}' | + | |
| - | mode: ' | + | |
| - | + | ||
| - | ... # YML Ende</ | + | |
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| **Wichtig: | **Wichtig: | ||
| - | Die Variable | + | Die Variablen wie z.B. **'' |
| </ | </ | ||
| === Script Beschreibung === | === Script Beschreibung === | ||
| - | Mit Hilfe des Playbooks werden alle wesentlichen Konfigurationsoptionen definiert, die im Kapitel **[[first# | + | Mit Hilfe des Playbooks werden |
| Nacheinander werden folgende Punkte abgearbeitet: | Nacheinander werden folgende Punkte abgearbeitet: | ||
| - Ermitteln des angemeldeten (Admin-)Usernamens **'' | - Ermitteln des angemeldeten (Admin-)Usernamens **'' | ||
| - Abfrage des Passwortes für den **Password-Store** und des **'' | - Abfrage des Passwortes für den **Password-Store** und des **'' | ||
| - | - Prüfen, ob die Konfigurationsdatei **''/ | + | - Generieren |
| - | - Kopieren | + | |
| - Setzen der Ansible-Konfigurationsoptionen | - Setzen der Ansible-Konfigurationsoptionen | ||
| * **'' | * **'' | ||
| Zeile 572: | Zeile 350: | ||
| * **'' | * **'' | ||
| - Ansible Directory Layout anlegen und anschliessend | - Ansible Directory Layout anlegen und anschliessend | ||
| - | - Ansible Directory Layout mit dummy-files | + | - Ansible Directory Layout mit dummy-files |
| - Installation des Passwort-Managers **'' | - Installation des Passwort-Managers **'' | ||
| - vault-Wrapperscript im **'' | - vault-Wrapperscript im **'' | ||
| Zeile 579: | Zeile 357: | ||
| - Ansible-Vault Datei, die zuvor angelegt wurde, mit dem Ansible-Vault-Passwort sicher verschlüsseln. | - Ansible-Vault Datei, die zuvor angelegt wurde, mit dem Ansible-Vault-Passwort sicher verschlüsseln. | ||
| - Im Inventory die Definitionen zu privilege_escalation anlegen und auch hier ggf. ein bereits existierende Konfigurationsdatei vorher löschen. | - Im Inventory die Definitionen zu privilege_escalation anlegen und auch hier ggf. ein bereits existierende Konfigurationsdatei vorher löschen. | ||
| + | - Installation und Konfiguration des Ansible Stdout Compact Logger unter Arch Linux | ||
| + | * **'' | ||
| + | * **'' | ||
| + | |||
| === Script starten === | === Script starten === | ||
| Das Ansible-Playbook lässt sich wie folgt auf dem Ansible-Controll-Host bzw. der Admin-Workstation aufrufen: | Das Ansible-Playbook lässt sich wie folgt auf dem Ansible-Controll-Host bzw. der Admin-Workstation aufrufen: | ||
| - | $ ansible-playbook ~/ | + | $ ansible-playbook ~/devel/ |
| - | + | ||
| - | < | + | |
| - | <pre class=" | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match ' | + | |
| - | <font style=" | + | |
| - | Retype password for password-store?: | + | |
| - | Enter become-password for sudo?: | + | |
| - | Retype become-password for sudo?: | + | |
| - | + | ||
| - | PLAY [ansible_grundconfig_v2.yml] ************************************************************************************************* | + | |
| - | + | ||
| - | TASK [Gathering Facts] ************************************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Playbooklauf abbrechen sofern die beiden eigegebenen Passwörter nicht übereinstimmen!] **************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Playbooklauf abbrechen sofern die beiden eigegebenen Passwörter nicht übereinstimmen!] **************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Konfigurationsdatei / | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Fehlerhinweis im Fehlerfall ausgeben] ***************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Konfigurationsverzeichnis in das User/ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Konfiguration anpassen] *********************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Directory Layout anlegen] *******************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | ok: [localhost] => (item={' | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Directory Layout mit dummy-files main.yml befüllen] ***************************************************************</ | + | |
| - | <font style=" | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | changed: [localhost] => (item={' | + | |
| - | <font style=" | + | |
| - | TASK [Passwort-Manager pass installieren] ***********************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Verzeichnis ~/bin anlegen] ********************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [vault-Wrapperscript anlegen] ******************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Sicherstellen dass das pass Store-Verzeichnis nicht existiert] ********************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Pass-Store Passwort ablegen] ******************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Sicherstellen dass das File für das verschlüsselte become-password noch nicht existiert] ******************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Become Password für sudo Rechteerweiterung anlegen] ***********************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Become Password mit ansible-vault verschlüsseln] **************************************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Sicherstellen dass das File mit der Ansible-Konfiguration nicht existiert] ********************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | TASK [Ansible Konfigurationsdatei mit den Definitionen zu privilege_escalation anlegen] *************************************</ | + | |
| - | <font style=" | + | |
| - | <font style=" | + | |
| - | PLAY RECAP ********************************************************************************************************************</ | + | |
| - | <font style=" | + | |
| - | + | ||
| - | </ | + | |
| - | </ | + | |
| {{ : | {{ : | ||
| Zeile 707: | Zeile 376: | ||
| ===== Fazit und Ausblick ===== | ===== Fazit und Ausblick ===== | ||
| <WRAP center round info 60%> | <WRAP center round info 60%> | ||
| - | Wir haben nun Dank der beiden gezeigten Ansible-Playbooks zur Konfiguration unserer Ansible-Umgebung die Möglichkeit, | + | Wir haben nun Dank der beiden gezeigten Ansible-Playbooks zur Konfiguration unserer Ansible-Umgebung die Möglichkeit, |
| </ | </ | ||