【Ansible】【Oracle】RAC環境自動構築なんちゃんて（19c）

### OSインストールとネットワークの設定は手動
```:OSバージョン
[root@host01 ~]# uname -r
4.14.35-1818.3.3.el7uek.x86_64
[root@host01 ~]#
[root@host01 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.6
```

### 初期設定
```:全DBノードで実施
[root@host01 ~]# mkdir .ssh
```

```:Ansible実行ノードから全DBノードに実施
[root@ansible]# cat ~/.ssh/id_rsa.pub | ssh node1 'cat >> .ssh/authorized_keys'
root@node1's password:
[root@ansible]# cat ~/.ssh/id_rsa.pub | ssh node2 'cat >> .ssh/authorized_keys'
root@node2's password:
```

```:Ansible用のhostsファイルを作成
[root@ansible ~]# cd /etc/ansible/
[root@ansible ansible]# cat hosts
[oracle19cR3-servers]
host01 ansible_default_ipv4=192.168.1.1
host02 ansible_default_ipv4=192.168.1.2

[all:vars]
ansible_ssh_user=root
ansible_ssh_private_key_files=/root/.ssh/id_rsa
[root@ansible ansible]#
```

```:Ansibleからの接続確認
[root@ansible ansible]# ansible host01 -m ping -i hosts

host01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[root@ansible ansible]#
[root@ansible ansible]# ansible oracle19cR3-servers -m ping -i hosts
host01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host02 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[root@ansible ansible]#
```

### パッケージの追加とOS設定
```:playbookの作成
[root@ansible ansible]# cat 01_change_os_setting_19cR3.yml
- hosts: oracle19cR3-servers
  tasks:
    - name: create file for 1oracle.yum.repo
      lineinfile: dest=/etc/yum.repos.d/oracle.repo create=yes insertafter=EOF line={{ item }}
      with_items:
         - '[ol7.6uek]'
         - 'name=Unbreakable Enterprise Kernel Release 6 for Oracle Linux 7'
         - 'baseurl=file:///run/media/root/OL-7.6\ Server.x86_64/'
         - 'enabled=1'
         - 'gpgcheck=1'
         - 'gpgkey=file:///run/media/root/OL-7.6\ Server.x86_64/RPM-GPG-KEY-oracle'

    - name: change SELinux is disable
      lineinfile: dest=/etc/selinux/config create=no insertafter=EOF line='SELINUX=disabled'

    - name: stop firewall
      shell: systemctl stop firewalld

    - name: stop auto start a firewall
      shell: systemctl disable firewalld

    - name: install the latest version for compat-libcap1
      yum: disablerepo=* enablerepo=ol7.6uek name=compat-libcap1.x86_64

    - name: install the latest version for compat-libstdc++-33.i686
      yum: disablerepo=* enablerepo=ol7.6uek name=compat-libstdc++-33.i686

    - name: install the latest version for compat-libstdc++-33
      yum: disablerepo=* enablerepo=ol7.6uek name=compat-libstdc++-33.x86_64

    - name: install the latest version for dtrace-util
      yum: disablerepo=* enablerepo=ol7.6uek name=dtrace-utils.x86_64

    - name: install the latest version for elfutils-libelf-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=elfutils-libelf-devel.x86_64

    - name: install the latest version for fontconfig-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=fontconfig-devel.x86_64

    - name: install the latest version for glibc-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=glibc-devel.x86_64

    - name: install the latest version for libaio-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=libaio-devel.x86_64

    - name: install the latest version for libdtrace-ctf-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=libdtrace-ctf-devel.x86_64

    - name: install the latest version for libXrender-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=libXrender-devel.x86_64

    - name: install the latest version for ksh
      yum: disablerepo=* enablerepo=ol7.6uek name=ksh.x86_64

    - name: install the latest version for libstdc++-devel
      yum: disablerepo=* enablerepo=ol7.6uek name=libstdc++-devel.x86_64

    - name: copy preinstall file
      copy:
        src: /tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
        dest: /tmp/

    - block:
      - command: rpm -q oracle-database-preinstall-19c
        changed_when: no
      rescue:
      - command: rpm -Uvh /tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

    - name: stop auto start a avahi-daemon
      shell: systemctl disable avahi-daemon

    - name: stop avahi-daemon
      shell: systemctl stop avahi-daemon

    - name: stop auto start a chronyd
      shell: systemctl disable chronyd

    - name: stop chronyd
      shell: systemctl stop chronyd

[root@ansible ansible]#
```

```:playbookの実行
[root@ansible ansible]# ansible-playbook 01_change_os_setting_19cR3.yml

PLAY [oracle19cR3-servers] *******************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [host01]
ok: [host02]

TASK [create file for 1oracle.yum.repo] ******************************************************************************************
changed: [host02] => (item=[ol7.6uek])
changed: [host01] => (item=[ol7.6uek])
changed: [host02] => (item=name=Unbreakable Enterprise Kernel Release 6 for Oracle Linux 7)
changed: [host01] => (item=name=Unbreakable Enterprise Kernel Release 6 for Oracle Linux 7)
changed: [host02] => (item=baseurl=file:///run/media/root/OL-7.6\ Server.x86_64/)
changed: [host01] => (item=baseurl=file:///run/media/root/OL-7.6\ Server.x86_64/)
changed: [host01] => (item=enabled=1)
changed: [host02] => (item=enabled=1)
changed: [host02] => (item=gpgcheck=1)
changed: [host01] => (item=gpgcheck=1)
changed: [host01] => (item=gpgkey=file:///run/media/root/OL-7.6\ Server.x86_64/RPM-GPG-KEY-oracle)
changed: [host02] => (item=gpgkey=file:///run/media/root/OL-7.6\ Server.x86_64/RPM-GPG-KEY-oracle)

TASK [change SELinux is disable] *************************************************************************************************
changed: [host02]
changed: [host01]

TASK [stop firewall] *************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [stop auto start a firewall] ************************************************************************************************
changed: [host01]
changed: [host02]

TASK [install the latest version for compat-libcap1] *****************************************************************************
changed: [host01]
changed: [host02]

TASK [install the latest version for compat-libstdc++-33.i686] *******************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for compat-libstdc++-33] ************************************************************************
changed: [host01]
changed: [host02]

TASK [install the latest version for dtrace-util] ********************************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for elfutils-libelf-devel] **********************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for fontconfig-devel] ***************************************************************************
changed: [host01]
changed: [host02]

TASK [install the latest version for glibc-devel] ********************************************************************************
ok: [host02]
ok: [host01]

TASK [install the latest version for libaio-devel] *******************************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for libdtrace-ctf-devel] ************************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for libXrender-devel] ***************************************************************************
changed: [host02]
changed: [host01]

TASK [install the latest version for ksh] ****************************************************************************************
changed: [host01]
changed: [host02]

TASK [install the latest version for libstdc++-devel] ****************************************************************************
changed: [host01]
changed: [host02]

TASK [copy preinstall file] ******************************************************************************************************
changed: [host02]
changed: [host01]

TASK [command] ****************************************************************************************************************************************
 [WARNING]: Consider using yum, dnf or zypper module rather than running rpm

fatal: [host01]: FAILED! => {"changed": false, "cmd": ["rpm", "-q", "oracle-database-preinstall-19c"], "delta": "0:00:00.044922", "end": "2019-05-11 19:29:17.873810", "failed": true, "rc": 1, "start": "2019-05-11 19:29:17.828888", "stderr": "", "stderr_lines": [], "stdout": "パッケージ oracle-database-preinstall-19c はインストールされていません。", "stdout_lines": ["パッケージ oracle-database-preinstall-19c はインストールされていません。"]}
fatal: [host02]: FAILED! => {"changed": false, "cmd": ["rpm", "-q", "oracle-database-preinstall-19c"], "delta": "0:00:00.046970", "end": "2019-05-11 19:29:17.933092", "failed": true, "rc": 1, "start": "2019-05-11 19:29:17.886122", "stderr": "", "stderr_lines": [], "stdout": "パッケージ oracle-database-preinstall-19c はインストールされていません。", "stdout_lines": ["パッケージ oracle-database-preinstall-19c はインストールされていません。"]}

TASK [command] ****************************************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [stop auto start a avahi-daemon] *****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [stop avahi-daemon] ******************************************************************************************************************************
changed: [host02]
changed: [host01]

PLAY RECAP ********************************************************************************************************************************************
host01                 : ok=21   changed=17   unreachable=0    failed=1
host02                 : ok=21   changed=17   unreachable=0    failed=1
[root@ansible ansible]#
```
echoとかcatはdebug使わないとダメっぽい。。。
faild出ているけどパッケージはインストールされていたからOK

### Oracle用 OS設定
```:OS設定
[root@ansible]# cat 02_change_oracle_params_19cR3.yml
- hosts: oracle19cR3-servers
  tasks:
    - name: backup for /etc/hosts
      shell: cp -p /etc/hosts /etc/hosts.`date +%Y%m%d`

    - name: create file for oracle.hosts
      lineinfile:
         dest=/etc/hosts
         create=no
         insertafter=EOF
         line={{ item }}
      with_items:
         - '192.168.1.1      host01.oratest.jp  host01'
         - '192.168.1.2      host02.oratest.jp  host02'
         - '192.168.1.3      host01-vip.oratest.jp      host01-vip'
         - '192.168.1.4      host02-vip.oratest.jp      host02-vip'
         - ''
         - '### DNS'
         - '192.168.1.254  dns01.oratest.jp  dns01'
         - ''
         - '### storage'
         - '192.168.2.241  storage01.oratest.jp  storage01'
         - '192.168.2.242  storage02.oratest.jp  storage02'
         - '192.168.2.243  storage03.oratest.jp  storage03'
         - ''

    - name: backup for grub.cfg
      shell: cp -p /boot/grub2/grub.cfg /boot/grub2/grub.cfg.`date +%Y%m%d%H%M%S`

    - name: change for grub.cfg
      shell: sed -i".`date +%Y%m%d%H%M%S`" -e "s/transparent_hugepage=never/transparent_hugepage=always/g" /etc/default/grub

    - name: make grub2
      shell: grub2-mkconfig -o /boot/grub2/grub.cfg

    - name: backup for /etc/sysctl.conf
      shell: cp -p /etc/sysctl.conf /etc/sysctl.conf.`date +%Y%m%d%H%M%S`

    - sysctl:
        name: net.ipv4.conf.ens256.rp_filter
        value: 2

    - sysctl:
        name: net.ipv4.conf.ens224.rp_filter
        value: 1

    - sysctl:
        name: net.ipv4.conf.ens192.rp_filter
        value: 2
        sysctl_set: yes
        state: present
        reload: yes

#    - name: be sure ntpd is not running and disabled
#      service: name=ntpd state=stopped enabled=no

    - name: stat /etc/ntp.conf
      stat: path=/etc/ntp.conf
      register: result

    - name: move file /etc/ntp.conf
      shell: mv /etc/ntp.conf /etc/ntp.conf.`date +%Y%m%d%H%M%S`
      when: result.stat.exists

    - name: stat /var/run/ ntpid.pid
      stat: path=/var/run/ntpd.pid
      register: result

    - name: remove file /var/run/ntpd.pid
      shell: rm /var/run/ntpd.pid
      when: result.stat.exists

    - pam_limits:
        domain: grid
        limit_type: soft
        limit_item: nproc
        value: 2047

    - pam_limits:
        domain: grid
        limit_type: hard
        limit_item: nproc
        value: 16384

    - pam_limits:
        domain: grid
        limit_type: soft
        limit_item: nofile
        value: 1024

    - pam_limits:
        domain: grid
        limit_type: hard
        limit_item: nofile
        value: 65536

    - pam_limits:
        domain: grid
        limit_type: soft
        limit_item: stack
        value: 10240

    - pam_limits:
        domain: grid
        limit_type: hard
        limit_item: stack
        value: 10240


    - pam_limits:
        domain: oracle
        limit_type: soft
        limit_item: nproc
        value: 2047

    - pam_limits:
        domain: oracle
        limit_type: hard
        limit_item: nproc
        value: 16384

    - pam_limits:
        domain: oracle
        limit_type: soft
        limit_item: nofile
        value: 1024

    - pam_limits:
        domain: oracle
        limit_type: hard
        limit_item: nofile
        value: 65536

    - pam_limits:
        domain: oracle
        limit_type: soft
        limit_item: stack
        value: 10240

    - pam_limits:
        domain: oracle
        limit_type: hard
        limit_item: stack
        value: 10240
[root@ansible]#
```

```:playbookの実行
[root@ansible]# ansible-playbook 02_change_oracle_params_19cR3.yml

PLAY [oracle19cR3-servers] *******************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [host02]
ok: [host01]

TASK [backup for /etc/hosts] *****************************************************************************************************
changed: [host02]
changed: [host01]

TASK [create file for oracle.hosts] **********************************************************************************************
changed: [host02] => (item=192.168.1.1      host01.oratest.jp  host01)
changed: [host01] => (item=192.168.1.1      host01.oratest.jp  host01)
changed: [host02] => (item=192.168.1.2      host02.oratest.jp  host02)
changed: [host01] => (item=192.168.1.2      host02.oratest.jp  host02)
changed: [host02] => (item=192.168.1.3      host01-vip.oratest.jp      host01-vip)
changed: [host01] => (item=192.168.1.3      host01-vip.oratest.jp      host01-vip)
changed: [host02] => (item=192.168.1.4      host02-vip.oratest.jp      host02-vip)
changed: [host01] => (item=192.168.1.4      host02-vip.oratest.jp      host02-vip)
changed: [host02] => (item=)
changed: [host01] => (item=)
changed: [host02] => (item=### DNS)
changed: [host01] => (item=### DNS)
changed: [host02] => (item=192.168.1.254  dns01.oratest.jp  dns01)
changed: [host01] => (item=192.168.1.254  dns01.oratest.jp  dns01)
ok: [host02] => (item=)
ok: [host01] => (item=)
changed: [host02] => (item=### storage)
changed: [host01] => (item=### storage)
changed: [host02] => (item=192.168.2.241  storage01.oratest.jp  storage01)
changed: [host01] => (item=192.168.2.241  storage01.oratest.jp  storage01)
changed: [host02] => (item=192.168.2.242  storage02.oratest.jp  storage02)
changed: [host01] => (item=192.168.2.242  storage02.oratest.jp  storage02)
changed: [host01] => (item=192.168.2.243  storage03.oratest.jp  storage03)
changed: [host02] => (item=192.168.2.243  storage03.oratest.jp  storage03)
ok: [host02] => (item=)
ok: [host01] => (item=)

TASK [backup for grub.cfg] *******************************************************************************************************
changed: [host02]
changed: [host01]

TASK [change for grub.cfg] *******************************************************************************************************
 [WARNING]: Consider using template or lineinfile module rather than running sed

changed: [host01]
changed: [host02]

TASK [make grub2] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [backup for /etc/sysctl.conf] ***********************************************************************************************
changed: [host01]
changed: [host02]

TASK [sysctl] ********************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [sysctl] ********************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [sysctl] ********************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [stat /etc/ntp.conf] ********************************************************************************************************
ok: [host02]
ok: [host01]

TASK [move file /etc/ntp.conf] ***************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [stat /var/run/ ntpid.pid] **************************************************************************************************
ok: [host01]
ok: [host02]

TASK [remove file /var/run/ntpd.pid] *********************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [pam_limits] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [pam_limits] ****************************************************************************************************************
changed: [host01]
changed: [host02]

PLAY RECAP ***********************************************************************************************************************
host01                 : ok=24   changed=21   unreachable=0    failed=0
host02                 : ok=24   changed=21   unreachable=0    failed=0

[root@ansible]#
```
scanが DNSに登録されない時には、dnsmasqを再起動してみる

### グループとユーザ作成
```:Oracleのグループとユーザ作成
[root@ansible]# cat 03_add_oracle_group_user_19cR3.yml
- hosts: oracle19cR3-servers
  tasks:
    - name: check group for oinstall
      shell: grep oinstall /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for oinstall
      shell: /usr/sbin/groupadd -g 54321 oinstall
      changed_when: False
      when: result|failed

    - name: check group for dba
      shell: grep dba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for dba
      shell: /usr/sbin/groupadd -g 54322 dba
      changed_when: False
      when: result|failed

    - name: check group for oper
      shell: grep oper /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for oper
      shell: /usr/sbin/groupadd -g 54323 oper
      changed_when: False
      when: result|failed

    - name: check group for backupdba
      shell: grep backupdba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for backupdba
      shell: /usr/sbin/groupadd -g 54324 backupdba
      changed_when: False
      when: result|failed

    - name: check group for dgdba
      shell: grep dgdba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for dgdba
      shell: /usr/sbin/groupadd -g 54325 dgdba
      changed_when: False
      when: result|failed

    - name: check group for kmdba
      shell: grep kmdba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for kmdba
      shell: /usr/sbin/groupadd -g 54326 kmdba
      changed_when: False
      when: result|failed

    - name: check group for asmadmin
      shell: grep asmadmin /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for asmadmin
      shell: /usr/sbin/groupadd -g 54329 asmadmin
      changed_when: False
      when: result|failed

    - name: check group for asmdba
      shell: grep asmdba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for asmdba
      shell: /usr/sbin/groupadd -g 54327 asmdba
      changed_when: False
      when: result|failed

    - name: check group for asmoper
      shell: grep asmoper /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for asmoper
      shell: /usr/sbin/groupadd -g 54328 asmoper
      changed_when: False
      when: result|failed

    - name: check group for racdba
      shell: grep racdba /etc/group
      register: result
      ignore_errors: True
      changed_when: False

    - name: add group for racdba
      shell: /usr/sbin/groupadd -g 54330 racdba
      changed_when: False
      when: result|failed

    - name: check user for grid
      shell: id grid
      register: result
      ignore_errors: True
      changed_when: False

    - name: add user for grid
      shell: /usr/sbin/useradd -u 54331 -g oinstall -G dba,asmadmin,asmdba,asmoper,racdba grid
      changed_when: False
      when: result|failed

    - name: check user for oracle
      shell: id oracle
      register: result
      ignore_errors: True
      changed_when: False

    - name: add user for oracle
      shell: /usr/sbin/useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,asmdba,oper,racdba,asmdba oracle
      changed_when: False
      when: result|failed

    - name: change password for grid
      user:
        name: "grid"
        password: "{{ '***' | password_hash('sha512') }}"

    - name: change password for oracle
      user:
        name: "oracle"
        password: "{{ '***' | password_hash('sha512') }}"

    - name: create directory for grid base
      shell: mkdir -p /u01/app/grid

    - name: create directory for oracle base
      shell: mkdir -p /u01/app/oracle

    - name: create directory for grid home
      shell: mkdir -p /u01/app/19.3.0/grid

    - name: change owner for grid
      shell: chown -R grid:oinstall /u01

    - name: change owner for oracle
      shell: chown -R oracle:oinstall /u01/app/oracle

    - name: change
      shell: chmod -R 775 /u01/

    - name: add bash_profile for grid
      lineinfile: dest=/home/grid/.bash_profile line='{{ item.line }}'
      with_items:
      - line: " "
      - line: "### for grid "
      - line: "export LANG=ja_JP.UTF-8"
      - line: "export NLS_LANG=japanese_Japan.AL32UTF8"

    - name: add bash_profile for oracle
      lineinfile: dest=/home/oracle/.bash_profile line='{{ item.line }}'
      with_items:
      - line: " "
      - line: "### for oracle "
      - line: "export LANG=ja_JP.UTF-8"
      - line: "export NLS_LANG=japanese_Japan.AL32UTF8"

[root@ansible]#
```

```:Playbookの実行
[root@ansible]# ansible-playbook 03_add_oracle_group_user_19cR3.yml

PLAY [oracle19cR3-servers] *******************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [host01]
ok: [host02]

TASK [check group for oinstall] **************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add group for oinstall] ****************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for dba] *******************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add group for dba] *********************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for oper] ******************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add group for oper] ********************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for backupdba] *************************************************************************************************
ok: [host02]
ok: [host01]

TASK [add group for backupdba] ***************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for dgdba] *****************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add group for dgdba] *******************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for kmdba] *****************************************************************************************************
ok: [host02]
ok: [host01]

TASK [add group for kmdba] *******************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check group for asmadmin] **************************************************************************************************
fatal: [host02]: FAILED! => {"changed": false, "cmd": "grep asmadmin /etc/group", "delta": "0:00:00.003799", "end": "2019-05-05 16:33:03.116073", "failed": true, "rc": 1, "start": "2019-05-05 16:33:03.112274", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
fatal: [host01]: FAILED! => {"changed": false, "cmd": "grep asmadmin /etc/group", "delta": "0:00:00.005300", "end": "2019-05-05 16:33:03.303081", "failed": true, "rc": 1, "start": "2019-05-05 16:33:03.297781", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring

TASK [add group for asmadmin] ****************************************************************************************************
ok: [host02]
ok: [host01]

TASK [check group for asmdba] ****************************************************************************************************
fatal: [host01]: FAILED! => {"changed": false, "cmd": "grep asmdba /etc/group", "delta": "0:00:00.004289", "end": "2019-05-05 16:33:03.817813", "failed": true, "rc": 1, "start": "2019-05-05 16:33:03.813524", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
fatal: [host02]: FAILED! => {"changed": false, "cmd": "grep asmdba /etc/group", "delta": "0:00:00.005689", "end": "2019-05-05 16:33:03.661576", "failed": true, "rc": 1, "start": "2019-05-05 16:33:03.655887", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring

TASK [add group for asmdba] ******************************************************************************************************
ok: [host01]
ok: [host02]

TASK [check group for asmoper] ***************************************************************************************************
fatal: [host01]: FAILED! => {"changed": false, "cmd": "grep asmoper /etc/group", "delta": "0:00:00.003843", "end": "2019-05-05 16:33:04.409248", "failed": true, "rc": 1, "start": "2019-05-05 16:33:04.405405", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
fatal: [host02]: FAILED! => {"changed": false, "cmd": "grep asmoper /etc/group", "delta": "0:00:00.003943", "end": "2019-05-05 16:33:04.239124", "failed": true, "rc": 1, "start": "2019-05-05 16:33:04.235181", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring

TASK [add group for asmoper] *****************************************************************************************************
ok: [host01]
ok: [host02]

TASK [check group for racdba] ****************************************************************************************************
ok: [host02]
ok: [host01]

TASK [add group for racdba] ******************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [check user for grid] *******************************************************************************************************
fatal: [host02]: FAILED! => {"changed": false, "cmd": "id grid", "delta": "0:00:00.004200", "end": "2019-05-05 16:33:05.085232", "failed": true, "rc": 1, "start": "2019-05-05 16:33:05.081032", "stderr": "id: grid: no such user", "stderr_lines": ["id: grid: no such user"], "stdout": "", "stdout_lines": []}
...ignoring
fatal: [host01]: FAILED! => {"changed": false, "cmd": "id grid", "delta": "0:00:00.004254", "end": "2019-05-05 16:33:05.267875", "failed": true, "rc": 1, "start": "2019-05-05 16:33:05.263621", "stderr": "id: grid: no such user", "stderr_lines": ["id: grid: no such user"], "stdout": "", "stdout_lines": []}
...ignoring

TASK [add user for grid] *********************************************************************************************************
ok: [host01]
ok: [host02]

TASK [check user for oracle] *****************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add user for oracle] *******************************************************************************************************
skipping: [host01]
skipping: [host02]

TASK [change password for grid] **************************************************************************************************
changed: [host02]
changed: [host01]

TASK [change password for oracle] ************************************************************************************************
changed: [host01]
changed: [host02]

TASK [create directory for grid base] ********************************************************************************************
 [WARNING]: Consider using file module with state=directory rather than running mkdir

changed: [host02]
changed: [host01]

TASK [create directory for oracle base] ******************************************************************************************
changed: [host01]
changed: [host02]

TASK [create directory for grid home] ********************************************************************************************
changed: [host01]
changed: [host02]

TASK [change owner for grid] *****************************************************************************************************
 [WARNING]: Consider using file module with owner rather than running chown

changed: [host01]
changed: [host02]

TASK [change owner for oracle] ***************************************************************************************************
changed: [host01]
changed: [host02]

TASK [change] ********************************************************************************************************************
 [WARNING]: Consider using file module with mode rather than running chmod

changed: [host01]
changed: [host02]

TASK [add bash_profile for grid] *************************************************************************************************
changed: [host02] => (item={u'line': u' '})
changed: [host01] => (item={u'line': u' '})
changed: [host02] => (item={u'line': u'### for grid '})
changed: [host01] => (item={u'line': u'### for grid '})
changed: [host02] => (item={u'line': u'export LANG=ja_JP.UTF-8'})
changed: [host01] => (item={u'line': u'export LANG=ja_JP.UTF-8'})
changed: [host02] => (item={u'line': u'export NLS_LANG=japanese_Japan.AL32UTF8'})
changed: [host01] => (item={u'line': u'export NLS_LANG=japanese_Japan.AL32UTF8'})

TASK [add bash_profile for oracle] ***********************************************************************************************
changed: [host01] => (item={u'line': u' '})
changed: [host02] => (item={u'line': u' '})
changed: [host02] => (item={u'line': u'### for oracle '})
changed: [host01] => (item={u'line': u'### for oracle '})
changed: [host02] => (item={u'line': u'export LANG=ja_JP.UTF-8'})
changed: [host01] => (item={u'line': u'export LANG=ja_JP.UTF-8'})
changed: [host02] => (item={u'line': u'export NLS_LANG=japanese_Japan.AL32UTF8'})
changed: [host01] => (item={u'line': u'export NLS_LANG=japanese_Japan.AL32UTF8'})
host02PLAY RECAP ***********************************************************************************************************************
host01                 : ok=27   changed=10   unreachable=0    failed=0
host02                 : ok=27   changed=10   unreachable=0    failed=0

[root@ansible]#
```

```:ノンパス設定。。。うまくいかなかったので全DBノードで手動実施
[root@host01 ~]# sudo su - [oracle|grid]
[oracle@host01 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx oracle@host01.oratest.jp
The key's randomart image is:

[oracle@host01 ~]$ cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys
[oracle@host01 ~]$ cat ~/.ssh/id_rsa.pub | ssh host02 'cat >> .ssh/authorized_keys'
The authenticity of host 'host02 (192.168.1.2)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx
ECDSA key fingerprint is MD5:xxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'host02,192.168.1.2' (ECDSA) to the list of known hosts.
oracle@host02's password:
Permission denied, please try again.
oracle@host02's password:
[oracle@host01 ~]$ ssh host01 hostname
The authenticity of host 'host01 (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx
ECDSA key fingerprint is MD5:xxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'host01,192.168.1.1' (ECDSA) to the list of known hosts.
host01.oratest.jp
[oracle@host01 ~]$ ssh host01 hostname
host01.oratest.jp
[oracle@host01 ~]$
[oracle@host01 ~]$ ssh host02 hostname
oradb19032.oratest.jp
[oracle@host01 ~]$
```

### ストレージサーバの準備
いままでと変わらないので省略

### ストレージの認識
ACFS, ADVMといったところは使わず、あいも変わらず udevを使用する
いまの私の知識ではこれが限界。。。とりあえず、これで手間を回避

```:Playbook作成
[root@ansible]# cat 04_change_iscsi_19cR3.yml
- hosts: oracle19cR3-servers
  tasks:
    - name: Configure iSCSI discovery authentication
      lineinfile:
        dest: /etc/iscsi/initiatorname.iscsi
        regexp: '^InitiatorName='
        line:    'InitiatorName=iqn.2019-05.oratest.jp:{{ ansible_ens192.ipv4.address }}'

    - name: be sure iscsi is running and enabled
      service: name=iscsi enabled=yes

    - name: be sure iscsid is running and enabled
      service: name=iscsid enabled=yes

    - name: iscsi target
      shell: iscsiadm -m discovery -t sendtargets -p 192.168.2.221

    - name: iscsi login
      shell: iscsiadm --mode node --targetname iqn.2017-08.oratest.jp:storage01.oratest.jp -p 192.168.2.221:3260,6 --login

    - name: iscsi target
      shell: iscsiadm -m discovery -t sendtargets -p 192.168.2.222

    - name: iscsi login
      shell: iscsiadm --mode node --targetname iqn.2017-08.oratest.jp:storage02.oratest.jp -p 192.168.2.222:3260,6 --login

    - name: iscsi target
      shell: iscsiadm -m discovery -t sendtargets -p 192.168.2.223

    - name: iscsi login
      shell: iscsiadm --mode node --targetname iqn.2017-08.oratest.jp:storage03.oratest.jp -p 192.168.2.223:3260,6 --login

    - name: Configure UDEV Rules for Oracle
      shell: lsscsi -i | awk '/19CR3/ { print "KERNEL==\"sd*\", ENV{DEVTYPE}==\"disk\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d $devnode\", RESULT==\"" $7 "\", RUN+=\"/bin/sh -c \047mknod /dev/" substr($1,2,6) "_" $4 " b $major $minor; chown grid:asmadmin /dev/" substr($1,2,6) "_" $4 "; chmod 0660 /dev/" substr($1,2,6) "_" $4 "\047\""}' > /etc/udev/rules.d/99-asm.rules

    - name: Chenge UDEV Rules for Storage01
      shell: sed -i -e "s/33:0:0/storage01/g" /etc/udev/rules.d/99-asm.rules

    - name: Chenge UDEV Rules for Storage02
      shell: sed -i -e "s/34:0:0/storage02/g" /etc/udev/rules.d/99-asm.rules

    - name: Chenge UDEV Rules for Storage03
      shell: sed -i -e "s/35:0:0/storage03/g" /etc/udev/rules.d/99-asm.rules

    - name: Check for new device name
      shell: /sbin/udevadm trigger --type=devices --action=change

    - name: Reflection UDEV Rules for Oracle
      shell: udevadm control --reload
[root@ansible]#
```

```:playbookの実行

[root@ansible]# ansible-playbook 04_change_iscsi_19cR3.yml

PLAY [oracle19cR3-servers] *******************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [host01]
ok: [host02]

TASK [Configure iSCSI discovery authentication] **********************************************************************************
ok: [host02]
ok: [host01]

TASK [be sure iscsi is running and enabled] **************************************************************************************
ok: [host01]
ok: [host02]

TASK [be sure iscsid is running and enabled] *************************************************************************************
ok: [host01]
ok: [host02]

TASK [iscsi target] **************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [iscsi login] ***************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [iscsi target] **************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [iscsi login] ***************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [iscsi target] **************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [iscsi login] ***************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [Configure UDEV Rules for Oracle] *******************************************************************************************
changed: [host02]
changed: [host01]

TASK [Reflection UDEV Rules for Oracle] ******************************************************************************************
changed: [host01]
changed: [host02]

TASK [Chenge UDEV Rules for Storage01] ****************************************************************************************************************
changed: [host01]
changed: [host02]

TASK [Chenge UDEV Rules for Storage02] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [Chenge UDEV Rules for Storage03] ****************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [Check for new device name] **********************************************************************************************************************
changed: [host02]
changed: [host01]

TASK [Reflection UDEV Rules for Oracle] ***************************************************************************************************************
changed: [host01]
changed: [host02]

PLAY RECAP ***********************************************************************************************************************
host01                 : ok=12   changed=8    unreachable=0    failed=1
host02                 : ok=12   changed=8    unreachable=0    failed=1

[root@ansible]#
```

### Grid Infrastructureのインストール

```:1回目のTRYは失敗
fatal: [host01]: FAILED! => {"changed": true, "cmd": "su grid -c \"/u01/app/19.3.0/grid/gridSetup.sh -silent -responseFile /tmp/grid.rsp\"", "delta": "0:00:51.064427", "end": "2019-05-06 16:08:00.603742", "failed": true, "rc": 254, "start": "2019-05-06 16:07:09.539315", "stderr": "", "stderr_lines": [], "stdout": "Oracle Grid Infrastructure設定ウィザードを起動中...\n\n[FATAL] [INS-40980] インストーラにより、次のノードに別名が指定されていることが検出されました: \n [host02]。 \n \n これらのノードは無視され、構成されたGrid Infrastructureに参加しません。\n   原因: 別名のホスト名が指定されています。\nインストール・セッション・ログの移動先:\n /u01/app/oraInventory/logs/GridSetupActions2019-05-06_04-07-09PM", "stdout_lines": ["Oracle Grid Infrastructure設定ウィザードを起動中...", "", "[FATAL] [INS-40980] インストーラにより、次のノードに別名が指定されていることが検出されました: ", " [host02]。 ", " ", " これらのノードは無視され、構成されたGrid Infrastructureに参加しません。", "   原因: 別名のホスト名が指定されています。", "インストール・セッション・ログの移動先:", " /u01/app/oraInventory/logs/GridSetupActions2019-05-06_04-07-09PM"]}

// INS-40980 Error During Installation of Oracle Grid Infrastructure (ドキュメントID 2397695.1)
// を参考に、runcluvfyで悪いところを探す

[grid@host01 ~]$ /u01/app/19.3.0/grid/runcluvfy.sh stage -pre crsinst -n host01,host02 -verbose

ERROR:
PRVG-10467 : デフォルトのOracleインベントリ・グループを判別できませんでした。


物理メモリーの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    9.7498GB (1.022338E7KB)   8GB (8388608.0KB)         合格
  host01    9.7498GB (1.0223372E7KB)  8GB (8388608.0KB)         合格
物理メモリーの検証中...合格
使用可能物理メモリーの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    8.2717GB (8673552.0KB)    50MB (51200.0KB)          合格
  host01    8.0205GB (8410104.0KB)    50MB (51200.0KB)          合格
使用可能物理メモリーの検証中...合格
スワップ・サイズの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    4.9375GB (5177340.0KB)    9.7498GB (1.022338E7KB)   失敗
  host01    4.9375GB (5177340.0KB)    9.7498GB (1.0223372E7KB)  失敗
スワップ・サイズの検証中...失敗 (PRVF-7573)
空き領域: host02:/usr,host02:/var,host02:/etc,host02:/sbin,host02:/tmpの検証中...
  パス                ノード名          マウント・ポイント     使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              host02    /             48.3184GB     25MB          合格
  /var              host02    /             48.3184GB     5MB           合格
  /etc              host02    /             48.3184GB     25MB          合格
  /sbin             host02    /             48.3184GB     10MB          合格
  /tmp              host02    /             48.3184GB     1GB           合格
空き領域: host02:/usr,host02:/var,host02:/etc,host02:/sbin,host02:/tmpの検証中...合格
空き領域: host01:/usr,host01:/var,host01:/etc,host01:/sbin,host01:/tmpの検証中...
  パス                ノード名          マウント・ポイント     使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              host01    /             42.0732GB     25MB          合格
  /var              host01    /             42.0732GB     5MB           合格
  /etc              host01    /             42.0732GB     25MB          合格
  /sbin             host01    /             42.0732GB     10MB          合格
  /tmp              host01    /             42.0732GB     1GB           合格
空き領域: host01:/usr,host01:/var,host01:/etc,host01:/sbin,host01:/tmpの検証中...合格
ユーザーの存在: gridの検証中...
  ノード名          ステータス                     コメント
  ------------  ------------------------  ------------------------
  host02    合格                        存在します(54331)
  host01    合格                        存在します(54331)

  UIDが同じユーザー: 54331の検証中...合格
ユーザーの存在: gridの検証中...合格
グループの存在: asmadminの検証中...
  ノード名          ステータス                     コメント
  ------------  ------------------------  ------------------------
  host02    合格                        存在します
  host01    合格                        存在します
グループの存在: asmadminの検証中...合格
グループの存在: asmdbaの検証中...
  ノード名          ステータス                     コメント
  ------------  ------------------------  ------------------------
  host02    合格                        存在します
  host01    合格                        存在します
グループの存在: asmdbaの検証中...合格
グループ・メンバーシップ: asmdbaの検証中...
  ノード名              ユーザーが存在します    グループが存在します    グループ内のユーザー    ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        はい            はい            はい            合格
  host01        はい            はい            はい            合格
グループ・メンバーシップ: asmdbaの検証中...合格
グループ・メンバーシップ: asmadminの検証中...
  ノード名              ユーザーが存在します    グループが存在します    グループ内のユーザー    ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        はい            はい            はい            合格
  host01        はい            はい            はい            合格
グループ・メンバーシップ: asmadminの検証中...合格
実行レベルの検証中...
  ノード名          実行レベル                     必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    5                         3,5                       合格
  host01    5                         3,5                       合格
実行レベルの検証中...合格
強い制限: 最大オープン・ファイル記述子数の検証中...
  ノード名              タイプ           使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        強い            65536         65536         合格
  host01        強い            65536         65536         合格
強い制限: 最大オープン・ファイル記述子数の検証中...合格
弱い制限: 最大オープン・ファイル記述子数の検証中...
  ノード名              タイプ           使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        弱い            1024          1024          合格
  host01        弱い            1024          1024          合格
弱い制限: 最大オープン・ファイル記述子数の検証中...合格
強い制限: 最大ユーザー・プロセスの検証中...
  ノード名              タイプ           使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        強い            16384         16384         合格
  host01        強い            16384         16384         合格
強い制限: 最大ユーザー・プロセスの検証中...合格
弱い制限: 最大ユーザー・プロセスの検証中...
  ノード名              タイプ           使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        弱い            2047          2047          合格
  host01        弱い            2047          2047          合格
弱い制限: 最大ユーザー・プロセスの検証中...合格
弱い制限: 最大スタック・サイズの検証中...
  ノード名              タイプ           使用可能          必須            ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        弱い            10240         10240         合格
  host01        弱い            10240         10240         合格
弱い制限: 最大スタック・サイズの検証中...合格
アーキテクチャの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    x86_64                    x86_64                    合格
  host01    x86_64                    x86_64                    合格
アーキテクチャの検証中...合格
OSカーネル・バージョンの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    4.14.35-1818.3.3.el7uek.x86_64  4.1.12                    合格
  host01    4.14.35-1818.3.3.el7uek.x86_64  4.1.12                    合格
OSカーネル・バージョンの検証中...合格
OSカーネル・パラメータ: semmslの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        250           250           250           合格
  host02        250           250           250           合格
OSカーネル・パラメータ: semmslの検証中...合格
OSカーネル・パラメータ: semmnsの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        32000         32000         32000         合格
  host02        32000         32000         32000         合格
OSカーネル・パラメータ: semmnsの検証中...合格
OSカーネル・パラメータ: semopmの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        100           100           100           合格
  host02        100           100           100           合格
OSカーネル・パラメータ: semopmの検証中...合格
OSカーネル・パラメータ: semmniの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        128           128           128           合格
  host02        128           128           128           合格
OSカーネル・パラメータ: semmniの検証中...合格
OSカーネル・パラメータ: shmmaxの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        4398046511104  4398046511104  5234366464    合格
  host02        4398046511104  4398046511104  5234370560    合格
OSカーネル・パラメータ: shmmaxの検証中...合格
OSカーネル・パラメータ: shmmniの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        4096          4096          4096          合格
  host02        4096          4096          4096          合格
OSカーネル・パラメータ: shmmniの検証中...合格
OSカーネル・パラメータ: shmallの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        1073741824    1073741824    1073741824    合格
  host02        1073741824    1073741824    1073741824    合格
OSカーネル・パラメータ: shmallの検証中...合格
OSカーネル・パラメータ: file-maxの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        6815744       6815744       6815744       合格
  host02        6815744       6815744       6815744       合格
OSカーネル・パラメータ: file-maxの検証中...合格
OSカーネル・パラメータ: ip_local_port_rangeの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  合格
  host02        between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  合格
OSカーネル・パラメータ: ip_local_port_rangeの検証中...合格
OSカーネル・パラメータ: rmem_defaultの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        262144        262144        262144        合格
  host02        262144        262144        262144        合格
OSカーネル・パラメータ: rmem_defaultの検証中...合格
OSカーネル・パラメータ: rmem_maxの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        4194304       4194304       4194304       合格
  host02        4194304       4194304       4194304       合格
OSカーネル・パラメータ: rmem_maxの検証中...合格
OSカーネル・パラメータ: wmem_defaultの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        262144        262144        262144        合格
  host02        262144        262144        262144        合格
OSカーネル・パラメータ: wmem_defaultの検証中...合格
OSカーネル・パラメータ: wmem_maxの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        1048576       1048576       1048576       合格
  host02        1048576       1048576       1048576       合格
OSカーネル・パラメータ: wmem_maxの検証中...合格
OSカーネル・パラメータ: aio-max-nrの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        1048576       1048576       1048576       合格
  host02        1048576       1048576       1048576       合格
OSカーネル・パラメータ: aio-max-nrの検証中...合格
OSカーネル・パラメータ: panic_on_oopsの検証中...
  ノード名              現行            構成済           必須            ステータス         コメント
  ----------------  ------------  ------------  ------------  ------------  ------------
  host01        1             1             1             合格
  host02        1             1             1             合格
OSカーネル・パラメータ: panic_on_oopsの検証中...合格
パッケージ: kmod-20-21 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    kmod(x86_64)-20-23.0.1.el7  kmod(x86_64)-20-21        合格
  host01    kmod(x86_64)-20-23.0.1.el7  kmod(x86_64)-20-21        合格
パッケージ: kmod-20-21 (x86_64)の検証中...合格
パッケージ: kmod-libs-20-21 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    kmod-libs(x86_64)-20-23.0.1.el7  kmod-libs(x86_64)-20-21   合格
  host01    kmod-libs(x86_64)-20-23.0.1.el7  kmod-libs(x86_64)-20-21   合格
パッケージ: kmod-libs-20-21 (x86_64)の検証中...合格
パッケージ: binutils-2.23.52.0.1の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    binutils-2.27-34.base.0.1.el7  binutils-2.23.52.0.1      合格
  host01    binutils-2.27-34.base.0.1.el7  binutils-2.23.52.0.1      合格
パッケージ: binutils-2.23.52.0.1の検証中...合格
パッケージ: compat-libcap1-1.10の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    compat-libcap1-1.10-7.el7  compat-libcap1-1.10       合格
  host01    compat-libcap1-1.10-7.el7  compat-libcap1-1.10       合格
パッケージ: compat-libcap1-1.10の検証中...合格
パッケージ: libgcc-4.8.2 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    libgcc(x86_64)-4.8.5-36.0.1.el7  libgcc(x86_64)-4.8.2      合格
  host01    libgcc(x86_64)-4.8.5-36.0.1.el7  libgcc(x86_64)-4.8.2      合格
パッケージ: libgcc-4.8.2 (x86_64)の検証中...合格
パッケージ: libstdc++-4.8.2 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    libstdc++(x86_64)-4.8.5-36.0.1.el7  libstdc++(x86_64)-4.8.2   合格
  host01    libstdc++(x86_64)-4.8.5-36.0.1.el7  libstdc++(x86_64)-4.8.2   合格
パッケージ: libstdc++-4.8.2 (x86_64)の検証中...合格
パッケージ: libstdc++-devel-4.8.2 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    libstdc++-devel(x86_64)-4.8.5-36.0.1.el7  libstdc++-devel(x86_64)-4.8.2  合格
  host01    libstdc++-devel(x86_64)-4.8.5-36.0.1.el7  libstdc++-devel(x86_64)-4.8.2  合格
パッケージ: libstdc++-devel-4.8.2 (x86_64)の検証中...合格
パッケージ: sysstat-10.1.5の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    sysstat-10.1.5-17.el7     sysstat-10.1.5            合格
  host01    sysstat-10.1.5-17.el7     sysstat-10.1.5            合格
パッケージ: sysstat-10.1.5の検証中...合格
パッケージ: kshの検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    ksh                       ksh                       合格
  host01    ksh                       ksh                       合格
パッケージ: kshの検証中...合格
パッケージ: make-3.82の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    make-3.82-23.el7          make-3.82                 合格
  host01    make-3.82-23.el7          make-3.82                 合格
パッケージ: make-3.82の検証中...合格
パッケージ: glibc-2.17 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    glibc(x86_64)-2.17-260.0.9.el7  glibc(x86_64)-2.17        合格
  host01    glibc(x86_64)-2.17-260.0.9.el7  glibc(x86_64)-2.17        合格
パッケージ: glibc-2.17 (x86_64)の検証中...合格
パッケージ: glibc-devel-2.17 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    glibc-devel(x86_64)-2.17-260.0.9.el7  glibc-devel(x86_64)-2.17  合格
  host01    glibc-devel(x86_64)-2.17-260.0.9.el7  glibc-devel(x86_64)-2.17  合格
パッケージ: glibc-devel-2.17 (x86_64)の検証中...合格
パッケージ: libaio-0.3.109 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    libaio(x86_64)-0.3.109-13.el7  libaio(x86_64)-0.3.109    合格
  host01    libaio(x86_64)-0.3.109-13.el7  libaio(x86_64)-0.3.109    合格
パッケージ: libaio-0.3.109 (x86_64)の検証中...合格
パッケージ: libaio-devel-0.3.109 (x86_64)の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    libaio-devel(x86_64)-0.3.109-13.el7  libaio-devel(x86_64)-0.3.109  合格
  host01    libaio-devel(x86_64)-0.3.109-13.el7  libaio-devel(x86_64)-0.3.109  合格
パッケージ: libaio-devel-0.3.109 (x86_64)の検証中...合格
パッケージ: nfs-utils-1.2.3-15の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    nfs-utils-1.3.0-0.61.0.1.el7  nfs-utils-1.2.3-15        合格
  host01    nfs-utils-1.3.0-0.61.0.1.el7  nfs-utils-1.2.3-15        合格
パッケージ: nfs-utils-1.2.3-15の検証中...合格
パッケージ: smartmontools-6.2-4の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    smartmontools-6.5-1.el7   smartmontools-6.2-4       合格
  host01    smartmontools-6.5-1.el7   smartmontools-6.2-4       合格
パッケージ: smartmontools-6.2-4の検証中...合格
パッケージ: net-tools-2.0-0.17の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    net-tools-2.0-0.24.20131004git.el7  net-tools-2.0-0.17        合格
  host01    net-tools-2.0-0.24.20131004git.el7  net-tools-2.0-0.17        合格
パッケージ: net-tools-2.0-0.17の検証中...合格
コンポーネント"Oracle Notification Service (ONS)"のポート可用性の検証中...
  ノード名              ポート番号         プロトコル         使用可能          ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        6200          TCP           はい            成功
  host01        6200          TCP           はい            成功
  host02        6100          TCP           はい            成功
  host01        6100          TCP           はい            成功
コンポーネント"Oracle Notification Service (ONS)"のポート可用性の検証中...合格
コンポーネント"Oracle Cluster Synchronization Services (CSSD)"のポート可用性の検証中...
  ノード名              ポート番号         プロトコル         使用可能          ステータス
  ----------------  ------------  ------------  ------------  ----------------
  host02        42424         TCP           はい            成功
  host01        42424         TCP           はい            成功
コンポーネント"Oracle Cluster Synchronization Services (CSSD)"のポート可用性の検証中...合格
UIDが同じユーザー: 0の検証中...合格
現行のグループIDの検証中...合格
rootユーザーの一貫性の検証中...
  ノード名                                  ステータス
  ------------------------------------  ------------------------
  host02                            合格
  host01                            合格
rootユーザーの一貫性の検証中...合格
パッケージ: cvuqdisk-1.0.10-1の検証中...
  ノード名          使用可能                      必須                        ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    欠落                        cvuqdisk-1.0.10-1         失敗
  host01    欠落                        cvuqdisk-1.0.10-1         失敗
パッケージ: cvuqdisk-1.0.10-1の検証中...失敗 (PRVG-11550)　　<<-- これ対応するの忘れてたjj
ホスト名の検証中...合格
ノード接続性の検証中...
  ホスト・ファイルの検証中...
  ノード名                                  ステータス
  ------------------------------------  ------------------------
  host01                            合格
  host02                            合格
  ホスト・ファイルの検証中...合格

ノード"host01"のインタフェース情報

 名前     IPアドレス          サブネット           ゲートウェイ          デフォルト・ゲートウェイ    HWアドレス            MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 ens192 192.168.2.1  192.168.2.0    0.0.0.0         192.168.1.1    00:0C:29:8E:D9:9B 1500
 ens224 192.168.1.1  192.168.1.0    0.0.0.0         192.168.1.1    00:0C:29:8E:D9:A5 1500
 ens256 192.168.3.1  192.168.3.0    0.0.0.0         192.168.1.1    00:0C:29:8E:D9:AF 1500
 virbr0 192.168.122.1   192.168.122.0   0.0.0.0         192.168.1.1    52:54:00:0B:A8:9E 1500

ノード"host02"のインタフェース情報

 名前     IPアドレス          サブネット           ゲートウェイ          デフォルト・ゲートウェイ    HWアドレス            MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 ens192 192.168.2.2  192.168.2.0    0.0.0.0         192.168.1.0   00:0C:29:A9:37:F9 1500
 ens224 192.168.1.2  192.168.1.0    0.0.0.0         192.168.1.0    00:0C:29:A9:37:03 1500
 ens256 192.168.3.2  192.168.3.0    0.0.0.0         192.168.1.1    00:0C:29:A9:37:0D 1500
 virbr0 192.168.122.1   192.168.122.0   0.0.0.0         192.168.1.1    52:54:00:3C:0A:90 1500

チェック: サブネット"192.168.3.0"のMTUの一貫性。

  ノード               名前            IPアドレス        サブネット         MTU
  ----------------  ------------  ------------  ------------  ----------------
  host01        ens256        192.168.3.1  192.168.3.0  1500
  host02        ens256        192.168.3.2  192.168.3.0  1500

チェック: サブネット"192.168.2.0"のMTUの一貫性。

  ノード               名前            IPアドレス        サブネット         MTU
  ----------------  ------------  ------------  ------------  ----------------
  host01        ens192        192.168.2.1  192.168.2.0  1500
  host02        ens192        192.168.2.2  192.168.2.0  1500

チェック: サブネット"192.168.1.0"のMTUの一貫性。

  ノード               名前            IPアドレス        サブネット         MTU
  ----------------  ------------  ------------  ------------  ----------------
  host01        ens224        192.168.1.1  192.168.1.0  1500
  host02        ens224        192.168.1.2  192.168.1.0  1500

チェック: サブネット"192.168.122.0"のMTUの一貫性。

  ノード               名前            IPアドレス        サブネット         MTU
  ----------------  ------------  ------------  ------------  ----------------
  host01        virbr0        192.168.122.1  192.168.122.0  1500
  host02        virbr0        192.168.122.1  192.168.122.0  1500
  最大(MTU)サイズ・パケットがサブネットを通過することのチェックの検証中...合格

  ソース                             宛先                              接続しましたか
  ------------------------------  ------------------------------  ----------------
  host01[ens256:192.168.3.1]  host02[ens256:192.168.3.2]  はい

  ソース                             宛先                              接続しましたか
  ------------------------------  ------------------------------  ----------------
  host01[ens192:192.168.2.1]  host02[ens192:192.168.2.2]  はい

  ソース                             宛先                              接続しましたか
  ------------------------------  ------------------------------  ----------------
  host01[ens224:192.168.1.1]  host02[ens224:192.168.1.2]  はい

  ソース                             宛先                              接続しましたか
  ------------------------------  ------------------------------  ----------------
  host01[virbr0:192.168.122.1]  host02[virbr0:192.168.122.1]  はい
  サブネット"192.168.3.0"のサブネット・マスクの一貫性の検証中...合格
  サブネット"192.168.2.0"のサブネット・マスクの一貫性の検証中...合格
  サブネット"192.168.1.0"のサブネット・マスクの一貫性の検証中...合格
  サブネット"192.168.122.0"のサブネット・マスクの一貫性の検証中...合格
ノード接続性の検証中...失敗 (PRVG-1172, PRVG-11067, PRVG-11095)
マルチキャストまたはブロードキャストのチェックの検証中...
マルチキャスト・グループ"224.0.0.251"でのマルチキャスト通信についてサブネット"192.168.3.0"をチェック中
マルチキャストまたはブロードキャストのチェックの検証中...合格
ネットワーク・タイム・プロトコル(NTP)の検証中...
  '/etc/chrony.conf'の検証中...
  ノード名                                  ファイルは存在しますか。
  ------------------------------------  ------------------------
  host02                            はい
  host01                            はい

  '/etc/chrony.conf'の検証中...合格
  '/var/run/chronyd.pid'の検証中...
  ノード名                                  ファイルは存在しますか。
  ------------------------------------  ------------------------
  host02                            はい
  host01                            はい

  '/var/run/chronyd.pid'の検証中...合格
  デーモン'chronyd'の検証中...
  ノード名                                  実行中ですか
  ------------------------------------  ------------------------
  host02                            はい
  host01                            はい

  デーモン'chronyd'の検証中...合格
  UDPポート123を使用しているNTPデーモンまたはサービスの検証中...
  ノード名                                  ポートが開いていますか。
  ------------------------------------  ------------------------
  host02                            はい
  host01                            はい

  UDPポート123を使用しているNTPデーモンまたはサービスの検証中...合格
  chronyデーモンは、少なくとも1つの外部時間ソースと同期していますの検証中...失敗 (PRVG-13606)
ネットワーク・タイム・プロトコル(NTP)の検証中...失敗 (PRVG-13606)
同じコア・ファイル名パターンの検証中...合格
ユーザー・マスクの検証中...
  ノード名          使用可能                      必須                        コメント
  ------------  ------------------------  ------------------------  ----------
  host02    0022                      0022                      合格
  host01    0022                      0022                      合格
ユーザー・マスクの検証中...合格
グループに含まれないユーザー "root": gridの検証中...
  ノード名          ステータス                     コメント
  ------------  ------------------------  ------------------------
  host02    合格                        存在しません
  host01    合格                        存在しません
グループに含まれないユーザー "root": gridの検証中...合格
タイムゾーンの一貫性の検証中...合格
ノード間の時間オフセットの検証中...合格
resolv.confの整合性の検証中...
  ノード名                                  ステータス
  ------------------------------------  ------------------------
  host01                            合格
  host02                            合格

"/etc/resolv.conf"に指定された各ネーム・サーバーからの名前"host02"のレスポンスをチェックしています

  ノード名          ソース                       コメント                      ステータス
  ------------  ------------------------  ------------------------  ----------
  host02    192.168.1.254            IPv4                      合格

"/etc/resolv.conf"に指定された各ネーム・サーバーからの名前"host01"のレスポンスをチェックしています

  ノード名          ソース                       コメント                      ステータス
  ------------  ------------------------  ------------------------  ----------
  host01    192.168.1.254            IPv4                      合格
resolv.confの整合性の検証中...合格
DNS/NISネーム・サービスの検証中...合格
ドメイン・ソケットの検証中...合格
/bootマウントの検証中...合格
デーモン"avahi-daemon"は構成されておらず、実行中ではありませんの検証中...
  ノード名          構成済                       ステータス
  ------------  ------------------------  ------------------------
  host02    はい                        失敗
  host01    はい                        失敗

  ノード名          実行中ですか                    ステータス
  ------------  ------------------------  ------------------------
  host02    はい                        失敗
  host01    はい                        失敗
デーモン"avahi-daemon"は構成されておらず、実行中ではありませんの検証中...失敗 (PRVG-1359, PRVG-1360)
デーモン"proxyt"は構成されておらず、実行中ではありませんの検証中...
  ノード名          構成済                       ステータス
  ------------  ------------------------  ------------------------
  host02    いいえ                       合格
  host01    いいえ                       合格

  ノード名          実行中ですか                    ステータス
  ------------  ------------------------  ------------------------
  host02    いいえ                       合格
  host01    いいえ                       合格
デーモン"proxyt"は構成されておらず、実行中ではありませんの検証中...合格
ユーザー等価の検証中...合格
RPM Package Managerデータベースの検証中...情報 (PRVG-11250)
/dev/shmは、一時ファイルシステムとしてマウントされていますの検証中...合格
パス/varに対するファイルシステムのマウント・オプションの検証中...合格
DefaultTasksMaxパラメータの検証中...合格
zeroconfチェックの検証中...合格
ASMフィルタ・ドライバ構成の検証中...合格
systemdログイン・マネージャIPCパラメータの検証中...合格

クラスタ・サービス設定の事前チェックはすべてのノードで失敗しました。


CVU検証リクエスト"stage -pre crsinst"の実行中に障害が発生しました。

スワップ・サイズの検証中...失敗
host02: PRVF-7573 : 十分なスワップ・サイズがノード"host02"にありません[必要 = "9.7498GB
            (1.022338E7KB)" ; 検出 = "4.9375GB (5177340.0KB)"]

host01: PRVF-7573 : 十分なスワップ・サイズがノード"host01"にありません[必要 = "9.7498GB
            (1.0223372E7KB)" ; 検出 = "4.9375GB (5177340.0KB)"]

パッケージ: cvuqdisk-1.0.10-1の検証中...失敗
host02: PRVG-11550 : パッケージ"cvuqdisk"がノード"host02"にありません

host01: PRVG-11550 : パッケージ"cvuqdisk"がノード"host01"にありません

ノード接続性の検証中...失敗
PRVG-1172 :
IPアドレス"192.168.122.1"は、ノード"host01,host02"の複数のインタフェース"virbr0"にあります

host01: PRVG-11067 : ノード"host01": "192.168.122.1"からノード"host01":
            "192.168.122.1"へのTCP接続に失敗しました。
            PRVG-11095 :
            ノード"host01"でexectaskを実行中にTCPシステム・コール"connect"がエラー"111"で失敗しました

            Connection refused
host01: PRVG-11067 : ノード"host01": "192.168.122.1"からノード"host02":
            "192.168.122.1"へのTCP接続に失敗しました。
            PRVG-11095 :
            ノード"host01"でexectaskを実行中にTCPシステム・コール"connect"がエラー"111"で失敗しました

            Connection refused

ネットワーク・タイム・プロトコル(NTP)の検証中...失敗
  chronyデーモンは、少なくとも1つの外部時間ソースと同期していますの検証中...失敗
  host02: PRVG-13606 : chronyデーモンは、ノード"host02"の外部時間ソースと同期していません。

  host01: PRVG-13606 : chronyデーモンは、ノード"host01"の外部時間ソースと同期していません。

デーモン"avahi-daemon"は構成されておらず、実行中ではありませんの検証中...失敗
host02: PRVG-1359 : デーモン・プロセス"avahi-daemon"は、ノード"host02"に構成されています
host02: PRVG-1360 : デーモン・プロセス"avahi-daemon"は、ノード"host02"で実行中です

host01: PRVG-1359 : デーモン・プロセス"avahi-daemon"は、ノード"host01"に構成されています
host01: PRVG-1360 : デーモン・プロセス"avahi-daemon"は、ノード"host01"で実行中です

RPM Package Managerデータベースの検証中...情報
PRVG-11250 : 'root'ユーザー権限が必要であるため、チェック"RPM Package Managerデータベース"は実行されませんでした。


CVU操作が実行されました:                stage -pre crsinst
日付:                           2019/05/06 16:42:04
CVUホーム:                       /u01/app/19.3.0/grid/
ユーザー:                         grid
[grid@host01 ~]$
```

```:修正後
[root@ansible]# cat 05_install_grid_infrastructure_19cR3.yml
- hosts: host01
  max_fail_percentage: 0
  vars:
    TMP_DIR: /tmp
    HOST_NAME: host01
    DOMAIN_NAME: oratest.jp
    ORACLE_BASE: /u01/app/grid
    ORACLE_HOME: /u01/app/19.3.0/grid
    NODE1_NAME: host01
    NODE2_NAME: host02
    CLUSTER_NAME: cluster193
# (1 indicates public, 2 indicates private, 3 indicates the interface is not used, 4 indicates asm and 5 indicates asm & private)
    NETWOK_INTERFACE_LIST: ens192:192.168.2.0:4,ens256:192.168.3.0:2,ens224:192.168.1.0:1,virbr0:192.168.122.0:3
    FAILURE_GROUP_NAMES: /dev/storage01_19CR3_OCR01,storage01,/dev/storage02_19CR3_OCR01,storage02,/dev/storage03_19CR3_OCR01,storage03
    ASM_DISKGROUPS: /dev/storage01_19CR3_OCR01,/dev/storage02_19CR3_OCR01,/dev/storage03_19CR3_OCR01
    GIMR_FAILURE_GROUP_NAMES: /dev/storage01_19CR3_MGMT01,storage01,/dev/storage02_19CR3_MGMT01,storage02,/dev/storage03_19CR3_MGMT01,storage03
    GIMR_ASM_DISKGROUPS: /dev/storage01_19CR3_MGMT01,/dev/storage02_19CR3_MGMT01,/dev/storage03_19CR3_MGMT01
    ASM_DISKSTRING: /dev/storage*
  tasks:
    - name: copy and unzip file
      unarchive: src=/tmp/LINUX.X64_193000_grid_home.zip dest={{ ORACLE_HOME }}

    - name: change dir / files permission
      file: path={{ ORACLE_HOME }} owner=grid group=oinstall mode=0755 recurse=yes state=directory

    - block:
      - command: rpm -q cvuqdisk
        changed_when: no
      rescue:
      - command: rpm -Uvh /{{ ORACLE_HOME }}/cv/rpm/cvuqdisk-1.0.10-1.rpm

    - name: file copy to node2
      shell: "scp {{ ORACLE_HOME }}/cv/rpm/cvuqdisk-1.0.10-1.rpm root@host02:/tmp"

    - name: rpm to node2
      shell: ssh host02 "rpm -Uvh /tmp/cvuqdisk-1.0.10-1.rpm"

    - name: remove response file
      shell: rm -f {{ TMP_DIR }}/grid.rsp

    - name: copy response file
      shell: cp {{ ORACLE_HOME }}/install/response/gridsetup.rsp {{ TMP_DIR }}/grid.rsp

    - name: chenge owner for response file
      shell: chown grid:oinstall {{ TMP_DIR }}/grid.rsp

    - name: change response file for ORACLE_HOSTNAME
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^ORACLE_HOSTNAME=' replace='ORACLE_HOSTNAME={{ HOST_NAME }}.{{ DOMAIN_NAME }}'

    - name: change response file for INVENTORY_LOCATION
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^INVENTORY_LOCATION=' replace='INVENTORY_LOCATION=/u01/app/oraInventory'

    - name: change response file for SELECTED_LANGUAGES
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^SELECTED_LANGUAGES=en' replace='SELECTED_LANGUAGES=en,ja'

    - name: change response file for oracle.install.option
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.option=' replace='oracle.install.option=CRS_CONFIG'

    - name: change response file for ORACLE_BASE
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^ORACLE_BASE=' replace='ORACLE_BASE={{ ORACLE_BASE }}'

    - name: change response file for ORACLE_HOME
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^ORACLE_HOME=' replace='ORACLE_HOME={{ ORACLE_HOME }}'

    - name: change response file for oracle.install.asm.OSDBA
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.OSDBA=' replace='oracle.install.asm.OSDBA=asmdba'

    - name: change response file for oracle.install.asm.OSOPER
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.OSOPER=' replace='oracle.install.asm.OSOPER=asmoper'

    - name: change response file for oracle.install.asm.OSASM
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.OSASM=' replace='oracle.install.asm.OSASM=asmadmin'

    - name: change response file for oracle.install.crs.config.scanType
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.scanType=' replace='oracle.install.crs.config.scanType=LOCAL_SCAN'

    - name: change response file for SCAN
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.gpnp.scanName=' replace='oracle.install.crs.config.gpnp.scanName={{ CLUSTER_NAME }}-scan.{{ DOMAIN_NAME }}'

    - name: change response file for SCAN service
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.gpnp.scanPort=' replace='oracle.install.crs.config.gpnp.scanPort=50000'

################################################################################
#                           SECTION D - CLUSTER & GNS                         #
################################################################################
    - name: change response file for oracle.install.crs.config.ClusterConfiguration
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.ClusterConfiguration=' replace='oracle.install.crs.config.ClusterConfiguration=STANDALONE'

    - name: change response file for oracle.install.crs.config.configureAsExtendedCluster
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.configureAsExtendedCluster=' replace='oracle.install.crs.config.configureAsExtendedCluster=false'

    - name: change response file for the Cluster you are creating
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.clusterName=' replace='oracle.install.crs.config.clusterName={{ CLUSTER_NAME }}'

    - name: change response file for Grid Naming Service(GNS)
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.gpnp.configureGNS=' replace='oracle.install.crs.config.gpnp.configureGNS=false'

    - name: change response file for oracle.install.crs.config.autoConfigureClusterNodeVIP
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.autoConfigureClusterNodeVIP=' replace='oracle.install.crs.config.autoConfigureClusterNodeVIP=false'

    - name: change response file for public node names, and virtual hostnames
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.clusterNodes=' replace='oracle.install.crs.config.clusterNodes={{ NODE1_NAME }}.{{ DOMAIN_NAME }}:{{ NODE1_NAME }}-vip.{{ DOMAIN_NAME }},{{ NODE2_NAME }}.{{ DOMAIN_NAME }}:{{ NODE2_NAME }}-vip.{{ DOMAIN_NAME }}'

    - name: change response file for oracle.install.crs.config.networkInterfaceList
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.networkInterfaceList=' replace='oracle.install.crs.config.networkInterfaceList={{ NETWOK_INTERFACE_LIST }}'

    - name: change response file for oracle.install.crs.configureGIMR
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.configureGIMR=' replace='oracle.install.crs.configureGIMR=true'

    - name: change response file for oracle.install.asm.configureGIMRDataDG
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='oracle.install.asm.configureGIMRDataDG=' replace='oracle.install.asm.configureGIMRDataDG=true'

################################################################################
#                              SECTION E - STORAGE                             #
################################################################################
    - name: change response file for Oracle Cluster Registry(OCR) and Voting Disks files
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.storageOption=' replace='oracle.install.crs.config.storageOption=FLEX_ASM_STORAGE'

################################################################################
#                               SECTION F - IPMI                               #
################################################################################
    - name: change response file for IMPI
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.useIPMI=' replace='oracle.install.crs.config.useIPMI=false'

################################################################################
#                                SECTION G - ASM                               #
################################################################################
    - name: change responce file for for SYSASM user of the ASM instance
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.SYSASMPassword=' replace='oracle.install.asm.SYSASMPassword=Welcome1'

    - name: change response file for ASM DiskGroup
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.name=' replace='oracle.install.asm.diskGroup.name=OCR'

    - name: change response file for Redundancy level to be used by ASM
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.redundancy=' replace='oracle.install.asm.diskGroup.redundancy=NORMAL'

    - name: change response file for Allocation unit size to be used by ASM
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.AUSize=' replace='oracle.install.asm.diskGroup.AUSize=1'

    - name: change response file for oracle.install.asm.diskGroup.disksWithFailureGroupNames
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.disksWithFailureGroupNames=' replace='oracle.install.asm.diskGroup.disksWithFailureGroupNames={{ FAILURE_GROUP_NAMES }}'

    - name: change response file for List of disks to create a ASM DiskGroup
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.disks=' replace='oracle.install.asm.diskGroup.disks={{ ASM_DISKGROUPS }}'

    - name: change response file for The disk discovery string
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.diskGroup.diskDiscoveryString=' replace='oracle.install.asm.diskGroup.diskDiscoveryString={{ ASM_DISKSTRING }}'

    - name: change response file for oracle.install.asm.monitorPassword
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.monitorPassword=' replace='oracle.install.asm.monitorPassword=Welcome1'

    - name: change response file for oracle.install.asm.gimrDG.name
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.gimrDG.name=' replace='oracle.install.asm.gimrDG.name=MGMT01'

    - name: change response file for oracle.install.asm.gimrDG.redundancy
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.gimrDG.redundancy=' replace='oracle.install.asm.gimrDG.redundancy=NORMAL'

    - name: change response file for oracle.install.asm.gimrDG.AUSize
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.gimrDG.AUSize=' replace='oracle.install.asm.gimrDG.AUSize=1'

    - name: change response file for oracle.install.asm.gimrDG.disksWithFailureGroupNames
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.gimrDG.disksWithFailureGroupNames=' replace='oracle.install.asm.gimrDG.disksWithFailureGroupNames={{ GIMR_FAILURE_GROUP_NAMES }}'

    - name: change response file for oracle.install.asm.gimrDG.disks
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.gimrDG.disks=' replace='oracle.install.asm.gimrDG.disks={{ GIMR_ASM_DISKGROUPS }}'

    - name: change response file for oracle.install.asm.configureAFD
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.asm.configureAFD=' replace='oracle.install.asm.configureAFD=false'

    - name: change response file for oracle.install.crs.configureRHPS
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.configureRHPS=' replace='oracle.install.crs.configureRHPS=false'

################################################################################
#                             SECTION H - UPGRADE                              #
################################################################################
    - name: change response file for the auto-updates option
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.config.ignoreDownNodes=' replace='oracle.install.crs.config.ignoreDownNodes=false'

################################################################################
#                               MANAGEMENT OPTIONS                             #
################################################################################
    - name: change response file for the management option
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.config.managementOption=' replace='oracle.install.config.managementOption=NONE'

    - name: change response file for the oracle.install.config.omsPort
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.config.omsPort=' replace='oracle.install.config.omsPort=0'

################################################################################
#                      Root script execution configuration                     #
################################################################################
    - name: change response file for oracle.install.crs.rootconfig.executeRootScript
      replace: dest={{ TMP_DIR }}/grid.rsp regexp='^oracle.install.crs.rootconfig.executeRootScript=false'

    - name: execute grid installation
      shell: su grid -c "{{ ORACLE_HOME }}/gridSetup.sh -silent -responseFile {{ TMP_DIR }}/grid.rsp -ignorePrereqFailure -waitForCompletion"

[root@ansible]#
```

```:実行はWARNINGで中断となるけど、成功している。。。動き側変わったんだな
[root@ansible]# ansible-playbook 05_install_grid_infrastructure_19cR3.yml

PLAY [host01] *************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [host01]

TASK [change dir / files permission] ******************************************************************************************************************
changed: [host01]

TASK [command] ****************************************************************************************************************************************
 [WARNING]: Consider using yum, dnf or zypper module rather than running rpm

ok: [host01]

TASK [stop auto start a avahi-daemon] *****************************************************************************************************************
changed: [host01]

TASK [stop avahi-daemon] ******************************************************************************************************************************
changed: [host01]

TASK [remove response file] ***************************************************************************************************************************
 [WARNING]: Consider using file module with state=absent rather than running rm

changed: [host01]

TASK [copy response file] *****************************************************************************************************************************
changed: [host01]

TASK [chenge owner for response file] *****************************************************************************************************************
 [WARNING]: Consider using file module with owner rather than running chown

changed: [host01]

TASK [change response file for ORACLE_HOSTNAME] *******************************************************************************************************
ok: [host01]

TASK [change response file for INVENTORY_LOCATION] ****************************************************************************************************
changed: [host01]

TASK [change response file for SELECTED_LANGUAGES] ****************************************************************************************************
ok: [host01]

TASK [change response file for oracle.install.option] *************************************************************************************************
changed: [host01]

TASK [change response file for ORACLE_BASE] ***********************************************************************************************************
changed: [host01]

TASK [change response file for ORACLE_HOME] ***********************************************************************************************************
ok: [host01]

TASK [change response file for oracle.install.asm.OSDBA] **********************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.OSOPER] *********************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.OSASM] **********************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.config.scanType] ************************************************************************************
changed: [host01]

TASK [change response file for SCAN] ******************************************************************************************************************
changed: [host01]

TASK [change response file for SCAN service] **********************************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.config.ClusterConfiguration] ************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.config.configureAsExtendedCluster] ******************************************************************
changed: [host01]

TASK [change response file for the Cluster you are creating] ******************************************************************************************
changed: [host01]

TASK [change response file for Grid Naming Service(GNS)] **********************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.config.autoConfigureClusterNodeVIP] *****************************************************************
changed: [host01]

TASK [change response file for public node names, and virtual hostnames] ******************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.config.networkInterfaceList] ************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.configureGIMR] **************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.configureGIMRDataDG] ********************************************************************************
changed: [host01]

TASK [change response file for Oracle Cluster Registry(OCR) and Voting Disks files] *******************************************************************
changed: [host01]

TASK [change response file for IMPI] ******************************************************************************************************************
changed: [host01]

TASK [change responce file for for SYSASM user of the ASM instance] ***********************************************************************************
changed: [host01]

TASK [change response file for ASM DiskGroup] *********************************************************************************************************
changed: [host01]

TASK [change response file for Redundancy level to be used by ASM] ************************************************************************************
changed: [host01]

TASK [change response file for Allocation unit size to be used by ASM] ********************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.diskGroup.disksWithFailureGroupNames] ***************************************************************
changed: [host01]

TASK [change response file for List of disks to create a ASM DiskGroup] *******************************************************************************
changed: [host01]

TASK [change response file for The disk discovery string] *********************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.monitorPassword] ************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.gimrDG.name] ****************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.gimrDG.redundancy] **********************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.gimrDG.AUSize] **************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.gimrDG.disksWithFailureGroupNames] ******************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.gimrDG.disks] ***************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.asm.configureAFD] ***************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.configureRHPS] **************************************************************************************
changed: [host01]

TASK [change response file for the auto-updates option] ***********************************************************************************************
changed: [host01]

TASK [change response file for the management option] *************************************************************************************************
changed: [host01]

TASK [change response file for the oracle.install.config.omsPort] *************************************************************************************
changed: [host01]

TASK [change response file for oracle.install.crs.rootconfig.executeRootScript] ***********************************************************************
ok: [host01]

TASK [execute grid installation] **********************************************************************************************************************
 [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running su

fatal: [host01]: FAILED! => {"changed": true, "cmd": "su grid -c \"/u01/app/19.3.0/grid/gridSetup.sh -silent -responseFile /tmp/grid.rsp -ignorePrereqFailure -waitForCompletion\"", "delta": "0:05:37.542290", "end": "2019-05-11 20:59:03.040958", "failed": true, "rc": 6, "start": "2019-05-11 20:53:25.498668", "stderr": "", "stderr_lines": [], "stdout": "Oracle Grid Infrastructure設定ウィザードを起動中...\n\n[WARNING] [INS-13013] ターゲット環境は、いくつかの必須要件を満たしていません。\n   原因: 一部の必須前提条件が満たされていません。詳細はログを参照してください。/tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log\n   アクション: ログから失敗した前提条件チェックのリストを確認します: /tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。\nこのセッションのレスポンス・ファイルは次の場所にあります:\n /u01/app/19.3.0/grid/install/response/grid_2019-05-11_08-53-25PM.rsp\n\nこのインストール・セッションのログは次の場所にあります:\n /tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log\n\nrootユーザーとして次のスクリプトを実行します:\n\t1. /u01/app/oraInventory/orainstRoot.sh\n\t2. /u01/app/19.3.0/grid/root.sh\n\n次のノードで/u01/app/oraInventory/orainstRoot.shを実行してください: \n[host01, host02]\n次のノードで/u01/app/19.3.0/grid/root.shを実行してください: \n[host01, host02]\n\nまず、ローカル・ノードでスクリプトを実行してください。正常に完了したら、その他すべてのノードで、スクリプトを並行して開始できます。\n\n\nSuccessfully Setup Software with warning(s).\nインストール・ユーザーとして、次のコマンドを実行して構成を完了します。\n\t/u01/app/19.3.0/grid/gridSetup.sh -executeConfigTools -responseFile /tmp/grid.rsp [-silent]\n\n\nインストール・セッション・ログの移動先:\n /u01/app/oraInventory/logs/GridSetupActions2019-05-11_08-53-25PM", "stdout_lines": ["Oracle Grid Infrastructure設定ウィザードを起動中...", "", "[WARNING] [INS-13013] ターゲット環境は、いくつかの必須要件を満たしていません。", "   原因: 一部の必須前提条件が満たされていません。詳細はログを参照してください。/tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log", "   アクション: ログから失敗した前提条件チェックのリストを確認します: /tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。", "このセッションのレスポンス・ファイルは次の場所にあります:", " /u01/app/19.3.0/grid/install/response/grid_2019-05-11_08-53-25PM.rsp", "", "このインストール・セッションのログは次の場所にあります:", " /tmp/GridSetupActions2019-05-11_08-53-25PM/gridSetupActions2019-05-11_08-53-25PM.log", "", "rootユーザーとして次のスクリプトを実行します:", "\t1. /u01/app/oraInventory/orainstRoot.sh", "\t2. /u01/app/19.3.0/grid/root.sh", "", "次のノードで/u01/app/oraInventory/orainstRoot.shを実行してください: ", "[host01, host02]", "次のノードで/u01/app/19.3.0/grid/root.shを実行してください: ", "[host01, host02]", "", "まず、ローカル・ノードでスクリプトを実行してください。正常に完了したら、その他すべてのノードで、スクリプトを並行して開始できます。", "", "", "Successfully Setup Software with warning(s).", "インストール・ユーザーとして、次のコマンドを実行して構成を完了します。", "\t/u01/app/19.3.0/grid/gridSetup.sh -executeConfigTools -responseFile /tmp/grid.rsp [-silent]", "", "", "インストール・セッション・ログの移動先:", " /u01/app/oraInventory/logs/GridSetupActions2019-05-11_08-53-25PM"]}

NO MORE HOSTS LEFT ************************************************************************************************************************************

NO MORE HOSTS LEFT ************************************************************************************************************************************
	to retry, use: --limit @/etc/ansible/05_install_grid_infrastructure_19cR3.retry

PLAY RECAP ********************************************************************************************************************************************
host01                 : ok=48   changed=43   unreachable=0    failed=1

[root@ansible]#
```

```:node1
[root@host01 ~]# /u01/app/oraInventory/orainstRoot.sh
権限を変更中 /u01/app/oraInventory.
グループの読取り/書込み権限を追加中。
全ユーザーの読取り/書込み/実行権限を削除中。

グループ名の変更 /u01/app/oraInventory 宛先 oinstall.
スクリプトの実行が完了しました。
[root@host01 ~]# /u01/app/19.3.0/grid/root.sh
Check /u01/app/19.3.0/grid/install/root_host01.oratest.jp_2019-05-11_21-03-11-530653564.log for the output of root script
[root@host01 ~]# tail /u01/app/19.3.0/grid/install/root_host01.oratest.jp_2019-05-11_21-03-11-530653564.log
3の投票ディスクを検出しました。
2019/05/11 21:07:27 CLSRSC-594: Executing installation step 17 of 19: 'StartCluster'.
2019/05/11 21:08:33 CLSRSC-343: Successfully started Oracle Clusterware stack
2019/05/11 21:08:33 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
2019/05/11 21:09:52 CLSRSC-594: Executing installation step 19 of 19: 'PostConfig'.

[INFO] [DBT-30001] ディスク・グループは正常に作成されました。詳細は、/u01/app/grid/cfgtoollogs/asmca/asmca-190511午後090956.logを参照してください。


2019/05/11 21:10:35 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded[root@host01 ~]# /u01/app/19.3.0/grid/bin/crsctl check crs

CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[root@host01 ~]#
```

```:node2
[root@host02 ~]# /u01/app/oraInventory/orainstRoot.sh
権限を変更中 /u01/app/oraInventory.
グループの読取り/書込み権限を追加中。
全ユーザーの読取り/書込み/実行権限を削除中。

グループ名の変更 /u01/app/oraInventory 宛先 oinstall.
スクリプトの実行が完了しました。
[root@host02 ~]# /u01/app/19.3.0/grid/root.sh
Check /u01/app/19.3.0/grid/install/root_host02.oratest.jp_2019-05-11_21-11-55-943926069.log for the output of root script
[root@host02 ~]# tail /u01/app/19.3.0/grid/install/root_host02.oratest.jp_2019-05-11_21-11-55-943926069.log
2019/05/11 21:12:34 CLSRSC-4002: Successfully installed Oracle Trace File Analyzer (TFA) Collector.
2019/05/11 21:12:50 CLSRSC-594: Executing installation step 13 of 19: 'InstallAFD'.
2019/05/11 21:12:51 CLSRSC-594: Executing installation step 14 of 19: 'InstallACFS'.
2019/05/11 21:12:52 CLSRSC-594: Executing installation step 15 of 19: 'InstallKA'.
2019/05/11 21:12:53 CLSRSC-594: Executing installation step 16 of 19: 'InitConfig'.
2019/05/11 21:13:01 CLSRSC-594: Executing installation step 17 of 19: 'StartCluster'.
2019/05/11 21:13:50 CLSRSC-343: Successfully started Oracle Clusterware stack
2019/05/11 21:13:50 CLSRSC-594: Executing installation step 18 of 19: 'ConfigNode'.
2019/05/11 21:14:02 CLSRSC-594: Executing installation step 19 of 19: 'PostConfig'.
2019/05/11 21:14:06 CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster ... succeeded
[root@host02 ~]#
[root@host02 ~]# /u01/app/19.3.0/grid/bin/crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[root@host02 ~]#
```

```:事後処理
[grid@host01 ~]$ /u01/app/19.3.0/grid/gridSetup.sh -executeConfigTools -responseFile /tmp/grid.rsp -silent -all
Oracle Grid Infrastructure設定ウィザードを起動中...

このセッションのログは次の場所にあります:
/u01/app/oraInventory/logs/GridSetupActions2019-05-12_00-02-45AM

このインストール・セッションのログは次の場所にあります:
 /u01/app/oraInventory/logs/UpdateNodeList2019-05-12_00-02-45AM.log
Configuration failed.
[WARNING] [INS-43080] 一部のコンフィギュレーション・アシスタントが失敗したか取り消された、またはスキップされました。
   アクション: ログを参照するか、Oracleサポート・サービスに連絡してください。
[grid@host01 ~]$ ps -ef | grep pmon
grid      9959   790  0 01:37 pts/1    00:00:00 grep --color=auto pmon
grid     17645     1  0  5月11 ?      00:00:00 asm_pmon_+ASM1
grid     28499     1  0 00:23 ?        00:00:00 mdb_pmon_-MGMTDB
[grid@host01 ~]$
```
Warningだけど、MGMTDB作成できているし、起動もログインもできるからよしとしよう

### gridの環境変数を設定
```
[root@ansible]# cat 06_after_other_node_19cR3.yml
- hosts: oracle19cR3-servers
  vars:
    ORACLE_BASE: /u01/app/grid
    ORACLE_HOME: /u01/app/19.3.0/grid
  tasks:
    - name: add bash_profile for grid
      lineinfile: dest=/home/grid/.bash_profile line='{{ item.line }}'
      with_items:
      - line: "export ORACLE_BASE={{ ORACLE_BASE }}"
      - line: "export ORACLE_HOME={{ ORACLE_HOME }}"
      - line: "export PATH=$ORACLE_HOME/bin:$PATH"
[root@ansible]#
```

```
[root@ansible]# ansible-playbook 06_after_other_node_19cR3.yml

PLAY [oracle19cR3-servers] ****************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [host01]
ok: [host02]

TASK [add bash_profile for grid] **********************************************************************************************************************
changed: [host02] => (item={u'line': u'export ORACLE_BASE=/u01/app/grid'})
changed: [host01] => (item={u'line': u'export ORACLE_BASE=/u01/app/grid'})
changed: [host02] => (item={u'line': u'export ORACLE_HOME=/u01/app/19.3.0/grid'})
changed: [host01] => (item={u'line': u'export ORACLE_HOME=/u01/app/19.3.0/grid'})
changed: [host02] => (item={u'line': u'export PATH=$ORACLE_HOME/bin:$PATH'})
changed: [host01] => (item={u'line': u'export PATH=$ORACLE_HOME/bin:$PATH'})

PLAY RECAP ********************************************************************************************************************************************
host01                 : ok=2    changed=1    unreachable=0    failed=0
host02                 : ok=2    changed=1    unreachable=0    failed=0

[root@ansible]#
```

### ASM DiskGroup Configurationを実施
```
[root@ansible]# cat 07_after_configuration_19cR3.yml
- hosts: host01
  vars:
    ORACLE_HOME: /u01/app/19.3.0/grid
    NETCA_DIR: /assistants/netca
    DATA_DISKGROUP01: /dev/storage01_19CR3_DATA01
    DATA_DISKGROUP02: /dev/storage02_19CR3_DATA01
    DATA_DISKGROUP03: /dev/storage03_19CR3_DATA01
    ASM_COMPATIBLE: 19.0.0.0.0
    RDBMS_COMPATIBLE: 19.0.0.0.0
  tasks:
    - name: make file for oraInst.loc
      lineinfile: dest=/etc/oraInst.loc create=yes line='{{ item.line }}'
      with_items:
      - line: "inventory_loc=/u01/app/oraInventory"
      - line: "inst_group=oinstall"

    - name: make response file for configuration
      lineinfile: dest=/home/grid/cfgrsp.properties create=yes line='{{ item.line }}'
      with_items:
      - line: "oracle.assistants.asm|S_ASMPASSWORD=Welcome1"
      - line: "oracle.assistants.asm|S_ASMMONITORPASSWORD=Welcome1"
      - line: "oracle.crs|S_BMCPASSWORD="

    - name: change owner
      shell: chown grid:oinstall /home/grid/cfgrsp.properties

    - name: change permission
      shell: chmod 600 /home/grid/cfgrsp.properties

    - name: execute configuration
      shell: su grid -c "{{ ORACLE_HOME }}/cfgtoollogs/configToolAllCommands RESPONSE_FILE=/home/grid/cfgrsp.properties"
      register: execute_configuration_check
      failed_when: execute_configuration_check.rc not in [3]

    - name: create diskgroup
      shell: su grid -c "{{ ORACLE_HOME }}/bin/asmca -silent -createDiskGroup -diskGroupName DATA -disk '{{ DATA_DISKGROUP01 }}' -disk '{{ DATA_DISKGROUP02 }}' -disk '{{ DATA_DISKGROUP03 }}' -redundancy NORMAL -au_size 1 -compatible.asm '{{ ASM_COMPATIBLE }}' -compatible.rdbms '{{ RDBMS_COMPATIBLE }}'"

#    - name: create diskgroup for RECO
#      shell: su grid -c "{{ ORACLE_HOME }}/bin/asmca -silent -createDiskGroup -diskGroupName RECO -disk '{{ RECO_DISKGROUP01 }}' -disk '{{ RECO_DISKGROUP02 }}' -disk '{{ RECO_DISKGROUP03 }}' -redundancy NORMAL -au_size 1 -compatible.asm '{{ ASM_COMPATIBLE }}' -compatible.rdbms '{{ RDBMS_COMPATIBLE }}'"
[root@ansible]#
```

```
[root@ansible]# ansible-playbook 07_after_configuration_19cR3.yml

PLAY [host01] *************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [host01]

TASK [make file for oraInst.loc] **********************************************************************************************************************
ok: [host01] => (item={u'line': u'inventory_loc=/u01/app/oraInventory'})
ok: [host01] => (item={u'line': u'inst_group=oinstall'})

TASK [make response file for configuration] ***********************************************************************************************************
changed: [host01] => (item={u'line': u'oracle.assistants.asm|S_ASMPASSWORD=Welcome1'})
changed: [host01] => (item={u'line': u'oracle.assistants.asm|S_ASMMONITORPASSWORD=Welcome1'})
changed: [host01] => (item={u'line': u'oracle.crs|S_BMCPASSWORD='})

TASK [change owner] ***********************************************************************************************************************************
 [WARNING]: Consider using file module with owner rather than running chown

changed: [host01]

TASK [change permission] ******************************************************************************************************************************
 [WARNING]: Consider using file module with mode rather than running chmod

changed: [host01]

TASK [execute configuration] **************************************************************************************************************************
 [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running su

changed: [host01]

TASK [create diskgroup] *******************************************************************************************************************************
changed: [host01]

PLAY RECAP ********************************************************************************************************************************************
host01                 : ok=7    changed=5    unreachable=0    failed=0

[root@ansible]#
```

### Oracle Databaseのインストール
```
[root@ansible]# cat 08_install_oracle_database_19cR3.yml
- hosts: host01
  vars:
    TMP_DIR: /tmp
    HOST_NAME1: host01
    HOST_NAME2: host02
    DOMAIN_NAME: oratest.jp
    ORACLE_BASE: /u01/app/oracle
    ORACLE_HOME: /u01/app/oracle/product/19.3.0/dbhome
  tasks:
    - name: create directory for grid home
      shell: mkdir -p {{ ORACLE_HOME }}

    - name: copy and unzip file
      unarchive: src=/tmp/LINUX.X64_193000_db_home.zip dest={{ ORACLE_HOME }}

    - name: change dir / files permission
      file: path={{ ORACLE_BASE }} owner=oracle group=oinstall mode=0755 recurse=yes state=directory

    - name: remove response file
      shell: rm -f {{ TMP_DIR }}/db.rsp

    - name: copy response file
      shell: cp {{ ORACLE_HOME }}/install/response/db_install.rsp {{ TMP_DIR }}/db.rsp

    - name: chenge owner for response file
      shell: chown oracle:oinstall {{ TMP_DIR }}/db.rsp

    - name: change response file for installation option
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.option=' replace='oracle.install.option=INSTALL_DB_SWONLY'

    - name: change response file for Unix group
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^UNIX_GROUP_NAME=' replace='UNIX_GROUP_NAME=oinstall'

    - name: change response file for inventory file
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^INVENTORY_LOCATION=' replace='INVENTORY_LOCATION=/u01/app/oraInventory'

    - name: change response file for ORACLE_HOME
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^ORACLE_HOME=' replace='ORACLE_HOME={{ ORACLE_HOME }}'

    - name: change response file for inventory file
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^ORACLE_BASE=' replace='ORACLE_BASE={{ ORACLE_BASE }}'

    - name: change response file for Install Edition
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.InstallEdition=' replace='oracle.install.db.InstallEdition=EE'

###############################################################################
# PRIVILEGED OPERATING SYSTEM GROUPS                                          #
###############################################################################
    - name: change response file for OSDBA_GROUP
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSDBA_GROUP=' replace='oracle.install.db.OSDBA_GROUP=dba'

    - name: change response file for OSOPER_GROUP
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSOPER_GROUP=' replace='oracle.install.db.OSOPER_GROUP=oper'

    - name: change response file for OSBACKUPDBA
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSBACKUPDBA_GROUP=' replace='oracle.install.db.OSBACKUPDBA_GROUP=backupdba'

    - name: change response file for OSDGDBA
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSDGDBA_GROUP=' replace='oracle.install.db.OSDGDBA_GROUP=dgdba'

    - name: change response file for OSKMDBA
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSKMDBA_GROUP=' replace='oracle.install.db.OSKMDBA_GROUP=kmdba'

    - name: change response file for OSRACDBA
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.OSRACDBA_GROUP=' replace='oracle.install.db.OSRACDBA_GROUP=racdba'

################################################################################
#                      Root script execution configuration                     #
################################################################################
    - name: change response file for executeRootScript
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.rootconfig.executeRootScript=' replace='oracle.install.db.rootconfig.executeRootScript=false'

###############################################################################
#                               Grid Options                                  #
###############################################################################
    - name: change response file for CLUSTER_NODES
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.CLUSTER_NODES=' replace='oracle.install.db.CLUSTER_NODES={{ HOST_NAME1 }},{{ HOST_NAME2 }}'

###############################################################################
#                        Database Configuration Options                       #
###############################################################################
    - name: change response file for the_type_of_Real_Application_Cluster_Database
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.rac.configurationType=' replace='oracle.install.db.rac.configurationType=ADMIN_MANAGED'

    - name: change response file for Database to create
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.config.starterdb.type=' replace='oracle.install.db.config.starterdb.type=GENERAL_PURPOSE'

    - name: change response file for
      replace: dest={{ TMP_DIR }}/db.rsp regexp='^oracle.install.db.ConfigureAsContainerDB=' replace='oracle.install.db.ConfigureAsContainerDB=false'

###############################################################################
# Passwords can be supplied for the following four schemas in the             #
###############################################################################

###############################################################################
# SPECIFY RECOVERY OPTIONS                                                    #
###############################################################################
    - name: execute database installation
      shell: su oracle -c "{{ ORACLE_HOME }}/runInstaller -silent -noconfig -ignoreInternalDriverError -waitforcompletion -responseFile {{ TMP_DIR }}/db.rsp"

    - name: orainstRoot.sh script for node1
      shell: /u01/app/oraInventory/orainstRoot.sh

    - name: root.sh script for node1
      shell: "{{ ORACKE_HOME }}/root.sh"

    - name: add bash_profile for oracle
      lineinfile: dest=/home/oracle/.bash_profile line='{{ item.line }}'
      with_items:
      - line: "export ORACLE_BASE={{ ORACLE_BASE }}"
      - line: "export ORACLE_HOME={{ ORACLE_HOME }}"
      - line: "export PATH=$ORACLE_HOME/bin:$PATH"
[root@ansible]#
```

```
[root@ansible]# ansible-playbook 08_install_oracle_database_19cR3.yml

PLAY [host01] *************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [host01]

TASK [create directory for grid home] *****************************************************************************************************************
 [WARNING]: Consider using file module with state=directory rather than running mkdir

changed: [host01]

TASK [change dir / files permission] ******************************************************************************************************************
changed: [host01]

TASK [remove response file] ***************************************************************************************************************************
 [WARNING]: Consider using file module with state=absent rather than running rm

changed: [host01]

TASK [copy response file] *****************************************************************************************************************************
changed: [host01]

TASK [chenge owner for response file] *****************************************************************************************************************
 [WARNING]: Consider using file module with owner rather than running chown

changed: [host01]

TASK [change response file for installation option] ***************************************************************************************************
changed: [host01]

TASK [change response file for Unix group] ************************************************************************************************************
changed: [host01]

TASK [change response file for inventory file] ********************************************************************************************************
changed: [host01]

TASK [change response file for ORACLE_HOME] ***********************************************************************************************************
changed: [host01]

TASK [change response file for inventory file] ********************************************************************************************************
changed: [host01]

TASK [change response file for Install Edition] *******************************************************************************************************
changed: [host01]

TASK [change response file for OSDBA_GROUP] ***********************************************************************************************************
changed: [host01]

TASK [change response file for OSOPER_GROUP] **********************************************************************************************************
changed: [host01]

TASK [change response file for OSBACKUPDBA] ***********************************************************************************************************
changed: [host01]

TASK [change response file for OSDGDBA] ***************************************************************************************************************
changed: [host01]

TASK [change response file for OSKMDBA] ***************************************************************************************************************
changed: [host01]

TASK [change response file for OSRACDBA] **************************************************************************************************************
changed: [host01]

TASK [change response file for executeRootScript] *****************************************************************************************************
changed: [host01]

TASK [change response file for CLUSTER_NODES] *********************************************************************************************************
changed: [host01]

TASK [change response file for the_type_of_Real_Application_Cluster_Database] *************************************************************************
ok: [host01]

TASK [change response file for Database to create] ****************************************************************************************************
changed: [host01]

TASK [change response file for] ***********************************************************************************************************************
changed: [host01]

TASK [execute database installation] ******************************************************************************************************************
 [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running su

fatal: [host01]: FAILED! => {"changed": true, "cmd": "su oracle -c \"/u01/app/oracle/product/19.3.0/dbhome/runInstaller -silent -noconfig -ignoreInternalDriverError -waitforcompletion -responseFile /tmp/db.rsp\"", "delta": "0:12:18.009291", "end": "2019-05-12 23:22:12.280792", "failed": true, "rc": 6, "start": "2019-05-12 23:09:54.271501", "stderr": "", "stderr_lines": [], "stdout": "Oracle Database設定ウィザードを起動中...\n\n[WARNING] [INS-13014] ターゲット環境は、いくつかのオプションの要件を満たしていません。\n   原因: 一部のオプションの前提条件が満たされていません。詳細はログを参照してください。/u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log\n   アクション: ログから失敗した前提条件チェックのリストを確認します: /u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。\nこのセッションのレスポンス・ファイルは次の場所にあります:\n /u01/app/oracle/product/19.3.0/dbhome/install/response/db_2019-05-12_11-09-54PM.rsp\n\nこのインストール・セッションのログは次の場所にあります:\n /u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log\n\nrootユーザーとして次のスクリプトを実行します:\n\t1. /u01/app/oracle/product/19.3.0/dbhome/root.sh\n\n次のノードで/u01/app/oracle/product/19.3.0/dbhome/root.shを実行してください: \n[host01, host02]\n\n\nSuccessfully Setup Software with warning(s).", "stdout_lines": ["Oracle Database設定ウィザードを起動中...", "", "[WARNING] [INS-13014] ターゲット環境は、いくつかのオプションの要件を満たしていません。", "   原因: 一部のオプションの前提条件が満たされていません。詳細はログを参照してください。/u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log", "   アクション: ログから失敗した前提条件チェックのリストを確認します: /u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。", "このセッションのレスポンス・ファイルは次の場所にあります:", " /u01/app/oracle/product/19.3.0/dbhome/install/response/db_2019-05-12_11-09-54PM.rsp", "", "このインストール・セッションのログは次の場所にあります:", " /u01/app/oraInventory/logs/InstallActions2019-05-12_11-09-54PM/installActions2019-05-12_11-09-54PM.log", "", "rootユーザーとして次のスクリプトを実行します:", "\t1. /u01/app/oracle/product/19.3.0/dbhome/root.sh", "", "次のノードで/u01/app/oracle/product/19.3.0/dbhome/root.shを実行してください: ", "[host01, host02]", "", "", "Successfully Setup Software with warning(s)."]}
	to retry, use: --limit @/etc/ansible/08_install_oracle_database_19cR3.retry

PLAY RECAP ********************************************************************************************************************************************
host01                 : ok=24   changed=21   unreachable=0    failed=1
```
 前提条件のエラーチェックで引っかかっているけど、インストールは完了
root.shの自動実行を入れておけばあとはおk

### dbcaでお試しDBを作成
途中で失敗した場合は、クラスタから削除
なぜか、CRSDとEVmanagerが停止して、crsctl stop crs -fでも停止できなくてOS再起動

```:dbcaでDB作成
[root@ansible]# cat create_oracle_database_13cR3.yml
- hosts: host01
  vars:
    NODELIST: host01,host02
    ORACLE_HOME: /u01/app/oracle/product/19.3.0/dbhome
    DB_UNIQUE_NAME: testdb
    LOCATION: .loc.a
    ORAPASSWD: emoclew1
  tasks:
  - name: remove response file
    shell: rm -f {{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp
  - name: cope response file
    shell: cp {{ ORACLE_HOME }}/assistants/dbca/dbca.rsp {{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp
  - name: chenge owner for response file
    shell: chown oracle:oinstall {{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp

  - name: change response file for GDBNAME
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^gdbName=' replace='gdbName={{ DB_UNIQUE_NAME }}{{ LOCATION }}'
  - name: change response file for SID
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^sid=' replace='sid={{ DB_UNIQUE_NAME }}'
  - name: change response file for DATABASECONFTYPE
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^databaseConfigType=' replace='databaseConfigType=RAC'
  - name: change response file for CREATEASCONTAINERDATABASE
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^createAsContainerDatabase=' replace='createAsContainerDatabase=true'
  - name: change response file for NUMBEROFPDBS
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^numberOfPDBs=' replace='numberOfPDBs=1'
  - name: change response file for PDBNAME
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^pdbName=' replace='pdbName=PDB_{{ DB_UNIQUE_NAME }}'
  - name: change response file for PDBADMINPASSWORD
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^pdbAdminPassword=' replace='pdbAdminPassword={{ ORAPASSWD }}'
  - name: change response file for NODELIST
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^nodelist=' replace='nodelist={{ NODELIST }}'

  - name: change response file for templateName
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^templateName=' replace='templateName={{ ORACLE_HOME }}/assistants/dbca/templates/General_Purpose.dbc'
  - name: change response file for SYSPASSWORD
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^sysPassword=' replace='sysPassword={{ ORAPASSWD }}'
  - name: change response file for SYSTEMPASSWORD
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^systemPassword=' replace='systemPassword={{ ORAPASSWD }}'
  - name: change response file for DBSNMPPASSWORD
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^dbsnmpPassword=' replace='dbsnmpPassword={{ ORAPASSWD }}'
  - name: change response file for STORAGETYPE
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^storageType=' replace='storageType=ASM'
  - name: change response file for DISKGROUPNAME
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^diskGroupName=' replace='diskGroupName=DATA'
  - name: change response file for ASMSNMP_PASSWORD
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^asmsnmpPassword=' replace='asmsnmpPassword={{ ORAPASSWD }}'
#  - name: change response file for RECOVERYGROUPNAME
#    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^recoveryGroupName=' replace='recoveryGroupName=RECO'

  - name: change response file for CHARACTERSET
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^characterSet=' replace='characterSet=AL32UTF8'
  - name: change response file for NATIONALCHARACTERSET
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='^nationalCharacterSet=' replace='nationalCharacterSet=AL16UTF16'
  - name: change response file for AUTOMATICMEMORYMANAGEMENT
    replace: dest={{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME}}.rsp regexp='automaticMemoryManagement=' replace='automaticMemoryManagement=FALSE'

  - name: create database
    shell: su oracle -c "{{ ORACLE_HOME }}/bin/dbca -silent -createDatabase -responseFile {{ ORACLE_HOME }}/assistants/dbca/{{ DB_UNIQUE_NAME }}.rsp"

[root@ansible]#
```
```:実行
[root@ansible]# ansible-playbook create_oracle_database_13cR3.yml

PLAY [host01] *******************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [host01]

TASK [remove response file] *********************************************************************************************************************************************************
 [WARNING]: Consider using file module with state=absent rather than running rm

changed: [host01]

TASK [cope response file] ***********************************************************************************************************************************************************
changed: [host01]

TASK [chenge owner for response file] ***********************************************************************************************************************************************
 [WARNING]: Consider using file module with owner rather than running chown

changed: [host01]

TASK [change response file for GDBNAME] *********************************************************************************************************************************************
changed: [host01]

TASK [change response file for SID] *************************************************************************************************************************************************
changed: [host01]

TASK [change response file for DATABASECONFTYPE] ************************************************************************************************************************************
changed: [host01]

TASK [change response file for CREATEASCONTAINERDATABASE] ***************************************************************************************************************************
changed: [host01]

TASK [change response file for NUMBEROFPDBS] ****************************************************************************************************************************************
changed: [host01]

TASK [change response file for PDBNAME] *********************************************************************************************************************************************
changed: [host01]

TASK [change response file for PDBADMINPASSWORD] ************************************************************************************************************************************
changed: [host01]

TASK [change response file for NODELIST] ********************************************************************************************************************************************
changed: [host01]

TASK [change response file for templateName] ****************************************************************************************************************************************
changed: [host01]

TASK [change response file for SYSPASSWORD] *****************************************************************************************************************************************
changed: [host01]

TASK [change response file for SYSTEMPASSWORD] **************************************************************************************************************************************
changed: [host01]

TASK [change response file for DBSNMPPASSWORD] **************************************************************************************************************************************
changed: [host01]

TASK [change response file for STORAGETYPE] *****************************************************************************************************************************************
changed: [host01]

TASK [change response file for DISKGROUPNAME] ***************************************************************************************************************************************
changed: [host01]

TASK [change response file for ASMSNMP_PASSWORD] ************************************************************************************************************************************
changed: [host01]

TASK [change response file for CHARACTERSET] ****************************************************************************************************************************************
changed: [host01]

TASK [change response file for NATIONALCHARACTERSET] ********************************************************************************************************************************
changed: [host01]

TASK [change response file for AUTOMATICMEMORYMANAGEMENT] ***************************************************************************************************************************
changed: [host01]

TASK [create database] **************************************************************************************************************************************************************
 [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running su

changed: [host01]

PLAY RECAP **************************************************************************************************************************************************************************
host01                 : ok=23   changed=22   unreachable=0    failed=0

[root@ansible]#
```

```:確認
[oracle@host01 ~]$ srvctl status database -d testdb -v
インスタンスtestdb1がノードhost0101で稼動しています。インスタンスのステータス: Open。
インスタンスtestdb2がノードhost0102で稼動しています。インスタンスのステータス: Open。
[oracle@host01 ~]$
```
 ということで、ざっくりと流れは掴んだ