2018-03-07 Ansible Playbook for GI Storage



Overview

I plan to use ASMLIB for the shared storage on the REDFERN cluster.

References

Investigation

Choice to Use ASMLIB

Following the advice given in 7.1.4 Guidelines for Using Oracle ASM Disk Groups for Storage , I chose to use ASMLIB for the shared disks of the REDFERN cluster.

Gather Information about Packages

Since I am installing ASMLIB manually, I will be following the procedure in F.4.1 Configuring Storage Device Path Persistence Using Oracle ASMLIB .

F.4.1.2.1 Installing and Configuring the Oracle ASM Library Driver Software refers to Oracle ASMLib Software Update and Support Policy for Red Hat Enterprise Linux (Doc ID 1089399.1) .

Oracle ASMLib Software Update and Support Policy for Red Hat Enterprise Linux (Doc ID 1089399.1) says:

The Oracle Linux 7 RHCK  version of oracleasmlib available on: http://www.oracle.com/technetwork/server-storage/linux/asmlib/ol7-2352094.html can be used with RHEL7.

The Oracle Linux 7  RHCK version of oracleasm-support is available on ULN and here: http://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracleasm-support-2.1.8-3.el7.x86_64.rpm

kmod-oracleasm for Oracle Linux 7 RHCK is on ULN and here: http://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/kmod-oracleasm-2.0.8-8.el7.x86_64.rpm

Oracle ASMLib Downloads for Oracle Linux 7 says:

The oracleasm kernel driver is built into the Unbreakable Enterprise Kernel for Oracle Linux 7 and does not need to be installed manually.

And

Intel EM64T (x86_64) Architecture

Library and Tools

Summary

There are three (3) packages to be installed for ASMLIB:

  1. oracleasm is included as part of the OEL 7 kernal ( kmod-oracleasm ). There is no need to install separately.
  2. oracleasm-support can be installed through yum .
  3. oracleasmlib is provided as a RPM.

Procedure

Create Playbook to Install Packages

The following text was added to gi_asm.yml :

---
- name: "Oracle 12.1.0.2 GI ASM installation"
  hosts: redfern1.yaocm.id.au
  become: true

  tasks:
  - name: "Copy RPM File to Server"
    copy:
      src: /etc/ansible/roles/common/files/oracleasmlib-2.0.12-1.el7.x86_64.rpm
      dest: /tmp/oracleasmlib-2.0.12-1.el7.x86_64.rpm

  - name: "Install Oracle ASMLib RPM"
    yum:
      name: /tmp/oracleasmlib-2.0.12-1.el7.x86_64.rpm
      state: present

  - name: "Install other packages for ASM"
    yum:
      name: oracleasm-support
      state: present

...

I had downloaded the RPM file into /etc/ansible/roles/common/files/oracleasmlib-2.0.12-1.el7.x86_64.rpm on AUBURN .

I then use the copy module to place the RPM file into /tmp/oracleasmlib-2.0.12-1.el7.x86_64.rpm on REDFERN1 .

Execute Playbook to Install Packages

I ran the playbook as follows:

ansible-playbook --ask-become-pass gi_asm.yml 

The output was:

SUDO password: 

PLAY [Oracle 12.1.0.2 GI ASM installation] *************************************

TASK [Gathering Facts] *********************************************************
ok: [redfern1.yaocm.id.au]

TASK [Copy RPM File to Server] *************************************************
changed: [redfern1.yaocm.id.au]

TASK [Install Oracle ASMLib RPM] ***********************************************
changed: [redfern1.yaocm.id.au]

TASK [Install other packages for ASM] ******************************************
changed: [redfern1.yaocm.id.au]

PLAY RECAP *********************************************************************
redfern1.yaocm.id.au       : ok=4    changed=3    unreachable=0    failed=0   

This was all successful.

Improved Installation Procedure

While reviewing the Examples for YUM Module , I discovered a better way of installing RPM modules directly from the Internet. I used the following command to test this method out:

ansible -K -m yum -a "name=http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm" redfern1.yaocm.id.au

The output was:

SUDO password: 
redfern1.yaocm.id.au | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "oracleasmlib-2.0.12-1.el7.x86_64 providing /tmp/oracleasmlib-2.0.12-1.el7.x86_64hCoWxj.rpm is already installed"
    ]
}

Improved Playbook

Based on the above test, I updated gi_asm.yml as follows:

---
- name: "Oracle 12.1.0.2 GI ASM installation"
  hosts: redfern1.yaocm.id.au
  become: true

  tasks:
  - name: "Install Oracle ASMLib RPM"
    yum:
      name: http://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm
      state: present

  - name: "Install other packages for ASM"
    yum:
      name: oracleasm-support
      state: present

...

Test Improved Playbook

I tested the improved playbook as follows:

ansible-playbook --ask-become-pass gi_asm.yml

The output was:

SUDO password: 

PLAY [Oracle 12.1.0.2 GI ASM installation] *************************************

TASK [Gathering Facts] *********************************************************
ok: [redfern1.yaocm.id.au]

TASK [Install Oracle ASMLib RPM] ***********************************************
ok: [redfern1.yaocm.id.au]

TASK [Install other packages for ASM] ******************************************
ok: [redfern1.yaocm.id.au]

PLAY RECAP *********************************************************************
redfern1.yaocm.id.au       : ok=3    changed=0    unreachable=0    failed=0