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

Скопировать локальный файл, если он существует, используя

Я работаю над проектом, и мы используем возможность создания развернуть кластер серверов. Одна из задач, которую я должен выполнить, - скопировать локальный файл на удаленный хост, только если этот файл существует локально. Теперь я пытаюсь решить эту проблему, используя этот

- hosts: 127.0.0.1 
  connection: local
  tasks:
    - name: copy local filetocopy.zip to remote if exists
    - shell: if [[ -f "../filetocopy.zip" ]]; then /bin/true; else /bin/false; fi;
      register: result    
    - copy: src=../filetocopy.zip dest=/tmp/filetocopy.zip
      when: result|success

Bu это не работает со следующим сообщением: ОШИБКА: атрибут "действие" или "local_action" отсутствует в задаче "скопируйте локальный файл filetocopy.zip на удаленный, если существует"

Я попытался создать это, если с командной задачей. Я уже пытался создать эту задачу с помощью local_action, но я не мог заставить ее работать. Все образцы, которые я нашел, не рассматривают оболочку в local_action, есть только образцы команды, и ни у кого из них нет ничего, кроме команды. Есть ли способ выполнить эту задачу, используя недоступную?

4b9b3361

Ответ 1

Измените первый шаг на следующем:

- name: copy local filetocopy.zip to remote if exists
  local_action: stat path="../filetocopy.zip"
  register: result    

Ответ 2

Более полный ответ:

Если вы хотите проверить существование локального файла перед выполнением какой-либо задачи, вот подробный фрагмент:

- name: get file stat to be able to perform a check in the following task
  local_action: stat path=/path/to/file
  register: file

- name: copy file if it exists
  copy: src=/path/to/file dest=/destination/path
  when: file.stat.exists

Если вы хотите проверить существование удаленного файла перед выполнением какой-либо задачи, вот путь:

- name: get file stat to be able to perform check in the following task
  stat: path=/path/to/file
  register: file

- name: copy file if it exists
  copy: src=/path/to/file dest=/destination/path
  when: file.stat.exists

Ответ 3

Если вы не настроите две задачи, вы можете использовать is_file для проверки наличия локальных файлов:

tasks:
- copy: src=/a/b/filetocopy.zip dest=/tmp/filetocopy.zip
  when: '/a/b/filetocopy.zip' | is_file

Путь относится к каталогу воспроизведения, поэтому использование магической переменной role_path рекомендуется, если вы ссылаетесь на файлы внутри каталога ролей.

Ссылка: http://docs.ansible.com/ansible/latest/playbooks_tests.html#testing-paths

Ответ 4

Fileglob позволяет искать в конечном итоге существующий файл.

- name: copy file if it exists
  copy: src="{{ item }}" dest=/destination/path
  with_fileglob: "/path/to/file"

Ответ 5

Как насчет этого?

tasks:
- copy: src=../filetocopy.zip dest=/tmp/filetocopy.zip
  failed_when: false

Это скопирует файл в цель, если он существует локально. Если он не существует, он просто ничего не делает, поскольку ошибка игнорируется.