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ôleoracle-homes-backup
) - Sauvegarde des métadonnées ASM (avant l'installation du correctif) - (
oracle_manage_patches_backup_asm_metadata
et variableoracle_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 tablesdba_registry
) qui enregistrent leur activité dans le répertoireoracle_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ôleoracle-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
- soitapply
soitrollback
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.
Manage Oracle patches
ansible-galaxy install klewan.ansible_role_oracle_manage_patches