nsible : AIX モジュールの確認 - installp


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

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

aix_installp.yml
---
- 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 では何で実行したら良いのでしょう?

以下の方法を見つけました。
(他にもあるかもしれません)

1) shell module を使用

・Ansible の shell module を使用してコマンドを実行する方法です。

  • 1) installp コマンドを実行し単体のファイルセットアップデートを実行
  • 2) install_all_updates コマンドを実行し、用意したモジュールの全てのアップデートを実行

Ansible shell module

2) 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」をアップデートします。

installp_update.yml
---
- 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 コマンド実行

install_all_updates.yml
---
- 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 モジュールのコマンド実行で実施することができました。

以上です。