ライトウェルブログ

2021/01/29zLinux をAnsibleで操作する その2

はじめに

お久しぶりです。樋口です。

下記記事を書いてから時間が経ちましたが続編を書きました。

zLinuxをAnsibleで操作してみた

今回は、Db2をインストールしています。

やりたいこと

Db2のインストール・操作

cpuが違うので、パッケージ関連の操作がどう変わるのか気になりますね。

今回はIBM製品の代表格であるDb2の操作を行い、

IAサーバのRHELとどのように動作が変わるのか見ていきます。

Ansible Galaxy にて「db2」というキーワードで検索すると以下がヒットします。

https://galaxy.ansible.com/bernardoVale/db2

こちらのRoleを参考に、以下の点を修正して動作確認を行います。

  • RHEL8に対応
  • 前提パッケージがxであるものをs390xに修正

事前準備

最新のDb2評価版をインストール・配置

以下のサイトから最新版Db2の評価版をダウンロード

https://www.ibm.com/jp-ja/analytics/db2/trials

元Roleでは、get_urlモジュールでdb2のバイナリを取得してから展開していましたが、

# tasks/get_db2.yml
---
#Download a DB2 copy from a custom URL (Could be a http, an ftp whatever.)
- name: Downloading DB2
  get_url:
    url: "{{db2_binary.url}}"
    dest: "{{db2_binary.location}}"
  when: db2_binary.url is defined

- name: Decompressing DB2 Server
  unarchive:
    src: "{{db2_binary.location}}"
    dest: "{{db2_binary.dest}}"
    copy: no
    creates: "{{db2_binary.dest}}/{{db2_creates}}"

本検証ではダウンロードサイトを準備できなかったため、get_url部分のtaskを無くし/work/Db2ディレクトリを作って格納することとします。

Roleの修正

元のリポジトリ をforkして改変していきます。
改変後のリポジトリはこちら

main.ymlをOS VerやCPU種別に分岐する修正

OS種別で処理を分岐するのは好きじゃないんですが、fork元のRoleがOSディストリビューションで分岐する作りになっていたのでOS Verとarchitectureの分岐を追加します。

ansibleのfactsで取得する変数に以下のような違いがありますので、こちらを利用します。

変数名
64bit IA
LinuxONE
ansible_architecture
x86_64
s390x

改修前

---
# tasks/main.yml
# Include variables at the start so they're in scope
- name: Include OS-Specific variables
  include_vars: "{{ ansible_os_family }}.yml"

改修後

---
# tasks/main.yml
# Include variables at the start so they're in scope
- name: Include OS-Specific variables
  include_vars: "{{ ansible_os_family }}_{{ ansible_distribution_major_version }}_{{ ansible_architecture }}.yml"

 

前提パッケージをs390xのCPUに対応するよう修正

  • 改修前
---
# vars/RedHat.yml
db2_packages:
 - pam
 - pam-devel.i686
 - libaio
 - libstdc++-devel.i686
 - libstdc++
 - ksh
 - unzip
 - numactl
 - libselinux-python
  • 改修後
---
# vars/RedHat_7_s390x.yml
db2_packages:
  - pam
  - pam-devel.s390x
  - libaio
  - libstdc++-devel.s390x
  - libstdc++
  - ksh
  - unzip
  - numactl
  - python3-libselinux-python

  • zLinuxのOSがRHEL8の場合のvarsファイルを追加
---
# vars/RedHat_8_s390x.yml
db2_packages:
  - pam
  - pam-devel.s390x
  - libaio
  - libstdc++-devel.s390x
  - libstdc++
  - ksh
  - unzip
  - numactl
  - libselinux-python
  - python3-libselinux.s390x
  - perl-Net-Ping
  - gcc.s390x

その他 lintのエラーを修正

3年前のリポジトリなので、yamllint、ansible-lintをかけると大量の警告

  • db_debug|changed のような書き方はサポートされなくなったので、is changedに変更
  • インデントの開始位置を修正
  • 変数の{{}}には初めと終わりに半角スペースをいれる
  • 「var=debug」 などの1ライナー表記はやめる

本環境の固有情報はvars/main.yml

大元のRoleと異なるDb2のバージョンやインストールバイナリの格納場所などの情報は、vars/main.ymlで上書きします。

resp:
  prod: "DB2_SERVER_EDITION"
  file: "/opt/ibm/db2/V11.5"
  lic_agreement: "ACCEPT"
  install_type: "COMPACT"

db2_creates: server_dec

db2_binary:
  location: "/work/Db2/v11.5.5_linux390x64_server_dec.tar.gz"
  dest: "/tmp"

db2_instances:
  - instance: "DB2INST"
    name: "db2inst1"
    password: "{{ 'inst1inst1' | password_hash('sha512') }}"
    group_name: "db2iadm1"
    fenced_username: "db2fenc1"
    fenced_group_name: "db2fadm1"
    fenced_password: "{{ 'fenc1fenc1' | password_hash('sha512') }}"

databases:
  - name: testdb01
    instance: db2inst1
    codeset: "UTF-8"
    territory: "jp"

 

Role 呼び出し元のPlaybook/ジョブテンプレートの準備

requirments.ymlにFork作成したRoleを記載

---
# roles/requirements.yml
- name: ansible-role-db2
  src: https://github.com/jirolin/ansible-role-db2
  version: master

playbookの作成(ここではzLinux.ymlとした)

---
# zLinux.yml
- hosts: all
  become: true
  roles:
    - ansible-role-db2

 

このPlaybookをAnsibleTowerのジョブテンプレートとして登録

実行と動作確認

s390xの前提パッケージインストールも問題なく実行されている模様

実機上で「TESTDB01」が作成されていることを確認

[db2inst1@jirohiguchi01 ~]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = TESTDB01
 Database name                        = TESTDB01
 Local database directory             = /home/db2inst1
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

まとめ

重要なポイントはアーキテクチャの違いです。

パッケージのアーキテクチャの差異に気をつければ、

IAサーバのRHELとほとんど同様の操作ができることが分かりました。

次回はWAS Liberty on zLinux編!

今回作成したDBにWASからテスト接続するまで実施しようと思います!

お楽しみに~

トップページに戻る