klewan.ansible_role_oracle_manage_patches

Rola Ansible: oracle-manage-patches

Ta rola zarządza poprawkami Oracle.

Zastosowuje i cofa poprawki (jednorazowe oraz kwartalne) do infrastrukturę Grid oraz/lub baz danych Oracle (zarówno PRIMARY, jak i STANDBY).

Dodatkowo, istnieje możliwość ograniczenia dotkniętych ORACLE_HOMEs, podając bezpośrednio ścieżki ORACLE_HOME (oracle_manage_patches_oracle_home_name_patterns) lub wersje oprogramowania (oracle_manage_patches_oracle_home_version_patterns), które będą brane pod uwagę. W przeciwnym razie, wszystkie ORACLE_HOMEs związane z podaną nazwą łatki zostaną dotknięte. Inne ORACLE_HOMEs oraz bazy danych, które nie są związane z wybraną nazwą łatki, nie zostaną zmienione.

Rola jest świadoma klastrów RAC i stosuje poprawki do wszystkich węzłów klastra, gdy wykryje Real Application Cluster, nawet jeśli playbook jest uruchamiany tylko na jednym z węzłów RAC (argument --limit w ansible-playbook).

Dla baz danych w trybie standby jedynie pliki binarne są poprawiane, a żadne skrypty sql/datapatch nie są wykonywane.

Jako opcje dostępne są następujące funkcje:

  • Kopia zapasowa ORACLE_HOMEs (przed instalacją łaty) - (oracle_manage_patches_backup_oracle_home + rola oracle-homes-backup)
  • Kopia zapasowa metadanych ASM (przed instalacją łaty) - (oracle_manage_patches_backup_asm_metadata oraz zmienna oracle_manage_patches_backup_dir)
  • Skrypty kontrolne przed i po (wyjście opatch lsinventory, lista obiektów INVALID, wyjście z tabel registry$history, dba_registry_sqlpatch, dba_registry_history oraz dba_registry), które rejestrują swoją aktywność w katalogu oracle_manage_patches_log_dir na docelowych systemach
  • Pobieranie łatki bezpośrednio z My Oracle Support (oracle_manage_patches_download_patch_from_mos + rola oracle-download-patches)

Rola wymaga ustawienia następujących zmiennych (w playbooku lub za pomocą --extra-vars - zobacz przykłady poniżej):

  • oracle_manage_patches_task - apply lub rollback
  • oracle_manage_patches_patch_type - oneoff lub dowolny klucz 'oracle_manage_patches_quarterly_patches' (np. ojvmgicombo/ojvmdbcombo/ru/dbbp/psu)
  • oracle_manage_patches_patch_name - nazwa łatki (np. OCT2018/JUL2018) dla kwartalnych poprawek

Lista baz danych powinna być dostarczona za pomocą zmiennej oracle_databases (patrz rola oracle dla odniesienia). Może być zdefiniowana ręcznie lub dynamicznie przy użyciu roli automatycznego wykrywania oracle-gatherinfo-databases (patrz przykład w sekcji Example Playbook). Gdy jest ustawiana ręcznie, oracle_databases powinna być zdefiniowana w następujący sposób:

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

Podobnie, konfiguracja infrastruktury Grid powinna być dostarczona za pomocą zmiennej oracle_gi_info (patrz rola oracle dla odniesienia). Może być zdefiniowana ręcznie lub również dynamicznie przy użyciu roli automatycznego wykrywania oracle-gatherinfo-gi (patrz przykład w sekcji Example Playbook). Gdy jest ustawiana ręcznie, oracle_gi_info powinna być zdefiniowana w następujący sposób (przykład):

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

lub

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"

Zaleca się uruchomienie ról automatycznego wykrywania oracle-gatherinfo-listener i oracle-gatherinfo-dbconsole przed uruchomieniem tej roli (patrz przykład w sekcji Example Playbook). Te role wypełniają zmienne oracle_running_listeners oraz oracle_dbconsole_running_services, które są używane przez tę rolę (oracle-manage-patches), aby przywrócić systemy do dokładnie tego samego stanu, co przedtem.

Listy poprawek są definiowane za pomocą zmiennych oracle_manage_patches_opatch, oracle_manage_patches_quarterly_patches oraz oracle_manage_patches_oneoff_patches. Zobacz Role Variables dla szczegółów.

Pliki zip z łatkami mogą być dostępne zarówno na zdalnych systemach, jak i lokalnie na kontrolerze Ansible. Aby wskazać, która konfiguracja ma zastosowanie, użyj zmiennej oracle_manage_patches_remote_stage.

Rola automatycznie instaluje najnowsze narzędzie OPatch dla dotkniętych ORACLE_HOMEs zgodnie z danymi oracle_manage_patches_opatch.

Obsługiwane systemy operacyjne:

  • RedHat
  • CentOS
  • OracleLinux

Wymagania

Ta rola wykorzystuje role oracle, oracle-asm-metadata, oracle-homes-backup oraz oracle-download-patches.

Przykład Playbooka

Prosty przykład:

- name: Apply Oracle Patches
  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
      

Złożony przykład (z dodatkowymi funkcjami, takimi jak automatyczne wykrywanie GI/DB, cronjobs i wsparcie monitorowania [wyłącz/ włącz]):

- name: Apply Oracle Patches
  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: Check a single host mode
    assert:
      that:
        - "play_hosts|length == 1"
      fail_msg: "To jest tryb 'pojedynczego hosta', ale wydaje się, że w bieżącej grze jest więcej niż jeden host"
    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

Licencja

GPLv3 - GNU General Public License v3.0

Informacje o Autorze

Ta rola została stworzona w 2018 roku przez Krzysztofa Lewandowskiego.

Zainstaluj
ansible-galaxy install klewan.ansible_role_oracle_manage_patches
Licencja
gpl-3.0
Pobrania
133
Właściciel