需求:需要拉去线上所有日志到本地

/opt/ar/server_group/目录下一级,是程序模块名字,程序模块名字下面是有log,log_data目录,是需要拉去的日志目录
某台主机的目录格式
image.png

实现思路:

1.shell匹配所需要的日志目录

  1. ls /opt/ar/server_group/*/log* -d

2.将这些目录注入ansible变量,成为一个list

3.使用synchronize模块,循环这些list,拉去到本机,以主机名区分。

相关ansible-playbook实现脚本:

get_log.yml

- hosts: ar
  remote_user: centos
  become: yes
  become_user: root
  become_method: sudo
  gather_facts: no
  tasks:
  - name: retrieve the list of home directories
    shell: ls /opt/ar/server_group/*/log* -d
    register: home_dirs

  #- debug: var=home_dirs.stdout_lines

  - name: pull log
    #shell: echo "{{ item }}"
    synchronize: src={{ item }} dest=/opt/logs/{{inventory_hostname}}/ rsync_opts="-Rarzpv" mode=pull
    with_items: "{{home_dirs.stdout_lines}}"