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_name 을 localhost
,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_name 이 LMIConnection
객체이거나 그렇지 않으면 False
를 반환합니다.
예 22.3. CIMOM에 대한 연결 확인
예 22.1. “원격 CIMOM에 연결” 에서 만든 c
변수에 LMIConnection
개체가 포함되어 있는지 확인하려면 대화형 프롬프트에서 다음을 입력합니다.
> isinstance(c, LMIConnection)
True
>
또는 c
가 None
이 아닌지 확인할 수 있습니다.
> 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
라는 사용자에 대한 이 두 클래스의 인스턴스를 생성하고 해당 클래스를 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", ...) >
개별 인스턴스 삭제
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.Sync
method_name(
parameter=value,
...)
instance_object 를 사용할 인스턴스 오브젝트의 이름으로, method_name 을 호출할 메서드의 이름으로, 매개 변수를 설정할 매개변수 의 이름으로, value 를 이 매개 변수의 값으로 바꿉니다. 모든 동기 메서드에는 이름에 Sync
접두사가 있고 작업의 반환 값, 작업의 반환 값 매개 변수, 작업의 반환 값 매개 변수 및 작업의 오류 문자열로 구성된 3-item tuple을 반환합니다.
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. 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
속성이 DefaultGateway
인 LMI_NetworkRemoteServiceAccessPoint
인스턴스로 표시됩니다.
DNS 서버 목록을 가져오려면 다음과 같이 오브젝트 모델을 통과해야 합니다.
-
LMI_NetworkSAPSAPDependency
를 사용하여 지정된LMI_IPNetworkConnection
과 연결된LMI_IPProtocolEndpoint
인스턴스를 가져옵니다. -
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 공급자를 사용하여 볼륨 그룹을 생성하고, 논리 볼륨을 생성하고, 파일 시스템을 빌드하며, 파일 시스템을 마운트하며, 시스템에 알려진 블록 장치를 나열하는 방법을 보여줍니다.
c
및 ns
변수 외에도 다음 예제에는 다음 변수 정의를 사용합니다.
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. “논리 볼륨 생성” 의 논리 볼륨 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 정보 보기
제조업체 또는 해당 모델과 같은 머신에 대한 기본 정보를 표시하려면 다음 코드 조각을 사용합니다.
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