如何从清单中获取组主机

时间:2020-03-17 19:10:58

标签: ansible

我正在尝试在多台服务器上构建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:

2 个答案:

答案 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