Ansible return code error: 'dict object' has no attribute 'rc'

Ansible return code error: 'dict object' has no attribute 'rc'

我正在使用 Ansible 自动安装、配置和部署使用 JBOSS 的应用程序服务器,因此我需要使用内置的 jboss-cli 来部署包。

这个 Ansible 任务实际上是 运行 的最后阶段,它只需要检查部署是否已经存在,如果存在,取消部署并重新部署(幂等)。

运行 在服务器上手动执行以下命令并在每个命令按预期工作后检查 return 代码,Ansible 某处的某些东西拒绝正确读取 return 代码!

# BLAZE RMA DEPLOYMENT
- name: Check if Blaze RMA has been assigned to dm-server-group from a previous Ansible run
  shell: "./jboss-cli.sh --connect '/server-group=dm-server-group/deployment={{ blaze_deployment_version }}:read-resource()' | grep -q success"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  register: blaze_deployment_status
  failed_when: blaze_deployment_status.rc == 2
  tags: # We always need to check this as the output determines whether or not we need to undeploy an existing deployment.
    - skip_ansible_lint

- name: Undeploy Blaze RMA if it has already been assigned to dm-server-group from a previous Ansible run
  command: "./jboss-cli.sh --connect 'undeploy {{ blaze_deployment_version }} --all-relevant-server-groups'"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  when: blaze_deployment_status.rc == 0
  register: blaze_undeployment_status

- name: Deploy Blaze RMA once successfully undeployed
  command: "./jboss-cli.sh --connect 'deploy {{ jboss_deployment_dir }}/{{ blaze_deployment_version }} --server-groups=dm-server-group'"
  args:
    chdir: "{{ jboss_home_dir }}/bin"
  when: blaze_undeployment_status.rc == 0 or blaze_deployment_status.rc == 1

如有任何建议,我们将不胜感激。

你的第二个命令包含一个 when 子句。如果跳过,ansible 仍然会注册该变量,但数据中没有 rc 属性。

在下一个任务中使用 var 时需要考虑到这一点。最后一个任务的以下条件应该可以解决您的问题。

    when: blaze_undeployment_status.rc | default('') == 0 or blaze_deployment_status.rc == 1