リソース登録はなんだかんだ大変
新しいバージョンが出てきた際に、NIMにlpp_sourceやspotの登録が必要ですよね。
毎回手作業で登録するのは手間でもあるので、自動化したいなとずっと思っていました。
スクリプトで自動化もできますが、もっと再利用可能なようにAnsible使って実装をしたいと思っていたところでした。
ただ、Ansibleも書くのがなかなかに大変。
ということで、全部Bobに作ってもらいました。
今回はさくっと事前情報の定義や設計を細かく行っていません。
2時間くらいでISOファイルからlpp_sourceとspotの自動登録が完全に動くまでになりました。(インストール確認まで完了)
できあがったplaybookはこちら (一部しかデバッグはしていません)
https://github.com/tom-m-m/aix-nim-automatoin-ansible
さっそくBobにお願いしてみる
どう実装するのがよいのか悩んでいた部分もあったので、まずは Planモード で以下のように依頼してみました。
AIXのNIMサーバーに対して以下の事を行いたいです。どのような実装が良いでしょうか?
- 新しいAIX/VIOSのバージョンやTL、SPが利用できるようなったタイミング
- NIMサーバーが構築されているAIX上に対象のisoファイルや関連するパッチはダウンロード済み or ダウンロードから自動的に行う
- NIMサーバーにリソース登録を行い、インストール可能にする
Bobからの返答は、
AIXのNIMサーバー自動化について、いくつか確認させてください。
AIXのNIMサーバー自動化について、以下の点を教えてください:
1. 実装言語: どの言語で実装したいですか?(例:Bash/Ksh、Python、Ansible等)
2. ダウンロード元: ISOファイルやパッチのダウンロード元は?(例:IBM Fix Central、社内リポジトリ等)
3. 通知方法: 新バージョン検知時の通知方法は?(例:メール、Slack、ログファイル等)
4. 実行環境: スクリプトはNIMサーバー上で直接実行?それともリモートから実行?
選択肢も下のように出してくれました。
- Bash/Kshスクリプト、IBM Fix Centralから手動ダウンロード済み、メール通知、NIMサーバー上で直接実行
- Pythonスクリプト、IBM Fix Centralから自動ダウンロード、Slack通知、NIMサーバー上で直接実行
- Ansibleプレイブック、社内リポジトリから取得、メール通知、リモートから実行
- Bash/Kshスクリプト、IBM Fix Centralから自動ダウンロード、ログファイルのみ、NIMサーバー上で直接実行
最初からAnsibleでとプロンプトやらルール設定しておけばよかったと思いつつ- Ansibleプレイブック、社内リポジトリから取得、メール通知、リモートから実行 を選び、メール通知は必要無いことを伝えて作業を継続してもらいます。
了解しました。それでは、AIX NIMサーバー自動化のための実装計画を作成します。
- プロジェクト構造とディレクトリ設計を作成
- Ansible inventory設定ファイルを作成(NIMサーバーの接続情報)
- 変数定義ファイルを作成(バージョン情報、リポジトリ設定等)
- SCP/SFTPからISOファイルとパッチをダウンロードするタスクを実装
- ダウンロードしたファイルの整合性チェック機能を実装
- lpp_sourceリソース登録タスクを実装
- spotリソース登録タスクを実装
- mksysbリソース登録タスクを実装
- 複数バージョン管理のためのバージョン識別ロジックを実装
- 既存リソースの重複チェック機能を実装
- エラーハンドリングとログ出力機能を実装
- 実行前のドライランモード(check mode)を実装
- README.mdとドキュメントを作成
- 使用例とサンプル設定ファイルを作成
最初は下のようなアーキテクチャーを提案してきました。
現在使っている環境もあり、SCP/SFTPリポジトリでは無くローカル(NIMサーバー上)にファイルを配置する構成に変えてもらいつつ実装を進めてもらいます。
数十分で一通りのplaybookやらREADMEが完成したので、出来上がったものを実際に動かしつつエラーが発生した際に修正をしてもらうという作業に移行。
思っていたディレクトリ構造と違ったりコマンドのオプションが違ったりと修正ポイントが出てきたので適宜修正してもらいつつ、1時間~1時間30分程度でlpp_sourceとspotを自動で登録できる状態になりました。
ISOファイルを置いておけば、自動的にlpp_sourceとspotの登録まで行ってくれます。
~/dev/bob/aix % ansible-playbook -i inventory/production/hosts playbooks/nim_setup.yml --tags aix
PLAY [AIX NIMサーバー自動化] ******************************************************************************************************************************************************************
TASK [NIMサーバーの事前準備] ******************************************************************************************************************************************************************
TASK [AIXバージョンごとの処理] ****************************************************************************************************************************************************************
included: /xxxxxxx/playbooks/process_version.yml for nim-prod-01 => (item=AIX 7.3 TL4 SP0)
TASK [処理開始: AIX 7.3 TL4 SP0] **************************************************************************************************************************************************************
ok: [nim-prod-01] =>
msg: AIX 7.3 TL4 SP0 の処理を開始します
TASK [ISOファイルの検証] **********************************************************************************************************************************************************************
TASK [nim_verify : ISOファイルの検証を開始] ***************************************************************************************************************************************************
ok: [nim-prod-01] =>
msg: ISOファイル aix7300-04-00-2546.iso の検証を開始します
TASK [nim_verify : ISOファイルの存在確認] *****************************************************************************************************************************************************
ok: [nim-prod-01]
~省略~
ASYNC POLL on nim-prod-01: jid=j855627384589.23396656 started=1 finished=0
ASYNC POLL on nim-prod-01: jid=j855627384589.23396656 started=1 finished=0
ASYNC OK on nim-prod-01: jid=j855627384589.23396656
changed: [nim-prod-01]
TASK [nim_spot : SPOTリソース登録の確認] ******************************************************************************************************************************************************
ok: [nim-prod-01]
TASK [nim_spot : SPOTリソース登録成功] ********************************************************************************************************************************************************
ok: [nim-prod-01] =>
msg: SPOTリソース spot7300-04-00 の登録が完了しました
TASK [Mksysbリソースの登録] *******************************************************************************************************************************************************************
skipping: [nim-prod-01]
TASK [処理完了: AIX 7.3 TL4 SP0] **************************************************************************************************************************************************************
ok: [nim-prod-01] =>
msg: AIX 7.3 TL4 SP0 の処理が完了しました
PLAY RECAP ************************************************************************************************************************************************************************************
nim-prod-01 : ok=21 changed=1 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
lpp_sourceやspotの登録が時間かかってしまうので、そこに時間をとられた印象です。
このあたりのテスト方法などを確立できていればより短い時間で確実に実装できそうです。
自分でこのレベルのものを実装するととてつもなく時間がかかるところ、さくっとできて良いですね。
業務で利用するためにはお作法の統一やブレない事前設計が必要だとは思いますが、非常に有用かと思います。
まだエラー確認などできていませんが、VIOSのmksysb登録も行えるように実装してもらっています。