2021/01/29zLinux をAnsibleで操作する その2
はじめに
お久しぶりです。樋口です。
下記記事を書いてから時間が経ちましたが続編を書きました。
今回は、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で取得する変数に以下のような違いがありますので、こちらを利用します。
|
|
|
|
|
|
|
|
改修前
---
# 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からテスト接続するまで実施しようと思います!
お楽しみに~






