21.4. LMIShell の使用
21.4.1. LMIShell の開始、使用、終了
インタラクティブモードでの LMIShell の開始
lmishell コマンドを引数なしで実行します。
lmishelllmishell コマンドを --noverify または -n オプションとともに実行します。
lmishell --noverifyTab Completion (タブ入力) の使用
履歴閲覧
~/.lmishell_history ファイルに保存します。これにより、コマンド履歴が閲覧でき、インタラクティブモードで入力した行をプロンプトで再度入力することなく再使用することができます。コマンド履歴で後ろに戻るには 上向き矢印 キーか Ctrl+p のキーの組み込み合わせを押します。コマンド履歴で前に進むには、下向き矢印 キーか Ctrl+n のキーの組み合わせを押します。
> (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
例外処理
use_exceptions() 関数を使用します。
use_exceptions()use_exception(False)
~/.lmishellrc の use_exceptions オプションを True に変更します。
use_exceptions = True
一時的なキャッシュの設定
clear_cache() メソッドを使用します。
object_name.clear_cache()use_cache() メソッドを使用します。
object_name.use_cache(False)
object_name.use_cache(True)
~/.lmishellrc の use_cache オプションを False に変更します。
use_cache = False
LMIShell の終了
quit() 関数を発行します。
> quit()
~]$LMIShell スクリプトの実行
lmishell コマンドを実行します。
lmishell file_name--interact または -i のコマンドラインオプションも指定します。
lmishell --interact file_name.lmi が適切です。
21.4.2. CIMOM への接続
リモートの CIMOM への接続
connect() 関数を使って接続オブジェクトを作成します。
connect(host_name, user_name[, password])LMIConnection オブジェクトを返します。
例21.1 リモートの CIMOM への接続
server.example.com 上で実行中の OpenPegasus CIMOM に ユーザー pegasus として接続するには、インタラクティブのプロンプトで以下を入力します。
> c = connect("server.example.com", "pegasus")
password:
>ローカルの CIMOM への接続
root ユーザーとして実行し、/var/run/tog-pegasus/cimxml.socket ソケットが存在する必要があります。
connect() 関数を使って接続オブジェクトを作成します。
connect(host_name)localhost、127.0.0.1、または ::1 のいずれかで置き換えます。関数は LMIConnection オブジェクトか None を返します。
例21.2 ローカルの CIMOM への接続
localhost 上で実行中の OpenPegasus CIMOM に root ユーザーとして接続するには、インタラクティブのプロンプトで以下を入力します。
> c = connect("localhost")
>CIMOM への接続の確認
connect() 関数は、接続が確立されないと LMIConnection オブジェクトまたは None を返します。さらに、connect() 関数が接続確立に失敗すると、標準エラー出力にエラーメッセージを印刷します。
isinstance() 関数を使用します。
isinstance(object_name,LMIConnection)
LMIConnection オブジェクトの場合は True を、それ以外の場合は False を返します。
例21.3 CIMOM への接続の確認
> isinstance(c, LMIConnection)
True
>c が None でないことを確認することもできます。
> c is None
False
>21.4.3. ネームスペースの使用
root ネームスペースは、接続オブジェクトの最初のエントリーポイントです。
利用可能なネームスペースの一覧表示
print_namespaces() メソッドを使用します。
object_name.print_namespaces()namespaces にアクセスします。
object_name.namespaces例21.4 利用可能なネームスペースの一覧表示
> c.root.print_namespaces()
cimv2
interop
PG_InterOp
PG_Internal
>root_namespaces という名前の変数に割り当てるには、以下を入力します。
> root_namespaces = c.root.namespaces
>ネームスペースオブジェクトへのアクセス
object_name.namespace_name
LMINamespace オブジェクトを返します。
例21.5 ネームスペースオブジェクトへのアクセス
> ns = c.root.cimv2
> 21.4.4. クラスの使用
利用可能なクラスの一覧表示
print_classes() メソッドを使用します。
namespace_object.print_classes()classes() メソッドを使用します。
namespace_object.classes()例21.6 利用可能なクラスの一覧表示
ns ネームスペースオブジェクトを検査して利用可能なクラスすべてを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> ns.print_classes()
CIM_CollectionInSystem
CIM_ConcreteIdentity
CIM_ControlledBy
CIM_DeviceSAPImplementation
CIM_MemberOfStatusCollection
...
>cimv2_classes という名前の変数に割り当てるには、以下を入力します。
> cimv2_classes = ns.classes()
>クラスオブジェクトへのアクセス
namespace_object.class_name
例21.7 クラスオブジェクトへのアクセス
ns ネームスペースオブジェクトの LMI_IPNetworkConnection クラスにアクセスしてこれを cls という名前の変数に割り当てるには、インタラクティブプロンプトで以下を入力します。
> cls = ns.LMI_IPNetworkConnection
>クラスオブジェクトの検査
class_object.classnameclass_object.namespacedoc() メソッドを使用します。
class_object.doc()例21.8 クラスオブジェクトの検査
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()methods() メソッドを使用します。
class_object.methods()例21.9 利用可能なメソッドの一覧表示
cls クラスオブジェクトを検査して利用可能なすべてのメソッドを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> cls.print_methods()
RequestStateChange
>service_methods という名前の変数に割り当てるには、以下を入力します。
> service_methods = cls.methods()
>利用可能なプロパティーの一覧表示
print_properties() メソッドを使用します。
class_object.print_properties()properties() メソッドを使用します。
class_object.properties()例21.10 利用可能なプロパティーの一覧表示
cls クラスオブジェクトを検査して利用可能なすべてのプロパティーを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> cls.print_properties()
RequestedState
HealthState
StatusDescriptions
TransitioningToState
Generation
...
>service_properties という名前の変数に割り当てるには、以下を入力します。
> service_properties = cls.properties()
>ValueMap プロパティーの一覧表示と閲覧
print_valuemap_properties() メソッドを使用します。
class_object.print_valuemap_properties()valuemap_properties() メソッドを使用します。
class_object.valuemap_properties()例21.11 ValueMap プロパティーの一覧表示
cls クラスオブジェクトを検査して利用可能なすべての ValueMap プロパティーを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> cls.print_valuemap_properties()
RequestedState
HealthState
TransitioningToState
DetailedStatus
OperationalStatus
...
>service_valuemap_properties という名前の変数に割り当てるには、以下を入力します。
> service_valuemap_properties = cls.valuemap_properties()
>class_object.valuemap_propertyValuesprint_values() メソッドを使用します。
class_object.valuemap_propertyValues.print_values()
values() メソッドを使って利用可能な定数値の一覧を取得することもできます。
class_object.valuemap_propertyValues.values()
例21.12 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_namevalue() メソッドを使用することもできます。
class_object.valuemap_propertyValues.value("constant_value_name")
value_name() メソッドを使用します。
class_object.valuemap_propertyValues.value_name("constant_value")
例21.13 定数値へのアクセス
RequestedState プロパティーが Reset という名前の定数値を提供していました。この名前の定数値にアクセスするには、インタラクティブプロンプトで以下を入力します。
>cls.RequestedStateValues.Reset11 >cls.RequestedStateValues.value("Reset")11 >
> cls.RequestedStateValues.value_name(11)
u'Reset'
>CIMClass オブジェクトの取り込み
CIMClass オブジェクトへのアクセスを必要としません。呼び出されたメソッドこのオブジェクトを実際に必要とする際にのみ LMIShell が CIMOM からオブジェクトを取り込むのはこのためです。CIMClass オブジェクトを手動で取り込むには、以下のように fetch() メソッドを使用します。
class_object.fetch()CIMClass オブジェクトへのアクセスを必要とするメソッドはこれを自動的に取り込むことに注意してください。
21.4.5. インスタンスの使用
インスタンスへのアクセス
instances() メソッドを使用します。
class_object.instances()LMIInstance オブジェクトの一覧を返します。
first_instance() メソッドを使用します。
class_object.first_instance()LMIInstance オブジェクトを返します。
instances() と first_instance() は、すべてのインスタンスを一覧表示したり最初のインスタンスを返したりするほか、オプションの引数をサポートして結果をフィルターすることもできます。
class_object.instances(criteria)class_object.first_instance(criteria)例21.14 インスタンスへのアクセス
cls クラスオブジェクトの最初のインスタンスで、 eth0 と同等の ElementName プロパティーがあるものを見つけ、これを device という名前の変数に割り当てるには、インタラクティブプロンプトで以下を入力します。
> device = cls.first_instance({"ElementName": "eth0"})
>インスタンスの検査
instance_object.classnameinstance_object.namespaceinstance_object.pathLMIInstanceName オブジェクトを返します。
doc() メソッドを使用します。
instance_object.doc()例21.15 インスタンスの検査
device インスタンスオブジェクトを検査してそのクラス名と対応するネームスペースを表示するには、インタラクティブプロンプトで以下を入力します。
>device.classnameu'LMI_IPNetworkConnection' >device.namespace'root/cimv2' >
> device.doc()
Instance of LMI_IPNetworkConnection
[property] uint16 RequestedState = '12'
[property] uint16 HealthState
[property array] string [] StatusDescriptions
...新規インスタンスの作成
create_instance() メソッドを使用します。
class_object.create_instance(properties)LMIInstance オブジェクトを返します。
例21.16 新規インスタンスの作成
LMI_Group クラスはシステムグループを表し、LMI_Account クラスは管理システム上のユーザーアカウントを表します。例21.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 クラスを使って lmishell-user を pegasus グループに追加するには、以下のようにこのクラスの新規インスタンスを作成します。
>ns.LMI_MemberOfGroup.create_instance({..."Member" : identity.path,..."Collection" : group.path})LMIInstance(classname="LMI_MemberOfGroup", ...) >
個別インスタンスの削除
delete() メソッドを使用します。
instance_object.delete()例21.17 個別インスタンスの削除
LMI_Account クラスは管理システム上のユーザーアカウントを表します。例21.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()properties() メソッドを使用します。
instance_object.properties()例21.18 利用可能なプロパティーの一覧表示
device インスタンスオブジェクトを検査して利用可能なすべてのプロパティーを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> device.print_properties()
RequestedState
HealthState
StatusDescriptions
TransitioningToState
Generation
...
>device_properties という名前の変数に割り当てるには、以下を入力します。
> device_properties = device.properties()
>instance_object.property_name
instance_object.property_name = value
push() メソッドも実行する必要があることに注意してください。
instance_object.push()例21.19 個別プロパティーへのアクセス
device インスタンスオブジェクトを検査して、SystemName という名前のプロパティーの値を表示するには、インタラクティブプロンプトで以下を入力します。
> device.SystemName
u'server.example.com'
>利用可能なメソッドの一覧表示と使用
print_methods() メソッドを使用します。
instance_object.print_methods()methods() メソッドを使用します。
instance_object.methods()例21.20 利用可能なメソッドの一覧表示
device インスタンスオブジェクトを検査して利用可能なメソッドすべてを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> device.print_methods()
RequestStateChange
>network_device_methods という名前の変数に割り当てるには、以下を入力します。
> network_device_methods = device.methods()
>instance_object.method_name(
parameter=value,
...)重要
LMIInstance オブジェクトは、自動的にそのコンテンツ (プロパティー、メソッド、修飾子など) を更新しません。自動的に更新するようにするには、以下のように refresh() メソッドを使用します。
例21.21 メソッドの使用
PG_ComputerSystem クラスは、システムを表します。例21.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='')LMI_StorageJobLMI_SoftwareInstallationJobLMI_NetworkJob
instance_object.Syncmethod_name(
parameter=value,
...)Sync 接頭辞があり、ジョブの戻り値、ジョブの戻り値のパラメーター、およびジョブのエラー文字列で構成される 3 項目タプルを返します。
PreferPolling パラメーターを指定します。
instance_object.Syncmethod_name(PreferPolling=Trueparameter=value, ...)
ValueMap パラメーターの一覧表示と閲覧
print_valuemap_parameters() メソッドを使用します。
instance_object.method_name.print_valuemap_parameters()valuemap_parameters() メソッドを使用します。
instance_object.method_name.valuemap_parameters()例21.22 ValueMap パラメーターの一覧表示
acc インスタンスオブジェクトを検査して CreateAccount() メソッドの利用可能なすべての ValueMap パラメーターを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> acc.CreateAccount.print_valuemap_parameters()
CreateAccount
>create_account_parameters という名前の変数に割り当てるには、以下を入力します。
> create_account_parameters = acc.CreateAccount.valuemap_parameters()
>instance_object.method_name.valuemap_parameterValuesprint_values() メソッドを使用します。
instance_object.method_name.valuemap_parameterValues.print_values()
values() メソッドを使って利用可能な定数値の一覧を取得することもできます。
instance_object.method_name.valuemap_parameterValues.values()
例21.23 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_namevalue() メソッドを使用することもできます。
instance_object.method_name.valuemap_parameterValues.value("constant_value_name")
value_name() メソッドを使用します。
instance_object.method_name.valuemap_parameterValues.value_name("constant_value")
例21.24 定数値へのアクセス
CreateAccount ValueMap パラメーターが Failed という名前の定数値を提供していました。この名前の定数値にアクセスするには、インタラクティブプロンプトで以下を入力します。
>acc.CreateAccount.CreateAccountValues.Failed2 >acc.CreateAccount.CreateAccountValues.value("Failed")2 >
> acc.CreateAccount.CreateAccountValues.value_name(2)
u'Failed'
>インスタンスオブジェクトの更新
refresh() メソッドを使用します。
instance_object.refresh()例21.25 インスタンスオブジェクトの更新
device インスタンスオブジェクトのプロパティーとメソッドを更新するには、インタラクティブプロンプトで以下を入力します。
> device.refresh()
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='')
>MOF 表現の表示
tomof() メソッドを使用します。
instance_object.tomof()例21.26 MOF 表現の表示
device インスタンスオブジェクトの MOF 表現を表示するには、インタラクティブプロンプトで以下を入力します。
> device.tomof()
instance of LMI_IPNetworkConnection {
RequestedState = 12;
HealthState = NULL;
StatusDescriptions = NULL;
TransitioningToState = 12;
...21.4.6. インスタンス名の使用
インスタンス名へのアクセス
CIMInstance オブジェクトは CIMInstanceName オブジェクトによって識別されます。利用可能なすべてのインスタンス名オブジェクト一覧を取得するには、以下のように instance_names() メソッドを使用します。
class_object.instance_names()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)例21.27 インスタンス名へのアクセス
cls クラスオブジェクトの最初のインスタンス名で、 eth0 と同等の Name 鍵プロパティーがあるものを見つけ、これを device_name という名前の変数に割り当てるには、インタラクティブプロンプトで以下を入力します。
> device_name = cls.first_instance_name({"Name": "eth0"})
>インスタンス名の検査
instance_name_object.classnameinstance_name_object.namespace例21.28 インスタンス名の検査
device_name インスタンス名オブジェクトを検査してそのクラス名と対応するネームスペースを表示するには、インタラクティブプロンプトで以下を入力します。
>device_name.classnameu'LMI_IPNetworkConnection' >device_name.namespace'root/cimv2' >
新規インスタンス名の作成
CIMInstanceName オブジェクトが作成できます。すると、このインスタンス名オブジェクトを使ってインスタンスオブジェクト全体を取得することができるようになります。
new_instance_name() メソッドを使用します。
class_object.new_instance_name(key_properties)LMIInstanceName オブジェクトを返します。
例21.29 新規インスタンス名の作成
LMI_Account クラスは管理システム上のユーザーアカウントを表します。例21.5「ネームスペースオブジェクトへのアクセス」 で作成された ns ネームスペースオブジェクトを使用して、管理システム上の lmishell-user ユーザーを表す LMI_Account クラスの新規インスタンス名を作成するには、インタラクティブプロンプトで以下を入力します。
>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()key_properties() メソッドを使用します。
instance_name_object.key_properties()例21.30 利用可能な鍵プロパティーの一覧表示
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
例21.31 個別の鍵プロパティーへのアクセス
device_name インスタンス名オブジェクトを検査して、SystemName という名前の鍵プロパティーの値を表示するには、インタラクティブプロンプトで以下を入力します。
> device_name.SystemName
u'server.example.com'
>インスタンス名をインスタンスに変換する
to_instance() メソッドを使用します。
instance_name_object.to_instance()LMIInstance オブジェクトを返します。
例21.32 インスタンス名をインスタンスに変換する
device_name インスタンス名オブジェクトをインスタンスオブジェクト変換して、device という名前の変数に割り当てるには、インタラクティブプロンプトで以下を入力します。
> device = device_name.to_instance()
>21.4.7. 関連するオブジェクトの使用
関連するインスタンスへのアクセス
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)
AssocClass— 返された各オブジェクトは、このクラスまたはそのサブクラスの 1 つのインスタンスを通してソースオブジェクトに関連付けられている必要があります。デフォルト値は、Noneです。ResultClass— 返された各オブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスである必要があります。または、このクラスもしくはそのサブクラスの 1 つである必要があります。デフォルト値は、Noneです。Role— 返された各オブジェクトは、ソースオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。ソースオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値は、Noneです。ResultRole— 返された各オブジェクトは、返されたオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。返されたオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値は、Noneです。
IncludeQualifiers— 応答に各オブジェクトのすべての修飾子 (オブジェクトおよび返されたすべてのプロパティー上の修飾子を含む) を QUALIFIER 要素として含めるかどうかを示すブール値。デフォルト値は、Falseです。IncludeClassOrigin— 返された各オブジェクトですべての適切な要素に CLASSORIGIN 属性が存在すべきかどうかを示すブール値。デフォルト値は、Falseです。PropertyList— このリストのメンバーは 1 つ以上のプロパティー名を定義します。返されたオブジェクトは、このリストにないプロパティーには要素を含めません。PropertyListが空の場合、返されるオブジェクトにはプロパティーは含まれません。Noneの場合は、追加のフィルタリングは定義されません。デフォルト値は、Noneです。
例21.33 関連するインスタンスへのアクセス
LMI_StorageExtent クラスは、システム内で利用可能なブロックデバイスを表します。例21.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)
AssocClass— 返された各名前はオブジェクトを識別します。このオブジェクトは、このクラスもしくはそのサブクラスの 1 つのインスタンスを通してソースオブジェクトに関連付けられている必要があります。デフォルト値は、Noneです。ResultClass— 返された各名前はオブジェクトを識別します。このオブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスである必要があります。または、このクラスまたはそのサブクラスの 1 つである必要があります。デフォルト値は、Noneです。Role— 返された各名前は、オブジェクトを識別します。このオブジェクトは、ソースオブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。ソースオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値は、Noneです。ResultRole— 返された各名前は、オブジェクトを識別します。このオブジェクトは、返された名前オブジェクトが特定の役割を果たす関連付けでソースオブジェクトと関連付けられている必要があります。返されたオブジェクトを参照する関連付けクラス内のプロパティー名は、このパラメーターの値と合致する必要があります。デフォルト値は、Noneです。
例21.34 関連するインスタンス名へのアクセス
vda インスタンスオブジェクトを使用して、その関連するインスタンス名一覧を取得し、vda_partitions という名前の変数に割り当てるには、以下を入力します。
> vda_partitions = vda.associator_names(ResultClass="LMI_DiskPartition")
>21.4.8. 関連付けオブジェクトの使用
関連付けインスタンスへのアクセス
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) >
ResultClass— 返された各オブジェクトは、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスである必要があります。または、このクラスまたはそのサブクラスの 1 つである必要があります。デフォルト値は、Noneです。Role— 返された各オブジェクトは、このパラメーターの値に合致する名前を持ったプロパティーでターゲットオブジェクトを参照する必要があります。デフォルト値は、Noneです。
IncludeQualifiers— 応答に各オブジェクト (オブジェクトおよび返されたすべてのプロパティー上の修飾子を含む) を QUALIFIER 要素として含めるかどうかを示すブール値。デフォルト値は、Falseです。IncludeClassOrigin— 返された各オブジェクトですべての適切な要素に CLASSORIGIN 属性が存在すべきかどうかを示すブール値。デフォルト値は、Falseです。PropertyList— このリストのメンバーは 1 つ以上のプロパティー名を定義します。返されたオブジェクトは、このリストにないプロパティーには要素を含めません。PropertyListが空の場合、返されるオブジェクトにはプロパティーは含まれません。Noneの場合は、追加のフィルタリングは定義されません。デフォルト値は、Noneです。
例21.35 関連付けインスタンスへのアクセス
LMI_LANEndpoint クラスは、特定のネットワークインターフェースデバイスに関連付けられる通信エンドポイントを表します。例21.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.IPv4Address192.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)
ResultClass— 返された各オブジェクト名は、このクラスのインスタンスかそのサブクラスの 1 つのインスタンスを識別します。または、このクラスまたはそのサブクラスの 1 つを識別します。デフォルト値は、Noneです。Role— 返された各オブジェクトは、このパラメーターの値に合致する名前を持ったプロパティーでターゲットインスタンスを参照するオブジェクトを識別します。デフォルト値は、Noneです。
例21.36 関連付けインスタンス名へのアクセス
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.IPv4Address192.168.122.1 >
21.4.9. 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")
Permanent=True キーワードパラメーターを subscribe_indication() メソッド呼び出しに渡します。これで、LMIShell がサブスクリプションを削除しなくなります。
例21.37 Indication のサブスクライブ
c 接続オブジェクトを使用して、cpu という名前の 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 の一覧表示
print_subscribed_indications() メソッドを使用します。
connection_object.print_subscribed_indications()subscribed_indications() メソッドを使用します。
connection_object.subscribed_indications()例21.38 サブスクライブしている indication の一覧表示
c 接続オブジェクトを検査し、サブスクライブしている indication すべてを一覧表示するには、インタラクティブプロンプトで以下を入力します。
> c.print_subscribed_indications()
>indications という名前の変数に割り当てるには、以下を入力します。
> indications = c.subscribed_indications()
>Indication のサブスクライブ解除
unsubscribe_indication() メソッドを使用します。
connection_object.unsubscribe_indication(indication_name)unsubscribe_all_indications() メソッドを使用します。
connection_object.unsubscribe_all_indications()例21.39 Indication のサブスクライブ解除
c 接続オブジェクトを使用して、例21.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」 文字の特別な文字列を使用しています。この文字は、ハンドラー名が競合しないように、リスナーが生成するランダムな文字列で置き換えられます。ランダムな文字列を使用するには、indication リスナーを最初に開始してその次に indication をサブスクライブします。そうすることで、ハンドラーオブジェクトの Destination プロパティーに、schema://host_name/random_string の値が含まれます。
例21.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)21.4.10. 使用例
c = connect("host_name", "user_name", "password")
ns = c.root.cimv2OpenLMI サービスプロバイダーの使用
例21.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.NameEnabledDefault プロパティーの値が 2 と等しくなり、無効なサービスの場合は 3 と等しくなることに注意してください。
cups サービスについての情報を表示するには、以下を使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"})
cups.doc()例21.42 サービスの起動と停止
cups サービスを起動して現行ステータスを確認するには、以下のコードスニペットを使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"})
cups.StartService()
print cups.Status
cups.StopService()
print cups.Status例21.43 サービスの有効、無効化
cups サービスを有効または無効にして、EnabledDefault プロパティーを表示するには、以下のコードスニペットを使用します。
cups = ns.LMI_Service.first_instance({"Name": "cups.service"})
cups.TurnServiceOff()
print cups.EnabledDefault
cups.TurnServiceOn()
print cups.EnabledDefaultOpenLMI ネットワーキングプロバイダーの使用
例21.44 特定のポート番号に関連付けられている 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.AccessInfoAccessContext プロパティーが DefaultGateway と等しい LMI_NetworkRemoteServiceAccessPoint インスタンスで表されます。
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)例21.45 新規接続の作成および静的 IP アドレスの設定
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_CreateIPSetting() メソッドを LMI_IPNetworkConnectionCapabilities のインスタンス上で呼び出すことで、新規設定を作成します。これは、LMI_IPNetworkConnectionElementCapabilities で LMI_IPNetworkConnection に関連付けられています。また、push() メソッドを使って設定の修正も行います。
例21.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— 切断して自動アクティブ化を無効にします。- 設定状態を変更せず、自動アクティブ化のみを無効にします。
32768— 設定を適用します。32769— 切断します。
OpenLMI ストレージプロバイダーの使用
c および ns の変数に加え、以下の例では下記の変数定義を使用します。
MEGABYTE = 1024*1024 storage_service = ns.LMI_StorageConfigurationService.first_instance() filesystem_service = ns.LMI_FileSystemConfigurationService.first_instance()
例21.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."例21.48 論理ボリュームの作成
# 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."例21.49 ファイルシステムの作成
(ret, outparams, err) = filesystem_service.SyncLMI_CreateFileSystem(
FileSystemType=filesystem_service.LMI_CreateFileSystem.FileSystemTypeValues.EXT3,
InExtents=[lv])例21.50 ファイルシステムのマウント
# 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)例21.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.NumberOfBlocksOpenLMI ハードウェアプロバイダーの使用
例21.52 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
例21.53 メモリー情報の表示
mem = ns.LMI_Memory.first_instance()
for i in mem.associators(ResultClass="LMI_PhysicalMemory"):
print i.Name例21.54 シャーシ情報の表示
chassis = ns.LMI_Chassis.first_instance() print chassis.Manufacturer print chassis.Model
例21.55 PCI デバイスの一覧表示
for pci in ns.LMI_PCIDevice.instances():
print pci.Name
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.