Benutzer-Werkzeuge

Webseiten-Werkzeuge


ansible

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ansible [2024-04-04 14:11:21] manfredansible [2024-04-04 16:02:21] (aktuell) – [Wenn-Sonst] manfred
Zeile 12: Zeile 12:
   * [[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_lookups.html|Lookups]]   * [[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_lookups.html|Lookups]]
  
-  > ansible-playbook -i inventory.yml -l test01 playbook_update.yml +<code python>
-  > ansible-playbook -i inventory.yml -l test02 playbook_update.yml +
- +
-<code>+
 --- ---
 - name: PlayBook Betriebssystemversion anzeigen - name: PlayBook Betriebssystemversion anzeigen
Zeile 23: Zeile 20:
   tasks:   tasks:
  
-    - name: jammy+    - name: "jammy"
       ansible.builtin.debug:       ansible.builtin.debug:
         var: ansible_facts.lsb.codename         var: ansible_facts.lsb.codename
  
-    - name: Ubuntu 22.04.4 LTS+    - name: "Ubuntu 22.04.4 LTS"
       ansible.builtin.debug:       ansible.builtin.debug:
         var: ansible_facts.lsb.description         var: ansible_facts.lsb.description
  
-    - name: Ubuntu+    - name: "Ubuntu"
       ansible.builtin.debug:       ansible.builtin.debug:
         var: ansible_facts.lsb.id         var: ansible_facts.lsb.id
  
-    - name: 22+    - name: "22"
       ansible.builtin.debug:       ansible.builtin.debug:
         var: ansible_facts.lsb.major_release         var: ansible_facts.lsb.major_release
  
-    - name: 22.04+    - name: "22.04"
       ansible.builtin.debug:       ansible.builtin.debug:
         var: ansible_facts.lsb.release         var: ansible_facts.lsb.release
 </code> </code>
  
-<file ansible inventory.yml>+  > ansible-playbook -i inventory.yml -l test01 playbook_update.yml 
 +  > ansible-playbook -i inventory.yml -l test02 playbook_update.yml 
 + 
 +<file python inventory.yml>
 --- ---
 servers: servers:
Zeile 56: Zeile 56:
 </file> </file>
  
-<file ansible include_variables.yml>+<file python include_variables.yml>
 --- ---
 ansible_python_interpreter: "/usr/bin/python3" ansible_python_interpreter: "/usr/bin/python3"
Zeile 66: Zeile 66:
 </file> </file>
  
-<file ansible include_users.yml>+<file python include_users.yml>
 --- ---
 #------------------------------------------------------------------------------# #------------------------------------------------------------------------------#
Zeile 110: Zeile 110:
 </file> </file>
  
-<file ansible playbook_update.yml>+<file python playbook_update.yml>
 --- ---
 # ----------------------------------------------------------- # -----------------------------------------------------------
Zeile 184: Zeile 184:
 </file> </file>
  
-<file ansible playbook_add_user.yml>+<file python playbook_add_user.yml>
 --- ---
 - hosts: servers - hosts: servers
Zeile 420: Zeile 420:
           enabled: true           enabled: true
 </file> </file>
 +
 +
 +
 +===== File =====
 +
 +<code python>
 +---
 +- name: Dateien und Verzeichnisse löschen
 +  file:
 +    path:  "{{ item }}"
 +    state: absent
 +  with_items:
 +    - /eine/datei.txt
 +    - /ein/verzeichnis/
 +</code>
 +
 +<code python>
 +---
 +# Inhalte von einem Verzeichnis löschen; z.B. von einem Mount-Point
 +- block:
 +  - name: Dateien im Verzeichnis einlesen
 +    find:
 +      paths: "/etc/nginx/modules-enabled"
 +      hidden: True
 +      recurse: True
 +    register: collected_files
 +
 +  - name: Sym-Links im Verzeichnis einlesen
 +    find:
 +      paths: "/etc/nginx/modules-enabled"
 +      hidden: True
 +      recurse: True
 +      file_type: link
 +    register: collected_link
 +
 +  - name: Unterverzeichnisse einlesen
 +    find:
 +      paths: "/etc/nginx/modules-enabled"
 +      hidden: True
 +      recurse: True
 +      file_type: directory
 +    register: collected_directories
 +
 +  - name: entferne Dateien und Unterverzeichnisse aus dem Verzeichnis
 +    file:
 +      path: "{{ item.path }}"
 +      state: absent
 +    with_items: >
 +      {{
 +        collected_files.files
 +        + collected_link.files
 +        + collected_directories.files
 +      }}
 +</code>
 +
 +
 +===== LineInFile =====
 +
 +<code python>
 +---
 +# -----------------------------------------------------------
 +# Tests
 +# -----------------------------------------------------------
 +- name: "Install Squid on remote hosts"
 +  gather_facts: false
 +  become: true
 +  hosts: servers
 +  vars_files:
 +    - include_variables.yml
 +
 +  # https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html#examples
 +  tasks:
 +    - name: Add a line to a file if the file does not exist, without passing regexp
 +      ansible.builtin.lineinfile:
 +        path: /tmp/testfile
 +        line: 192.168.1.99 foo.lab.net foo
 +        create: yes
 +</code>
 +
 +
 +===== BlockInFile =====
 +
 +[[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/blockinfile_module.html]]
 +
 +<code python>
 +- name: Insert/Update HTML surrounded by custom markers after <body> line
 +  ansible.builtin.blockinfile:
 +    path: /var/www/html/index.html
 +    marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
 +    insertafter: "<body>"
 +    block: |
 +      <h1>Welcome to {{ ansible_hostname }}</h1>
 +      <p>Last updated on {{ ansible_date_time.iso8601 }}</p>
 +</code>
 +
 +<code python>
 +- name: Remove HTML as well as surrounding markers
 +  ansible.builtin.blockinfile:
 +    path: /var/www/html/index.html
 +    marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
 +    block: ""
 +</code>
 +
 +<code python>
 +    - name: Textblock aus der Datei entfernen
 +      ansible.builtin.blockinfile:
 +        path: /tmp/test.txt
 +        marker: "# {mark} Sicherheitssektion"
 +        block: ""
 +        state: absent
 +</code>
 +
 +<file bash /tmp/test.txt>
 +aaa
 +bbb
 +ccc
 +# BEGIN Sicherheitssektion
 +ddd
 +eee
 +fff
 +# END Sicherheitssektion
 +</file>
 +
 +
 +===== Wenn-Sonst =====
 +
 +Wenn die Major-Versionsnummer eine "22" (von "Ubuntu 22.04") ist, dann bleibt der Wert in der Variable ''php_version'' auf "8.1", sonst wird er mit "7.2" überschrieben:
 +  ### OS-Schalter
 +- name: Ubuntu 22.04 LTS
 +  set_fact:
 +    php_version: "8.1"
 +    percona_repo_version: "80"
 +  when:
 +    ansible_facts.lsb.major_release == "22"
 +
 +
 +===== cut / split =====
 +
 +[[https://www.middlewareinventory.com/blog/ansible-split-examples/]]
 +
 +  ### ein einfaches Beispiel, hier wird die Zeichenkette einer E-Mail beim ''@'' getrennt
 +  ---
 +  - name: Ansible Split Example 1
 +    hosts: localhost
 +    tasks:
 +      - name: Split Simple String Example
 +        debug: msg={{ 'sarav@gritfy.com'|split('@')}}
 +
 +  ### in diesem Beispiel wird eine Zeichenkette bei bestimmten Zeichen (-) getrennt
 +  ---
 +  - name: Ansible Split Example 2
 +    hosts: localhost
 +    vars:
 +      var1: dos-e1-south-209334567829102380
 +    tasks:
 +      - set_fact:
 +          var2: "{{ var1.split('-') }}"
 +      - debug:
 +          msg: "{{ var2.0 }}-{{ var2.1 }}-{{ var2.2 }}"
 +
 +  ### in diesem Beispiel wird alles nach dem letzten Trennzeichen (-), einschließlich des Trennzeiches selbst, per RegEx entfernt
 +  ---
 +  - name: Ansible Split Example 3
 +    hosts: localhost
 +    vars:
 +      var: dos-e1-south-209334567829102380
 +    tasks:
 +      - debug:
 +          msg: '{{ var | regex_replace("^(.*)-[^-]+$", "\\1") }}'
 +
 +Die Ausgaben von Beispiel 2 und 3 sind identisch und lauten: ''%%    "msg": "dos-e1-south"%%''
 +
 +  Erklärung der im 3. Beispiel verwendeten RegEx:
 +  
 +  ^(.*)
 +  behalte alles vom Beginn im Zwischenspeicher (1. Zwischenspeicher)
 +  
 +  -[^-]+$
 +  finde das "-", welches von einer Zeichenkette gefolgt wird, die kein "-" enthält (kurz gesagt: finde das letzte "-") samt der Zeichen bis zum Zeilenende
 +  
 +  \\1
 +  ersetze die Zeichenkette durch den Inhalt aus dem 1. Zwischenspeicher
 +
 +  ### man kann auch mehrere Zeichenketten mit einem Spaltentrenner (-) wieder zu einer einzigen Zeichenkette zusammensetzen
 +      - debug:
 +          msg: "{{ var2[0:3] | join('-') }}"
 +
 +  ### in diesem Beispiel wird eine Datei eingelesen, zeilenweise bearbeitet und die einzelnen Zeilen werden beim '':'' getrennt und der Inhalt der ersten Spalte wird ausgegeben
 +  ---
 +  - name: Ansible Split Example 4
 +    hosts: localhost
 +    vars: 
 +      - usernames : []
 +    tasks:
 +      - name: print only domain names from Email IDs with Split
 +        set_fact:        
 +          usernames: '{{ usernames + [ item | split(":") | first ] }}'
 +        loop: "{{ lookup('file', '/etc/passwd').splitlines() | select('match','^(?!#)')}}"
 +        
 +      - debug: var=usernames
 +
 +
 +===== SED / regex_replace =====
 +
 +[[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/replace_module.html]]
 +
 +<code python>
 +    - name: Replace old hostname with new hostname (requires Ansible >= 2.4)
 +      ansible.builtin.replace:
 +        path: /etc/hosts
 +        regexp: '(\s+)old\.host\.name(\s+.*)?$'
 +        replace: '\1new.host.name\2'
 +</code>
 +
 +<code python>
 +    - name: Supports a validate command
 +      ansible.builtin.replace:
 +        path: /etc/apache/ports
 +        regexp: '^(NameVirtualHost|Listen)\s+80\s*$'
 +        replace: '\1 127.0.0.1:8080'
 +        validate: '/usr/sbin/apache2ctl -f %s -t'
 +</code>
  
  
/home/http/wiki/data/attic/ansible.1712239881.txt · Zuletzt geändert: von manfred