我正在尝试使用linux-system角色/timesync与NTP服务器的动态列表(依赖于group_vars或host_vars )。
作为基地,我有:
在主机vars/server1.yml中
serverip:
- '1.1.1.1'
- '2.2.2.2'
- '3.3.3.3'在主机vars/server2.yml中
serverip:
- '1.1.1.1'
- '2.2.2.2'
- '3.3.3.3'在我的角色/set-ntp/任务/main.yml中:
- name: Legacy set_fact style
set_fact:
timesync_ntp_servers:
- hostname: "{{ serverip[0] }}"
iburst: yes
- hostname: "{{ serverip[1] }}"
iburst: yes
- hostname: "{{ serverip[3] }}"
iburst: yes
- debug:
var: timesync_ntp_servers
- include_role:
name: linux-system-roles.timesync还有我的playbook.yml
- name: Configure servers
hosts: server1,server2
roles:
- set-ntp
- other-role1
- other-role2
- .....而且它运行得很好,因为timesync_ntp_servers看起来像:
TASK [set-ntp : debug] ***********************************************************************************************************************************************************************************
ok: [server1] => {
"timesync_ntp_servers": [
{
"hostname": "1.1.1.1",
"iburst": true
},
{
"hostname": "2.2.2.2",
"iburst": true
},
{
"hostname": "3.3.3.3",
"iburst": true
}
]
}
ok: [server2] => {
"timesync_ntp_servers": [
{
"hostname": "1.1.1.1",
"iburst": true
},
{
"hostname": "2.2.2.2",
"iburst": true
},
{
"hostname": "3.3.3.3",
"iburst": true
}
]
}当我需要将服务器的NTP IP更改为不同的计数时,就会出现问题,如host_vars/server1.yml中的
serverip:
- '1.1.1.1'
- '2.2.2.2'
- '3.3.3.3'在主机vars/server2.yml中
serverip:
- '1.1.1.1'
- '2.2.2.2'
- '3.3.3.3'
- '4.4.4.4'我的静态变体现在不能用了。我尝试了一些googe页面的use循环,并创建了以下内容:
- set_fact:
loop_item:
- hostname: "{{ item }}"
iburst: yes
loop: "{{ serverip }}"
register: loop_list
- name: Loop style
set_fact:
timesync_ntp_servers: "{{ loop_list.results | map(attribute='ansible_facts.loop_item') | list }}"
- debug:
var: timesync_ntp_servers但是变量"timesync_ntp_servers“现在对每个项对有额外的嵌套度[]:
TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server1] => {
"timesync_ntp_servers": [
[
{
"hostname": "1.1.1.1",
"iburst": true
}
],
[
{
"hostname": "2.2.2.2",
"iburst": true
}
],
[
{
"hostname": "3.3.3.3",
"iburst": true
}
]
]
}在这种情况下,/timesync模块不能工作,它看不到变量。怎么解决,我不知道。
发布于 2022-10-21 17:42:10
loop_item变量定义了一个列表。如果你把它定义为一个白痴,我认为它应该解决你的问题。
loop_item:
hostname: "{{ item }}"
iburst: yeshttps://stackoverflow.com/questions/73986803
复制相似问题