2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-20

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.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 コマンドを実行し単体のファイルセットアップデートを実行
    1. install_all_updates コマンドを実行し、用意したモジュールの全てのアップデートを実行

Ansible shell module

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

以上です。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?