在ansible中逐个主机执行整个yaml任务文件
我想运行在ansible中逐个主机执行整个yaml任务文件,ansible,Ansible,我想运行test.yaml,它包含很多任务。我希望清单中的第一台主机在移动到下一台主机之前运行test.yaml中的所有任务。但实际结果是,test.yml中的每个任务一次在所有三台主机上运行。如何实现这个功能 这是我的发明 [host1] 192.168.1.1 192.168.1.2 192.168.1.3 这是我的任务文件 --- # test.yaml - name: task1 shell: echo task1 - name: task2 shell: echo task
test.yaml
,它包含很多任务。我希望清单中的第一台主机在移动到下一台主机之前运行test.yaml
中的所有任务。但实际结果是,test.yml
中的每个任务一次在所有三台主机上运行。如何实现这个功能
这是我的发明
[host1]
192.168.1.1
192.168.1.2
192.168.1.3
这是我的任务文件
---
# test.yaml
- name: task1
shell: echo task1
- name: task2
shell: echo task2
- name: task3
shell: echo task3
这就是我如何在我的剧本中包含任务文件的方式
- name: Multiple machine loops include
include: test.yaml
delegate_to: "{{item}}"
loop: "{{ groups['host1'] }}"
实际结果是
任务[包括多个机器循环]**********************************************************************************************************************************************************
包括:/home/learn/main.yml,用于192.168.1.1、192.168.1.2、192.168.1.3=>(项目=192.168.1.1)
包括:/home/learn/main.yml,用于192.168.1.1、192.168.1.2、192.168.1.3=>(项目=192.168.1.2)
包括:/home/learn/main.yml,用于192.168.1.1、192.168.1.2、192.168.1.3=>(项目=192.168.1.3)
任务[task1]*********************************************************************************************************************************************************
ok:[192.168.11.1]
确定:[192.168.11.2]
ok:[192.168.11.3]
任务[task2]*********************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
任务[task3]******************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
任务[task1]*******************************************************************************************************************************************************
ok:[192.168.11.1]
确定:[192.168.11.2]
ok:[192.168.11.3]
任务[task2]********************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
任务[task3]*********************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
任务[task1]*********************************************************************************************************************************************************
ok:[192.168.11.1]
确定:[192.168.11.2]
ok:[192.168.11.3]
任务[task2]********************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
任务[task3]*********************************************************************************************************************************************************
更改:[192.168.11.1]
更改:[192.168.11.2]
更改:[192.168.11.3]
重演***********************************************************************************************************************************************************
192.168.11.1:正常=12更改=6无法访问=0失败=0
192.168.11.2:正常=12更改=6无法访问=0失败=0
192.168.11.3:正常=12更改=6无法访问=0失败=0
我所期望的是:
任务[task1]***********************************************************************************************************************************************************
更改:[192.168.1.1]
任务[task2]***********************************************************************************************************************************************************
更改:[192.168.1.1]
任务[task3]***********************************************************************************************************************************************************
更改:[192.168.1.1]
任务[task1]***********************************************************************************************************************************************************
更改:[192.168.1.2]
任务[task2]***********************************************************************************************************************************************************
更改:[192.168.1.2]
任务[task3]***********************************************************************************************************************************************************
更改:[192.168.1.3]
任务[task1]***********************************************************************************************************************************************************
更改:[192.168.1.3]
任务[task2]***********************************************************************************************************************************************************
更改:[192.168.1.3]
任务[task3]***********************************************************************************************************************************************************
更改:[192.168.1.3]
未授权“包括”。引用
请注意,委派所有任务、调试、添加主机、包括等始终在控制器上执行是没有意义的
要查看发生了什么,请运行下面的简化剧本
- hosts: localhost
tasks:
- name: Multiple machine loops include
include: test.yaml
delegate_to: "{{ item }}"
loop: "{{ groups['host1'] }}"
用“test.yaml”
例如,与库存
host1:
hosts:
test_01:
test_02:
test_03:
下面的简略输出显示,所包含的任务在本地主机上运行,尽管该任务已委托给另一台主机
TASK [debug]
ok: [localhost] => {
"msg": "localhost test_01"
}
TASK [debug]
ok: [localhost] => {
"msg": "localhost test_02"
}
TASK [debug]
ok: [localhost] => {
"msg": "localhost test_03"
}
PLAY RECAP
localhost : ok=6 changed=0 unreachable=0 failed=0
解决方案是将“委派对象”移动到包含的任务。下面的剧本
- hosts: localhost
tasks:
- name: Multiple machine loops include
include: test.yaml
loop: "{{ groups['host1'] }}"
使用包含的任务
- command: hostname
register: result
delegate_to: "{{ item }}"
- debug: var=result.stdout
给出(节略):
您试图做的是在一组主机上连续播放一组任务。v
- command: hostname
register: result
delegate_to: "{{ item }}"
- debug: var=result.stdout
TASK [command]
changed: [localhost -> test_01]
TASK [debug]
ok: [localhost] => {
"result.stdout": "test_01.example.com"
}
TASK [command]
changed: [localhost -> test_02]
TASK [debug]
ok: [localhost] => {
"result.stdout": "test_02.example.com"
}
TASK [command]
changed: [localhost -> test_03]
TASK [debug]
ok: [localhost] => {
"result.stdout": "test_03.example.com"
}
PLAY RECAP
localhost : ok=9 changed=3 unreachable=0 failed=0
[my_group]
host1 ansible_connection=local
host2 ansible_connection=local
host3 ansible_connection=local
---
- name: Serial run demo
hosts: my_group
serial: 1
tasks:
- name: task1
shell: echo task 1
- name: task2
shell: echo task 2
- name: task3
shell: echo task 3
---
- name: task1
shell: echo task 1
delegate_to: "{{ delegate_host }}"
- name: task2
shell: echo task 2
delegate_to: "{{ delegate_host }}"
- name: task3
shell: echo task 3
delegate_to: "{{ delegate_host }}"
---
- name: Include loop demo
hosts: localhost
gather_facts: false
tasks:
- name: Include needed tasks for each hosts
include_tasks: test_include.yml
loop: "{{ groups['my_group'] }}"
loop_control:
loop_var: delegate_host