22.4. LMIShell 사용


LMIShell 은 OpenPegasus CIMOM에서 제공하는 CIM 개체에 액세스하는 데 사용할 수 있는 대화형 클라이언트 및 비대화형 인터프리터입니다. Python 인터프리터를 기반으로 하지만 CIM 오브젝트와 상호 작용을 위한 추가 함수 및 클래스도 구현합니다.

22.4.1. LMIShell 시작, 사용 및 종료

Python 인터프리터와 마찬가지로 LMIShell을 대화형 클라이언트로 사용하거나 LMIShell 스크립트의 비대화형 인터프리터로 사용할 수 있습니다.

LMIShell in Interactive Mode 시작

대화형 모드에서 LMIShell 인터프리터를 시작하려면 추가 인수 없이 lmishell 명령을 실행합니다.

lmishell

기본적으로 LMIShell이 CIMOM과 연결을 설정하려고 할 때 인증 기관 신뢰 저장소에 대한 서버 측 인증서의 유효성을 검사합니다. 이 검증을 비활성화하려면 --noverify 또는 -n 명령줄 옵션을 사용하여 lmishell 명령을 실행합니다.

lmishell --noverify
탭 완료 사용

대화형 모드에서 실행하는 경우 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 로 설정하고 LMIShell을 구성하여 최대 1000 행을 저장하려면 ~/.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 키 조합을 클릭하거나 exit() 함수를 다음과 같이 실행합니다.

> quit()
~]$
LMIShell 스크립트 실행

LMIShell 스크립트를 실행하려면 다음과 같이 lmishell 명령을 실행합니다.

lmishell file_name

file_name 을 스크립트 이름으로 바꿉니다. 실행 후 LMIShell 스크립트를 검사하려면 --interact 또는 -i 명령줄 옵션도 지정합니다.

lmishell --interact file_name

LMIShell 스크립트의 기본 파일 확장자는 .lmi 입니다.

22.4.2. CIMOM에 연결

LMIShell을 사용하면 동일한 시스템에서 로컬로 실행 중인 CIMOM 또는 네트워크를 통해 액세스할 수 있는 원격 시스템에서 연결할 수 있습니다.

원격 CIMOM에 연결

원격 CIMOM에서 제공하는 CIM 개체에 액세스하려면 다음과 같이 connect() 함수를 사용하여 연결 오브젝트를 생성합니다.

connect(host_name, user_name, password)

host_name 을 관리 시스템의 호스트 이름으로 바꾸고 user_name 을 시스템에서 실행 중인 OpenPegasus CIMOM에 연결할 수 있는 사용자 이름으로, 암호를 사용자의 암호로 바꿉니다. 암호를 생략하면 LMIShell에서 사용자에게 암호를 입력하라는 메시지를 표시합니다. 함수는 LMIConnection 개체를 반환합니다.

예 22.1. 원격 CIMOM에 연결

server.example.com 에서 실행되는 OpenPegasus CIMOM에 사용자 pegasus 으로 연결하려면 대화형 프롬프트에서 다음을 입력합니다.

> c = connect("server.example.com", "pegasus")
password:
>
로컬 CIMOM에 연결

LMIShell을 사용하면 Unix 소켓을 사용하여 로컬 CIMOM에 연결할 수 있습니다. 이러한 연결 유형의 경우 루트 사용자로 LMIShell 인터프리터를 실행하고 /var/run/tog-pegasus/cimxml.socket 소켓이 있어야 합니다.

로컬 CIMOM에서 제공하는 CIM 개체에 액세스하려면 다음과 같이 connect() 함수를 사용하여 연결 오브젝트를 생성합니다.

connect(host_name)

host_namelocalhost,127.0.0.1 또는 ::1 로 바꿉니다. 함수는 LMIConnection 개체 또는 None 을 반환합니다.

예 22.2. 로컬 CIMOM에 연결

root 사용자로 localhost 에서 실행되는 OpenPegasus CIMOM에 연결하려면 대화형 프롬프트에서 다음을 입력합니다.

> c = connect("localhost")
>
CIMOM에 대한 연결 확인

connect() 함수는 LMIConnection 개체를 반환하거나 연결을 설정할 수 없는 경우 None 을 반환합니다. 또한 connect() 함수가 연결을 설정하지 못하면 표준 오류 출력에 오류 메시지를 출력합니다.

CIMOM에 대한 연결이 성공적으로 설정되었는지 확인하려면 다음과 같이 isinstance() 함수를 사용합니다.

isinstance(object_name, LMIConnection)

object_name 을 연결 오브젝트의 이름으로 바꿉니다. 이 함수는 object_nameLMIConnection 객체이거나 그렇지 않으면 False 를 반환합니다.

예 22.3. CIMOM에 대한 연결 확인

예 22.1. “원격 CIMOM에 연결” 에서 만든 c 변수에 LMIConnection 개체가 포함되어 있는지 확인하려면 대화형 프롬프트에서 다음을 입력합니다.

> isinstance(c, LMIConnection)
True
>

또는 cNone 이 아닌지 확인할 수 있습니다.

> c is None
False
>

22.4.3. 네임스페이스 작업

LMIShell 네임스페이스는 사용 가능한 클래스를 구성하고 다른 네임스페이스 및 클래스에 대한 hierarchic 액세스 포인트 역할을 하는 자연 수단을 제공합니다. 루트 네임스페이스는 연결 오브젝트의 첫 번째 진입점입니다.

사용 가능한 네임스페이스 나열

사용 가능한 모든 네임스페이스를 나열하려면 다음과 같이 print_namespaces() 메서드를 사용합니다.

object_name.print_namespaces()

object_name 을 검사할 오브젝트의 이름으로 바꿉니다. 이 메서드는 사용 가능한 네임스페이스를 표준 출력에 출력합니다.

사용 가능한 네임스페이스 목록을 가져오려면 오브젝트 특성 네임스페이스에 액세스합니다.

object_name.namespaces

이렇게 하면 문자열 목록이 반환됩니다.

예 22.4. 사용 가능한 네임스페이스 나열

예 22.1. “원격 CIMOM에 연결” 에서 생성된 c 연결 오브젝트의 루트 네임스페이스 오브젝트를 검사하고 사용 가능한 모든 네임스페이스를 나열하려면 대화형 프롬프트에서 다음을 입력합니다.

> 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 속성에는 상수 값이 포함되어 있으며, 메서드를 호출하거나 반환된 값을 확인할 때 유용할 수 있습니다. ValueMap properties contain constant values, which may be useful when calling methods or checking returned values.

특정 클래스 개체의 사용 가능한 모든 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
...
>

service_valuemap_properties 라는 변수에 이러한 ValueMap 속성 목록을 할당하려면 다음을 입력합니다.

> 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. Constant 값에 액세스

예 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)

기준을 키-값 쌍으로 구성된 사전으로 교체합니다. 여기서 키는 이러한 속성의 필수 값을 나타내는 인스턴스 속성 및 값을 나타냅니다.

예 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.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 를 클래스 오브젝트의 이름으로 바꾸고 속성은 키-값 쌍으로 구성된 사전으로 교체합니다. 여기서 키는 인스턴스 속성과 값이 속성 값을 나타냅니다. 이 메서드는 LMIInstance 개체를 반환합니다.

예 22.16. 새 인스턴스 생성

LMI_Group 클래스는 시스템 그룹을 나타내고 LMI_Account 클래스는 관리형 시스템의 사용자 계정을 나타냅니다. 예 22.5. “네임스페이스 오브젝트 액세스” 에서 생성된 ns 네임스페이스 오브젝트를 사용하려면 pegasus 라는 시스템 그룹과 lmishell-user 라는 사용자에 대한 이 두 클래스의 인스턴스를 생성하고 해당 클래스를 groupuser 라는 변수에 할당하고 대화형 프롬프트에서 다음을 입력합니다.

> 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-userpegasus 그룹에 추가하려면 다음과 같이 이 클래스의 새 인스턴스를 만듭니다.

> 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 = 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.print_properties()
RequestedState
HealthState
StatusDescriptions
TransitioningToState
Generation
...
>

이러한 속성 목록을 device_properties 라는 변수에 할당하려면 다음을 입력합니다.

> device_properties = device.properties()
>

특정 속성의 현재 값을 가져오려면 다음 구문을 사용합니다.

instance_object.property_name

property_name 을 액세스할 속성의 이름으로 바꿉니다.

특정 속성의 값을 수정하려면 다음과 같이 값을 할당합니다.To modify the value of a particular property, assign a value to it as follows:

instance_object.property_name = value

값을 속성의 새 값으로 바꿉니다. CIMOM에 변경 사항을 전파하려면 push() 메서드도 실행해야 합니다.

instance_object.push()

이 메서드는 반환 값, 반환 값 매개 변수 및 오류 문자열로 구성 된 3 개의item tuple을 반환 합니다.This method returns a three-item tuple consisting of a return value, return value parameters, and an error string.

예 22.19. 개별 속성 액세스

예 22.14. “인스턴스 액세스” 에서 생성된 장치 인스턴스 오브젝트를 검사하고 SystemName 이라는 속성의 값을 표시하려면 대화형 프롬프트에서 다음을 입력합니다.

> device.SystemName
u'server.example.com'
>
사용 가능한 방법 나열 및 사용

특정 인스턴스 오브젝트의 사용 가능한 모든 메서드를 나열하려면 다음과 같이 print_methods() 메서드를 사용합니다.

instance_object.print_methods()

instance_object 를 검사할 인스턴스 오브젝트의 이름으로 교체합니다. 이 메서드는 표준 출력에 사용 가능한 방법을 출력합니다.

사용 가능한 메서드 목록을 가져오려면 method() 메서드를 사용합니다.

instance_object.methods()

이 메서드는 문자열 목록을 반환합니다.

예 22.20. 사용 가능한 방법 나열

예 22.14. “인스턴스 액세스” 에서 생성된 장치 인스턴스 오브젝트를 검사하고 사용 가능한 모든 방법을 나열하려면 대화형 프롬프트에서 다음을 입력합니다.

> device.print_methods()
RequestStateChange
>

이러한 메서드 목록을 network_device_methods 라는 변수에 할당하려면 다음을 입력합니다.

> network_device_methods = device.methods()
>

특정 메서드를 호출하려면 다음 구문을 사용합니다.

instance_object.method_name(
  parameter=value,
  ...)

instance_object 를 사용할 인스턴스 오브젝트의 이름으로, method_name 을 호출할 메서드의 이름으로, 매개 변수를 설정할 매개변수 의 이름으로, value 를 이 매개 변수의 값으로 바꿉니다. 메서드 반환은 반환 값, 반환 값 매개 변수 및 오류 문자열로 구성 된 3 개의item tuple을 반환 합니다.Services return a three-item tuple consisting of a return value, return value parameters, and an error string.

중요

LMIInstance 오브젝트는 콘텐츠(properties, methods, 한정자 등)를 자동으로 새로 고침 하지 않습니다. 이렇게 하려면 아래에 설명된 대로 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에서 해당 Job 객체가 "프로어링된" 상태로 변경될 때까지 기다린 다음 이 작업의 반환 매개변수를 반환합니다. 지정된 메서드가 다음 클래스 중 하나의 개체를 반환하면 LMIShell은 동기 메서드 호출을 수행할 수 있습니다.

  • LMI_StorageJob
  • LMI_SoftwareInstallationJob
  • LMI_NetworkJob

LMIShell은 먼저 waiting 메서드로 표시를 사용하려고 합니다. 실패하면 대신 폴링 방법을 사용합니다.

동기 메서드 호출을 수행하려면 다음 구문을 사용합니다.

instance_object.Syncmethod_name(
  parameter=value,
  ...)

instance_object 를 사용할 인스턴스 오브젝트의 이름으로, method_name 을 호출할 메서드의 이름으로, 매개 변수를 설정할 매개변수 의 이름으로, value 를 이 매개 변수의 값으로 바꿉니다. 모든 동기 메서드에는 이름에 Sync 접두사가 있고 작업의 반환 값, 작업의 반환 값 매개 변수, 작업의 반환 값 매개 변수 및 작업의 오류 문자열로 구성된 3-item tuple을 반환합니다.

LMIShell은 폴링 방법만 사용하도록 할 수도 있습니다. 이렇게 하려면 다음과 같이 PreferPolling 매개변수를 지정합니다.

instance_object.Syncmethod_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. Constant 값에 액세스

예 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'
>
인스턴스 오브젝트 새로 고침

CIMOM 측에서 CIM 개체를 나타내는 LMIShell에서 사용하는 로컬 개체는 LMIShell으로 작업하는 동안 이러한 개체가 변경되는 경우 오래된 개체를 가져올 수 있습니다. 특정 인스턴스 개체의 속성 및 메서드를 업데이트하려면 다음과 같이 refresh() 메서드를 사용합니다.

instance_object.refresh()

instance_object 를 새로 고칠 오브젝트의 이름으로 교체합니다. 이 메서드는 반환 값, 반환 값 매개 변수 및 오류 문자열로 구성 된 3 개의item tuple을 반환 합니다.This method returns a three-item tuple consisting of a return value, return value parameter, and an error string.

예 22.25. 인스턴스 오브젝트 새로 고침

예 22.14. “인스턴스 액세스” 에서 생성된 장치 인스턴스 오브젝트의 속성 및 메서드를 업데이트하려면 대화형 프롬프트에서 다음을 입력합니다.

> 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. “인스턴스 액세스” 에서 생성된 장치 인스턴스 오브젝트의 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)

기준을 키-값 쌍으로 구성된 사전으로 교체합니다. 여기서 키는 키 속성과 이러한 키 속성의 필수 값을 나타냅니다.

예 22.27. 인스턴스 이름 액세스

예 22.7. “클래스 오브젝트 액세스” 에서 만든 cls 클래스 오브젝트의 첫 번째 인스턴스 이름을 찾아 eth0 과 동일한 변수 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 네임스페이스 오브젝트를 사용하고 관리 시스템에서 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()

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. 관련 오브젝트 작업

공통 정보 모델은 관리되는 개체 간의 연관 관계를 정의합니다.

Associated Instances에 액세스

특정 인스턴스 개체와 연결된 모든 개체 목록을 가져오려면 다음과 같이 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 - 반환된 각 오브젝트는 이 클래스의 인스턴스 또는 해당 하위 클래스 중 하나를 통해 소스 오브젝트와 연결되어야 합니다. 기본값은 None 입니다.
  • ResultClass - 각각의 반환된 오브젝트는 이 클래스의 인스턴스이거나 하위 클래스 중 하나여야 합니다. 그렇지 않으면 이 클래스 또는 해당 하위 클래스 중 하나여야 합니다. 기본값은 None 입니다.
  • 역할 - 반환된 각 오브젝트는 소스 오브젝트가 지정된 역할을 수행하는 연결을 통해 소스 오브젝트와 연결되어 있어야 합니다. 연결 클래스의 속성 이름은 소스 오브젝트를 참조하는 이 매개변수 값과 일치해야 합니다. 기본값은 None 입니다.
  • ResultRole - 반환된 각 오브젝트는 반환된 오브젝트가 지정된 역할을 수행하는 연관을 통해 소스 오브젝트와 연결되어야 합니다. 반환된 오브젝트를 참조하는 연관 클래스의 속성 이름은 이 매개 변수의 값과 일치해야 합니다. 기본값은 None 입니다.

나머지 매개변수는 다음을 참조합니다.

  • IncludeQualifiers - 각 오브젝트의 모든 한정자(오브젝트 및 반환된 속성에 대한 포함)가 응답에서 QUALIFIER 요소로 포함되어야 하는지를 나타내는 부울입니다. 기본값은 False 입니다.
  • IncludeClassOrigin - 반환된 각 개체의 모든 적절한 요소에 CLASSORIGIN 특성이 있는지 여부를 나타내는 부울입니다. 기본값은 False 입니다.
  • PropertyList - 이 목록의 멤버는 하나 이상의 속성 이름을 정의합니다. 반환된 오브젝트에는 이 목록에서 누락된 속성에 대한 요소가 포함되지 않습니다. PropertyList 가 빈 목록이면 반환된 개체에 속성이 포함되지 않습니다. None 이면 추가 필터링이 정의되지 않습니다. 기본값은 None 입니다.

예 22.33. Associated Instances에 액세스

LMI_StorageExtent 클래스는 시스템에서 사용 가능한 블록 장치를 나타냅니다. 예 22.5. “네임스페이스 오브젝트 액세스” 에 생성된 ns 네임스페이스 오브젝트를 사용하려면 /dev/ vda 라는 블록 장치에 대한 LMI_StorageExtent 클래스의 인스턴스를 생성하고 상호 작용 프롬프트에 다음을 입력합니다.

> 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 - 반환된 각 이름은이 클래스의 인스턴스 또는 하위 클래스 중 하나를 통해 소스 개체와 연결되어야 하는 개체를 식별합니다.AssocClass - Each returned name identifies an object that must be associated with the source object through an instance of this class or one of its subclasses. 기본값은 None 입니다.
  • ResultClass - 각 반환된 이름은 이 클래스의 인스턴스이거나 하위 클래스 중 하나여야 하는 개체를 식별하거나 이 클래스 또는 해당 하위 클래스 중 하나여야 합니다. 기본값은 None 입니다.
  • 역할 - 반환된 각 이름은 소스 개체가 지정된 역할을 수행하는 연결을 통해 소스 개체와 연결되어야 하는 개체를 식별합니다. Role - Each returned name identifies an object that must be associated with the source object through an association in which the source object plays the specified role. 연결 클래스의 속성 이름은 소스 오브젝트를 참조하는 이 매개변수 값과 일치해야 합니다. 기본값은 None 입니다.
  • ResultRole - 반환된 각 이름은 반환된 명명된 개체가 지정된 역할을 수행하는 연결을 통해 소스 오브젝트와 연결해야 하는 개체를 식별합니다. 반환된 오브젝트를 참조하는 연관 클래스의 속성 이름은 이 매개 변수의 값과 일치해야 합니다. 기본값은 None 입니다.

예 22.34. 관련 인스턴스 이름 액세스

예 22.33. “Associated Instances에 액세스” 에서 생성된 vda 인스턴스 오브젝트를 사용하려면 연결된 인스턴스 이름 목록을 가져오고 vda_partitions 라는 변수에 할당합니다.

> vda_partitions = vda.associator_names(ResultClass="LMI_DiskPartition")
>

22.4.8. associate 개체 작업

공통 정보 모델은 관리되는 개체 간의 연관 관계를 정의합니다. association 개체는 다른 두 개체 간의 관계를 정의합니다.

associate 인스턴스에 액세스

특정 대상 개체를 참조하는 연관 오브젝트 목록을 가져오려면 다음과 같이 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 - 각각의 반환된 오브젝트는 이 클래스의 인스턴스이거나 하위 클래스 중 하나여야 합니다. 그렇지 않으면 이 클래스 또는 해당 하위 클래스 중 하나여야 합니다. 기본값은 None 입니다.
  • role - 반환된 각 오브젝트는 이 매개변수의 값과 일치하는 이름이 있는 속성을 통해 대상 오브젝트를 참조해야 합니다. 기본값은 None 입니다.

나머지 매개변수는 다음을 참조합니다.

  • IncludeQualifiers - 각 오브젝트(오브젝트 및 반환된 속성에 대한 규정 준수 포함)가 응답에 QUALIFIER 요소로 포함되어야 하는지 여부를 나타내는 부울입니다. 기본값은 False 입니다.
  • IncludeClassOrigin - 반환된 각 개체의 모든 적절한 요소에 CLASSORIGIN 특성이 있는지 여부를 나타내는 부울입니다. 기본값은 False 입니다.
  • PropertyList - 이 목록의 멤버는 하나 이상의 속성 이름을 정의합니다. 반환된 오브젝트에는 이 목록에서 누락된 속성에 대한 요소가 포함되지 않습니다. PropertyList 가 빈 목록이면 반환된 개체에 속성이 포함되지 않습니다. None 이면 추가 필터링이 정의되지 않습니다. 기본값은 None 입니다.

예 22.35. associate 인스턴스에 액세스

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
>
associate 인스턴스 이름 액세스

특정 인스턴스 개체의 연결 인스턴스 이름 목록을 가져오려면 다음과 같이 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 - 반환된 각 개체 이름은 이 클래스의 인스턴스 또는 해당 하위 클래스 중 하나 또는 해당 하위 클래스 중 하나를 식별합니다. 기본값은 None 입니다.
  • role - 반환된 각 오브젝트는 이 매개변수의 값과 일치하는 이름이 있는 속성을 통해 대상 인스턴스를 참조하는 오브젝트를 식별합니다. 기본값은 None 입니다.

예 22.36. associate 인스턴스 이름 액세스

예 22.35. “associate 인스턴스에 액세스” 에 생성된 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. 인디케이션 작업

표시는 데이터의 특정 변경에 대한 응답으로 발생하는 특정 이벤트에 대한 반응입니다. LMIShell은 이러한 이벤트 응답을 수신하기 위해 표시를 구독할 수 있습니다.

구독 취소

표시를 구독하려면 다음과 같이 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 을 표시를 전달하려는 시스템의 호스트 이름으로 바꿉니다.

기본적으로 LMIShell 인터프리터에서 생성한 모든 서브스크립션은 인터프리터가 종료될 때 자동으로 삭제됩니다. 이 동작을 변경하려면 Permanent=True 키워드 매개변수를 subscribe_indication() 메서드 호출에 전달합니다. 이렇게 하면 LMIShell에서 서브스크립션을 삭제하지 못합니다.

예 22.37. 구독 취소

예 22.1. “원격 CIMOM에 연결” 에서 생성된 c 연결 오브젝트를 사용하고 cpu 라는 표시를 구독하려면 대화형 프롬프트에서 다음을 입력합니다.

> 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='')
>
구독 취소 나열

구독한 표시를 모두 나열하려면 다음과 같이 print_subscribed_indications() 메서드를 사용합니다.

connection_object.print_subscribed_indications()

connection_object 를 검사할 연결 오브젝트의 이름으로 바꿉니다. 이 메서드는 서브스크립션된 표시를 표준 출력에 출력합니다.

구독한 표시 목록을 가져오려면 subscribed_indications() 메서드를 사용합니다.

connection_object.subscribed_indications()

이 메서드는 문자열 목록을 반환합니다.

예 22.38. 구독 취소 나열

예 22.1. “원격 CIMOM에 연결” 에서 생성된 c 연결 오브젝트를 검사하고 모든 구독 표시를 나열하려면 대화형 프롬프트에서 다음을 입력합니다.

> c.print_subscribed_indications()
>

표시라는 변수에 이러한 표시 목록을 할당하려면 다음을 입력합니다.

> indications = c.subscribed_indications()
>
Indications에서 구독 해제

기본적으로 LMIShell 인터프리터에서 생성한 모든 서브스크립션은 인터프리터가 종료될 때 자동으로 삭제됩니다. 개별 서브스크립션을 더 빨리 삭제하려면 subscription _indication() 방법을 다음과 같이 사용하십시오.

connection_object.unsubscribe_indication(indication_name)

connection_object 를 연결 개체의 이름으로 바꾸고 indication_name 을 삭제할 표시의 이름으로 바꿉니다.

모든 서브스크립션을 삭제하려면subscription _all_indications() 방법을 사용하십시오.

connection_object.unsubscribe_all_indications()

예 22.39. Indications에서 구독 해제

예 22.1. “원격 CIMOM에 연결” 에서 생성된 c 연결 오브젝트를 사용하고 예 22.37. “구독 취소” 에서 생성된 표시를 구독 취소하려면 대화형 프롬프트에서 다음을 입력합니다.

> c.unsubscribe_indication('cpu')
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='')
>
Indication Handler 구현

subscribe_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 오브젝트입니다. 다른 매개 변수는 사용자별입니다. 이러한 인수는 리스너에 처리기를 추가할 때 지정해야 합니다.

위의 예에서 add_handler() 메서드 호출은 8개의 "X" 문자가 있는 특수 문자열을 사용합니다. 이러한 문자는 가능한 처리기 이름 충돌을 피하기 위해 리스너에 의해 생성되는 임의의 문자열로 교체됩니다. 임의의 문자열을 사용하려면 표시 리스너를 먼저 시작한 다음 처리기 오브젝트의 Destination 속성에 schema://host_name/random_string 값이 포함되도록 표시를 구독하십시오.

예 22.40. Indication Handler 구현

다음 스크립트는 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 공급자에 대한 여러 예제를 제공합니다. 이 섹션의 모든 예제에서는 다음 두 변수 정의를 사용합니다.

c = connect("host_name", "user_name", "password")
ns = c.root.cimv2

host_name 을 관리 시스템의 호스트 이름으로 바꾸고 user_name 을 시스템에서 실행되는 OpenPegasus CIMOM에 연결할 수 있는 사용자 이름으로, 암호를 사용자의 암호로 바꿉니다.

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_IPI_IP NetworkConnection 클래스와 연결된 LMI_IP ProtocolEndpoint 클래스를 사용합니다.

기본 게이트웨이를 표시하려면 다음 코드 조각을 사용합니다.

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

기본 게이트웨이는 AccessContext 속성이 DefaultGatewayLMI_NetworkRemoteServiceAccessPoint 인스턴스로 표시됩니다.

DNS 서버 목록을 가져오려면 다음과 같이 오브젝트 모델을 통과해야 합니다.

  1. LMI_NetworkSAPSAPDependency 를 사용하여 지정된 LMI_IPNetworkConnection 과 연결된 LMI_IPProtocolEndpoint 인스턴스를 가져옵니다.
  2. LMI_DNSProtocolEndpoint 인스턴스에 대해 동일한 연결을 사용합니다.

LMI_NetworkRemoteServiceAccessPoint 인스턴스는 LMI_NetworkRemoteAccessAvailableTo RegistryLogin을 통해 연결된 DNS 서버와 동일한 AccessContext 속성을 사용하여 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 및 stateless 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 Capabilities .LMI_IPNetworkConnectionCapabilities 를 통해 LMI_IPNetworkConnectionCapabilities.NET Framework 인스턴스에 LMI_CreateIP Setting() 메서드를 호출하여 새 설정을 생성합니다. 또한 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 공급자를 사용하여 볼륨 그룹을 생성하고, 논리 볼륨을 생성하고, 파일 시스템을 빌드하며, 파일 시스템을 마운트하며, 시스템에 알려진 블록 장치를 나열하는 방법을 보여줍니다.

cns 변수 외에도 다음 예제에는 다음 변수 정의를 사용합니다.

MEGABYTE = 1024*1024
storage_service = ns.LMI_StorageConfigurationService.first_instance()
filesystem_service = ns.LMI_FileSystemConfigurationService.first_instance()

예 22.47. 볼륨 그룹 생성

/dev/myGroup/ 에 있는 새 볼륨 그룹을 만들려면 3개의 멤버와 기본 확장 영역 크기가 4MB인 경우 다음 코드 조각을 사용하십시오.

# 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. 논리 볼륨 생성

크기가 100MB인 두 개의 논리 볼륨을 생성하려면 다음 코드 스니펫을 사용하십시오.

# 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. “논리 볼륨 생성” 의 논리 볼륨 lvext3 파일 시스템을 생성하려면 다음 코드 조각을 사용하십시오.

(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 정보 보기

제조업체 또는 해당 모델과 같은 머신에 대한 기본 정보를 표시하려면 다음 코드 조각을 사용합니다.

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
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.