Ansible:使用jinja模板将一个服务器主机名复制到另一个服务器主机名



我有两个windows服务器,假设是serverA和serverB。我需要将serverA的主机名作为变量,并将其替换为Jinja模板,并将其复制到serverB中。我无法找到任何解决方案如何在Ansible中使用服务器的依赖。在这种情况下有什么解决方案吗?

我尝试使用ansible.built .hostname,但它不允许注册主机名,除非只允许更改

- name: Set a hostname
ansible.builtin.hostname:
name: web01

在哪里收集信息

库存

第一种方法是将相关主机名直接放在目录中:

inventory/hosts.yml

---
all:
hosts:
nameOfServerA.company.loc:
nameOfServerB.company.loc:

然后可以分别使用{{ inventory_hostname }}{{ inventory_hostname_short }}检索当前目标的短主机名或完整主机名

目标服务器信息

如果出于某种原因,您的库存中只有别名,或者您的库存名称与库存中的主机不匹配,则可以从收集的事实中检索当前配置的主机名。当然你的游戏需要在gather_facts: true(默认)下运行。然后可以在{{ ansible_hostname }}变量

中检索当前主机的信息

获取其他主机的信息

这与从其他主机获取任何其他事实/var没有什么不同,例如在剧本指南中解释过。下面是一个简短的playbook.yml示例,用于上述情况:

---
- name: Make sure we gather facts from all hosts in inventory
# Note: this play is only necessary for gathering the hostname from facts.
# Getting it from inventory does not require to gather_facts.
hosts: all
gather_facts: true  # default so you can skip it if you want.
- name: Display hostname for serverB from serverA
hosts: nameOfServerA.company.loc
# Facts are already gathered
gather_facts: false
vars:
target: nameOfServerB.company.loc
tasks:
- name: "Display info for {{ target }}"
ansible.builtin.debug:
msg:
- inventory_hostname is {{ hostvars[target].inventory_hostname }}
- inventory_hostname_short is {{ hostvars[target].inventory_hostname_short }}
- ansible_hostname is {{ hostvars[target].ansible_hostname }}

用:ansible-playbook -i inventory/ playbook.yml执行上面的命令应该会得到如下的结果:

PLAY [Make sure we gather facts from all hosts in inventory] **********************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************************************************************
ok: [nameOfServerB.company.loc]
ok: [nameOfServerA.company.loc]
PLAY [Display hostname for serverB from serverA] **********************************************************************************************************************************************************
TASK [Display info for nameOfServerB.company.loc] ********************************************************************************************************************************************************************************************
ok: [nameOfServerA.company.loc] => {
"msg": [
"inventory_hostname is nameOfServerB.company.loc",
"inventory_hostname_short is nameOfServerB",
"ansible_hostname is <some hostname configured on serverB>"
]
}
PLAY RECAP ************************************************************************************************************************************************************************************************
nameOfServerA.company.loc  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
nameOfServerB.company.loc  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

相关内容

  • 没有找到相关文章

最新更新