Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ansible中逐个主机执行整个yaml任务文件_Ansible - Fatal编程技术网

在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