Ansible 主机首选项
Ansible hosts preference
我正在尝试 运行 在远程节点集上执行一些 yum 命令。但它们需要按特定顺序 运行 而不是并行。
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness:database-standby:database-master
tasks:
- name: Installating Java 1.8 on Witness
yum: name=java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3 state=present
notify: set unlimited java 1.8 security
- name: Remove Java 1.7
shell: rm -f /usr/lib/jvm/$(ls /usr/lib/jvm | grep "java-1.7")/jre/lib/security/*.jar
- name: Remove SDK
yum: name=java-1.7.0-openjdk.x86_64 state=absent
- name: Remove Headless
yum: name=java-1.7.0-openjdk-headless.x86_64 state=absent
我的环境文件是 ::
[database-master]
172.X.X.1
[database-standby]
172.X.X.2
[database-witness]
172.X.X.3
在上面的剧本中我指定了:
hosts: database-witness:database-standby:database-master
这是否意味着 yum 命令集将首先在 database-witness
上 运行 然后在 database-standby
上然后在 database-master
.
上
他们将运行在不同主机上并行,在每个主机上这些任务运行顺序
In the above playbook I've specified:
hosts: database-witness:database-standby:database-master
Does this mean the set of yum commands will first be run on
database-witness
THEN on database-standby
and THEN on
database-master
.
没有。使用指定 strategy 的 Ansible 运行s 剧本。默认情况下(linear
策略),Ansible 将在五个主机上并行分叉五个线程和 运行 每个任务。只有当当前组中的所有主机都完成(或失败)时,Ansible 才会移动到下一个任务。
由于您想在一台主机上的所有任务完成后移动到下一台主机,因此默认策略不适合您。
您可以在游戏中添加一个 serial: 1
声明(参见 Rolling Update Batch Size),这将导致 Ansible 在继续下一个主机之前 运行 所有任务,但是订单的问题仍然存在。
理论上主机的列表是有序的,一旦你对它进行了经验测试,它应该是可重复的,但是在关于 SO 的问题中有少量的例子表明 Ansible 并不总是保持 "common-sense"订单。
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness:database-standby:database-master
serial: 1
tasks:
# the tasks
但是如果你像你的问题一样有严格的要求,最可靠的方法是将你的游戏分成三部分。
您可以将任务提取到单独的文件中以避免重复。所以:
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness
tasks:
- include: tasks.yml
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-standby
tasks:
- include: tasks.yml
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-master
tasks:
- include: tasks.yml
和tasks.yml
:
- name: Installating Java 1.8 on Witness
yum: name=java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3 state=present
notify: set unlimited java 1.8 security
- name: Remove Java 1.7
shell: rm -f /usr/lib/jvm/$(ls /usr/lib/jvm | grep "java-1.7")/jre/lib/security/*.jar
- name: Remove SDK
yum: name=java-1.7.0-openjdk.x86_64 state=absent
- name: Remove Headless
yum: name=java-1.7.0-openjdk-headless.x86_64 state=absent
后一种解决方案还可以确保在任何主机出现错误时停止执行。使用 serial: 1
-method 你没有这样的保证,所以如果任务在 database-witness
失败,Ansible 将继续下一个目标。
我正在尝试 运行 在远程节点集上执行一些 yum 命令。但它们需要按特定顺序 运行 而不是并行。
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness:database-standby:database-master
tasks:
- name: Installating Java 1.8 on Witness
yum: name=java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3 state=present
notify: set unlimited java 1.8 security
- name: Remove Java 1.7
shell: rm -f /usr/lib/jvm/$(ls /usr/lib/jvm | grep "java-1.7")/jre/lib/security/*.jar
- name: Remove SDK
yum: name=java-1.7.0-openjdk.x86_64 state=absent
- name: Remove Headless
yum: name=java-1.7.0-openjdk-headless.x86_64 state=absent
我的环境文件是 ::
[database-master]
172.X.X.1
[database-standby]
172.X.X.2
[database-witness]
172.X.X.3
在上面的剧本中我指定了:
hosts: database-witness:database-standby:database-master
这是否意味着 yum 命令集将首先在 database-witness
上 运行 然后在 database-standby
上然后在 database-master
.
他们将运行在不同主机上并行,在每个主机上这些任务运行顺序
In the above playbook I've specified:
hosts: database-witness:database-standby:database-master
Does this mean the set of yum commands will first be run on
database-witness
THEN ondatabase-standby
and THEN ondatabase-master
.
没有。使用指定 strategy 的 Ansible 运行s 剧本。默认情况下(linear
策略),Ansible 将在五个主机上并行分叉五个线程和 运行 每个任务。只有当当前组中的所有主机都完成(或失败)时,Ansible 才会移动到下一个任务。
由于您想在一台主机上的所有任务完成后移动到下一台主机,因此默认策略不适合您。
您可以在游戏中添加一个 serial: 1
声明(参见 Rolling Update Batch Size),这将导致 Ansible 在继续下一个主机之前 运行 所有任务,但是订单的问题仍然存在。
理论上主机的列表是有序的,一旦你对它进行了经验测试,它应该是可重复的,但是在关于 SO 的问题中有少量的例子表明 Ansible 并不总是保持 "common-sense"订单。
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness:database-standby:database-master
serial: 1
tasks:
# the tasks
但是如果你像你的问题一样有严格的要求,最可靠的方法是将你的游戏分成三部分。
您可以将任务提取到单独的文件中以避免重复。所以:
---
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-witness
tasks:
- include: tasks.yml
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-standby
tasks:
- include: tasks.yml
- name: Java 1.8 upgrade for EFM on Witness
hosts: database-master
tasks:
- include: tasks.yml
和tasks.yml
:
- name: Installating Java 1.8 on Witness
yum: name=java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3 state=present
notify: set unlimited java 1.8 security
- name: Remove Java 1.7
shell: rm -f /usr/lib/jvm/$(ls /usr/lib/jvm | grep "java-1.7")/jre/lib/security/*.jar
- name: Remove SDK
yum: name=java-1.7.0-openjdk.x86_64 state=absent
- name: Remove Headless
yum: name=java-1.7.0-openjdk-headless.x86_64 state=absent
后一种解决方案还可以确保在任何主机出现错误时停止执行。使用 serial: 1
-method 你没有这样的保证,所以如果任务在 database-witness
失败,Ansible 将继续下一个目标。