要为每个主机生成递增间隔,可以使用Ansible的with_sequence
循环和start
参数来实现。下面是一个代码示例:
- name: Generate incremental interval for each host
hosts: all
gather_facts: false
tasks:
- name: Generate interval
shell: echo "{{ hostvars[item].ansible_hostname }}: {{ (item|int * 10) + 10 }}"
with_sequence: start=0
register: interval_output
- name: Print interval
debug:
var: interval_output.results
在上面的示例中,通过with_sequence
循环从0开始生成一个递增序列。然后,使用shell
模块将主机名和计算出的递增间隔打印出来,并将结果存储在interval_output
变量中。最后,使用debug
模块打印出interval_output.results
。
运行以上示例的结果可能如下所示:
TASK [Print interval] **********************************************************
ok: [host1] => {
"interval_output.results": [
{
"ansible_loop_var": "item",
"changed": true,
"cmd": "echo \"host1: 10\"",
"delta": "0:00:00.002310",
"end": "2021-07-01 09:00:00.000000",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "echo \"host1: 10\"",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"item": "0",
"rc": 0,
"start": "2021-07-01 09:00:00.000000",
"stderr": "",
"stderr_lines": [],
"stdout": "host1: 10",
"stdout_lines": [
"host1: 10"
]
},
{
"ansible_loop_var": "item",
"changed": true,
"cmd": "echo \"host2: 20\"",
"delta": "0:00:00.002295",
"end": "2021-07-01 09:00:00.000000",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "echo \"host2: 20\"",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"item": "1",
"rc": 0,
"start": "2021-07-01 09:00:00.000000",
"stderr": "",
"stderr_lines": [],
"stdout": "host2: 20",
"stdout_lines": [
"host2: 20"
]
}
]
}
从上面的示例输出中,我们可以看到每个主机都生成了递增的间隔,根据主机名和递增序列计算而来。