klewan.ansible_role_oracle_manage_patches
Rol de Ansible: oracle-manage-patches
Este rol gestiona los parches de Oracle.
Aplica y revierte los parches (parches únicos y parches trimestrales) a la Infraestructura de Grid y/o las Casas de Base de Datos de Oracle (tanto PRINCIPAL como STANDBY).
Además, es posible restringir las ORACLE_HOMEs afectadas proporcionando directamente las rutas de ORACLE_HOME (oracle_manage_patches_oracle_home_name_patterns
) o las versiones de software (oracle_manage_patches_oracle_home_version_patterns
) que se considerarán. De lo contrario, todas las ORACLE_HOMEs de cualquier versión relacionada con el nombre del parche proporcionado se verán afectadas. Otras ORACLE_HOMEs y bases de datos no relacionadas con el nombre del parche seleccionado no se verán afectadas.
El rol es consciente de RAC y aplica parches a todos los nodos del clúster siempre que se detecte un Real Application Cluster, incluso si el playbook se ejecuta solo en uno de los nodos de RAC (argumento --limit
de ansible-playbook).
Para bases de datos standby, solo se parchean los binarios, no se ejecutan scripts SQL/datapatch.
Como opción, están disponibles las siguientes características:
- Backup de ORACLE_HOMEs (antes de la instalación del parche) - (
oracle_manage_patches_backup_oracle_home
switch + roloracle-homes-backup
) - Backup de metadatos de ASM (antes de la instalación del parche) - (
oracle_manage_patches_backup_asm_metadata
switch y variableoracle_manage_patches_backup_dir
) - Scripts de verificación previos y posteriores (salida de opatch lsinventory, lista de objetos INVALID, salida de
registry$history
,dba_registry_sqlpatch
,dba_registry_history
y tablasdba_registry
) que registran su actividad en el directoriooracle_manage_patches_log_dir
en los objetivos. - Descargar el parche directamente desde My Oracle Support (
oracle_manage_patches_download_patch_from_mos
switch + roloracle-download-patches
).
Este rol espera que se definan las siguientes variables (ya sea en el playbook o a través de --extra-vars
- ver ejemplos a continuación):
oracle_manage_patches_task
- ya seaapply
orollback
oracle_manage_patches_patch_type
- ya sea 'oneoff' o cualquier clave de 'oracle_manage_patches_quarterly_patches' (es decir, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)oracle_manage_patches_patch_name
- nombre del parche (por ejemplo, OCT2018/JUL2018) para parches trimestrales
Se debe proporcionar una lista de bases de datos con la variable oracle_databases
(ver rol oracle
para referencia). Puede definirse manualmente o poblarse dinámicamente con el rol de descubrimiento automático oracle-gatherinfo-databases
(ver ejemplo en la sección Ejemplo de Playbook). Cuando se configura manualmente, oracle_databases
debe definirse de la siguiente manera:
oracle_databases:
- cluster_database: "false"
database_role: "PRIMARY"
database_type: "SINGLE"
db_name: "ORCL"
db_unique_name: "ORCL"
edition: "Enterprise"
instance_name: "ORCL"
instances: "ORCL"
is_registered_in_gi: "true"
oracle_home: "/u01/app/oracle/product/11.2.0.4/dbhome1"
software_version: "11.2.0.4.0"
- (...)
De manera similar, la configuración de Infraestructura de Grid debe proporcionarse con la variable oracle_gi_info
(ver rol oracle
para referencia). Puede definirse manualmente o poblarse dinámicamente con el rol de descubrimiento automático oracle-gatherinfo-gi
(ver ejemplo en la sección Ejemplo de Playbook). Cuando se configura manualmente, oracle_gi_info
debe definirse de la siguiente manera (ejemplo):
oracle_gi_info:
oracle_home: "/u01/app/12.1.0/grid"
rac_nodes: []
rac_remote_nodes: []
software_version: "12.1.0.2.0"
o
oracle_gi_info:
oracle_home: "/u01/app/12.1.0/grid"
rac_nodes: [ 'server1', 'server2' ]
rac_remote_nodes: [ 'server2' ]
software_version: "12.1.0.2.0"
Se recomienda encarecidamente ejecutar los roles de descubrimiento automático oracle-gatherinfo-listener
y oracle-gatherinfo-dbconsole
antes de ejecutar este rol (ver ejemplo en la sección Ejemplo de Playbook). Estos roles llenan las variables oracle_running_listeners
y oracle_dbconsole_running_services
que son utilizadas por este rol (oracle-manage-patches
) para devolver los sistemas exactamente al mismo estado que antes.
Las listas de parches se definen con las variables oracle_manage_patches_opatch
, oracle_manage_patches_quarterly_patches
y oracle_manage_patches_oneoff_patches
. Ver Variables del Rol para detalles.
Los archivos zip de parches pueden estar accesibles ya sea en los sistemas remotos o, localmente, en el controlador de Ansible. Para señalar qué configuración es aplicable, use la variable oracle_manage_patches_remote_stage
.
El rol instala automáticamente la última utilidad OPatch para las ORACLE_HOMEs afectadas según los datos de oracle_manage_patches_opatch
.
Sistemas Operativos Soportados:
- RedHat
- CentOS
- OracleLinux
Requisitos
Este rol utiliza los roles oracle
, oracle-asm-metadata
, oracle-homes-backup
y oracle-download-patches
.
Este rol espera que se definan las siguientes variables (ya sea en el playbook o a través de --extra-vars
- ver ejemplos a continuación):
oracle_manage_patches_task
- ya seaapply
orollback
oracle_manage_patches_patch_type
- ya sea 'oneoff' o cualquier clave de 'oracle_manage_patches_quarterly_patches' (es decir, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)oracle_manage_patches_patch_name
- nombre del parche (por ejemplo, OCT2018/JUL2018) para parches trimestrales.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml
):
#
# Parámetros de entrada
#
# Ya sea 'oneoff' o cualquier clave de 'oracle_manage_patches_quarterly_patches' (es decir, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
oracle_manage_patches_patch_type:
# Nombre del parche (por ejemplo, OCT2018/JUL2018) para parches trimestrales
oracle_manage_patches_patch_name:
# Tarea de parche - ya sea aplicar o revertir
oracle_manage_patches_task: apply
#
# Condicionales y manejo de control
#
# Hacer backup de ORACLE_HOME antes de aplicar el parche
oracle_manage_patches_backup_oracle_home: false
# Hacer backup de metadatos de ASM antes de aplicar el parche
oracle_manage_patches_backup_asm_metadata: false
# Descargar parches de My Oracle Support
oracle_manage_patches_download_patch_from_mos: false
# Parchear ORACLE_HOMEs/GRID_HOMEs con nombres que coincidan con cualquier cadena de esta lista (O)
oracle_manage_patches_oracle_home_name_patterns: []
Ejemplo de Playbook
Un ejemplo sencillo:
- name: Aplicar Parches de Oracle
hosts: ora-servers
gather_facts: true
become: true
become_user: '{{ oracle_user }}'
tasks:
- import_role:
name: oracle-manage-patches
vars:
oracle_manage_patches_task: apply
oracle_manage_patches_patch_type: ojvmgicombo
oracle_manage_patches_patch_name: OCT2018
tags:
- oracle-manage-patches
Un ejemplo complejo (con características adicionales, como descubrimiento automático de GI/DB, trabajos cron y soporte de monitoreo [desactivar/activar]):
- name: Aplicar Parches de Oracle
hosts: ora-servers
gather_facts: true
become: true
become_user: '{{ oracle_user }}'
vars:
oracle_apply_patches_manage_monitoring: true
oracle_apply_patches_manage_cron_jobs: true
oracle_apply_patches_downtime_duration: '3h'
oracle_apply_patches_single_host_mode: true
tasks:
- name: Comprobar modo de un solo host
assert:
that:
- "play_hosts|length == 1"
fail_msg: "Este es un modo de 'un solo host', pero parece que hay más de un host en el play actual"
run_once: true
when: oracle_apply_patches_single_host_mode
tags:
- oracle_apply_patches_precheck
- siempre
- import_role:
name: oracle-gatherinfo-gi
tags:
- oracle-gatherinfo-gi
- oracle-gatherinfo-allcomponents
- import_role:
name: oracle-gatherinfo-databases
tags:
- oracle-gatherinfo-databases
- oracle-gatherinfo-allcomponents
- import_role:
name: oracle-gatherinfo-listener
tags:
- oracle-gatherinfo-listener
- oracle-gatherinfo-allcomponents
- import_role:
name: oracle-gatherinfo-dbconsole
tags:
- oracle-gatherinfo-dbconsole
- oracle-gatherinfo-allcomponents
- include_role:
name: oracle-host-cron
vars:
oracle_host_cron_copy_scripts: false
oracle_host_cron_disable_jobs: true
oracle_host_cron_manage_cron_jobs: '{{ oracle_apply_patches_manage_cron_jobs }}'
when: oracle_apply_patches_manage_cron_jobs
tags:
- oracle_disable_cron_jobs
- include_tasks: monitoring_set_downtime.yml
with_items:
- '{{ inventory_hostname }}'
- '{{ oracle_gi_info.rac_remote_nodes }}'
loop_control:
label: "[host: {{ _oracle_apply_patches_host_outer_item }}]"
loop_var: _oracle_apply_patches_host_outer_item
when: oracle_apply_patches_manage_monitoring
tags:
- nacl_manage_checks_set_downtime
- import_role:
name: oracle-manage-patches
vars:
oracle_manage_patches_task: apply
oracle_manage_patches_patch_type: ojvmgicombo
oracle_manage_patches_patch_name: OCT2018
tags:
- oracle-manage-patches
- include_tasks: monitoring_cancel_downtime.yml
with_items:
- '{{ inventory_hostname }}'
- '{{ oracle_gi_info.rac_remote_nodes }}'
loop_control:
label: "[host: {{ _oracle_apply_patches_host_outer_item }}]"
loop_var: _oracle_apply_patches_host_outer_item
when: oracle_apply_patches_manage_monitoring
tags:
- nacl_manage_checks_cancel_downtime
- include_role:
name: oracle-host-cron
vars:
oracle_host_cron_copy_scripts: false
oracle_host_cron_disable_jobs: false
oracle_host_cron_manage_cron_jobs: '{{ oracle_apply_patches_manage_cron_jobs }}'
when: oracle_apply_patches_manage_cron_jobs
tags:
- oracle_enable_cron_jobs
Dentro de vars/main.yml
o group_vars/..
o host_vars/..
:
#-------------------------------------------------
# sobreescribe variables del rol 'oracle-manage-patches'
#-------------------------------------------------
# Establecer en 'true' para indicar que el directorio de etapa con archivos zip de parches es accesible en el sistema remoto
# y no local al controlador de Ansible
# Establecer en 'false' para copiar archivos de parche desde el controlador de Ansible al sistema remoto
oracle_manage_patches_remote_stage: true
# Directorio de etapa para la utilidad OPatch
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch
# Directorio de etapa para archivos de parches trimestrales de Oracle (PSU/RU/etc.)
oracle_manage_patches_stage_dir_quarterly_patches: /software/rdbms/quarterly_patches
Licencia
GPLv3 - Licencia Pública General de GNU v3.0
Información del Autor
Este rol fue creado en 2018 por Krzysztof Lewandowski.
Manage Oracle patches
ansible-galaxy install klewan.ansible_role_oracle_manage_patches