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からテスト接続するまで実施しようと思います!
お楽しみに~