我正在尝试在多台服务器上构建rsync类型的备份。我想在笔记本电脑上为本地服务器创建一个备份目录,然后对其进行备份。如果目录不存在,请创建它。
我首先从本地调用剧本,以便可以在本地创建目录,然后将剧本更改为备份组。问题是我不知道如何在备份组中填充主机名。当我在下面运行剧本时,唯一创建的目录是localhost。我需要为备份组中的每个主机创建一个本地目录并对其进行备份。使这项工作最简单的方法是什么?
- hosts: localhost
become: yes
#strategy: free
pre_tasks:
vars:
- backupDir: "/Users/user1/Desktop/Fusion/backups/{{ inventory_hostname }}/"
roles:
tasks:
- name: Check if Backup Folder Exisits.
stat:
path: "{{ backupDir }}"
register: my_folder
- name: "Ansible Create directory if not exists"
file:
path: "{{ backupDir }}"
state: directory
when: my_folder.stat.exists == false
- hosts: backup
tasks:
- name: Rsync Directories from Remote to Local
synchronize:
mode: pull
src: "{{ item }}"
dest: "{{ backupDir }}/{{ansible_date_time.date}}.back"
with_items:
- "/home/user1/"
- "/var/www/html/"
- "/root/"
when: my_folder.stat.exists
handlers:
答案 0 :(得分:0)
在清单文件中,您可以创建与正在呼叫的主机相关的组。
SELECT fo.id, fo.ClientID, fo.Begin_Date, fo.End_Date, fo.Product, 'Match'
FROM clients AS fo
INNER JOIN clients AS fs ON fo.End_Date = fs.Begin_Date AND fo.Product = fs.Product AND fo.ClientID = fs.ClientID
UNION ALL
SELECT fo.id, fo.ClientID, fo.Begin_Date, fo.End_Date, fo.Product, 'No-Match'
FROM clients AS fo
LEFT JOIN clients AS fs ON fo.End_Date = fs.Begin_Date AND fo.Product = fs.Product AND fo.ClientID = fs.ClientID
WHERE fs.id IS NULL
答案 1 :(得分:0)
在这种情况下,我认为您正在寻找循环模块。
类似这样的东西。
- name: "Ansible Create directory if not exists"
file:
path: "{{ backupDir }}"
state: directory
when: my_folder.stat.exists == false
loop: {{ inventory_hostname }}
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html