第22章 OpenLMI
Open Linux Management Infrastructure は、通常 OpenLMI と短縮形で呼ばれる、Linux システムを管理する一般的なインフラストラクチャーです。これは既存のツール上に構築され、システム管理者から基礎となるシステムの複雑性を隠すために抽出化レイヤーとして機能します。OpenLMI には、ローカルおよびリモートでのアクセスが可能なサービス一式が含まれており、ハードウェア、オペレーティングシステム、システムサービスの管理および監視に使用できる複数言語のバインディング、標準 API、および標準スクリプトインターフェースを提供します。
22.1. OpenLMI の概要
OpenLMI は、物理マシンおよび仮想マシンの両方で Red Hat Enterprise Linux システムを実行している実稼働サーバーに共通の管理インターフェースを提供するように設計されています。以下の 3 つのコンポーネントで構成されています。
- システム管理エージェント: このエージェントは管理されるシステムにインストールされ、標準オブジェクトブローカーに提示されるオブジェクトモデルを実装します。OpenLMI に実装される最初のエージェントにはストレージおよびネットワークの設定が含まれますが、その後の作業がシステム管理の追加要素を処理します。システム管理エージェントは、Common Information Model プロバイダー または CIM プロバイダー と呼ばれます。
- 標準オブジェクトブローカー: オブジェクトブローカーはシステム管理エージェントを管理し、インターフェースを提供します。標準オブジェクトブローカーは、CIM オブジェクトモニター または CIMOM とも呼ばれます。
- クライアントアプリケーションおよびスクリプト: クライアントアプリケーションおよびスクリプトは、標準オブジェクトブローカーでシステム管理エージェントを呼び出します。
OpenLMI プロジェクトは、スクリプトまたはシステム管理コンソールで使用可能な低レベルのインターフェースを提供することで、既存の管理イニシアチブを補完します。OpenLMI とともに配布されるインターフェースには、C、C++、Python、Java、およびイニシアチブコマンドラインクライアントが含まれており、これらすべてが各エージェントで実装されている機能に同一の完全なアクセスを提供します。これにより、どのプログラミングインターフェースを使用していても、まったく同一の機能に常にアクセスできることが保証されています。
22.1.1. 主な特長
以下は、OpenLMI をシステムにインストールして使用する主な利点です。
- OpenLMI は、ローカルおよびリモートのシステムの設定、管理、モニタリングのための標準インターフェースを提供します。
- 物理および仮想の両方のマシン上の実稼働サーバーの設定、管理、監視ができるようになります。
- CIM プロバイダーのコレクションがともに配布され、ストレージデバイスおよび複雑なネットワークの設定、管理、監視が可能になります。
- C、C++、Python、および Java プログラムからシステム管理機能を呼び出すことが可能で、コマンドラインインターフェースを提供する LMIShell も含まれます。
- オープンな業界標準に基づく無料ソフトウェアです。
22.1.2. 管理機能
OpenLMI の主な機能には、ストレージデバイス、ネットワーク、システムサービス、ユーザーアカウントの管理、ハードウェアおよびソフトウェアの設定、電源管理、Active Directory との相互作用などがあります。Red Hat Enterprise Linux 7 で配布される CIM プロバイダーの完全リストは、表22.1「利用可能な CIM プロバイダー」 を参照してください。
表22.1 利用可能な CIM プロバイダー
パッケージ名 | 詳細 |
---|---|
openlmi-account | ユーザーアカウント管理用の CIM プロバイダー。 |
openlmi-logicalfile | ファイルおよびディレクトリー読み取り用の CIM プロバイダー。 |
openlmi-networking | ネットワーク管理用の CIM プロバイダー。 |
openlmi-powermanagement | 電源管理用の CIM プロバイダー。 |
openlmi-service | システムサービス管理用の CIM プロバイダー。 |
openlmi-storage | ストレージ管理用の CIM プロバイダー。 |
openlmi-fan | コンピューターファン制御用の CIM プロバイダー。 |
openlmi-hardware | ハードウェア情報取得用の CIM プロバイダー。 |
openlmi-realmd | realmd 設定用の CIM プロバイダー。 |
openlmi-software[a] | ソフトウェア管理用の CIM プロバイダー。 |
[a]
Red Hat Enterprise Linux 7 では、OpenLMI Software プロバイダーは テクノロジープレビュー と提供されています。このプロバイダーは完全に機能するものですが、多くのソフトウェアパッケージをリスト化する際にメモリーと時間が過剰に消費されるという既知のパフォーマンススケーリング問題があります。この問題を回避するには、パッケージ検索ができるだけ少ないパッケージを返すように調整します。
|
22.2. OpenLMI のインストール
OpenLMI は RPM パッケージのコレクションとして配布され、これには CIMOM、個別の CIM プロバイダー、およびクライアントアプリケーションが含まれます。これにより、管理システムとクライアントシステムの区別ができ、必要なコンポーネントのみをインストールできるようになります。
22.2.1. 管理システムへの OpenLMI のインストール
管理システム は、OpenLMI クライアントツールを使用して監視および管理が可能なシステムです。管理システムに OpenLMI をインストールするには、以下のステップに従います。
シェルプロンプトで、
root
で以下のコマンドを入力し、tog-pegasus パッケージをインストールします。yum install tog-pegasus
これで OpenPegasus CIMOM とすべての依存関係がシステムにインストールされ、
pegasus
ユーザーのユーザーアカウントが作成されます。以下のコマンドを
root
で実行して、必要な CIM プロバイダーをインストールします。yum install openlmi-{storage,networking,service,account,powermanagement}
これでストレージ、ネットワーク、アカウント、および電源管理用の CIM プロバイダーがインストールされます。Red Hat Enterprise Linux 7 で配布される CIM プロバイダーの完全リストは、表22.1「利用可能な CIM プロバイダー」 を参照してください。
/etc/Pegasus/access.conf
設定ファイルを編集して、OpenPegasus CIMOM への接続が許可されるユーザーの一覧をカスタマイズします。デフォルトでは、pegasus
ユーザーのみがリモートとローカルの両方で CIMOM にアクセスできます。このユーザーアカウントを有効にするには、root
で以下のコマンドを実行して、ユーザーのパスワードを設定します。passwd pegasus
tog-pegasus.service
ユニットを有効にして OpenPegasus CIMOM を起動します。現行セッションでtog-pegasus.service
ユニットを有効にするには、シェルプロンプトでroot
として以下のように入力します。systemctl start tog-pegasus.service
システムの起動時に自動的に開始するように
tog-pegasus.service
ユニットを設定するには、root
として以下のように入力します。systemctl enable tog-pegasus.service
リモートマシンから管理システムに対話するする場合は、TCP 通信をポート
5989
で有効にします (wbem-https
)。現行セッションでこのポートを開くには、root
で以下のコマンドを実行します。firewall-cmd --add-port 5989/tcp
ポート
5989
を TCP 通信用に永続的に開いておくには、root
で以下を入力します。firewall-cmd --permanent --add-port 5989/tcp
これで、「LMIShell の使用」 の説明にあるように、管理システムに接続して OpenLMI クライアントツールを使用して対話できます。管理システムで直接 OpenLMI 操作を実行する場合は、「クライアントシステムへの OpenLMI のインストール」 で説明されている手順も完了してください。
22.2.2. クライアントシステムへの OpenLMI のインストール
管理システムと対話する基となるのが、クライアントシステム です。通常のシナリオでは、クライアントシステムと管理システムは別の 2 つのマシンにインストールされますが、管理システムにクライアントツールをインストールして、直接対話することも可能です。
クライアントシステムに OpenLMI をインストールするには、以下の手順を実行します。
シェルプロンプトで
root
として以下を入力し、openlmi-tools パッケージをインストールします。yum install openlmi-tools
これにより、CIM オブジェクトにアクセスするためのインタラクティブクライアントおよびインタプリターである LMIShell と、そのすべての依存関係がシステムにインストールされます。LMIShell は OpenPegasus が提供します。
- 「OpenPegasus 用に SSL 証明書を設定する」 の説明に従って、OpenPegasus 用の SSL 証明書を設定します。
これで、「LMIShell の使用」 で説明されているように、LMIShell クライアントを使用して管理システムと対話できるようになりました。
22.3. OpenPegasus 用に SSL 証明書を設定する
OpenLMI は、HTTP トランスポート層で機能する WBEM (Web-Based Enterprise Management) プロトコルを使用します。標準の HTTP ベーシック認証がこのプロトコルで実行されます。つまり、ユーザー名とパスワードがリクエストと共に送信されることになります。
認証を保護するには、OpenPegasus CIMOM を設定して通信に HTTPS を使用することが必要になります。管理システム上で暗号化チャンネルを確立するには、SSL (Secure Sockets Layer) 証明書または TLS (Transport Layer Security) 証明書が必要になります。
システムで SSL/TLS 証明書を管理するには、2 つの方法があります。
- 自己署名証明書では必要なインフラストラクチャーは少なくなりますが、クライアントへの導入および安全な管理はより難しくなります。
- 認証局が署名する証明書は、設定さえ行えばクライアントへの導入が容易になりですが、必要な初期投資が大きくなる可能性があります。
認証局が署名する証明書を使用する場合は、クライアントシステムで信頼できる認証局を設定する必要があります。その後に、その権限を使用して、管理システムのすべての CIMOM 証明書を署名できるようになります。証明書は証明書チェーンの一部となることもあるため、管理システムの証明書の署名に使用された証明書が別の、より高い水準の認証局 (Verisign、CAcert、RSA など多数の認証局) により署名される場合もあります。
ファイルシステムにおける、デフォルトの証明書とトラストストアの保存場所は、表22.2「証明書およびトラストストアの保存場所」 となります。
表22.2 証明書およびトラストストアの保存場所
設定オプション | 場所 | 詳細 |
---|---|---|
|
| CIMOM の公開証明書 |
|
| CIMOM にのみ知られている秘密鍵 |
|
| 信頼できる証明書機関の一覧を提供するファイルまたはディレクトリー |
表22.2「証明書およびトラストストアの保存場所」 にあるファイルを修正した場合は、tog-pegasus
サービスを再起動して新たな証明書が確実に認識されるようにします。サービスを再起動するには、root
でシェルプロンプトに以下のコマンドを入力します。
systemctl restart tog-pegasus.service
Red Hat Enterprise Linux 7 でシステムサービスを管理する方法は、10章systemd によるサービス管理 を参照してください。
22.3.1. 自己署名証明書の管理
自己署名証明書は、自身の秘密鍵を使用して署名し、その他の信頼チェーンには接続されません。管理システムでは、tog-pegasus
サービスを初めて起動する前に管理者が証明書を提供していない場合は、システムのプライマリーホスト名を証明書の件名にした自己署名証明書のセットが自動的に生成されます。
自動生成された自己署名証明書は、デフォルトで 10 年間有効ですが、自動的に更新する機能はありません。このような証明書を修正するには、OpenSSL または Mozilla NSS のドキュメンテーションが提供するガイドラインに従って、新たな証明書を手動で作成する必要があります。
クライアントシステムが自己署名証明書を信頼するように設定するには、以下の手順に従います。
管理システムからクライアントシステムの
/etc/pki/ca-trust/source/anchors/
ディレクトリーに、/etc/Pegasus/server.pem
証明書をコピーします。これを行うには、root
でシェルプロンプトで以下を入力してください。scp root@hostname:/etc/Pegasus/server.pem /etc/pki/ca-trust/source/anchors/pegasus-hostname.pem
hostname を管理システムのホスト名に置き換えます。このコマンドは、
sshd
サービスが管理システム上で実行中に、root
ユーザーが SSH プロトコルを使用してシステムにログインできるような設定でのみ機能することに注意してください。sshd
サービスをインストールして設定する方法、そしてscp
コマンドを使用して SSH プロトコルでファイルを送信する方法は、12章OpenSSH を参照してください。チェックサムを元のファイルのものと比較して、クライアントシステムの証明書の整合性を検証します。管理システムの
/etc/Pegasus/server.pem
ファイルチェックサムを計算するには、そのシステムで対して以下のコマンドをroot
で実行します。sha1sum /etc/Pegasus/server.pem
クライアントシステムの
/etc/pki/ca-trust/source/anchors/pegasus-hostname.pem
ファイルのチェックサムを計算するには、このシステムで以下のコマンドを実行します。sha1sum /etc/pki/ca-trust/source/anchors/pegasus-hostname.pem
hostname を管理システムのホスト名に置き換えます。
クライアントシステムでトラストストアを更新するには、
root
で以下のコマンドを実行します。update-ca-trust extract
22.3.2. Identity Management を使用した、認証局が署名した証明書の管理 (推奨)
Red Hat Enterprise Linux の Identity Management 機能は、ドメインに参加したシステムの SSL 証明書管理を簡素化するドメインコントローラーを提供します。Identity Management サーバーは、埋め込み認証局を提供します。クライアントシステムおよび管理システムをドメインに参加させる方法は、『Red Hat Enterprise Linux 7 Linux ドメイン ID、認証、およびポリシーガイド』または FreeIPA のドキュメントを参照してください。
管理システムでは、Identity Management への登録が必須になります。クライアントシステムでは、登録はオプションになります。
管理システムでは、以下の手順が必要です。
- Red Hat Enterprise Linux 7 Linux ドメイン ID、認証、およびポリシーガイド で説明されているように、ipa-client パッケージをインストールして、システムを Identity Management に登録します。
root
で以下のコマンドを入力して、Identity Management の署名した証明書をトラストストアにコピーします。cp /etc/ipa/ca.crt /etc/pki/ca-trust/source/anchors/ipa.crt
トラストストアを更新するには、
root
で以下のコマンドを実行します。update-ca-trust extract
権限のあるドメインユーザーとして以下のコマンドを実行して、Pegasus をサービスとして Identity Management ドメインに登録します。
ipa service-add CIMOM/hostname
hostname を管理システムのホスト名に置き換えます。
コマンドは、Identity Management ドメイン内のシステムで ipa-admintools パッケージがインストールされているものから実行できます。Identity Management にサービスエントリーが作成され、これを署名済み SSL 証明書の生成に使用できるようになります。
-
/etc/Pegasus/
ディレクトリーにある PEM ファイルのバックアップを作成します(推奨)。 root
で以下のコマンドを実行して、署名済み証明書を取得します。ipa-getcert request -f /etc/Pegasus/server.pem -k /etc/Pegasus/file.pem -N CN=hostname -K CIMOM/hostname
hostname を管理システムのホスト名に置き換えます。
これで証明書と鍵ファイルが正常な場所に保存されます。
ipa-client-install
スクリプトが管理システムにインストールするcertmonger
デーモンにより、証明書が必要に応じて最新に保たれ、更新されます。詳細情報は、Red Hat Enterprise Linux 7 Linux ドメイン ID、認証、およびポリシーガイドを参照してください。
クライアントシステムを登録して、トラストストアをアップデートするには、以下のステップに従います。
- Red Hat Enterprise Linux 7 Linux ドメイン ID、認証、およびポリシーガイド で説明されているように、ipa-client パッケージをインストールして、システムを Identity Management に登録します。
root
で以下のコマンドを入力して、Identity Management の署名した証明書をトラストストアにコピーします。cp /etc/ipa/ca.crt /etc/pki/ca-trust/source/anchors/ipa.crt
トラストストアを更新するには、
root
で以下のコマンドを実行します。update-ca-trust extract
クライアントシステムを Identity Management に登録しない場合は、以下の手順に従ってトラストストアを更新します。
-
同一の Identity Management ドメインに参加しているその他のシステムから安全に
/etc/ipa/ca.crt
ファイルをトラストストア/etc/pki/ca-trust/source/anchors/
ディレクトリーにroot
でコピーします。 トラストストアを更新するには、
root
で以下のコマンドを実行します。update-ca-trust extract
22.3.3. 認証局が署名する証明書を手動で管理
認証局が署名する証明書を Identity Management 以外のメカニズムで管理するには、手動での設定が必要になります。
管理システムの証明書に署名する認証局の証明書を、すべてのクライアントが信頼するようにする必要があります。
- 認証局がデフォルトで信頼されている場合は、信頼させるのに必要な手順はありません。
認証局がデフォルトで信頼されていない場合は、クライアントシステムと管理システムで証明書をインポートする必要があります。
root
で以下のコマンドを入力して、証明書をトラストストアにコピーします。cp /path/to/ca.crt /etc/pki/ca-trust/source/anchors/ca.crt
トラストストアを更新するには、
root
で以下のコマンドを実行します。update-ca-trust extract
管理システムで以下のステップを実行します。
新たな SSL 設定ファイル
/etc/Pegasus/ssl.cnf
を作成し、証明書に関する情報を保管します。このファイルのコンテンツは、以下の例のようにする必要があります。[ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] C = US ST = Massachusetts L = Westford O = Fedora OU = Fedora OpenLMI CN = hostname
hostname を、管理システムの完全修飾ドメイン名に置き換えます。
root
で以下のコマンドを実行して、管理システムで秘密鍵を生成します。openssl genrsa -out /etc/Pegasus/file.pem 1024
root
で以下のコマンドを実行し、証明書の署名要求 (CSR) を生成します。openssl req -config /etc/Pegasus/ssl.cnf -new -key /etc/Pegasus/file.pem -out /etc/Pegasus/server.csr
-
署名する認証局に
/etc/Pegasus/server.csr
ファイルを送信します。ファイル提出に関する詳細な手順は、個々の認証局によって異なります。 -
認証局から署名済み証明書を受け取ったら、
/etc/Pegasus/server.pem
として保存します。 root
で以下のコマンドを実行し、信頼できる認証局の証明書を Pegasus トラストストアにコピーして、Pegasus が自らの証明書を信頼できるようにします。cp /path/to/ca.crt /etc/Pegasus/client.pem
上記の手順をすべて完了したら、署名の認証局を信頼するクライアントが、管理サーバーの CIMOM と正常に通信できるようなります。
Identity Management ソリューションとは異なり、証明書の有効期限が切れて更新が必要となった場合には、上記の手動の手順を再度実行する必要があります。証明書は有効期限が切れる前に更新することが推奨されます。
22.4. LMIShell の使用
LMIShell はインタラクティブクライアントかつ非インタラクティブインタープリターで、OpenPegasus CIMOM が提供する CIM オブジェクトにアクセスするために使用できます。Python インタープリターに基づいていますが、CIM オブジェクトとの対話のための追加の関数およびクラスも実装します。
22.4.1. LMIShell の開始、使用、終了
Python インタープリターと同様に、LMIShell はLMIShell スクリプトでインタラクティブクライアントまたは非インタラクティブインタープリターとして使用できます。
インタラクティブモードでの LMIShell の開始
インタラクティブモードで LMIShell インタープリターを開始するには、lmishell
コマンドを引数なしで実行します。
lmishell
デフォルトでは、LMIShell は CIMOM との接続確立を試みる際に、サーバー側の証明書を認証局のトラストストアに対して確認します。この検証を無効にするには、--noverify
または -n
コマンドラインオプションを指定して lmishell
コマンドを実行します。
lmishell --noverify
Tab Completion (タブ入力) の使用
インタラクティブモードでの実行時には、LMIShell インタープリターでは Tab キーを使用した基本的なプログラミング構造体や CIM オブジェクトの入力が可能になります。これにはネームスペース、クラス、メソッド、およびオブジェクト属性が含まれます。
履歴の閲覧
デフォルトでは、LMIShell はユーザーがインタラクティブプロンプトで入力したすべてのコマンドを ~/.lmishell_history
ファイルに保存します。これにより、コマンド履歴が閲覧でき、インタラクティブモードで入力した行をプロンプトで再度入力することなく再使用できます。コマンド履歴で後ろに戻るには 上向き矢印 キーか Ctrl+p のキーの組み込み合わせを押します。コマンド履歴で前に進むには、下向き矢印 キーか Ctrl+n のキーの組み合わせを押します。
LMIShell は、増分逆検索もサポートします。コマンド履歴で特定の行を探すには、Ctrl+r を押してからコマンドの一部を入力します。以下に例を示します。
> (reverse-i-search)`connect
': c = connect("server.example.com", "pegasus")
コマンド履歴を削除するには、以下のように clear_history()
機能を使用します。
clear_history
()
~/.lmishellrc
設定ファイルの history_length
オプションの値を変更することで、コマンド履歴に保存されている行数を設定できます。さらに、この構成ファイルの history_file
オプションの値を変更することにより、履歴ファイルの場所を変更できます。たとえば、履歴ファイルの場所を ~/.lmishell_history
に設定し、最大 1000
行を保存するように LMIShell を設定するには、以下の行を ~/.lmishellrc
ファイルに追加します。
history_file = "~/.lmishell_history" history_length = 1000
例外処理
デフォルトでは、LMIShell インタープリターはすべての例外を処理し、戻り値を使用します。すべての例外をコードで処理するためにこの動作を無効にするには、以下のように use_exceptions()
関数を使用します。
use_exceptions
()
自動例外処理を再度有効にするには、以下を使用します。
use_exception
(False
)
~/.lmishellrc
設定ファイルの use_exceptions
オプションの値を True
に変更すると、例外処理を完全に無効にできます。
use_exceptions = True
一時的なキャッシュの設定
デフォルト設定では、LMIShell 接続オブジェクトは一時的なキャッシュを使用して CIM クラス名および CIM クラスを保存し、ネットワーク通信を減らします。この一時的なキャッシュを削除するには、以下のように clear_cache()
メソッドを使用します。
object_name.clear_cache
()
object_name を接続オブジェクトの名前に置き換えます。
特定の接続オブジェクトの一時的なキャッシュを無効にするには、以下のように use_cache()
メソッドを使用します。
object_name.use_cache
(False
)
再度これを有効にするには、以下を使用します。
object_name.use_cache
(True
)
~/.lmishellrc
設定ファイルの use_cache
オプションの値を False
に変更すると、接続オブジェクトの一時キャッシュを永続的に無効にできます。
use_cache = False
LMIShell の終了
LMIShell インタープリターを終了してシェルプロンプトに戻るには、Ctrl+d のキーの組み合わせを押すか、以下のように quit()
関数を発行します。
> quit()
~]$
LMIShell スクリプトの実行
LMIShell スクリプトを実行するには、以下のように lmishell
コマンドを実行します。
lmishell file_name
file_name をスクリプト名に置き換えます。実行後に └Shell スクリプトを検証するには、--interact
または -i
コマンドラインオプションも指定します。
lmishell --interact file_name
LMIShell スクリプトのファイル拡張子は、.lmi
が適切です。
22.4.2. CIMOM への接続
LMIShell では、同一システムにローカルで実行している CIMOM、またはネットワーク経由でアクセス可能なリモートマシンの CIMOM に接続できます。
リモートの CIMOM への接続
リモートの CIMOM が提供する CIM オブジェクトにアクセスするには、以下のように connect()
関数を使用して接続オブジェクトを作成します。
connect
(host_name, user_name, password)
host_name を管理システムのホスト名に、user_name をそのシステム上で実行中の OpenPegasus CIMOM に接続許可されているユーザー名に、password をユーザーのパスワードに置き換えます。パスワードを省略すると、LMIShell によりパスワードの入力が求められます。この関数は LMIConnection
オブジェクトを返します。
例22.1 リモートの CIMOM への接続
server.example.com
上で実行中の OpenPegasus CIMOM に pegasus
ユーザーとして接続するには、インタラクティブプロンプトに以下のコマンドを入力します。
> c = connect("server.example.com", "pegasus")
password:
>
ローカルの CIMOM への接続
LMIShell では、Unix ソケットを使用することでローカルの CIMOM に接続できます。この種の接続では、LMIShell インタープリターを root
ユーザーとして実行する必要があります。また、/var/run/tog-pegasus/cimxml.socket
ソケットが存在する必要があります。
ローカルの CIMOM が提供する CIM オブジェクトにアクセスするには、以下のように connect()
関数を使用して接続オブジェクトを作成します。
connect
(host_name)
host_name を localhost
、127.0.0.1
、または ::1
に置き換えます。この関数は、LMIConnection
オブジェクトまたは None
を返します。
例22.2 ローカルの CIMOM への接続
localhost
上で実行中の OpenPegasus CIMOM に root
ユーザーとして接続するには、インタラクティブプロンプトに以下のコマンドを入力します。
> c = connect("localhost")
>
CIMOM への接続の確認
connect()
関数は LMIConnection
オブジェクトを返します。または接続が確立できなかった場合は None
を返します。さらに、connect()
関数が接続確立に失敗すると、標準エラー出力にエラーメッセージを出力します。
CIMOM への接続が正常に確立されたことを確認するには、以下のように isinstance()
関数を使用します。
isinstance
(object_name,LMIConnection
)
object_name を接続オブジェクト名に置き換えます。この関数は、object_name が LMIConnection
オブジェクトの場合は、True
を返し、そうでない場合は False
を返します。
例22.3 CIMOM への接続の確認
例22.1「リモートの CIMOM への接続」 で作成した c
変数に LMIConnection
オブジェクトが含まれていることを確認するには、インタラクティブプロンプトに以下のコマンドを入力します。
> isinstance(c, LMIConnection)
True
>
または、c
が None
でないことを確認することもできます。
> c is None
False
>
22.4.3. ネームスペースの使用
LMIShell ネームスペースは、利用可能なクラスを組織化する自然な方法を提供し、他のネームスペースおよびクラスへの階層的なアクセスポイントとして機能します。root
ネームスペースは、接続オブジェクトの最初のエントリーポイントです。
利用可能なネームスペースの一覧表示
利用可能なネームスペースの一覧を表示するには、以下のように print_namespaces()
メソッドを使用します。
object_name.print_namespaces
()
object_name を、検査するオブジェクトの名前に置き換えます。このメソッドは、利用可能なネームスペースを標準出力に出力します。
利用可能なネームスペース一覧を取得するには、オブジェクト属性 namespaces
にアクセスします。
object_name.namespaces
これは文字列の一覧を返します。
例22.4 利用可能なネームスペースの一覧表示
例22.1「リモートの CIMOM への接続」 で作成した c
接続オブジェクトの root
ネームスペースオブジェクトを検査するには、インタラクティブプロンプトに以下のコマンドを入力します。
> c.root.print_namespaces() cimv2 interop PG_InterOp PG_Internal >
このネームスペースの一覧を root_namespaces
という変数に割り当てるには、以下を入力します。
> root_namespaces = c.root.namespaces >
ネームスペースオブジェクトへのアクセス
特定のネームスペースオブジェクトにアクセスするには、以下の構文を使用します。
object_name.namespace_name
object_name を検査するオブジェクト名に置き換え、namespace_name をアクセスするネームスペース名に置き換えます。これは LMINamespace
オブジェクトを返します。
例22.5 ネームスペースオブジェクトへのアクセス
例22.1「リモートの CIMOM への接続」 で作成した c
接続オブジェクトの cimv2
ネームスペースにアクセスするには、ns
という名前の変数に割り当て、インタラクティブプロンプトに以下のコマンドを入力します。
> ns = c.root.cimv2
>
22.4.4. クラスの使用
LMIShell クラスは、CIMOM が提供するクラスを表します。これらのプロパティー、メソッド、インスタンス、インスタンス名、および ValueMap プロパティーにアクセスしたりこれらを一覧表示したりでき、ドキュメンテーションストリングを出力したり、新たなインスタンスやインスタンス名を作成できます。
利用可能なクラスの一覧表示
特定のネームスペースで利用可能なクラスを一覧表示するには、以下のように print_classes()
メソッドを使用します。
namespace_object.print_classes()
namespace_object を検査するネームスペースオブジェクトに置き換えます。このメソッドは、利用可能なクラスを標準出力に出力します。
利用可能なクラス一覧を取得するには、classes()
メソッドを使用します。
namespace_object.classes
()
このメソッドは文字列の一覧を返します。
例22.6 利用可能なクラスの一覧表示
例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを検査して利用可能なクラスを一覧表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> ns.print_classes() CIM_CollectionInSystem CIM_ConcreteIdentity CIM_ControlledBy CIM_DeviceSAPImplementation CIM_MemberOfStatusCollection ... >
このクラスの一覧を cimv2_classes
という変数に割り当てるには、以下を入力します。
> cimv2_classes = ns.classes() >
クラスオブジェクトへのアクセス
CIMOM が提供する特定のクラスオブジェクトにアクセスするには、以下の構文を使用します。
namespace_object.class_name
namespace_object を、検査するネームスペースオブジェクト名にに置き換え、class_name を、アクセスするクラス名に置き換えます。
例22.7 クラスオブジェクトへのアクセス
例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
名前空間オブジェクトの LMI_IPNetworkConnection
にアクセスして、cls
という名前の変数に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls = ns.LMI_IPNetworkConnection >
クラスオブジェクトの検査
すべてのクラスオブジェクトには、その名前と所属するネームスペースに関する情報、および詳細なクラスのドキュメンテーションが保存されています。特定のクラスオブジェクトの名前を取得するには、以下の構文を使用します。
class_object.classname
class_object を、検査するクラスオブジェクト名に置き換えます。これは、オブジェクト名を表す文字列を返します。
クラスオブジェクトが所属するネームスペースに関する情報を取得するには、以下を使用します。
class_object.namespace
これは、名前空間を表す文字列を返します。
詳細なクラスのドキュメンテーションを表示するには、以下のように doc()
メソッドを使用します。
class_object.doc
()
例22.8 クラスオブジェクトの検査
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトを検査して、その名前と対応するネームスペースを表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls.classname 'LMI_IPNetworkConnection' > cls.namespace 'root/cimv2' >
クラスのドキュメンテーションにアクセスするには、以下を入力します。
> cls.doc() Class: LMI_IPNetworkConnection SuperClass: CIM_IPNetworkConnection [qualifier] string UMLPackagePath: 'CIM::Network::IP' [qualifier] string Version: '0.1.0' ...
利用可能なメソッドの一覧表示
特定のクラスオブジェクトで利用可能なメソッドの一覧を表示するには、以下のように print_methods()
メソッドを使用します。
class_object.print_methods
()
class_object を、検査するクラスオブジェクト名に置き換えます。このメソッドは、利用可能なメソッドを標準出力に出力します。
利用可能なメソッド一覧を取得するには、methods()
メソッドを使用します。
class_object.methods()
このメソッドは文字列の一覧を返します。
例22.9 利用可能なメソッドの一覧表示
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトを検査して利用可能なメソッドの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls.print_methods() RequestStateChange >
このメソッドの一覧を service_methods
という変数に割り当てるには、以下を入力します。
> service_methods = cls.methods() >
利用可能なプロパティーの一覧表示
特定のクラスオブジェクトで利用可能なプロパティーの一覧を表示するには、以下のように print_properties()
メソッドを使用します。
class_object.print_properties
()
class_object を、検査するクラスオブジェクト名に置き換えます。このメソッドは、利用可能なプロパティーを標準出力に出力します。
利用可能なプロパティー一覧を取得するには、properties()
メソッドを使用します。
class_object.properties
()
このメソッドは文字列の一覧を返します。
例22.10 利用可能なプロパティーの一覧表示
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトを検査して利用可能なすべてのプロパティーの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls.print_properties() RequestedState HealthState StatusDescriptions TransitioningToState Generation ... >
このクラスの一覧を service_properties
という変数に割り当てるには、以下を入力します。
> service_properties = cls.properties() >
ValueMap プロパティーの一覧表示と閲覧
CIM クラスには、Managed Object Format (MOF) 定義で ValueMap プロパティー が含まれる場合があります。ValueMap プロパティーには定数値が含まれ、これはメソッドを呼び出す場合や戻り値をチェックする場合に便利なものです。
特定のクラスオブジェクトで利用可能なプロパティーの一覧を表示するには、以下のように print_valuemap_properties()
メソッドを使用します。
class_object.print_valuemap_properties
()
class_object を、検査するクラスオブジェクト名に置き換えます。このメソッドは、利用可能な ValueMap プロパティーを標準出力に出力します。
利用可能な ValueMap プロパティー一覧を取得するには、valuemap_properties()
メソッドを使用します。
class_object.valuemap_properties
()
このメソッドは文字列の一覧を返します。
例22.11 ValueMap プロパティーの一覧表示
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトを検査して、利用可能な ValueMap プロパティーの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls.print_valuemap_properties() RequestedState HealthState TransitioningToState DetailedStatus OperationalStatus ... >
この ValueMap プロパティーの一覧を service_valuemap_properties
という変数に割り当てるには、以下を入力します。
> service_valuemap_properties = cls.valuemap_properties() >
特定の ValueMap プロパティーにアクセスするには、以下の構文を使用します。
class_object.valuemap_propertyValues
valuemap_property を、アクセスする ValueMap プロパティー名に置き換えます。
利用可能な定数値の一覧を表示するには、以下のように print_values()
メソッドを使用します。
class_object.valuemap_propertyValues
.print_values
()
このメソッドは、名前の付いた利用可能な定数値を標準出力に出力します。また、values()
メソッドを使用して利用可能な定数値の一覧を取得することもできます。
class_object.valuemap_propertyValues
.values
()
このメソッドは文字列の一覧を返します。
例22.12 ValueMap プロパティーへのアクセス
例22.11「ValueMap プロパティーの一覧表示」 では、RequestedState
という ValueMap プロパティーについて説明しました。このプロパティーを検査して、利用可能な定数値の一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> cls.RequestedStateValues.print_values() Reset NoChange NotApplicable Quiesce Unknown ... >
この定数値の一覧を requested_state_values
という変数に割り当てるには、以下を入力します。
> requested_state_values = cls.RequestedStateValues.values() >
特定の定数値にアクセスするには、以下の構文を使用します。
class_object.valuemap_propertyValues
.constant_value_name
constant_value_name を、定数値の名前を置き換えます。また、以下のように value()
メソッドを使用することもできます。
class_object.valuemap_propertyValues
.value
("constant_value_name")
特定の定数値の名前を確認するには、value_name()
メソッドを使用します。
class_object.valuemap_propertyValues
.value_name
("constant_value")
このメソッドは文字列を返します。
例22.13 定数値へのアクセス
例22.12「ValueMap プロパティーへのアクセス」 では、RequestedState
プロパティーによって Reset
という名前の定数値が提供されます。この名前の定数値にアクセスするには、インタラクティブプロンプトに以下のコマンドを入力します。
>cls.RequestedStateValues.Reset
11 >cls.RequestedStateValues.value("Reset")
11 >
この定数値の名前を確認するには、以下を入力します。
> cls.RequestedStateValues.value_name(11) u'Reset' >
CIMClass オブジェクトの取り込み
クラスメソッドの多くは CIMClass
オブジェクトへのアクセスを必要としません。これは、呼び出されたメソッドが実際に必要とするときにのみ、LMIShell が CIMOM からオブジェクトを取得するためです。CIMClass
オブジェクトを手動で取得するには、以下のように fetch()
メソッドを使用します。
class_object.fetch
()
class_object を、クラスオブジェクト名に置き換えます。CIMClass
オブジェクトへのアクセスを必要とするメソッドは、これを自動的に取り込むことに注意してください。
22.4.5. インスタンスの使用
LMIShell インスタンスは、CIMOM が提供するインスタンスを表します。プロパティーの取得や設定、メソッドの一覧表示や呼び出し、ドキュメンテーション文字列の表示、関連オブジェクト一覧の取得、修正されたオブジェクトの CIMOM へのプッシュ、CIMOM から個別インスタンスの削除が行えます。
インスタンスへのアクセス
特定のクラスオブジェクトの利用可能なインスタンスをすべて取得するには、以下のように instances()
メソッドを使用します。
class_object.instances
()
class_object を、検査するクラスオブジェクト名に置き換えます。このメソッドは、LMIInstance
オブジェクトの一覧を返します。
クラスオブジェクトの最初のインスタンスにアクセスするには、first_instance()
メソッドを使用します。
class_object.first_instance
()
このメソッドは LMIInstance
オブジェクトを返します。
instances()
および first_instance()
は、インスタンスの一覧を表示したり、最初のインスタンスを返したりするほかにも、オプションの引数をサポートして結果をフィルターすることもできます。
class_object.instances
(criteria)
class_object.first_instance
(criteria)
criteria を、鍵と値のペアで構成される辞書に置き換えます。この鍵はインスタンスプロパティーを表し、値はこのプロパティーの必要な値を表します。
例22.14 インスタンスへのアクセス
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトの最初のインスタンスで、ElementName
と同等の eth0
プロパティーがあるものを見つけ、これを変数 device
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> device = cls.first_instance({"ElementName": "eth0"}) >
インスタンスの検査
すべてのインスタンスオブジェクトには、そのクラス名と所属するネームスペースに関する情報、およびプロパティーと値に関する詳細なドキュメンテーションが保存されています。さらに、インスタンスオブジェクトを使用すると、一意の ID オブジェクトを検索できます。
特定のインスタンスオブジェクトのクラス名を取得するには、以下の構文を使用します。
instance_object.classname
instance_object を、検査するインスタンスオブジェクト名に置き換えます。これは、クラス名を表す文字列を返します。
インスタンスオブジェクトが所属するネームスペースに関する情報を取得するには、以下を使用します。
instance_object.namespace
これは、名前空間を表す文字列を返します。
インスタンスオブジェクト用に一意の ID オブジェクトを検索するには、以下を使用します。
instance_object.path
これは LMIInstanceName
オブジェクトを返します。
最後に、詳細なドキュメンテーションを表示するには、以下のように doc()
メソッドを使用します。
instance_object.doc
()
例22.15 インスタンスの検査
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトを検査して、そのクラス名と対応するネームスペースを表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.classname u'LMI_IPNetworkConnection' > device.namespace 'root/cimv2' >
インスタンスオブジェクトのドキュメンテーションにアクセスするには、以下を入力します。
> device.doc() Instance of LMI_IPNetworkConnection [property] uint16 RequestedState = '12' [property] uint16 HealthState [property array] string [] StatusDescriptions ...
新規インスタンスの作成
いくつかの CIM プロバイダーでは、特定のクラスオブジェクトの新規インスタンスを作成できます。クラスオブジェクトの新規インスタンスを作成するには、以下のように create_instance()
メソッドを使用します。
class_object.create_instance
(properties)
class_object を、クラスオブジェクトと properties の名前を、キーと値のペアで構成されるディクショナリーに置き換えます。キーはインスタンスのプロパティーと値はプロパティー値を表します。このメソッドは LMIInstance
オブジェクトを返します。
例22.16 新規インスタンスの作成
LMI_Group
クラスはシステムグループを表し、LMI_Account
クラスは管理システム上のユーザーアカウントを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用して、システムグループ pegasus
と、ユーザー lmishell-user
用にこれら 2 つのクラスのインスタンスを作成し、そのインスタンスを group
変数および user
変数に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> group = ns.LMI_Group.first_instance({"Name" : "pegasus"}) > user = ns.LMI_Account.first_instance({"Name" : "lmishell-user"}) >
lmishell-user
ユーザーの LMI_Identity
クラスのインスタンスを取得するには、以下を入力します。
> identity = user.first_associator(ResultClass="LMI_Identity") >
LMI_MemberOfGroup
クラスはシステムグループメンバーシップを表します。LMI_MemberOfGroup
クラスを使用して pegasus
グループに lmishell-user
を追加するには、以下のようにこのクラスの新規インスタンスを作成します。
> ns.LMI_MemberOfGroup.create_instance({ ... "Member" : identity.path, ... "Collection" : group.path}) LMIInstance(classname="LMI_MemberOfGroup", ...) >
個別インスタンスの削除
CIMOM から特定のインスタンスを削除するには、以下のように delete()
メソッドを使用します。
instance_object.delete
()
instance_object を、削除するインスタンスオブジェクト名に置き換えます。このメソッドはブール値を返します。インスタンスを削除すると、そのプロパティーとメソッドにはアクセスできなくなることに注意してください。
例22.17 個別インスタンスの削除
LMI_Account
クラスは、管理システム上のユーザーアカウントを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用して、lmishell-user
というユーザーの LMI_Account
クラスのインスタンスを作成し、これを user
という変数に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> user = ns.LMI_Account.first_instance({"Name" : "lmishell-user"}) >
このインスタンスを削除して、システムから lmishell-user
を取り除くには、以下を入力します。
> user.delete()
True
>
利用可能なプロパティーの一覧表示とアクセス
特定のインスタンスオブジェクトの利用可能なプロパティーの一覧を表示するには、以下のように print_properties()
メソッドを使用します。
instance_object.print_properties
()
instance_object を、検査するインスタンスオブジェクト名に置き換えます。このメソッドは、利用可能なプロパティーを標準出力に出力します。
利用可能なプロパティー一覧を取得するには、properties()
メソッドを使用します。
instance_object.properties
()
このメソッドは文字列の一覧を返します。
例22.18 利用可能なプロパティーの一覧表示
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトを検査して、利用可能なプロパティーの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.print_properties() RequestedState HealthState StatusDescriptions TransitioningToState Generation ... >
このプロパティーの一覧を device_properties
という変数に割り当てるには、以下を入力します。
> device_properties = device.properties() >
特定のプロパティーの現在の値を取得するには、以下の構文を使用します。
instance_object.property_name
property_name を、アクセスするプロパティー名に置き換えます。
特定のプロパティーの値を修正するには、以下のように値を割り当てます。
instance_object.property_name = value
value を、プロパティーの新たな値に置き換えます。CIMOM への変更を伝達するには、push()
メソッドも実行する必要があることに注意してください。
instance_object.push
()
このメソッドは、戻り値、戻り値のパラメーター、およびエラー文字列で構成される 3 項目タプルを返します。
例22.19 個別プロパティーへのアクセス
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトを検査して、プロパティー SystemName
の値を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.SystemName
u'server.example.com'
>
利用可能なメソッドの一覧表示と使用
特定のインスタンスオブジェクトの利用可能なメソッド一覧を表示するには、以下のように print_methods()
メソッドを使用します。
instance_object.print_methods
()
instance_object を、検査するインスタンスオブジェクト名に置き換えます。このメソッドは、利用可能なメソッドを標準出力に出力します。
利用可能なメソッド一覧を取得するには、method()
メソッドを使用します。
instance_object.methods
()
このメソッドは文字列の一覧を返します。
例22.20 利用可能なメソッドの一覧表示
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトを検査して利用可能なメソッドの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.print_methods() RequestStateChange >
このメソッドの一覧を network_device_methods
という変数に割り当てるには、以下を入力します。
> network_device_methods = device.methods() >
特定のメソッドを呼び出すには、以下の構文を使用します。
instance_object.method_name( parameter=value, ...)
instance_object を、使用するインスタンスオブジェクト名に、method_name を、呼び出すメソッド名に、parameter を、設定するパラメーター名に、value を、このパラメーターの値に置き換えます。メソッドは、戻り値、戻り値のパラメーター、およびエラー文字列で構成される 3 項目タプルを返します。
LMIInstance
オブジェクトは、自動的にそのコンテンツ (プロパティー、メソッド、修飾子など) を更新しません。自動的に更新するようにするには、以下のように refresh()
メソッドを使用します。
例22.21 メソッドの使用
PG_ComputerSystem
クラスはシステムを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用してこのクラスのインスタンスを作成し、これを変数 sys
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> sys = ns.PG_ComputerSystem.first_instance() >
LMI_AccountManagementService
クラスは、システム内でユーザーおよびグループを管理できるようにするメソッドを実装します。このクラスのインスタンスを作成して変数 acc
に割り当てるには、以下を使用します。
> acc = ns.LMI_AccountManagementService.first_instance() >
lmishell-user
システムにという名前の新規ユーザーを作成するには、以下のように CreateAccount()
メソッドを使用します。
> acc.CreateAccount(Name="lmishell-user", System=sys) LMIReturnValue(rval=0, rparams=NocaseDict({u'Account': LMIInstanceName(classname="LMI_Account"...), u'Identities': [LMIInstanceName(classname="LMI_Identity"...), LMIInstanceName(classname="LMI_Identity"...)]}), errorstr='')
LMIShell は、同期メソッド呼び出しをサポートします。同期メソッドを使用するとき、LMIShell は関連のジョブオブジェクトを待ち、「finished」に状態を変更します。そして、このジョブのリターンパラメーターを返します。LMIShell は、指定のメソッドが以下のクラスの 1 つのオブジェクトを返すと、同期メソッド呼び出しを実行できます。
-
LMI_StorageJob
-
LMI_SoftwareInstallationJob
-
LMI_NetworkJob
LMIShell は、最初に、待機メソッドに indication を使用します。それが失敗すると、代わりにポーリングメソッドを使います。
同期メソッド呼び出しを実行するには、以下の構文を使用します。
instance_object.Sync
method_name(
parameter=value,
...)
instance_object を、使用するインスタンスオブジェクト名に、method_name を、呼び出すメソッド名に、parameter を、設定するパラメーター名に、value を、このパラメーターの値に置き換えます。すべての同期メソッドには、その名前に Sync
接頭辞があり、ジョブの戻り値、ジョブの戻り値のパラメーター、およびジョブのエラー文字列で構成される 3 項目タプルを返します。
また、LMIShell がポーリングメソッドのみを使用するように強制することもできます。これを行うには、以下のように PreferPolling
パラメーターを指定します。
instance_object.Sync
method_name(PreferPolling
=True
parameter=value, ...)
ValueMap パラメーターの一覧表示と閲覧
CIM メソッドには、Managed Object Format (MOF) 定義で ValueMap パラメーター が含まれる場合があります。ValueMap パラメーターには定数値が含まれます。
特定メソッドで利用可能な ValueMap パラメーターの一覧を表示するには、以下のように print_valuemap_parameters()
メソッドを使用します。
instance_object.method_name.print_valuemap_parameters
()
instance_object を、検査するインスタンスオブジェクト名に置き換え、method_name を、検査するメソッド名に置き換えます。このメソッドは、利用可能な ValueMap パラメーターを標準出力に出力します。
利用可能な ValueMap パラメーター一覧を取得するには、valuemap_parameters()
メソッドを使用します。
instance_object.method_name.valuemap_parameters
()
このメソッドは文字列の一覧を返します。
例22.22 ValueMap パラメーターの一覧表示
例22.21「メソッドの使用」 で作成した acc
インスタンスオブジェクトを検査して、CreateAccount()
メソッドで利用可能な ValueMap パラメーターの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> acc.CreateAccount.print_valuemap_parameters() CreateAccount >
この ValueMap パラメーターの一覧を create_account_parameters
という変数に割り当てるには、以下を入力します。
> create_account_parameters = acc.CreateAccount.valuemap_parameters() >
特定の ValueMap パラメーターにアクセスするには、以下の構文を使用します。
instance_object.method_name.valuemap_parameterValues
valuemap_parameter を、アクセスする ValueMap パラメーター名に置き換えます。
利用可能な定数値の一覧を表示するには、以下のように print_values()
メソッドを使用します。
instance_object.method_name.valuemap_parameterValues
.print_values
()
このメソッドは、名前の付いた利用可能な定数値を標準出力に出力します。また、values()
メソッドを使用して利用可能な定数値の一覧を取得することもできます。
instance_object.method_name.valuemap_parameterValues
.values
()
このメソッドは文字列の一覧を返します。
例22.23 ValueMap パラメーターへのアクセス
例22.22「ValueMap パラメーターの一覧表示」 では、CreateAccount
という名前の ValueMap パラメーターについて説明しました。このパラメーターを検査して利用可能な定数値の一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> acc.CreateAccount.CreateAccountValues.print_values() Operationunsupported Failed Unabletosetpasswordusercreated Unabletocreatehomedirectoryusercreatedandpasswordset Operationcompletedsuccessfully >
この定数値の一覧を create_account_values
という変数に割り当てるには、以下を入力します。
> create_account_values = acc.CreateAccount.CreateAccountValues.values() >
特定の定数値にアクセスするには、以下の構文を使用します。
instance_object.method_name.valuemap_parameterValues
.constant_value_name
constant_value_name を、定数値の名前を置き換えます。また、以下のように value()
メソッドを使用することもできます。
instance_object.method_name.valuemap_parameterValues
.value
("constant_value_name")
特定の定数値の名前を確認するには、value_name()
メソッドを使用します。
instance_object.method_name.valuemap_parameterValues
.value_name
("constant_value")
このメソッドは文字列を返します。
例22.24 定数値へのアクセス
例22.23「ValueMap パラメーターへのアクセス」 では、CreateAccount
ValueMap パラメーターが Failed
という定数値を提供していました。この名前の定数値にアクセスするには、インタラクティブプロンプトに以下のコマンドを入力します。
>acc.CreateAccount.CreateAccountValues.Failed
2 >acc.CreateAccount.CreateAccountValues.value("Failed")
2 >
この定数値の名前を確認するには、以下を入力します。
> acc.CreateAccount.CreateAccountValues.value_name(2) u'Failed' >
インスタンスオブジェクトの更新
LMIShell が使用するローカルオブジェクトは、CIMOM 側での CIM オブジェクトを表し、このオブジェクトが LMIShell のオブジェクトと連携中に変更されると、古くなる場合があります。特定のインスタンスオブジェクトのプロパティーとメソッドを更新するには、以下のように refresh()
メソッドを使用します。
instance_object.refresh
()
instance_object を、更新するオブジェクト名に置き換えます。このメソッドは、戻り値、戻り値のパラメーター、およびエラー文字列で構成される 3 項目タプルを返します。
例22.25 インスタンスオブジェクトの更新
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトのプロパティーとメソッドを更新するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.refresh()
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='')
>
MOF 表現の表示
インスタンスオブジェクトの MOF (Managed Object Format) 表現を表示するには、以下のように tomof()
メソッドを使用します。
instance_object.tomof
()
instance_object を、検査するインスタンスオブジェクト名に置き換えます。このメソッドは、オブジェクトの MOF 表現を標準出力に出力します。
例22.26 MOF 表現の表示
例22.14「インスタンスへのアクセス」 で作成した device
インスタンスオブジェクトの MOF 表現を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device.tomof() instance of LMI_IPNetworkConnection { RequestedState = 12; HealthState = NULL; StatusDescriptions = NULL; TransitioningToState = 12; ...
22.4.6. インスタンス名の使用
LMIShell インスタンス名は、プライマリーキーとその値のセットを持つオブジェクトです。この種類のオブジェクトは、インスタンスを正確に識別します。
インスタンス名へのアクセス
CIMInstance
オブジェクトは CIMInstanceName
オブジェクトによって識別されます。利用可能なインスタンス名オブジェクトの一覧を取得するには、以下のように instance_names()
メソッドを使用します。
class_object.instance_names
()
class_object を、検査するクラスオブジェクト名に置き換えます。このメソッドは、LMIInstanceName
オブジェクトの一覧を返します。
クラスオブジェクトの最初のインスタンス名オブジェクトにアクセスするには、first_instance_name()
メソッドを使用します。
class_object.first_instance_name
()
このメソッドは LMIInstanceName
オブジェクトを返します。
instance_names()
および first_instance_name()
は、すべてのインスタンス名前オブジェクトの一覧を表示したり、最初のインスタンスを返したりするほかにも、オプションの引数をサポートして結果をフィルターすることもできます。
class_object.instance_names
(criteria)
class_object.first_instance_name
(criteria)
criteria を、鍵と値のペアで構成される辞書で置き換えます。この鍵は鍵プロパティーを表し、値はこの鍵プロパティーの必要な値を表します。
例22.27 インスタンス名へのアクセス
例22.7「クラスオブジェクトへのアクセス」 で作成した cls
クラスオブジェクトの最初のインスタンス名で、eth0
と同等の Name
キープロパティーがあるものを見つけ、これを変数 device_name
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> device_name = cls.first_instance_name({"Name": "eth0"}) >
インスタンス名の検査
すべてのインスタンス名オブジェクトには、そのクラス名と、所属するネームスペースに関する情報が保存されています。
特定のインスタンス名オブジェクトのクラス名を取得するには、以下の構文を使用します。
instance_name_object.classname
instance_name_object を、検査するインスタンス名オブジェクトの名前に置き換えます。これは、クラス名を表す文字列を返します。
インスタンス名オブジェクトが所属するネームスペースに関する情報を取得するには、以下を使用します。
instance_name_object.namespace
これは、名前空間を表す文字列を返します。
例22.28 インスタンス名の検査
例22.27「インスタンス名へのアクセス」 で作成した device_name
インスタンスオブジェクトを検査して、そのクラス名と対応するネームスペースを表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device_name.classname u'LMI_IPNetworkConnection' > device_name.namespace 'root/cimv2' >
新規インスタンス名の作成
LMIShell を使用すると、リモートオブジェクトのすべてのプライマリーキーを知っている場合に、新たにラップされた CIMInstanceName
オブジェクトを作成できます。このインスタンス名オブジェクトを使用して、インスタンスオブジェクト全体を取得できます。
クラスオブジェクトの新規インスタンス名を作成するには、以下のように new_instance_name()
メソッドを使用します。
class_object.new_instance_name
(key_properties)
class_object をクラスオブジェクト名に置き換え、key_properties を、鍵と値のペアで構成される辞書に置き換えます。このメソッドは LMIInstanceName
オブジェクトを返します。
例22.29 新規インスタンス名の作成
LMI_Account
クラスは、管理システム上のユーザーアカウントを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用して、管理システムの LMI_Account
ユーザーを表す lmishell-user
クラスの新規インスタンス名を作成するには、インタラクティブプロンプトに以下のコマンドを入力します。
> instance_name = ns.LMI_Account.new_instance_name({ ... "CreationClassName" : "LMI_Account", ... "Name" : "lmishell-user", ... "SystemCreationClassName" : "PG_ComputerSystem", ... "SystemName" : "server"}) >
鍵プロパティーの一覧表示とアクセス
特定のインスタンス名オブジェクトの利用可能な鍵プロパティーの一覧を表示するには、以下のように print_key_properties()
メソッドを使用します。
instance_name_object.print_key_properties
()
instance_name_object を、検査するインスタンス名オブジェクトの名前に置き換えます。このメソッドは、利用可能な鍵プロパティーを標準出力に出力します。
利用可能なキープロパティー一覧を取得するには、key_properties()
メソッドを使用します。
instance_name_object.key_properties
()
このメソッドは文字列の一覧を返します。
例22.30 利用可能な鍵プロパティーの一覧表示
例22.27「インスタンス名へのアクセス」 で作成した device_name
インスタンス名オブジェクトを検査して、利用可能な鍵プロパティーの一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device_name.print_key_properties() CreationClassName SystemName Name SystemCreationClassName >
このキープロパティーの一覧を device_name_properties
という変数に割り当てるには、以下を入力します。
> device_name_properties = device_name.key_properties() >
特定の鍵プロパティーの現在の値を取得するには、以下の構文を使用します。
instance_name_object.key_property_name
key_property_name をアクセスする鍵プロパティー名に置き換えます。
例22.31 個別の鍵プロパティーへのアクセス
例22.27「インスタンス名へのアクセス」 で作成した device_name
インスタンス名オブジェクトを検査して、鍵プロパティー SystemName
の値を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> device_name.SystemName u'server.example.com' >
インスタンス名のインスタンスへの変換
インスタンス名はインスタンスに変換できます。これを行うには、以下のように to_instance()
メソッドを使用します。
instance_name_object.to_instance
()
instance_name_object を、変換するインスタンス名オブジェクトの名前に置き換えます。このメソッドは LMIInstance
オブジェクトを返します。
例22.32 インスタンス名のインスタンスへの変換
例22.27「インスタンス名へのアクセス」 で作成した device_name
インスタンス名オブジェクトをインスタンスオブジェクト変換して、変数 device
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> device = device_name.to_instance() >
22.4.7. 関連するオブジェクトの使用
Common Information Model は、管理オブジェクト間の関係を定義します。
関連するインスタンスへのアクセス
特定のインスタンスオブジェクトに関連するオブジェクトの一覧を取得するには、以下のように associators()
メソッドを使用します。
instance_object.associators
(
AssocClass=class_name,
ResultClass=class_name,
ResultRole=role,
IncludeQualifiers=include_qualifiers,
IncludeClassOrigin=include_class_origin,
PropertyList=property_list)
特定のインスタンスオブジェクトに関連する最初のオブジェクトにアクセスするには、first_associator()
メソッドを使用します。
instance_object.first_associator
(
AssocClass=class_name,
ResultClass=class_name,
ResultRole=role,
IncludeQualifiers=include_qualifiers,
IncludeClassOrigin=include_class_origin,
PropertyList=property_list)
instance_object を、検査するインスタンスオブジェクト名に置き換えます。以下のパラメーターを指定すると結果をフィルターにかけられます。
-
AssocClass
: 返される各オブジェクトは、このクラスまたはそのサブクラスの 1 つのインスタンスを通してソースオブジェクトに関連付けられている必要があります。デフォルト値はNone
です。 -
ResultClass
: 返される各オブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスである必要があります。デフォルト値はNone
です。 -
Role
: 返される各オブジェクトは、ソースオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。このオブジェクトは、ソースオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。デフォルト値はNone
です。 -
ResultRole
: 返される各オブジェクトは、返されるオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。返されるオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値はNone
です。
他のパラメーターは以下のとおりです。
-
IncludeQualifiers
: 応答に各オブジェクトのすべての修飾子 (オブジェクトおよび返されたすべてのプロパティー上の修飾子を含む) を QUALIFIER 要素として含めるかどうかを示すブール値。デフォルト値はFalse
です。 -
IncludeClassOrigin
: 返された各オブジェクトで適切なすべての要素に CLASSORIGIN 属性が存在すべきかどうかを示すブール値。デフォルト値はFalse
です。 -
PropertyList
: このリストのメンバーは 1 つ以上のプロパティー名を定義します。返されたオブジェクトは、このリストにないプロパティーには要素を含めません。PropertyList
が空のリストである場合、追加のフィルタリングは定義されません。None
の場合、追加のフィルタリングは定義されません。デフォルト値はNone
です。
例22.33 関連するインスタンスへのアクセス
LMI_StorageExtent
クラスは、システムで利用可能なブロックデバイスを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用して、/dev/vda
というブロックデバイスの LMI_StorageExtent
クラスのインスタンスを作成し、これを変数 vda
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> vda = ns.LMI_StorageExtent.first_instance({ ... "DeviceID" : "/dev/vda"}) >
このブロックデバイスにおけるディスクパーティションの一覧を取得して、これを変数 vda_partitions
に割り当てるには、以下のように associators()
メソッドを使用します。
> vda_partitions = vda.associators(ResultClass="LMI_DiskPartition") >
関連するインスタンス名へのアクセス
特定のインスタンスオブジェクトで関連するインスタンス名の一覧を取得するには、以下のように associator_names()
メソッドを使用します。
instance_object.associator_names
(
AssocClass=class_name,
ResultClass=class_name,
Role=role,
ResultRole=role)
特定のインスタンスオブジェクトで最初に関連するインスタンス名にアクセスするには、first_associator_name()
メソッドを使用します。
instance_object.first_associator_name
(
AssocClass=class_object,
ResultClass=class_object,
Role=role,
ResultRole=role)
instance_object を、検査するインスタンスオブジェクト名に置き換えます。以下のパラメーターを指定すると結果をフィルターにかけられます。
-
AssocClass
: 返される名前により、このクラスのインスタンス、またはサブクラスの 1 つから、ソースオブジェクトに関連づけられる必要のあるオブジェクトが識別されます。デフォルト値はNone
です。 -
ResultClass
: 返される各名前はオブジェクトを識別します。オブジェクトは、このクラスのインスタンスまたはそのサブクラスの 1 つである必要があります。または、このクラスまたはそのサブクラスのいずれかである必要があります。デフォルト値はNone
です。 -
Role
: 返された各名前は、ソースオブジェクトが指定されたロールを実行する関連付けでソースオブジェクトと関連付ける必要があるオブジェクトを識別します。このオブジェクトは、ソースオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。デフォルト値はNone
です。 -
ResultRole
: 返された各名前はオブジェクトを特定し、返された名前付きオブジェクトが指定されたロールを実行する関連付けでソースオブジェクトと関連付ける必要があるオブジェクトを識別します。返されるオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値はNone
です。
例22.34 関連するインスタンス名へのアクセス
例22.33「関連するインスタンスへのアクセス」 で作成した vda_partitions
インスタンスオブジェクトを使用して、その関連するインスタンス名の一覧を取得し、変数 vda
に割り当てるには、以下を入力します。
> vda_partitions = vda.associator_names(ResultClass="LMI_DiskPartition") >
22.4.8. 関連付けオブジェクトの使用
Common Information Model は、管理オブジェクト間の関係を定義します。関連付けオブジェクトは、他の 2 つのオブジェクト間の関係を定義します。
関連付けインスタンスへのアクセス
特定のターゲットオブジェクトを参照する関連付けオブジェクトの一覧を取得するには、以下のように references()
メソッドを使用します。
instance_object.references
(
ResultClass=class_name,
Role=role,
IncludeQualifiers=include_qualifiers,
IncludeClassOrigin=include_class_origin,
PropertyList=property_list)
特定のターゲットオブジェクトを参照する最初の関連付けオブジェクトにアクセスするには、first_reference()
メソッドを使用します。
instance_object.first_reference
(
... ResultClass=class_name,
... Role=role,
... IncludeQualifiers=include_qualifiers,
... IncludeClassOrigin=include_class_origin,
... PropertyList=property_list)
>
instance_object を、検査するインスタンスオブジェクト名に置き換えます。以下のパラメーターを指定すると結果をフィルターにかけられます。
-
ResultClass
: 返される各オブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスである必要があります。デフォルト値はNone
です。 -
Role
: 返される各オブジェクトは、このパラメーターの値に合致する名前を持つプロパティーでターゲットオブジェクトを参照する必要があります。デフォルト値はNone
です。
他のパラメーターは以下のとおりです。
-
IncludeQualifiers
: 応答に、QUALIFIER 要素として各オブジェクト (オブジェクト、および返されるすべてのプロパティー上の修飾子を含む) を追加するどうかを示すブール値。デフォルト値はFalse
です。 -
IncludeClassOrigin
: 返された各オブジェクトで適切なすべての要素に CLASSORIGIN 属性が存在すべきかどうかを示すブール値。デフォルト値はFalse
です。 -
PropertyList
: このリストのメンバーは 1 つ以上のプロパティー名を定義します。返されたオブジェクトは、このリストにないプロパティーには要素を含めません。PropertyList
が空のリストである場合、追加のフィルタリングは定義されません。None
の場合、追加のフィルタリングは定義されません。デフォルト値はNone
です。
例22.35 関連付けインスタンスへのアクセス
LMI_LANEndpoint
クラスは、特定のネットワークインターフェースデバイスに関連付けられる通信エンドポイントを表します。例22.5「ネームスペースオブジェクトへのアクセス」 で作成した ns
ネームスペースオブジェクトを使用して、ネットワークインターフェースデバイス eth0 用に LMI_LANEndpoint
クラスのインスタンスを作成し、これを変数 lan_endpoint
に割り当てるには、インタラクティブプロンプトに以下のコマンドを入力します。
> lan_endpoint = ns.LMI_LANEndpoint.first_instance({ ... "Name" : "eth0"}) >
LMI_BindsToLANEndpoint
オブジェクトを参照する最初の関連付けオブジェクトにアクセスし、これを bind
という変数に割り当てるには、以下を入力します。
> bind = lan_endpoint.first_reference( ... ResultClass="LMI_BindsToLANEndpoint") >
これで Dependent
プロパティーを使用して、対応するネットワークインターフェースデバイスの IP アドレスを表す依存 LMI_IPProtocolEndpoint
クラスにアクセスすることができます。
> ip = bind.Dependent.to_instance() > print ip.IPv4Address 192.168.122.1 >
関連付けインスタンス名へのアクセス
特定のインスタンスオブジェクトの関連付けインスタンス名の一覧を取得するには、以下のように reference_names()
メソッドを使用します。
instance_object.reference_names
(
ResultClass=class_name,
Role=role)
特定のインスタンスオブジェクトの最初の関連付けインスタンスにアクセスするには、first_reference_name()
メソッドを使用します。
instance_object.first_reference_name
(
ResultClass=class_name,
Role=role)
instance_object を、検査するインスタンスオブジェクト名に置き換えます。以下のパラメーターを指定すると結果をフィルターにかけられます。
-
ResultClass
: 返される各オブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンス、または、このクラスまたはそのサブクラスの 1 つである必要があります。デフォルト値はNone
です。 -
Role
: 返される各オブジェクトは、このパラメーターの値に合致する名前を持つプロパティーでターゲットインスタンスを参照するオブジェクトを識別します。デフォルト値はNone
です。
例22.36 関連付けインスタンス名へのアクセス
例22.35「関連付けインスタンスへのアクセス」 で作成した lan_endpoint
インスタンスオブジェクトを使用するには、LMI_BindsToLANEndpoint
オブジェクトを参照する最初の関連付けインスタンス名にアクセスし、これを bind
という変数に割り当てるには、以下を入力します。
> bind = lan_endpoint.first_reference_name( ... ResultClass="LMI_BindsToLANEndpoint")
これで Dependent
プロパティーを使用して、対応するネットワークインターフェースデバイスの IP アドレスを表す依存 LMI_IPProtocolEndpoint
クラスにアクセスすることができます。
> ip = bind.Dependent.to_instance() > print ip.IPv4Address 192.168.122.1 >
22.4.9. Indication の使用
Indication は、データにおける特定の変化に反応して発生する特有のイベントへのリアクションです。LMIShell は、indication をサブスクライブしてこのようなイベント対応を受信できます。
Indication のサブスクライブ
indication をサブスクライブするには、以下のように subscribe_indication()
メソッドを使用します。
connection_object.subscribe_indication
( QueryLanguage="WQL"
, Query='SELECT * FROM CIM_InstModification'
, Name="cpu"
, CreationNamespace="root/interop"
, SubscriptionCreationClassName="CIM_IndicationSubscription"
, FilterCreationClassName="CIM_IndicationFilter"
, FilterSystemCreationClassName="CIM_ComputerSystem"
, FilterSourceNamespace="root/cimv2"
, HandlerCreationClassName="CIM_IndicationHandlerCIMXML"
, HandlerSystemCreationClassName="CIM_ComputerSystem"
, Destination="http://host_name:5988"
)
別の方法では、以下のように、このメソッド呼び出しの短いバージョンを使用することもできます。
connection_object.subscribe_indication
( Query='SELECT * FROM CIM_InstModification'
, Name="cpu"
, Destination="http://host_name:5988"
)
connection_object を接続オブジェクトに置き換え、host_name を、indication を配信するシステムのホスト名に置き換えます。
デフォルトでは、LMIShell インタープリターが作成したすべてのサブスクリプションは、インタープリターの終了時に自動的に削除されます。この動作を変更するには、Permanent=True
キーワードパラメーターを subscribe_indication()
メソッド呼び出しに渡します。これで、LMIShell がサブスクリプションを削除しなくなります。
例22.37 Indication のサブスクライブ
例22.1「リモートの CIMOM への接続」 で作成した cpu
接続オブジェクトを使用して、c
という名前の indication をサブスクライブするには、インタラクティブプロンプトに以下のコマンドを入力します。
> c.subscribe_indication( ... QueryLanguage="WQL", ... Query='SELECT * FROM CIM_InstModification', ... Name="cpu", ... CreationNamespace="root/interop", ... SubscriptionCreationClassName="CIM_IndicationSubscription", ... FilterCreationClassName="CIM_IndicationFilter", ... FilterSystemCreationClassName="CIM_ComputerSystem", ... FilterSourceNamespace="root/cimv2", ... HandlerCreationClassName="CIM_IndicationHandlerCIMXML", ... HandlerSystemCreationClassName="CIM_ComputerSystem", ... Destination="http://server.example.com:5988") LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='') >
サブスクライブしている indication の一覧表示
サブスクライブしている indication の一覧を表示するには、以下のように print_subscribed_indications()
メソッドを使用します。
connection_object.print_subscribed_indications
()
connection_object を、検査する接続オブジェクト名に置き換えます。このメソッドは、サブスクライブしている indication を標準出力に出力します。
サブスクライブしている indication の一覧を取得するには、subscribed_indications()
メソッドを使用します。
connection_object.subscribed_indications
()
このメソッドは文字列の一覧を返します。
例22.38 サブスクライブしている indication の一覧表示
例22.1「リモートの CIMOM への接続」 で作成した c
接続オブジェクトを検査し、サブスクライブしている indication の一覧を表示するには、インタラクティブプロンプトに以下のコマンドを入力します。
> c.print_subscribed_indications() >
この indication の一覧を変数 indications
に割り当てるには、以下を入力します。
> indications = c.subscribed_indications() >
Indication のサブスクライブ解除
デフォルトでは、LMIShell インタープリターが作成したすべてのサブスクリプションは、インタープリターの終了時に自動的に削除されます。より早く個別のサブスクリプションを削除するには、以下のように unsubscribe_indication()
メソッドを使用します。
connection_object.unsubscribe_indication
(indication_name)
connection_object を、検査する接続オブジェクト名に置き換え、indication_name を、削除する indication の名前に置き換えます。
すべてのサブスクリプションを削除するには、unsubscribe_all_indications()
の方法を使用します。
connection_object.unsubscribe_all_indications
()
例22.39 Indication のサブスクライブ解除
例22.1「リモートの CIMOM への接続」 で作成した c
接続オブジェクトを使用して、例22.37「Indication のサブスクライブ」 で作成した indication のサブスクライブを解除するには、インタラクティブプロンプトに以下のコマンドを入力します。
> c.unsubscribe_indication('cpu') LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='') >
Indication ハンドラーの実装
subscribe_indication()
メソッドを使用すると、indication を配信するシステムのホスト名を指定できます。以下の例では、indication ハンドラーの実装方法を示します。
> def handler(ind, arg1, arg2, kwargs): ... exported_objects = ind.exported_objects() ... do_something_with(exported_objects) > listener = LmiIndicationListener("0.0.0.0", listening_port) > listener.add_handler("indication-name-XXXXXXXX", handler, arg1, arg2, kwargs)
> listener.start()
>
ハンドラーの最初の引数は LmiIndication
オブジェクトで、これには indication がエクスポートしたメソッドとオブジェクトの一覧が含まれます。他のパラメーターはユーザー固有なので、ハンドラーをリスナーに追加する際にこれらの引数を指定する必要があります。
上記の例では、add_handler()
メソッド呼び出しは、8 つの X 文字の特別な文字列を使用しています。この文字は、ハンドラー名が競合しないように、リスナーが生成するランダムな文字列に置き換えられます。ランダムな文字列を使用するには、最初にインデックスリスナーを起動してからインデックスにサブスクライブし、ハンドラーオブジェクトの Destination
プロパティーに schema://host_name/random_string
の値が含まれるようにします。
例22.40 Indication ハンドラーの実装
以下のスクリプトでは、192.168.122.1
にある管理システムを監視し、新規ユーザーアカウントの作成時に常に indication_callback()
関数を呼び出すハンドラーの書き込み方法を示しています。
#!/usr/bin/lmishell import sys from time import sleep from lmi.shell.LMIUtil import LMIPassByRef from lmi.shell.LMIIndicationListener import LMIIndicationListener # These are passed by reference to indication_callback var1 = LMIPassByRef("some_value") var2 = LMIPassByRef("some_other_value") def indication_callback(ind, var1, var2): # Do something with ind, var1 and var2 print ind.exported_objects() print var1.value print var2.value c = connect("hostname", "username", "password") listener = LMIIndicationListener("0.0.0.0", 65500) unique_name = listener.add_handler( "demo-XXXXXXXX", # Creates a unique name for me indication_callback, # Callback to be called var1, # Variable passed by ref var2 # Variable passed by ref ) listener.start() print c.subscribe_indication( Name=unique_name, Query="SELECT * FROM LMI_AccountInstanceCreationIndication WHERE SOURCEINSTANCE ISA LMI_Account", Destination="192.168.122.1:65500" ) try: while True: sleep(60) except KeyboardInterrupt: sys.exit(0)
22.4.10. 使用例
本セクションでは、OpenLMI パッケージで配布される様々な CIM プロバイダーの例を示します。本セクションのすべての例で、以下の 2 つの変数定義を使用します。
c = connect("host_name", "user_name", "password") ns = c.root.cimv2
host_name を、管理システムのホスト名に置き換え、user_name を、そのシステムで実行している OpenPegasus CIMOM への接続が許可されているユーザー名に置き換え、password を、ユーザーのパスワードに置き換えます。
OpenLMI サービスプロバイダーの使用
openlmi-service パッケージは、システムサービスの管理用に CIM プロバイダーをインストールします。以下の例では、この CIM プロバイダーを使用して利用可能なシステムサービスの一覧を表示する方法と、そのサービスの開始、停止、有効化、および無効化を行う方法を示しています。
例22.41 利用可能なサービスの一覧表示
管理システムで利用可能なすべてのサービスと、そのサービスの開始 (TRUE
) または (FALSE
) に関する情報、およびステータス文字列を一覧表示するには、以下のコードスニペットを使用します。
for service in ns.LMI_Service.instances(): print "%s:\t%s" % (service.Name, service.Status)
デフォルトで有効になっているサービスのみを一覧表示するには、以下のコードスニペットを使用します。
cls = ns.LMI_Service for service in cls.instances(): if service.EnabledDefault == cls.EnabledDefaultValues.Enabled: print service.Name
EnabledDefault
プロパティーの値は、有効なサービスの場合は 2
と無効なサービスの場合は 3
と同じであることに注意してください。
cups
サービスに関する情報を表示するには、以下を使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.doc()
例22.42 サービスの起動と停止
cups
サービスを起動して現行ステータスを確認するには、以下のコードスニペットを使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.StartService() print cups.Status cups.StopService() print cups.Status
例22.43 サービスの有効化および無効化
cups
サービスを有効にし、その EnabledDefault
プロパティーを表示するには、以下のコードスニペットを使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.TurnServiceOff() print cups.EnabledDefault cups.TurnServiceOn() print cups.EnabledDefault
OpenLMI ネットワーキングプロバイダーの使用
openlmi-networking パッケージは、ネットワーキング用の CIM プロバイダーをインストールします。以下の例では、この CIM プロバイダーを使用して特定のポート番号に関連付けられた IP アドレスを一覧表示する方法、新規接続を作成する方法、静的 IP アドレスを設定する方法、および接続をアクティブ化する方法を説明しています。
例22.44 特定のポート番号に関連付けられている IP アドレスの一覧表示
eth0 ネットワークインターフェースに関連付けられている IP アドレスの一覧を表示するには、以下のコードスニペットを使用します。
device = ns.LMI_IPNetworkConnection.first_instance({'ElementName': 'eth0'}) for endpoint in device.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_IPProtocolEndpoint"): if endpoint.ProtocolIFType == ns.LMI_IPProtocolEndpoint.ProtocolIFTypeValues.IPv4: print "IPv4: %s/%s" % (endpoint.IPv4Address, endpoint.SubnetMask) elif endpoint.ProtocolIFType == ns.LMI_IPProtocolEndpoint.ProtocolIFTypeValues.IPv6: print "IPv6: %s/%d" % (endpoint.IPv6Address, endpoint.IPv6SubnetPrefixLength)
このコードスニペットは、指定の LMI_IPNetworkConnection
クラスに関連付けられた LMI_IPProtocolEndpoint
クラスを使用します。
デフォルトのゲートウェイを表示するには、以下のコードスニペットを使用します。
for rsap in device.associators(AssocClass="LMI_NetworkRemoteAccessAvailableToElement", ResultClass="LMI_NetworkRemoteServiceAccessPoint"): if rsap.AccessContext == ns.LMI_NetworkRemoteServiceAccessPoint.AccessContextValues.DefaultGateway: print "Default Gateway: %s" % rsap.AccessInfo
デフォルトゲートウェイは、DefaultGateway
と等しい AccessContext
プロパティーを持つ LMI_NetworkRemoteServiceAccessPoint
インスタンスによって表されます。
DNS サーバーの一覧を取得するには、以下のようにオブジェクトモデルをトラバースする必要があります。
-
LMI_NetworkSAPSAPDependency
を使用して、LMI_IPNetworkConnection
で指定したに関連付けられたLMI_IPProtocolEndpoint
インスタンスを取得 します。 -
LMI_DNSProtocolEndpoint
インスタンスに同じ関連を使用します。
LMI_NetworkRemoteAccessAvailableToElement
で関連付けられた DNS サーバーと同等の AccessContext
プロパティーを持つ LMI_NetworkRemoteServiceAccessPoint
インスタンスには、AccessInfo
プロパティーに DNS サーバーアドレスがあります。
RemoteServiceAccessPath
およびエントリーの取得には、さらにパスが重複する可能性があります。以下のコードスニペットは、set()
関数を使用して DNS サーバーから重複エントリーを削除します。
dnsservers = set() for ipendpoint in device.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_IPProtocolEndpoint"): for dnsedpoint in ipendpoint.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_DNSProtocolEndpoint"): for rsap in dnsedpoint.associators(AssocClass="LMI_NetworkRemoteAccessAvailableToElement", ResultClass="LMI_NetworkRemoteServiceAccessPoint"): if rsap.AccessContext == ns.LMI_NetworkRemoteServiceAccessPoint.AccessContextValues.DNSServer: dnsservers.add(rsap.AccessInfo) print "DNS:", ", ".join(dnsservers)
例22.45 新規接続の作成および静的 IP アドレスの設定
eth0 ネットワークインターフェースで静的 IPv4 とステートレスの IPv6 設定を作成するには、以下のコードスニペットを使用します。
capability = ns.LMI_IPNetworkConnectionCapabilities.first_instance({ 'ElementName': 'eth0' }) result = capability.LMI_CreateIPSetting(Caption='eth0 Static', IPv4Type=capability.LMI_CreateIPSetting.IPv4TypeValues.Static, IPv6Type=capability.LMI_CreateIPSetting.IPv6TypeValues.Stateless) setting = result.rparams["SettingData"].to_instance() for settingData in setting.associators(AssocClass="LMI_OrderedIPAssignmentComponent"): if setting.ProtocolIFType == ns.LMI_IPAssignmentSettingData.ProtocolIFTypeValues.IPv4: # Set static IPv4 address settingData.IPAddresses = ["192.168.1.100"] settingData.SubnetMasks = ["255.255.0.0"] settingData.GatewayAddresses = ["192.168.1.1"] settingData.push()
このコードスニペットは、LMI_IPNetworkConnection
から LMI_IPNetworkConnectionElementCapabilities
で関連付けられる LMI_IPNetworkConnectionCapabilities
のインスタンス上の LMI_CreateIPSetting()
メソッドを呼び出すことで、新しい設定を作成します。また、push()
メソッドを使用して設定の修正も行います。
例22.46 接続のアクティブ化
設定をネットワークインターフェースに適用するには、LMI_IPConfigurationService
クラスの ApplySettingToIPNetworkConnection()
メソッドを呼び出します。このメソッドは非同期で、ジョブを返します。以下のコードスニペットでは、このメソッドを同期で呼び出す方法を示しています。
setting = ns.LMI_IPAssignmentSettingData.first_instance({ "Caption": "eth0 Static" }) port = ns.LMI_IPNetworkConnection.first_instance({ 'ElementName': 'ens8' }) service = ns.LMI_IPConfigurationService.first_instance() service.SyncApplySettingToIPNetworkConnection(SettingData=setting, IPNetworkConnection=port, Mode=32768)
Mode
パラメーターは、設定の適用方法に影響を与えます。このパラメーターで最もよく使われる値は、以下のとおりです。
-
1
: 設定を直ちに適用し、自動アクティブ化します。 -
2
: 設定を自動アクティブ化しますが、すぐには適用しません。 -
4
: 切断して自動アクティブ化を無効にします。 -
5
: 設定状態を変更せず、自動アクティブ化のみを無効にします。 -
32768
: 設定を適用します。 -
32769
: 切断します。
OpenLMI ストレージプロバイダーの使用
openlmi-storage パッケージは、ストレージ管理用の CIM プロバイダーをインストールします。以下の例では、この CIM プロバイダーを使用したボリュームグループおよび論理ボリュームの作成、ファイルシステムの構築およびマウント、システムが認知するブロックデバイスの一覧表示の方法を説明します。
c
および ns
の変数に加え、以下の例では下記の変数定義を使用します。
MEGABYTE = 1024*1024 storage_service = ns.LMI_StorageConfigurationService.first_instance() filesystem_service = ns.LMI_FileSystemConfigurationService.first_instance()
例22.47 ボリュームグループの作成
/dev/myGroup/
にあり、3 つのメンバーがありデフォルトの拡張サイズが 4 MB の新規ボリュームグループを作成するには、以下のコードスニペットを使用します。
# Find the devices to add to the volume group # (filtering the CIM_StorageExtent.instances() # call would be faster, but this is easier to read): sda1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sda1"}) sdb1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sdb1"}) sdc1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sdc1"}) # Create a new volume group: (ret, outparams, err) = storage_service.SyncCreateOrModifyVG( ElementName="myGroup", InExtents=[sda1, sdb1, sdc1]) vg = outparams['Pool'].to_instance() print "VG", vg.PoolID, \ "with extent size", vg.ExtentSize, \ "and", vg.RemainingExtents, "free extents created."
例22.48 論理ボリュームの作成
サイズが 100 MB の論理ボリューム 2 つを作成するには、以下のコードスニペットを使用します。
# Find the volume group: vg = ns.LMI_VGStoragePool.first_instance({"Name": "/dev/mapper/myGroup"}) # Create the first logical volume: (ret, outparams, err) = storage_service.SyncCreateOrModifyLV( ElementName="Vol1", InPool=vg, Size=100 * MEGABYTE) lv = outparams['TheElement'].to_instance() print "LV", lv.DeviceID, \ "with", lv.BlockSize * lv.NumberOfBlocks,\ "bytes created." # Create the second logical volume: (ret, outparams, err) = storage_service.SyncCreateOrModifyLV( ElementName="Vol2", InPool=vg, Size=100 * MEGABYTE) lv = outparams['TheElement'].to_instance() print "LV", lv.DeviceID, \ "with", lv.BlockSize * lv.NumberOfBlocks, \ "bytes created."
例22.49 ファイルシステムの作成
例22.48「論理ボリュームの作成」 の論理ボリューム lv
に ext3
ファイルシステムを作成するには、以下のコードスニペットを使用します。
(ret, outparams, err) = filesystem_service.SyncLMI_CreateFileSystem( FileSystemType=filesystem_service.LMI_CreateFileSystem.FileSystemTypeValues.EXT3, InExtents=[lv])
例22.50 ファイルシステムのマウント
例22.49「ファイルシステムの作成」 で作成したファイルシステムをマウントするには、以下のコードスニペットを使用します。
# Find the file system on the logical volume: fs = lv.first_associator(ResultClass="LMI_LocalFileSystem") mount_service = ns.LMI_MountConfigurationService.first_instance() (rc, out, err) = mount_service.SyncCreateMount( FileSystemType='ext3', Mode=32768, # just mount FileSystem=fs, MountPoint='/mnt/test', FileSystemSpec=lv.Name)
例22.51 ブロックデバイスの一覧表示
システムが認識するブロックデバイスの一覧を表示するには、以下のコードスニペットを使用します。
devices = ns.CIM_StorageExtent.instances() for device in devices: if lmi_isinstance(device, ns.CIM_Memory): # Memory and CPU caches are StorageExtents too, do not print them continue print device.classname, print device.DeviceID, print device.Name, print device.BlockSize*device.NumberOfBlocks
OpenLMI ハードウェアプロバイダーの使用
openlmi-hardware パッケージは、ハードウェアを監視するための CIM プロバイダーをインストールします。以下の例では、この CIM プロバイダーを使用して CPU、メモリーモジュール、PCI デバイス、およびマシンの製造元およびモデルに関する情報を取得する方法を説明します。
例22.52 CPU 情報の表示
CPU 名、プロセッサーコア数、ハードウェアスレッド数などの基本的な CPU 情報を表示するには、以下のコードスニペットを使用します。
cpu = ns.LMI_Processor.first_instance() cpu_cap = cpu.associators(ResultClass="LMI_ProcessorCapabilities")[0] print cpu.Name print cpu_cap.NumberOfProcessorCores print cpu_cap.NumberOfHardwareThreads
例22.53 メモリー情報の表示
メモリーモジュールの個別サイズなどの基本情報を表示するには、以下のコードスニペットを使用します。
mem = ns.LMI_Memory.first_instance() for i in mem.associators(ResultClass="LMI_PhysicalMemory"): print i.Name
例22.54 シャーシ情報の表示
製造元やモデルなどのマシンの基本情報を表示するには、以下のコードスニペットを使用します。
chassis = ns.LMI_Chassis.first_instance() print chassis.Manufacturer print chassis.Model
例22.55 PCI デバイスの一覧表示
システムが認識する PCI デバイスの一覧を表示するには、以下のコードスニペットを使用します。
for pci in ns.LMI_PCIDevice.instances(): print pci.Name
22.5. OpenLMI スクリプトの使用
LMIShell インタープリターは、カスタム管理ツールの開発に使用可能な Python モジュールに構築されます。OpenLMI スクリプトのプロジェクトは、OpenLMI プロバイダーへのインターフェース用に Python ライブラリーを多数提供します。さらに、コマンドラインからこれらのライブラリーに対話するために使用可能な拡張ユーティリティーである lmi
とともに配布されます。
OpenLMI スクリプトをシステムにインストールするには、シェルプロンプトに以下のコマンドを入力します。
easy_install --user openlmi-scripts
このコマンドで、Python モジュールと lmi
ユーティリティーが ~/.local/
ディレクトリーにインストールされます。lmi
ユーティリティーの機能を拡張するには、以下のコマンドを使用して追加の OpenLMI モジュールをインストールします。
easy_install --user package_name
利用可能なモジュールの一覧は、Python の web サイト を参照してください。OpenLMI スクリプトの詳細は、OpenLMI スクリプトのドキュメント を参照してください。
22.6. 関連資料
OpenLMI およびシステム管理全般に関する詳細情報は、以下に挙げる資料を参照してください。
インストールされているドキュメント
-
lmishell(1):
lmishell
クライアントおよびインタープリターの man ページで、実行方法および使用方法の詳細情報が提供されています。
オンラインドキュメント
- Red Hat Enterprise Linux 7 ネットワークガイド: Red Hat Enterprise Linux 7 の Networking Guide では、システムのネットワークインターフェースおよびネットワークサービスの設定および管理を説明しています。
- Red Hat Enterprise Linux 7 ストレージ管理ガイド: Red Hat Enterprise Linux 7 の Storage Administration Guide は、システムでのストレージデバイスおよびファイルシステムの管理方法を説明しています。
- Red Hat Enterprise Linux 7 電力管理ガイド: Red Hat Enterprise Linux 7 の Power Management Guide は、システムの電力消費量を効果的に管理する方法を説明しています。サーバーとノートパソコンの両方で電力消費量を抑えるテクニックと、各テクニックがシステムのパフォーマンス全体に与える影響を説明しています。
- Red Hat Enterprise Linux 7 Linux ドメイン ID、認証、およびポリシーガイド: Red Hat Enterprise Linux 7 の Linux Domain Identity, Authentication, and Policy Guide では、サーバーおよびクライアントを含む IPA ドメインのインストール、設定、管理について説明しています。このガイドは、IT および システム管理者用です。
- FreeIPA Documentation: FreeIPA Documentation は、FreeIPA Identity Management プロジェクトを使用する際のメインのユーザー資料となります。
- OpenSSL Home Page: OpenSSL のホームページでは、OpenSSL プロジェクトの概要が説明されています。
- Mozilla NSS Documentation: Mozilla NSS Documentation は、Mozilla NSS プロジェクトを使用する際にユーザーが主に使用するドキュメントとなります。
関連項目
- 4章ユーザーとグループの管理 では、グラフィカルユーザーインターフェースとコマンドラインを使用したシステムユーザーとグループの管理方法を説明します。
- 9章Yum では、Yum パッケージマネージャーを使って、コマンドラインでのパッケージの検索、インストール、更新、アンインストール方法について説明しています。
-
10章systemd によるサービス管理 では、
systemd
の概説と、systemctl
コマンドを使ったシステムサービスの管理方法、systemd ターゲットの設定方法、および電源管理コマンドの実行方法について説明しています。 -
12章OpenSSH は、SSH サーバーの設定方法や、クライアントユーティリティーの
ssh
、scp
、sftp
を使用してこのサーバーにアクセスする方法を説明しています。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。