Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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 向变量提供多个输入时有条件地运行任务_Ansible - Fatal编程技术网

Ansible 向变量提供多个输入时有条件地运行任务

Ansible 向变量提供多个输入时有条件地运行任务,ansible,Ansible,我编写了一个ansible脚本,当一个变量只有一个输入时,该脚本运行良好: --- - hosts: ListA vars: app-dir: /tmp service_name: exampleAAA roles: - prechecks 以下是我正在使用和工作的任务,其中只有一个服务定义为服务名称: --- 根据我的用例,我需要为以下工作: vars: service_name: - exampleAAA - exampleBBB - e

我编写了一个ansible脚本,当一个变量只有一个输入时,该脚本运行良好:

---
- 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}}"