Подтвердить что ты не робот

Как я могу проверить, был ли файл загружен в недоступном

Я загружаю файл с wget из незаменимого.

  - name: Download Solr
    shell: chdir={{project_root}}/solr wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip

но я хочу сделать это только в том случае, если zip файл не существует в этом месте. В настоящее время система загружает его каждый раз.

4b9b3361

Ответ 1

Если у вас нет причин использовать wget, почему бы не использовать модуль get_url. Он будет проверять, нужно ли загружать файл.

---
- hosts        : all
  gather_facts : no
  tasks:
   - get_url:
       url="http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip"
       dest="{{project_root}}/solr-4.7.0.zip"

ПРИМЕЧАНИЕ: Если вы поместите каталог, а не полный путь в dest ansible, он все равно загрузит файл во временный каталог, но проведет проверку md5, чтобы решить, следует ли копировать в dest реж.

И если вам нужно сохранить состояние загрузки, вы можете использовать:

---
- hosts        : all
  gather_facts : no
  tasks:
   - get_url:
       url="http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip"
       dest="{{project_root}}/solr-4.7.0.zip"
     register: get_solr

   - debug: 
       msg="solr was downloaded"
     when: get_solr|changed

Ответ 2

Примечание. Этот ответ охватывает общий вопрос "Как проверить существование файла в недоступном", а не конкретный случай загрузки файла.

Проблемы с предыдущими ответами с использованием действий "команда" или "оболочка" в том, что они не будут работать в режиме -check. На самом деле, первое действие будет пропущено, а следующее будет выходить из состояния "когда: solr_exists.rc!= 0" (из-за того, что переменная не определена).

Так как Ansible 1.3, существует более прямой способ проверки существования файла - с использованием модуля stat. Конечно, он также хорошо работает как "local_action" для проверки локального существования файла:

- local_action: stat path={{secrets_dir}}/secrets.yml
  register: secrets_exist

- fail: msg="Production credentials not found"
  when: secrets_exist.stat.exists == False

Ответ 3

Многие модули уже знают о результатах и ​​будут пропущены, если они уже существуют, например file или geturl. Другие, такие как command, имеют параметр creates, который пропустит эту команду, если этот файл уже существует (или не существует, если вы используете параметр removes).

Итак, вы должны сначала проверить доступные модули, если они уже достаточно умны. Если нет: рекомендую модуль stats. Преимущество над другим решением: в выводе нет "красных ошибок, но проигнорировано".

- name: Check MySQL data directory existence
  stat: path=/var/lib/mysql-slave
  register: mysql_slave_data_dir

- name: Stop MySQL master to copy data directory
  service: name=mysql state=stopped
  sudo: yes 
  when: not mysql_slave_data_dir.stat.exists

Ответ 4

Здесь есть как минимум два варианта.

Вы можете зарегистрировать переменную, если файл существует, а затем использовать условие when для выполнения команды при условии, что файл еще не существует:

- command: /usr/bin/test -e {{project_root}}/solr/solr-4.7.0.zip
  register: solr_zip
  ignore_errors: True
- name: Download Solr
  shell: chdir={{project_root}}/solr /usr/bin/wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip
  when: solr_zip|failed

Вы также можете использовать модуль команд с опцией creates:

- name: Download Solr
  command: /usr/bin/wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip chdir={{project_root}}/solr  creates={{project_root}}/solr/solr-4.7.0.zip

Ответ 5

Таким образом, вы можете выполнить эту проверку, зарегистрировав переменную из команды и проверив ее код возврата. (Вы также можете сделать это, проверив его stdout)

- name: playbook
  hosts: all
  user: <your-user>

  vars:
    project_root: /usr/local

  tasks:

    - name: Check if the solr zip exists.
      command: /usr/bin/test -e {{project_root}}/solr/solr-4.7.0.zip
      ignore_errors: True
      register: solr_exists

    - name: Download Solr
      shell: chdir={{project_root}}/solr wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip
      when: solr_exists.rc != 0

В основном это говорит о том, что если команда /usr/bin/test -e {{project_root}}/solr/solr-4.7.0.zip возвращает код, который не равен 0, то есть он не существует, то выполните задачу Download Solr

Надеюсь, что это поможет.

Ответ 6

Эта статья может быть полезна

Из этого выйдет следующий пример:

tasks:
  - shell: if [[ -f "/etc/monitrc" ]]; then /bin/true; else /bin/false; fi
    register: result
    ignore_errors: True

  - command: /bin/something
    when: result|failed

  - command: /bin/something_else
    when: result|success

  - command: /bin/still/something_else
    when: result|skipped

Ответ 7

Используйте аргумент creates

- name: Download Solr
  shell: creates={{working_directory}}/solr/solr-4.7.0.zip chdir={{working_directory}}/solr wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip