oracle - “任务包括一个带有未定义变量的选项”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
解决方案
推荐阅读
- c - 为什么从 C 中的行尾删除空格很重要?
- vbscript - 如何在 VBScript 中分配 2 个或更多字段的值
- javascript - 在每次单击按钮时卸载并重新安装组件?
- c - Win32 C++ ListView WM_CONTEXTMENU 问题
- visual-studio-code - 我们如何配置我们的 VSCode 以根据我们的自定义编码标准格式化 C 代码?
- flutter - StatelessWidget 中的 Futurebuilder - Flutter
- mysql - JPA soft delete with @SqlDelete 导致 SQL 错误:Parameter index out of range (2 > number of parameters, which is 1)
- javascript - 将js按钮上的值传递给ejs文件
- json - Angular 8解析Json对象
- python - API 网络数据捕获