ansible_role_oracle_manage_patches

Роль Ansible: oracle-manage-patches

Эта роль управляет патчами Oracle.

Она применяет и откатывает патчи (одиночные и квартальные) для Grid Infrastructure и/или Oracle Homes базы данных (как для PRIMARY, так и для STANDBY).

Кроме того, можно ограничить затрагиваемые ORACLE_HOMEs, предоставив либо пути к ORACLE_HOME напрямую (oracle_manage_patches_oracle_home_name_patterns), либо версии программного обеспечения (oracle_manage_patches_oracle_home_version_patterns). В противном случае будут затронуты все ORACLE_HOMEs любой версии, связанные с заданным именем патча. Другие ORACLE_HOMEs и базы данных, не связанные с выбранным именем патча, не будут затронуты.

Роль учитывает кластер RAC и применяет патчи ко всем узлам кластера, когда обнаруживается Real Application Cluster, даже если playbook выполняется только на одном из узлов RAC (аргумент --limit в ansible-playbook).

Для резервных баз данных патчатся только бинарные файлы, никакие SQL/Datapatch скрипты не выполняются.

В качестве опций доступны следующие функции:

  • Резервное копирование ORACLE_HOMEs (до установки патча) - (oracle_manage_patches_backup_oracle_home + роль oracle-homes-backup)
  • Резервное копирование метаданных ASM (до установки патча) - (oracle_manage_patches_backup_asm_metadata и переменная oracle_manage_patches_backup_dir)
  • Скрипты предварительной и последующей проверки (вывод опции opatch lsinventory, список объектов INVALID, вывод таблиц registry$history, dba_registry_sqlpatch, dba_registry_history и dba_registry), которые записывают свою деятельность в директорию oracle_manage_patches_log_dir на целевых машинах.
  • Загрузка патча напрямую из My Oracle Support (oracle_manage_patches_download_patch_from_mos + роль oracle-download-patches).

Эта роль ожидает, что будут установлены следующие переменные (либо в playbook, либо через --extra-vars - смотрите примеры ниже):

  • oracle_manage_patches_task - либо apply, либо rollback
  • oracle_manage_patches_patch_type - либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
  • oracle_manage_patches_patch_name - имя патча (например, OCT2018/JUL2018) для квартальных патчей.

Список баз данных должен быть предоставлен с переменной oracle_databases (смотрите роль oracle для справки). Его можно определить вручную или заполнить динамически с помощью роли автопоиска oracle-gatherinfo-databases (смотрите пример в разделе Пример Playbook). При ручной настройке oracle_databases должен быть определён следующим образом:

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"
  - (...)

Аналогично, конфигурация Grid Infrastructure должна быть предоставлена с помощью переменной-словаря oracle_gi_info (смотрите роль oracle для справки). Её можно определить вручную или заполнить динамически с помощью роли автопоиска oracle-gatherinfo-gi (смотрите пример в разделе Пример Playbook). При ручной настройке oracle_gi_info должен быть определён следующим образом (пример):

oracle_gi_info:
  oracle_home: "/u01/app/12.1.0/grid"
  rac_nodes: []
  rac_remote_nodes: []
  software_version: "12.1.0.2.0"

или

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"

Настоятельно рекомендуется запускать роли автопоиска oracle-gatherinfo-listener и oracle-gatherinfo-dbconsole перед выполнением этой роли (смотрите пример в разделе Пример Playbook). Эти роли заполняют переменные oracle_running_listeners и oracle_dbconsole_running_services, которые используются этой ролью oracle-manage-patches для возврата систем в точно такое же состояние, как до патчирования.

Списки патчей определяются с помощью переменных oracle_manage_patches_opatch, oracle_manage_patches_quarterly_patches и oracle_manage_patches_oneoff_patches. Смотрите Переменные роли для деталей.

Zip-файлы патчей могут быть доступны как на удалённых системах, так и локально, на контроллере Ansible. Чтобы указать, какая конфигурация применима, используйте переменную oracle_manage_patches_remote_stage.

Роль автоматически устанавливает последнюю утилиту OPatch для затрагиваемых ORACLE_HOMEs в соответствии с данными oracle_manage_patches_opatch.

Поддерживаемые ОС:

  • RedHat
  • CentOS
  • OracleLinux

Требования

Эта роль использует роли oracle, oracle-asm-metadata, oracle-homes-backup и oracle-download-patches.

Эта роль ожидает, что будут установлены следующие переменные (либо в playbook, либо через --extra-vars - смотрите примеры ниже):

  • oracle_manage_patches_task - либо apply, либо rollback
  • oracle_manage_patches_patch_type - либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
  • oracle_manage_patches_patch_name - имя патча (например, OCT2018/JUL2018) для квартальных патчей.

Переменные роли

Доступные переменные перечислены ниже с установками по умолчанию (смотрите defaults/main.yml):

#
# Входные параметры
#

# Либо 'oneoff', либо любой ключ из 'oracle_manage_patches_quarterly_patches' (например, ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
oracle_manage_patches_patch_type:

# Имя патча (например, OCT2018/JUL2018) для квартальных патчей
oracle_manage_patches_patch_name:

# Задача патча - либо применение, либо откат
oracle_manage_patches_task: apply

#
# Условные выражения и управление
#

# Резервное копирование ORACLE_HOME перед применением патча
oracle_manage_patches_backup_oracle_home: false

# Резервное копирование метаданных ASM перед применением патча
oracle_manage_patches_backup_asm_metadata: false

# Загрузка патчей из My Oracle Support
oracle_manage_patches_download_patch_from_mos: false

# Патч ORACLE_HOMEs/GRID_HOMEs с именами, совпадающими с любой строкой из этого списка (ИЛИ)
oracle_manage_patches_oracle_home_name_patterns: []

# Пример:
#oracle_manage_patches_oracle_home_name_patterns:
#  - '/u01/app/oracle/product/11.2.0/dbhome_1'
#  - '/u01/app/oracle/product/12.1.0/dbhome_2'
#  - '/u01/app/12.1.0/grid'

# Патч ORACLE_HOMEs/GRID_HOMEs с версией, совпадающей с любой строкой из этого списка (ИЛИ)
oracle_manage_patches_oracle_home_version_patterns: []

# Пример:
#oracle_manage_patches_oracle_home_version_patterns:
#  - 11.2.0.4.0
#  - 12.1.0.2.0

# Показать вывод 'opatch lsinventory'
oracle_manage_patches_display_opatch_lsinventory_output: true

# Показать вывод 'opatchauto -analyze'
oracle_manage_patches_display_opatchauto_analyze_output: true

# Показать вывод 'ojvm conflict detection'
oracle_manage_patches_display_ojvm_conflict_detection_output: true

# Показать вывод 'opatchauto apply'
oracle_manage_patches_display_opatchauto_apply_output: true

# Показать вывод 'datapatch'
oracle_manage_patches_display_datapatch_output: true

# Выполнять ли предскрипты (opatch lsinventory/db_psu_apply_checks.sql и др.)
oracle_manage_patches_run_pre_scripts: true

# Выполнять ли постскрипты (opatch lsinventory/db_psu_apply_checks.sql и др.)
oracle_manage_patches_run_post_scripts: true

# Выполнять проверку конфликтов патча
oracle_manage_patches_conflict_detection: true

# Выполнять установку патча (установите 'false' только для отладки)
oracle_manage_patches_patch_installation: true

#
# Папки для установки, резервного копирования и логирования
#

# Папка для резервного копирования, используемая для различных не баз данных резервных копий, таких как метаданные ASM, резервная копия реестра OCR и т.д.
oracle_manage_patches_backup_dir: '{{ oracle_default_backup_dir|default( "/u01/app/psu/backup", true ) }}'

# Логовая папка
oracle_manage_patches_log_dir: '{{ oracle_default_log_dir|default( "/u01/app/psu/log", true ) }}'

# Папка для установки
oracle_manage_patches_stage_install_dir: '{{ oracle_default_stage_install_dir|default( "/u01/app/oracle/install", true ) }}'

#
# Информация для отладки
#

# (отладка) показать информацию о патчах
oracle_manage_patches_debug_display_patches_info: true

# (отладка) показать выбранные для патчирования ORACLE_HOMEs
oracle_manage_patches_debug_display_homes_selected_for_patching: true

Зависимости

Эта роль использует роли oracle, oracle-asm-metadata, oracle-homes-backup и oracle-download-patches.

Пример Playbook

Простой пример:

- name: Применить патчи 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

Сложный пример (с дополнительными функциями, такими как автопоиск GI/DB, управление cron и поддержка мониторинга [выключение/включение]):

- name: Применить патчи 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: Проверка режима одиночного хоста
    assert:
      that:
        - "play_hosts|length == 1"
      fail_msg: "Это режим 'одиночного хоста', но в текущем play кажется, что больше одного хоста"
    run_once: true
    when: oracle_apply_patches_single_host_mode
    tags:
      - oracle_apply_patches_precheck
      - always

  - 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

Внутри vars/main.yml или group_vars/.. или host_vars/..:

#-------------------------------------------------
# переопределяет переменные роли 'oracle-manage-patches'
#-------------------------------------------------

# Установите в 'true', чтобы указать, что каталог с zip-файлами патчей доступен на удаленной системе,
#   а не локально на контроллере Ansible
# Установите в 'false', чтобы скопировать файлы патчей с контроллера Ansible на удалённую систему
oracle_manage_patches_remote_stage: true

# Каталог для утилиты OPatch
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch

# Каталог для архивов квартальных патчей Oracle (PSU/RU и т.д.)
oracle_manage_patches_stage_dir_quarterly_patches: /software/rdbms/quarterly_patches

# Список файлов opatch
#   'filename' должен быть полным путём, иначе он будет искаться в каталоге 'oracle_manage_patches_stage_dir_opatch'
oracle_manage_patches_opatch:
  11.2.0.4:
    filename: p6880880_112000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  12.1.0.2:
    filename: p6880880_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  12.2.0.1:
    filename: p6880880_122010_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
  18.0.0.0:
    filename: p6880880_180000_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip

# Список квартальных патчей
#   'filename' должен быть полным путём, иначе он будет искаться в каталоге 'oracle_manage_patches_stage_dir_quarterly_patches'
oracle_manage_patches_quarterly_patches:
  ojvmgicombo:
    description: 'Комбо из DB PSU компонента OJVM + GI PSU'
    12.1.0.2:
      OCT2018:
        patchversion: 12.1.0.2.181016
        filename: p28689148_121020_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
        patchid: 28689148
        gi_patchid: 28349311
        ojvm_patchid: 28440711
  ojvmdbcombo:
    description: 'Комбо из DB PSU компонента OJVM + DB PSU'
    11.2.0.4:
      OCT2018:
        patchversion: 11.2.0.4.181016
        filename: p28689165_112040_{{ ansible_system }}-{{ ansible_architecture | replace('_', '-') }}.zip
        patchid: 28689165
        db_patchid: 28204707
        ojvm_patchid: 28440700
# ... и т.д. ...

Лицензия

GPLv3 - GNU Общая Публичная Лицензия версии 3.0

Авторская информация

Эта роль была создана в 2018 году Кшиштофом Левандовским.

Установить
ansible-galaxy install klewan/ansible-role-oracle-manage-patches
Лицензия
gpl-3.0
Загрузки
121
Владелец