tech:notes_ansible_module_raw
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| tech:notes_ansible_module_raw [2025/11/17 15:45] – Jean-Baptiste | tech:notes_ansible_module_raw [2026/05/28 13:19] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes Ansible module raw | ||
| + | |||
| + | Le module **raw** permet de passer des commandes en SSH directement sans avoir besoin de Python installé sur la cible. | ||
| + | |||
| + | En général se module est justement utilisé pour installer Python. | ||
| + | Il est aussi utile quand la cible contient une version de Python obsolète. | ||
| + | |||
| + | |||
| + | ## Exemple de déploiement d'un script shell avec Raw | ||
| + | |||
| + | Sur une vielle RedHat 5 (Python obsolète) les fichiers crées par **raw** sont systématiquement tronqués à 6258 bytes. | ||
| + | De plus certains caractères spéciaux du script shell empêche son déploiement via un heredoc. | ||
| + | |||
| + | Pour contourner ces deux limitations nous allons : | ||
| + | * Découper le fichier en paquets de 6258 bytes | ||
| + | * Encoder le fichier en base64 | ||
| + | |||
| + | `play-deploy-shell-old-linux.yml` | ||
| + | |||
| + | ~~~yaml | ||
| + | # | ||
| + | |||
| + | --- | ||
| + | |||
| + | - hosts: all | ||
| + | gather_facts: | ||
| + | environment: | ||
| + | PATH: / | ||
| + | tasks: | ||
| + | - name: " | ||
| + | ignore_unreachable: | ||
| + | block: | ||
| + | - name: " | ||
| + | ansible.builtin.setup: | ||
| + | |||
| + | - name: set_fact python_value | ||
| + | ansible.builtin.set_fact: | ||
| + | python_value: | ||
| + | |||
| + | rescue: | ||
| + | - name: set_fact with_raw_module | ||
| + | ansible.builtin.set_fact: | ||
| + | with_raw_module: | ||
| + | |||
| + | - name: block when with_raw_module | ||
| + | when: with_raw_module is defined and with_raw_module | ||
| + | block: | ||
| + | - name: DEBUG | ||
| + | ansible.builtin.debug: | ||
| + | var: item | ||
| + | with_items: | ||
| + | - "{% for host in hostvars %}{{ host }}{% endfor %}" | ||
| + | |||
| + | - name: Split file | ||
| + | ansible.builtin.shell: | ||
| + | cat script.sh | gzip | openssl base64 | split -b 6258 --additional-suffix .asc - script- | ||
| + | args: | ||
| + | chdir: files | ||
| + | delegate_to: | ||
| + | |||
| + | - name: Find | ||
| + | ansible.builtin.find: | ||
| + | file_type: file | ||
| + | paths: files/ | ||
| + | patterns: ' | ||
| + | register: f | ||
| + | delegate_to: | ||
| + | |||
| + | - name: Slurp | ||
| + | ansible.builtin.slurp: | ||
| + | src: "{{ item }}" | ||
| + | register: slurp_shell_code | ||
| + | delegate_to: | ||
| + | with_items: | ||
| + | - "{{ f.files | map(attribute=' | ||
| + | |||
| + | - name: Copy shell script | ||
| + | ansible.builtin.raw: | ||
| + | cat > script.sh.asc.{{ ansible_loop.index0 }} << | ||
| + | {{ item.content | b64decode }} | ||
| + | EOF | ||
| + | args: | ||
| + | executable: /bin/bash | ||
| + | loop_control: | ||
| + | extended: true | ||
| + | with_items: | ||
| + | - "{{ slurp_shell_code.results }}" | ||
| + | |||
| + | - name: Mkdir / | ||
| + | ansible.builtin.raw: | ||
| + | |||
| + | - name: Merge file | ||
| + | ansible.builtin.raw: | ||
| + | |||
| + | - name: Clean temp files | ||
| + | ansible.builtin.raw: | ||
| + | |||
| + | - name: Mv shell script | ||
| + | ansible.builtin.raw: | ||
| + | |||
| + | - name: Launch script | ||
| + | ansible.builtin.raw: | ||
| + | ~~~ | ||
| + | |||
