Ansible webserver 备份:拉取其他主机变量来生成备份脚本

Ansible webserver 备份:拉取其他主机变量来生成备份脚本

我正在使用 Ansible 来管理一组不同的云 Linux 服务器。我编写了一个脚本,通过 rync 通过 ssh 将备份拉到备份服务器。所有主机变量都在host_vars/example.com.yml文件中进行管理,每个文件包含以下内容:

ansible_host: example.com
ansible_user: user
ansible_port: 22
ansible_ssh_private_key_file: "~/.ssh/id_ed25519"

它们在文件中分组hosts如下:

[webservers]
example.com
foo.com
bar.com

[backup]
backupserver.domain.com

我有一个备份组的备份角色,其中包含由 rsync 脚本组成的 backupserver.domain.com 服务器,但我必须手动将 ansible host_vars 复制到该备份角色中,以生成包含文件中已有所有信息的 SSH 配置host_vars/*.yml

所以我的问题是,在角色中,是否可以迭代当前主机和组之外的另一个主机的主机变量?类似于:

{% for item in var_hosts_group %}
Host {{ item.ansible_host }}
   Hostname {{ item.ansible_host }}
   User {{ item.ansible_user }}
   Port {{ item.ansible_port }}
   IdentityFile {{ item.ansible_ssh_private_key_file }}

{% endfor %}

那么 rsync 脚本将是:

{% for item in var_hosts_group %}
rsync -a {{ item.ansible_host }}:/remotebackup /localbackup
{% endfor %}

这将使我能够在备份服务器上为 Web 服务器生成必要的模板/脚本,并保持一切顺利。这可能吗?谢谢!

答案1

问:是否可以遍历当前主机和组之外的另一个主机的主机变量?

(我已经改变了group/groups。一个主持人可以是多个组的成员。)

答:是的,有可能。主机变量是剧中所有主持人及其变量的字典,例如

{% for item in ansible_play_hosts_all %}
Host {{ hostvars[item]['ansible_host'] }}
   Hostname {{ hostvars[item]['ansible_host'] }}
   User {{ hostvars[item]['ansible_user'] }}
   Port {{ hostvars[item]['ansible_port'] }}
   IdentityFile {{ hostvars[item]['ansible_ssh_private_key_file'] }}
{% endfor %}

“该剧针对的所有主持人名单”

  • 当然,如果主机不是该游戏的目标,Ansible 对此就一无所知。

  • 你很可能想要delegate_torun_once这样的任务。

相关内容