Ansible-Befehle `get_url` und `unarchive` idempotent machen

Lesezeit: 2 Minuten

Ich habe zwei Ansible-Tasks, die ein Archiv herunterladen (z. B. die neueste WordPress-Version) und dieses Archiv extrahieren.

- name: Download WordPress
  tags:
    - wordpress
    - wordpress:install
  get_url: "url=http://wordpress.org/wordpress-{{ wordpress_version }}.tar.gz dest={{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"

- name: Extract archive
  tags:
    - wordpress
    - wordpress:install
  unarchive:
    src: "{{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"
    dest: "{{ www_docroot }}"
    remote_src: True

Ich bin neu im Ansible-Lernen und versuche herauszufinden: Wie kann ich das idempotent machen, damit es –

  1. Lädt eine Datei nicht herunter, wenn eine Datei mit demselben Namen bereits vorhanden ist oder
  2. Extrahiert / expandiert das gzip-Archiv nicht, wenn der angegebene Zielordner bereits existiert

Vielen Dank!

bedenke die Macht Option für die erste Abfrage ( get_url ) . bedenke die schafft Option für die zweite Abfrage ( unarchive ) .

Beispielcode, Sie brauchen so etwas?

- name: Download WordPress
  tags:
    - wordpress
    - wordpress:install
  get_url: 
    url : "http://wordpress.org/wordpress-{{ wordpress_version }}.tar.gz dest={{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"
    dest: "{{ wordpress_version }}/wordpress-{{ wordpress_version }}.tar.gz"
    force : no
- name: Extract archive
  tags:
    - wordpress
    - wordpress:install
  unarchive:
    src: "{{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"
    dest: "{{ www_docroot }}"
    creates : "{{ www_docroot }}/wordpress"
    remote_src: True

  • get_url verwenden force: no standardmäßig, sodass sich in diesem Fall nichts ändert

    – Kyrill

    11. Juli 2019 um 15:22 Uhr

get_url Modul verhält sich bereits wie gewünscht.

Sie können den zweiten Schritt komplett überspringen, wenn im ersten Schritt nichts heruntergeladen wird. Um das zu erreichen register Rückgabewert der ersten Aufgabe und prüfe, ob er sich in der zweiten mit ändert when. In Ihrem Beispiel wird es sein:

- name: Download WordPress
  tags:
    - wordpress
    - wordpress:install
  get_url: "url=http://wordpress.org/wordpress-{{ wordpress_version }}.tar.gz dest={{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"
  register: download_wordpress

- name: Extract archive
  tags:
    - wordpress
    - wordpress:install
  unarchive:
    src: "{{ www_docroot }}/wordpress-{{ wordpress_version }}.tar.gz"
    dest: "{{ www_docroot }}"
    remote_src: True
  when: download_wordpress.changed

1100430cookie-checkAnsible-Befehle `get_url` und `unarchive` idempotent machen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy