Ansible 向变量提供多个输入时有条件地运行任务
我编写了一个ansible脚本,当一个变量只有一个输入时,该脚本运行良好:Ansible 向变量提供多个输入时有条件地运行任务,ansible,Ansible,我编写了一个ansible脚本,当一个变量只有一个输入时,该脚本运行良好: --- - hosts: ListA vars: app-dir: /tmp service_name: exampleAAA roles: - prechecks 以下是我正在使用和工作的任务,其中只有一个服务定义为服务名称: --- 根据我的用例,我需要为以下工作: vars: service_name: - exampleAAA - exampleBBB - e
---
- hosts: ListA
vars:
app-dir: /tmp
service_name: exampleAAA
roles:
- prechecks
以下是我正在使用和工作的任务,其中只有一个服务定义为服务名称:
---
根据我的用例,我需要为以下工作:
vars:
service_name:
- exampleAAA
- exampleBBB
- exampleCCC
在定义多个服务名称后运行playbook时。它在步骤检查服务状态中显示失败的服务状态,但在其余步骤中显示ok。当我检查服务的状态时,没有变化。如何使其适用于多个服务名称
因此,在这里我想知道脚本应该做什么(我被第2点和第3点困住了,有人能告诉我需要做什么才能让它工作):
老实说,您的问题的答案在文档中:
老实说,您的问题的答案在文档中:
我没有看到任何“检查服务名称”任务,你是说“检查服务状态”吗?对不起,是“检查服务状态”@techraf。我在问题描述中添加了额外的信息。我不知道如何处理脚本中提到的第2点和第3点。首先,你真的需要检查状态吗?你就不能开始服务吗?如果服务已经在运行,什么都不会发生。是的。。。根据我们遵循的流程,必须首先检查服务状态,只有在服务未启动时,我才需要启动服务。如果第一次尝试后服务没有出现,那么我们需要失败。我没有看到任何“检查服务名称”任务,你是说“检查服务状态”吗?对不起,是“检查服务状态”@techraf。我在问题描述中添加了额外的信息。我不知道如何处理脚本中提到的第2点和第3点。首先,你真的需要检查状态吗?你就不能开始服务吗?如果服务已经在运行,什么都不会发生。是的。。。根据我们遵循的流程,必须首先检查服务状态,只有在服务未启动时,我才需要启动服务。如果第一次尝试后服务没有出现,那么我们需要使任务失败。第一个任务将是红色的,但就playbook工作流而言,不会失败。我们可以使用
|failed
来测试单个项目,因为它依赖于rc
代码和结果对象的其他内容。如果在启动尝试期间失败,任务将被标记为实际失败,ansible将停止进一步执行。我认为这是一种服务nginx状态
/服务nginx启动
,但带有一些专有包装或smth。再次感谢Konstantin的帮助,@techraf“app name”是一个启动脚本,停止并检查我们的应用程序的服务状态。我有最后一个问题,如果在我尝试后应用程序没有出现,那么我需要失败的任务。我如何整合这部分?现在,我再次添加了“检查服务状态”任务,在任务结束时没有“忽略错误”,它完成了任务,但代码是无效的redundant@KonstantinSuvorov酷。我学到了一个新东西:人们可以强调一个正确的条件(巧合地称为“失败”),同时将真正的问题保留在常规字体中。第一个任务将是红色的,但在playbook工作流方面不会失败。我们可以使用|failed
来测试单个项目,因为它依赖于rc
代码和结果对象的其他内容。如果在启动尝试期间失败,任务将被标记为实际失败,ansible将停止进一步执行。我认为这是一种服务nginx状态
/服务nginx启动
,但带有一些专有包装或smth。再次感谢Konstantin的帮助,@techraf“app name”是一个启动脚本,停止并检查我们的应用程序的服务状态。我有最后一个问题,如果在我尝试后应用程序没有出现,那么我需要失败的任务。我如何整合这部分?现在,我再次添加了“检查服务状态”任务,在任务结束时没有“忽略错误”,它完成了任务,但代码是无效的redundant@KonstantinSuvorov酷。我学到了一个新东西:人们可以强调一个正确的条件(巧合地称为“失败”),同时将真正的问题保留在常规字体中。
vars:
service_name:
- exampleAAA
- exampleBBB
- exampleCCC
- name: check service status
command: "{{app_dir}}/app-name {{item}} status"
with_items: "{{service_name}}"
ignore_errors: yes
register: service_status
- shell: "{{app_dir}}/app-name {{item.item}} start"
when: item | failed
with_items: "{{service_status.results}}"