klewan.ansible_role_oracle_manage_patches

Rôle Ansible : oracle-manage-patches

Ce rôle gère les correctifs Oracle.

Il applique et annule les correctifs (correctifs ponctuels et trimestriels) aux infrastructures Grid et/ou aux maisons de base de données Oracle (à la fois PRIMARY et STANDBY).

De plus, il est possible de restreindre les ORACLE_HOMEs affectés en fournissant soit des chemins ORACLE_HOME directement (oracle_manage_patches_oracle_home_name_patterns), soit des versions de logiciel (oracle_manage_patches_oracle_home_version_patterns) à considérer. Sinon, tous les ORACLE_HOMEs de n'importe quelle version liée au nom du correctif fourni seront affectés. D'autres ORACLE_HOMEs et bases de données, non liées au nom du correctif sélectionné, ne seront pas touchés.

Ce rôle est conscient du RAC et applique les correctifs à tous les nœuds du cluster chaque fois qu'un Real Application Cluster est détecté, même si le playbook est exécuté uniquement sur l'un des nœuds RAC (argument --limit d'ansible-playbook).

Pour les bases de données en veille, seuls les binaires sont corrigés, aucun script sql/datapatch n'est exécuté.

En option, les fonctionnalités suivantes sont proposées :

  • Sauvegarde des ORACLE_HOMEs (avant l'installation du correctif) - (oracle_manage_patches_backup_oracle_home + rôle oracle-homes-backup)
  • Sauvegarde des métadonnées ASM (avant l'installation du correctif) - (oracle_manage_patches_backup_asm_metadata et variable oracle_manage_patches_backup_dir)
  • Scripts de vérification pré et post (output de l’inventaire opatch, liste des objets INVALID, sortie de registry$history, dba_registry_sqlpatch, dba_registry_history et tables dba_registry) qui enregistrent leur activité dans le répertoire oracle_manage_patches_log_dir sur les cibles
  • Téléchargement de correctifs directement depuis My Oracle Support (oracle_manage_patches_download_patch_from_mos + rôle oracle-download-patches)

Ce rôle s'attend à ce que les variables suivantes soient définies (soit dans le playbook, soit via --extra-vars - voir exemples ci-dessous) :

  • oracle_manage_patches_task - soit apply soit rollback
  • oracle_manage_patches_patch_type - soit 'oneoff' soit n'importe quelle clé oracle_manage_patches_quarterly_patches (c'est-à-dire ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
  • oracle_manage_patches_patch_name - nom du correctif (ex. OCT2018/JUL2018) pour les correctifs trimestriels

Une liste de bases de données doit être fournie avec la variable oracle_databases (voir le rôle oracle pour référence). Elle peut être définie manuellement ou peuplée dynamiquement avec le rôle de découverte automatique oracle-gatherinfo-databases (voir exemple dans la section Exemple de playbook). Lorsqu'elle est configurée manuellement, oracle_databases doit être définie comme suit :

oracle_databases:
  - cluster_database: "false"
    database_role: "PRIMARY"
    database_type: "SINGLE"
    db_name: "ORCL"
    db_unique_name: "ORCL"
    edition: "Entreprise"
    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 même, la configuration de l'infrastructure Grid doit être fournie avec la variable oracle_gi_info (voir le rôle oracle pour référence). Elle peut être définie manuellement ou peuplée dynamiquement avec le rôle de découverte automatique oracle-gatherinfo-gi (voir exemple dans la section Exemple de playbook). Lorsqu'elle est configurée manuellement, oracle_gi_info doit être définie comme suit (exemple) :

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

ou

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"

Il est fortement recommandé de déclencher les rôles de découverte automatique oracle-gatherinfo-listener et oracle-gatherinfo-dbconsole avant d'exécuter ce rôle (voir exemple dans la section Exemple de playbook). Ces rôles peuplent les variables oracle_running_listeners et oracle_dbconsole_running_services qui sont utilisées par ce rôle (oracle-manage-patches) pour ramener les systèmes exactement au même état qu'avant.

Les listes de correctifs sont définies avec les variables oracle_manage_patches_opatch, oracle_manage_patches_quarterly_patches et oracle_manage_patches_oneoff_patches. Voir Variables du rôle pour plus de détails.

Les fichiers zip des correctifs peuvent être accessibles soit sur les systèmes distants, soit, localement, sur le contrôleur Ansible. Pour indiquer quelle configuration est applicable, utilisez la variable oracle_manage_patches_remote_stage.

Le rôle installe automatiquement la dernière version de l'outil OPatch pour les ORACLE_HOMEs affectés selon les données de oracle_manage_patches_opatch.

Systèmes d'exploitation pris en charge :

  • RedHat
  • CentOS
  • OracleLinux

Exigences

Ce rôle utilise les rôles oracle, oracle-asm-metadata, oracle-homes-backup et oracle-download-patches.

Exemple de Playbook

Un exemple simple :

- name: Appliquer les correctifs 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 exemple complexe (avec des fonctionnalités supplémentaires, telles que la découverte automatique GI/DB, les cronjobs et le support de surveillance [désactiver/activer]) :

- name: Appliquer les correctifs 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: Vérifier le mode à un seul hôte
      assert:
        that:
          - "play_hosts|length == 1"
        fail_msg: "C'est un mode 'à un seul hôte', mais plus d'un hôte semble être dans le play actuel"
      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

Dans vars/main.yml ou group_vars/.. ou host_vars/.. :

#-------------------------------------------------
# remplace les variables du rôle 'oracle-manage-patches'
#-------------------------------------------------

# Défini sur 'true' pour indiquer que le répertoire de mise en scène avec les fichiers zip de correctifs est accessible sur le système distant
#   et non local au contrôleur Ansible
# Défini sur 'false' pour copier les fichiers de correctifs du contrôleur Ansible vers le système distant
oracle_manage_patches_remote_stage: true

# Répertoire de mise en scène pour l'utility OPatch
oracle_manage_patches_stage_dir_opatch: /software/rdbms/opatch

# Répertoire de mise en scène pour les archives des correctifs trimestriels Oracle (PSU/RU/etc.)
oracle_manage_patches_stage_dir_quarterly_patches: /software/rdbms/quarterly_patches

# Liste des fichiers opatch
#   'filename' doit être soit un chemin complet, soit il sera recherché dans le répertoire '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

# Liste des correctifs trimestriels
#   'filename' doit être soit un chemin complet, soit il sera recherché dans le répertoire 'oracle_manage_patches_stage_dir_quarterly_patches'

oracle_manage_patches_quarterly_patches:
  ojvmgicombo:
    description: 'Combo des correctifs PSU OJVM + PSU GI'
    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: 'Combo des correctifs PSU OJVM + PSU DB'
    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

Licence

GPLv3 - Licence publique générale GNU v3.0

Informations sur l'auteur

Ce rôle a été créé en 2018 par Krzysztof Lewandowski.

Installer
ansible-galaxy install klewan.ansible_role_oracle_manage_patches
Licence
gpl-3.0
Téléchargements
133
Propriétaire