ansible - 如何从库存中获取组主机
问题描述
我正在尝试在多台服务器上构建 rsync 类型的备份。我想在我的笔记本电脑上本地为每台服务器创建一个备份目录,然后备份它们。如果该目录不存在,请创建它。
我首先在本地调用 playbook,以便可以在本地创建目录,然后将 playbook 更改为备份组。问题是我不知道如何填充备份组中的主机名。当我在下面运行剧本时,唯一创建的目录是 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:
解决方案
在您的清单文件中,您可以创建与您正在调用的主机相关联的组。
[localhost]
127.0.0.1
[backup]
host1
host2
host3
推荐阅读
- java - 如何初始化数组字段的元素?
- sql - 在 SQL 中提取整个列的两个分隔符之间的值
- amazon-cloudfront - Apple-app-site-association 未验证“错误无法解析应用程序站点关联”
- powershell - 用于删除包含其他进程使用的 jar 的目录的 Powershell 脚本
- perl - 无法在 Windows 上安装 DBD-mysql
- scala - 在scala中,“扁平化”产品类型的最简单方法是什么?
- entity-framework - 如何结合代码优先和数据库优先方法
- javascript - Angular.js 应用程序:消除 #! 来自我的单个帖子的 URL,同时保持 slug
- javascript - 更新反应性属性时,Vuetify v-alert 未显示
- excel - 使用命令按钮清除合并单元格、特定列、每隔一行和未知的最后一行的内容