Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:ansible_oracle_ahf_install

Mit Hilfe von Ansible das AUTONOMOUS HEALTH FRAMEWORK(AHF) auf allen DB Maschinen verteilen / installieren und konfigurieren

Aufgabe Über Ansible Tower / den Oracle Linux Automation Manager soll der AHF auf allen DB Maschine ausgerollt und regelmäßig aktualisiert werden.

Ablauf:

  • Auf dem Oracle Linux Automation ManagerServer Verzeichnis zur Verfügung stellen für den Download des AHF Patches
    • Auf die richtigen Rechte für den User „awx“ achten (muss dort schreiben und lesen können!)!
  • MOS Zugangsdaten für den Download bereithalten und als User definied Credential Objekt in Tower hinterlegen
  • In Tower im Job Control Patch Verzeichnis für die Verwendung in Tower freigeben
  • Playbook für die Installation/Update und die Basis Konfiguration erstellen
  • Zugangsdaten für das Oracle Health Checks Collection Manager DB Repostitory als User definied Credential Objekt in Tower hinterlegen
  • Playbook für die Erweiterte Konfiguration für die Verwendung des Oracle Health Checks Collection Manager erstellen

AHF - Oracle AUTONOMOUS HEALTH FRAMEWORK

Lizenz

https://www.oracle.com/technetwork/database/options/clustering/ahf/learnmore/oracle-ahf-faqs-4392561.pdf

Zur Lizenz:

„Do I need a separate license for Oracle Autonomous Health Framework? Oracle Autonomous Health Framework consists of multiple components. Oracle Autonomous Health Framework compoents Cluster Health Advisor and Quality of Service Management, require an Oracle RAC license. However, the other components, Cluster Health Monitor, Cluster Verification Utility, ORAchk, Trace File Analyzer, Memory Guard, and Hang Manager do not. Please follow this link to the license guide for more information: http://docs.oracle.com/database/18/DBLIC/toc.htm


Tower vorbereiten

Verzeichnis anlegen

#als Root
 
mkdir -p /srv/patch_storage/ahf
mkdir -p /srv/patch_storage/bin
 
chown -R ansible:awx /srv/patch_storage
 
chmod -R g+w /srv/patch_storage

Unter /srv/patch_storage/bin getMOSPatch.jar von https://github.com/MarisElsins/getMOSPatch hinterlegen und in das ahf Verzeichnis verlinken

#User ansible:

cd /srv/patch_storage/bin
wget https://github.com/MarisElsins/getMOSPatch/blob/master/getMOSPatch.jar
 
# Manuell aufrufen um passende confiuguration datei zu erzeugen
java -jar getMOSPatch.jar MOSUser=Gunther.Pipperr@nomail.de patch=30166242  download=all
Enter your MOS password:
 
# oder für Linux diese anlegen:
vi .getMOSPatch.cfg
 
226P;Linux x86-64
4L;German (D)
 
#verlinken aus dem ahf Verzeichnis:
cd /srv/patch_storage/ahf
 
ln -s /srv/patch_storage/bin/getMOSPatch.jar getMOSPatch.jar 
ln -s /srv/patch_storage/bin/.getMOSPatch.cfg .getMOSPatch.cfg

Verzeichnis in Tower freigeben

In der Tower Oberfläche unter „ADMINISTRATION/SETTINGS/JOBS“ In der Box „Paths to expose to isolated jobs“ „/srv/patch_storage/ahf“ und „/srv/patch_storage/bin“ eintragen.

Credential in Tower für den MOS Account hinterlegen

Für den Support Zugang wird im Tower ein eigener Credential Type hinterlegt, siehe dazu auch Ansible Tower - Wie verhindere ich Klarschrift Passwörter in PlayBooks

Unter „ADMINISTRATION/Credential Types“

Input Configuration:

fields:
  - id: oracleSupportUser
    type: string
    label: MOS Username
  - id: oracleSupportPWD
    type: string
    label: MOS Password
    secret: true
required:
  - oracleSupportUser
  - oracleSupportPWD

Injector Configuration

extra_vars:
  oracleSupportPWD: '{{ oracleSupportPWD  }}'
  oracleSupportUser: '{{ oracleSupportUser }}'

Nun mit diesen Typ unter „Credentials“ ein Credential mit Meta Link Mail Adresse und Passwort anlegen.


Playbook Installation

 
---
- name: Install AHF Framework
  hosts: all

  tasks:

   - name: download last version
     local_action:
      module: ansible.builtin.command
      cmd:  "/usr/bin/java -jar /srv/patch_storage/bin/getMOSPatch.jar  MOSUser={{MosUser}} MOSPass={{MosPWD}} patch={{PatchId}}  download=all"
      args:
        chdir: /srv/patch_storage/ahf
     register: downloadAHF
     run_once: true
     become: no

   - debug: var=downloadAHF.stdout_lines
 

   - name: create install directory
     ansible.builtin.file:
      path: /tmp/ahf-install
      state: directory
 

   - name: extract File
     ansible.builtin.unarchive:
      src: "{{item}}"
      dest: /tmp/ahf-install
      remote_src: no
     with_fileglob:
      - "/srv/patch_storage/ahf/AHF-*"

   - name: create ahf bin directory
     become_user: root
     become: yes
     ansible.builtin.file:
      path: /opt/oracle.ahf
      owner: root
      group: root
      state: directory

 - name: create ahf data directory
     become_user: root
     become: yes
     ansible.builtin.file:
      path: /opt/oracle.ahf/data
      owner: root
      group: root
      state: directory

   - name: start the installer in silent mode
     become_user: root
     become: yes
     ansible.builtin.command: "/tmp/ahf-install/ahf_setup -ahf_loc /opt/oracle.ahf -data_dir /opt/oracle.ahf/data -silent"
     register: installAHF

   - debug: var=installAHF.stdout_lines

   - name: delete content & directory
     ansible.builtin.file:
      state: absent
      path: /tmp/ahf-install

   - name: register Mail Adress
     become_user: root
     become: yes
     ansible.builtin.command: "/opt/oracle.ahf/bin/tfactl set notificationAddress={{AhfEMail}}"
     register: ConfigureMailAHF

   - debug: var=ConfigureMailAHF.stdout_lines

   - name: Stop oraChk auto run to avoid disk problems
     become_user: root
     become: yes
     ansible.builtin.command: "/opt/oracle.ahf/bin/tfactl run orachk -autostop"
     register: ConfigureOraChk

   - debug: var=ConfigureOraChk.stdout_lines

Tower Template

In Tower nun das Template anlegen mit folgenden Extra Variables:

---
MosUser: "{{ oracleSupportUser  }}"
MosPWD: "{{ oracleSupportPWD  }}"
PatchId: "30166242"
AhfEMail: "dba@pipperr.local"

Mos Credentials unter Credentials mit hinterlegen!


Playbook Konfiguration

Credential Objekt für das Repository anlegen

Im Credential Objekt soll diese Informationen hinterlegt werden:

 OracleConnectString: "(DESCRIPTION =(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.90)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME = SRV_GPIDB_IMPORT)))"
DBPWD: "orachk"

Unter „ADMINISTRATION/Credential Types“

Input Configuration:

fields:
  - id: oracleDBUser
    type: string
    label: Oracle Datenbank Username
  - id: oracleDBConnectString
    type: string
    label: Oracle Datenbank ConnectString
  - id: oracleDBPWD
    type: string
    label: Oracle Datenbank Password
    secret: true
required:
  - oracleDBUser
  - oracleDBPWD
  - oracleDBConnectString

Injector Configuration

extra_vars:
  oracleDBConnectString: '{{ oracleDBConnectString }}'
  oracleDBPWD: '{{ oracleDBPWD  }}'
  oracleDBUser: '{{ oracleDBUser }}'

Nun mit diesen Typ unter „Credentials“ ein Credential mit Meta Link Mail Adresse und Passwort anlegen.

Das eigentliche Playbook

Zuerst wird eine bestehende DB Konfiguration entfernt und dann der interaktive Dialog zur Konfiguration „ferngesteuert“:

---
- name: Configure the DB Connection for orachk
  hosts: all
  become: yes
  become_user: root

  tasks:

   - name: Deregister the existing configuration
     ansible.builtin.command: "/opt/oracle.ahf/bin/tfactl orachk -unsetdbupload all"
     register: UnConfigureDBConnect

   - debug: var=UnConfigureDBConnect.stdout_lines

   - name: register the configuration
     ansible.builtin.expect:
       echo: yes
       chdir: "/opt/oracle.ahf/bin"
       command: "/opt/oracle.ahf/bin/tfactl orachk -setdbupload all"
       timeout: "300"
       responses:
        (.*)Enter value for RAT_UPLOAD_CONNECT_STRING(.*): "{{ OracleConnectString }}"
        (.*)Enter value for RAT_UPLOAD_PASSWORD(.*):       "{{ DBPWD }}"
     register: setDBConnection
     #failed_when: "setDBConnection.rc != 0 and 'successfully' not in setDBConnection.stdout"

   - debug: var=setDBConnection.stdout_lines

   - name: Check the existing configuration
     ansible.builtin.command: "/opt/oracle.ahf/bin/tfactl orachk -checkdbupload"
     register: checkDBConnect
     failed_when: "checkDBConnect.rc != 0 and 'good to upload' not in checkDBConnect.stdout"

   - debug: var=checkDBConnect.stdout_lines

Unter „EXTRA VARIABLES“ auf dem Template den Zugriff auf die Wert im Credential Objekt definieren:

---
OracleConnectString: "{{ oracleDBConnectString }}"
DBPWD: "{{ oracleDBPWD  }}"

Problem: Failed to import the required Python library (pexpect)

fatal: [apex01.pipperr.local]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (pexpect) on apex01.pipperr.local's Python /usr/bin/python3.6. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"}

Lösung auf den konten:

 dnf install python3-pexpect

Playbook Bericht erzeugen

Theoretisch könnte der Bericht auch über den internen Scheduler von orachk in das Repository geladen werden.

Hier aber zentral über Ansible gesteuert:

---
- name: Run orachk report
  hosts: all
  become: yes
  become_user: root

  tasks:

   - name: run the orachk report
     ansible.builtin.command: "/opt/oracle.ahf/bin/tfactl orachk  -a -dball"
     register: runReport

   - debug: var=runReport.stdout_lines

Damit aber das zentrale Repository nicht überfordert wird, wird der „FORKS“ Parameter auf 2 gesetzt, damit sollten nur je zwei DB System je gleichzeitig den Bericht erzeugen und auf den zentralen Server hochladen um zu verhindern das beim Upload Zuviel Daten auf dem DB Server übertragen werden.


Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
linux/ansible_oracle_ahf_install.txt · Zuletzt geändert: 2022/09/22 16:58 von gpipperr