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 + rol oracle-homes-backup)
  • Backup de metadatos de ASM (antes de la instalación del parche) - (oracle_manage_patches_backup_asm_metadata switch y variable oracle_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 tablas dba_registry) que registran su actividad en el directorio oracle_manage_patches_log_dir en los objetivos.
  • Descargar el parche directamente desde My Oracle Support (oracle_manage_patches_download_patch_from_mos switch + rol 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 sea apply o rollback
  • 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 sea apply o rollback
  • 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.

Instalar
ansible-galaxy install klewan.ansible_role_oracle_manage_patches
Licencia
gpl-3.0
Descargas
133