首页 > 解决方案 > “任务包括一个带有未定义变量的选项”WHile 使用 Ansible 邮件模块

问题描述

我们正在使用 ansible 来自动化 oracle 数据库补丁。在使用邮件模块时,如果有任何错误,我们会收到以下错误。

"msg": "该任务包含一个带有未定义变量的选项。错误是:'result_stop_listener' 未定义错误似乎在 '/tmp/awx_984_lmq8daoi/project/IMPLEMENTATION/oracle_patching_full_implementation.yml':第 93 行,第 10 列,但可能在文件的其他地方,具体取决于确切的语法问题。违规行似乎是:-名称:“发送成功的电子邮件”^ here”,“_ansible_no_log”:false

当任何任务中出现任何错误时,ansible next 任务不会为该特定服务器运行。在这种情况下,不会为该任务生成输出,并且正文中的值正在变为 null 。我认为这就是我收到此错误的原因。可能的解决方案是什么。

详细剧本在下面:

---
-
  hosts: TESTSERVER
  name: Nissan Oracle Patching Implementation
  gather_facts: NO
  tasks:
    - block:
       -
         name: Creating log directory
         file:
           path: /opt/oracle/NISSAN_PATCH_AUTOMATION/PATCH_LOGS/{{PATCH_NUMBER}}
           state: directory
       -
         name: "Checking file system space and patch conflict"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/pre_conflict_check.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_check
       - name: Task result for Patch conflict
         debug:
           msg:
             - "{{ result_check.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_check.stdout"
       -
         name: "Stopping Listener"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/listener_stop.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_stop_listener
       - name: Task result for listener stop
         debug:
           msg: "{{ result_stop_listener.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_stop_listener.stdout"
       -
         name: "Stopping Database"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/db_stop.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_stop_database
       - name: Task result for database stop
         debug:
           msg: "{{ result_stop_database.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_stop_database.stdout"
       -
         name: "Take backup before patching"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/backup.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_backup
       - name: Task result for taking backup
         debug:
           msg: "{{ result_backup.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_backup.stdout"
       -
         name: "Applying Patch"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/patch.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_patch_apply
       - name: Task result for patching
         debug:
           msg: "{{ result_patch_apply.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_patch_apply.stdout"
       -
         name: "Starting Database"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/db_start.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_start_database
       - name: Task result
         debug:
           msg: "{{ result_start_database.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_start_database.stdout"
       -
         name: "Starting Listener"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/listener_start.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_start_listener
       - name: Task result
         debug:
           msg: "{{ result_start_listener.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_start_listener.stdout"
       -
         name: "Script to run post patch "
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/script_post_patch.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_post_patch
       - debug:
           msg: "{{ result_post_patch.stdout.split('\n')| regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_post_patch.stdout"
       -
         name: "Script to verify PATCH"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/patch_verify.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_patch_verify
       - debug:
           msg: "{{ result_patch_verify.stdout.split('\n') | regex_replace('(\n)','') }}"
         failed_when: "'FATAL' in result_patch_verify.stdout"
       -
         name: "Database status with shell"
         shell: "/opt/oracle/NISSAN_PATCH_AUTOMATION/SCRIPTS/db_status.sh {{oracle_version}} {{PATCH_NUMBER}}"
         register: result_database_status
       - debug:
           msg: "{{ result_database_status.stdout.split('\n') | regex_replace('\n','') }}"
         failed_when: "'FATAL' in result_database_status.stdout"
      always:
       -
         name: "Send a success email"
         mail:
          host: asmtp.renault.fr
          port: 25
          from: noreply-oracle@renault.com
          to: io.rn.oracle@accenture.com
          subject: Oracle Patching Implementation
          body: |
            '{% for line in result_check.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_stop_listener.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_stop_database.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_backup.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_patch_apply.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_start_database.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_start_listener.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_post_patch.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_patch_verify.stdout_lines %}
            {{ line }}
            {% endfor %}'
            '{% for line in result_database_status.stdout_lines %}
            {{ line }}
            {% endfor %}'
         delegate_to: localhost
         ignore_errors: true

标签: oracleansiblepatch

解决方案


推荐阅读