Ansible AIX 検証 : installp モジュール
Ansible の installp (AIXファイルセット導入) モジュールの動きを確認しました。
- installp モジュールの説明はこちらを参照: installp_modue
Notes に気になる記載「Notes : If the package is already installed, even the package/fileset is new, the module will not install it.」があります。
AIX のinstallpコマンドでは -a オプションを使用してファイルセットのアップデート実行はできますが、installp モジュールではアップデートは実行できないのでしょうか...?
- installp モジュール本体の内容はこちらと推測:[Link]
(https://github.com/kairoaraujo/ansible-aix-support/blob/master/lib/ansible/modules/packaging/os/installp.py)
installp.py 内に -a オプションを使用する条件分岐はあるようですが...
266 | else:
267 | if not module.check_mode:
268 | rc, install_out, err = module.run_command(
269 | "%s -a %s -X -d %s %s" % (
270 | installp_cmd, accept_license_param[accept_license],
271 | repository_path, package))
実行環境
Ansibleサーバー :
- Local PC, Mac
- Python 2.7.10
- Ansible 2.9.9
実行対象のAIXサーバー:
- AIX 7.2 TL03 SP03
- Python 2.7.15
準備:アップデートメディアの配置:
AIX 7.2 TL03 SP04 Base メディア iso ファイル(aix_7200-03-04-1938_flash_022020.iso)を 対象AIX サーバー上に配置し、loopmount コマンドを実施して /mnt にマウントしています。
# loopmount -i /inst.images/aix_7200-03-04-1938_flash_022020.iso -o "-V cdrfs -o ro" -m /mnt
# echo $?
0
# ls -l /mnt
total 100
-rw-rw-r-- 1 4000 4000 42 Jan 30 08:00 .Version
drwxr-xr-x 2 4000 4000 2048 Jan 30 07:57 7200-03
-rw-r--r-- 1 4000 4000 16 Jan 30 07:57 OSLEVEL
-rw-r--r-- 1 4000 4000 901 Jan 30 07:57 README.aix
drwxrwxr-x 4 4000 4000 2048 Jan 30 07:57 RPMS
-rw-r--r-- 1 4000 4000 6365 Jan 30 07:57 bosinst.data
-rw-r--r-- 1 4000 4000 15189 Jan 30 07:57 image.data
drwxr-xr-x 3 4000 4000 2048 Jan 30 07:57 installp
drwxr-xr-x 3 4000 4000 2048 Jan 30 07:58 ismp
drwxr-xr-x 2 4000 4000 6144 Jan 30 07:58 license
drwxr-xr-x 3 4000 4000 2048 Jan 30 07:57 ppc
drwxr-xr-x 3 4000 4000 2048 Jan 30 07:57 root
drwxr-xr-x 10 4000 4000 2048 Jan 30 07:59 usr
準備:その他、Ansible 稼働の事前設定済み。
1) installp モジュールで、ファイルセット導入および既存ファイルセットのアップデート可否確を認
使用する playbook
---
- hosts: all
become: true
tasks:
# update fileset
- installp:
name: bos.sysmgt.nim.client #< AIX に導入されている
repository_path: /mnt #< base iso ファイルのマウント・ディレクトリ
accept_license: true
register: r
- debug:
var: r
- hosts: all
become: true
tasks:
# install additional fileset
- installp:
name: bos.sysmgt.nim.master #< AIX に導入されていない
repository_path: /mnt #< base iso ファイルのマウント・ディレクトリ
accept_license: true
register: r
- debug:
var: r
- accept_license は yes ではなく true でも実行できました。
- state は記述していないので、default 値の present (導入) が使用されます。
対象AIXで対象ファイルセットの状態確認
# oslevel -s
7200-03-03-1914
# lslpp -l | grep nim
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
「bos.sysmgt.nim.client 」は「7.2.3.17」が導入されていますが、「bos.sysmgt.nim.master 」は導入されていません。
実行:
$ time ansible-playbook -i ip -u root --private-key=id_rsa --ssh-common-args='-o StrictHostKeyChecking=no' -e ansible_python_interpreter=auto_silent aix_installp.yml
PLAY [all] ***********************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [xx.xxx.xx.xxx]
TASK [installp] ******************************************************************************************************************
ok: [xx.xxx.xx.xxx]
TASK [debug] *********************************************************************************************************************
ok: [xx.xxx.xx.xxx] => {
"r": {
"changed": false,
"failed": false,
"msg": "No packages installed. Already installed: {'bos.sysmgt.nim.client': '7.2.3.17'}."
}
}
PLAY [all] ***********************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [xx.xxx.xx.xxx]
TASK [installp] ******************************************************************************************************************
changed: [xx.xxx.xx.xxx]
TASK [debug] *********************************************************************************************************************
ok: [xx.xxx.xx.xxx] => {
"r": {
"changed": true,
"failed": false,
"msg": " Installed: bos.sysmgt.nim.master."
}
}
PLAY RECAP ***********************************************************************************************************************
xx.xxx.xx.xxx : ok=6 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
real 0m41.629s
user 0m8.117s
sys 0m2.009s
=> 「bos.sysmgt.nim.client」に対する処理は、導入済みのためインストールしない、というメッセージを出力しています。
"msg": "No packages installed. Already installed: {'bos.sysmgt.nim.client': '7.2.3.17'}."
実行後、ファイルセット確認:
# lslpp -l | grep nim
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
bos.sysmgt.nim.master 7.2.3.18 COMMITTED Network Install Manager -
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
結果:「bos.sysmgt.nim.master」 は新規導入されましたが、「bos.sysmgt.nim.client」 はアップデートされませんでした。
使用した Ansible バージョン 2.9.9 の installp モジュールでは、既存ファイルセットのアップデートは実施されないと考えられます。
では、AIX のファイルセットアップデートはAnsible では何で実行したら良いのでしょう?
以下の方法を見つけました。
(他にもあるかもしれません)
- shell module を使用
・Ansible の shell module を使用してコマンドを実行する方法です。
-
- installp コマンドを実行し単体のファイルセットアップデートを実行
-
- install_all_updates コマンドを実行し、用意したモジュールの全てのアップデートを実行
- aix_nim モジュールを使用
https://github.com/aixoss/ansible-playbooks
AIX OSS に aix_nim というモジュールがありました。NIMを利用したモジュール・アップデートとして使えるのかもしれません。ただ、公式Ansible のモジュールでは検索しても結果にでてきておらず、公式モジュールではないのかもしれません。
この記事では、1) shell module を使用した installp、install_all_updates コマンドの実行を確認しました。
1-1. installp コマンド実行
実行前の状態
# lslpp -l | grep nim.client
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
bos.sysmgt.nim.client 7.2.3.17 COMMITTED Network Install Manager -
以下の yml を使用。「bos.sysmgt.nim.client」をアップデートします。
---
- hosts: all
become: true
tasks:
- shell: |
installp -a -d/mnt bos.sysmgt.nim.client
実行:
$ time ansible-playbook -i ip -u root --private-key=id_rsa --ssh-common-args='-o StrictHostKeyChecking=no' -e ansible_python_interpreter=auto_silent installp_update.yml
PLAY [all] ***********************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [xx.xxx.xx.xxx]
TASK [shell] *********************************************************************************************************************
changed: [xx.xxx.xx.xxx]
PLAY RECAP ***********************************************************************************************************************
xx.xxx.xx.xxx : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
real 0m22.252s
user 0m4.461s
sys 0m1.028s
実行後の状態
# lslpp -l | grep nim.client
bos.sysmgt.nim.client 7.2.3.18 COMMITTED Network Install Manager -
bos.sysmgt.nim.client 7.2.3.18 COMMITTED Network Install Manager -
結果: -> 「bos.sysmgt.nim.client」 が 「7.2.3.18」 にupdate されました。
1-2. install_all_updates コマンド実行
---
- hosts: all
become: true
tasks:
- shell: |
install_all_updates -d /mnt
実行前の状態
# oslevel -s
7200-03-03-1914
lslpp の before 取得
# lslpp -l > lslpp_bef.txt
実行:
$ time ansible-playbook -i ip -u root --private-key=id_rsa --ssh-common-args='-o StrictHostKeyChecking=no' -e ansible_python_interpreter=auto_silent install_all_updates.yml
PLAY [all] ***********************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [xx.xxx.xx.xxx]
TASK [shell] *********************************************************************************************************************
changed: [xx.xxx.xx.xxx]
PLAY RECAP ***********************************************************************************************************************
xx.xxx.xx.xxx : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
real 4m24.074s
user 0m38.401s
sys 0m6.777s
AIX にログインして確認
# oslevel -s
7200-03-04-1938
結果: AIX7.2TL03SP03 から AIX7.2TL03SP04 に変更されました。
lslpp の after 取得
# lslpp -l > lslpp_aft.txt
lslpp で diff の確認
ファイルセットのバージョンが変更されていることが確認できます。
# diff lslpp_bef.txt lslpp_aft.txt
53c53
< X11.motif.mwm 7.2.0.0 COMMITTED AIXwindows Motif Window
---
> X11.motif.mwm 7.2.3.16 COMMITTED AIXwindows Motif Window
91c91
< adde.v2.ethernet.rte 7.2.3.15 COMMITTED ADDE Ethernet Device Runtime
---
> adde.v2.ethernet.rte 7.2.3.16 COMMITTED ADDE Ethernet Device Runtime
95c95
< artex.base.rte 7.2.3.16 COMMITTED AIX Runtime Expert
---
> artex.base.rte 7.2.3.17 COMMITTED AIX Runtime Expert
98c98
< bos.64bit 7.2.3.16 COMMITTED Base Operating System 64 bit
---
> bos.64bit 7.2.3.17 COMMITTED Base Operating System 64 bit
100,101c100,101
< bos.acct 7.2.3.16 COMMITTED Accounting Services
< bos.adt.base 7.2.3.15 COMMITTED Base Application Development
---
> bos.acct 7.2.3.17 COMMITTED Accounting Services
> bos.adt.base 7.2.3.16 COMMITTED Base Application Development
105c105
< bos.adt.include 7.2.3.16 COMMITTED Base Application Development
---
> bos.adt.include 7.2.3.17 COMMITTED Base Application Development
112,113c112,113
< bos.ahafs 7.2.3.15 COMMITTED Aha File System
< bos.aixpert.cmds 7.2.3.15 COMMITTED AIX Security Hardening
---
> bos.ahafs 7.2.3.16 COMMITTED Aha File System
> bos.aixpert.cmds 7.2.3.16 COMMITTED AIX Security Hardening
115c115
< 7.2.3.19 COMMITTED Alternate Disk Installation
---
> 7.2.3.20 COMMITTED Alternate Disk Installation
117c117
< bos.alt_disk_install.rte 7.2.3.16 COMMITTED Alternate Disk Installation
---
> bos.alt_disk_install.rte 7.2.3.17 COMMITTED Alternate Disk Installation
122c122
< bos.cluster.rte 7.2.3.16 COMMITTED Cluster Aware AIX
---
> bos.cluster.rte 7.2.3.17 COMMITTED Cluster Aware AIX
127,128c127,128
< bos.diag.rte 7.2.3.16 COMMITTED Hardware Diagnostics
< bos.diag.util 7.2.3.17 COMMITTED Hardware Diagnostics Utilities
---
> bos.diag.rte 7.2.3.17 COMMITTED Hardware Diagnostics
> bos.diag.util 7.2.3.18 COMMITTED Hardware Diagnostics Utilities
131c131
~ 以下長いです。省略 ~
AIX アップデートに対応する公式モジュールは見つけられていませんが、shell モジュールのコマンド実行で実施することができました。
以上です。