Как выбрать несколько файлов от удаленной машины до локального с Ansible

Я хотел бы скопировать файлы от удаленного каталога до локального каталога с Ansible, но модуль выборки позволяет мне копировать только один файл. У меня есть много серверов, с которых мне нужны файлы (тот же каталог каждый сервер), и я не делаю теперь, как сделать это с Ansible.

Какие-либо идеи?

17
задан 1 May 2017 в 06:31
8 ответов

Ziurrenik urruneko edukia erregistratu beharko duzu eta horren gainean begizta baino, horrelako zerbaitek funtzionatu beharko luke:

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

non / urruneko direktorio bidearekin aldatu beharko litzateke zure urruneko zerbitzaria eta / local / direktorioarekin zure maisuan

21
ответ дан 2 December 2019 в 20:27

Для этого следует использовать модуль синхронизации . Здесь используется потрясающая мощь rsync . Он копирует структуры файлов и каталогов любой глубины, является пуленепробиваемым и высокоэффективным - копирует только фактические измененные байты:

- name: Fetch stuff from the remote and save to local
  synchronize:  src={{ item }} dest=/tmp/ mode=pull
  with_items:
    - "folder/one"
    - "folder/two"

Ключ - это режим , параметр :

Укажите направление движения синхронизация. В режиме push источником является локальный хост или делегат; В режиме извлечения удаленный хост в контексте является источником.

27
ответ дан 2 December 2019 в 20:27
- hosts: srv-test
  tasks:
    - find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
      register: file_to_copy
    - fetch: src={{ item }} dest=/tmp
      with_items: files_to_copy.stdout_lines
0
ответ дан 2 December 2019 в 20:27

У меня недостаточно представителей для комментариев, иначе я бы добавил его.

Я использовал то, что написал Кястутис. Мне пришлось внести небольшие изменения

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

with_items - это область, которую я должен был изменить. иначе он не смог бы найти файлы.

5
ответ дан 2 December 2019 в 20:27

Исправление в приведенном выше примере

- hosts: srv-test
  tasks:
    - find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
      register: files_to_copy
    - fetch: src={{ item.path }} dest=/tmp
      with_items: "{{ files_to_copy.files }}"
2
ответ дан 2 December 2019 в 20:27

ну, ну, если вы используете последнюю доступную версию, например 2.2.1.0, я думаю, нам нужны цитаты для элемента

- name: use find to get the files list which you want to copy/fetch
  find: 
    paths: /etc/
    patterns: ".*passwd$"
    use_regex: True   
  register: file_2_fetch

- name: use fetch to get the files
  fetch:
    src: "{{ item.path }}"
    dest: /tmp/
    flat: yes
  with_items: "{{ file_2_fetch.files }}"
1
ответ дан 2 December 2019 в 20:27

Я использую это: 1. Перенос каталогов с удаленного хоста на конкретный хост

- name: Gather hosts stats from other hosts
  shell: " scp -r {{results_root_dir_src}} root@{{groups['profiling_server'][0]}}:{{results_root_dir_dest}}/abc/"
  when: "'profiling_server' not in group_names"
#It will not run on the node where the directories need to be copied.
  1. Перенос каталогов с узла на локальный
- name: Gather from host to local
  delegate_to: 127.0.0.1
  run_once: true
  become: false
  shell: "scp -r root@{{groups['profiling_server'][0]}}:{{results_root_dir}} ./results_local_location "

inventory

[nodes]
server1
server2
server3
[profiling_server]
server1

0
ответ дан 2 December 2019 в 20:27

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

---
#NMON PERFORMANCE REPORT FETCH
  - hosts: all
    gather_facts: yes
    become: yes
    vars_prompt:
      - name: "date_input"
        prompt: "Enter date to fetch nmon report (YYMMDD) = "
        private: no

    tasks:
      - pause:
          prompt: "\n\n Enter date to fetch nmon report?\n\n--------------------------------------\n\n1. Fetch nmon:\n2. Exist from Playbook:\n\nPlease select Action: \n--------------------------------------\n"
        register: menu

      - set_fact:
          option: "{{ menu.user_input }}"

      
      - name: Find-out nmon report for given date  {{ inventory_hostname }}
        shell: |
          ls -l /var/nmon/data/* | grep -i {{ date_input }} |awk '{print $NF}'
        register: nmon_files_to_copy
        when: option == "1"

      - name: 'Fetch the NMON Report {{ date_input }} output from server {{ inventory_hostname }}'
        fetch:
          src: "{{ item }}"
          dest: /tmp/
          flat: yes
        with_items: "{{ nmon_files_to_copy.stdout_lines }}"
        when: option == "1"
 
1
ответ дан 21 July 2020 в 08:40

Теги

Похожие вопросы