Java SDK 가이드

Red Hat Virtualization 4.4

Red Hat Virtualization Java SDK 사용

초록

이 가이드에서는 Red Hat Virtualization Java 소프트웨어 개발 키트 버전 4를 설치하고 사용하는 방법을 설명합니다.

1장. 개요

Java 소프트웨어 개발 키트 버전 4는 Java 기반 프로젝트에서 Red Hat Virtualization Manager와 상호 작용할 수 있는 클래스 컬렉션입니다. 이러한 클래스를 다운로드하여 프로젝트에 추가하면 관리 작업의 높은 수준의 자동화를 위한 다양한 기능에 액세스할 수 있습니다.

참고

SDK의 버전 3은 더 이상 지원되지 않습니다. 자세한 내용은 이 가이드의 RHV 4.3 버전을 참조하십시오.

1.1. 사전 요구 사항

Java 소프트웨어 개발 키트를 설치하려면 다음이 있어야 합니다.

  • Red Hat Enterprise Linux 8이 설치된 시스템입니다. Server 및 Workstation 변형이 모두 지원됩니다.
  • Red Hat Virtualization 인타이틀먼트에 대한 서브스크립션입니다.
중요

소프트웨어 개발 키트는 Red Hat Virtualization REST API를 위한 인터페이스입니다. Red Hat Virtualization 환경의 버전에 해당하는 소프트웨어 개발 키트 버전을 사용합니다. 예를 들어 Red Hat Virtualization 4.3을 사용하는 경우 V4 Java 소프트웨어 개발 키트를 사용하십시오.

1.2. Java 소프트웨어 개발 키트 설치

Java 소프트웨어 개발 키트 및 관련 문서를 설치합니다.

Java 소프트웨어 개발 키트 설치

  1. 리포지토리를 활성화합니다.

    # subscription-manager repos \
        --enable=rhel-8-for-x86_64-baseos-rpms \
        --enable=rhel-8-for-x86_64-appstream-rpms \
        --enable=rhv-4.4-manager-for-rhel-8-x86_64-rpms\
        --enable=jb-eap-7.4-for-rhel-8-x86_64-rpms
  2. pki-deps 모듈을 활성화합니다.

    # dnf module -y enable pki-deps
  3. Java SDK V4 필수 패키지를 설치합니다.

    # dnf install java-ovirt-engine-sdk4

    V4 Java 소프트웨어 개발 키트 및 관련 문서는 /usr/share/java/java-ovirt-engine-sdk4 디렉터리에 다운로드하여 Java 프로젝트에 추가할 수 있습니다.

1.3. 종속 항목

Java 애플리케이션에서 Java 소프트웨어 개발 키트를 사용하려면 다음 JAR 파일을 해당 애플리케이션의 클래스 경로에 추가해야 합니다.

  • commons-beanutils.jar
  • commons-codec.jar
  • httpclient.jar
  • httpcore.jar
  • jakarta-commons-logging.jar
  • log4j.jar

이러한 JAR 파일을 제공하는 패키지는 ovirt-engine-sdk-java 패키지에 종속 항목으로 설치됩니다. 기본적으로 Red Hat Enterprise Linux 6 및 Red Hat Enterprise Linux 7 시스템의 /usr/share/java 디렉토리에서 사용할 수 있습니다.

1.4. SSL 구성

Red Hat Virtualization Manager Java SDK는 JSSE(Java Secure Socket Extension)를 사용하여 SSL(Secure Socket Layer Security) 및 IETF TLS(Transport Layer Security) 프로토콜을 통한 HTTP에 대한 완전한 지원을 제공합니다. JSSE는 Java 2 플랫폼에 1.4 버전으로 통합되었으며 즉시 Java SDK와 함께 작동합니다. 이전 Java 2 버전에서 JSSE를 수동으로 설치 및 구성해야 합니다.

1.4.1. SSL 구성

다음 절차에서는 Java SDK를 사용하여 SSL을 구성하는 방법을 간략하게 설명합니다.

SSL 구성

  1. Red Hat Virtualization Manager에서 사용하는 인증서를 다운로드합니다.

    참고

    기본적으로 Red Hat Virtualization Manager에서 사용하는 인증서의 위치는 /etc/pki/ovirt-engine/ca.pem 에 있습니다.

  2. 신뢰할 수 있는 저장소를 생성합니다.

    $ keytool -import -alias "server.crt truststore" -file ca.crt -keystore server.truststore
  3. Api 또는 Connection 오브젝트의 인스턴스를 구성할 때 trustStoreFiletrustStorePassword 인수를 지정합니다.

    myBuilder.trustStoreFile("/home/username/server.truststore");
    myBuilder.trustStorePassword("p@ssw0rd");
    참고

    연결을 생성할 때 trustStoreFile 옵션을 지정하지 않으면 Java SDK는 시스템 변수 javax.net.ssl.trustStore 에서 지정한 기본 truststore를 사용하려고 합니다. 이 시스템 변수가 truststore를 지정하지 않으면 Java SDK는 $JAVA_HOME/lib/security/jssecacerts 또는 $JAVA_HOME/lib/security/cacerts 에 지정된 truststore를 사용하려고 합니다.

1.4.2. 호스트 확인

기본적으로 Red Hat Virtualization Manager에 대한 연결을 열려고 할 때 인증서의 호스트 이름의 ID가 확인됩니다. Connection 클래스의 인스턴스를 구성할 때 다음 인수를 전달하여 확인을 비활성화할 수 있습니다.

myBuilder.insecure(true);
중요

보안상의 이유로 인해 프로덕션 시스템에는 이 방법을 사용해서는 안 되며, 심각한 결정이며 호스트 ID를 확인하지 않는 보안 영향을 인식하지 못합니다.

2장. 소프트웨어 개발 키트 사용

이 장에서는 Java 소프트웨어 개발 키트 사용 방법에 대한 몇 가지 예를 간략하게 설명합니다. 이 장의 모든 예제는 별도로 명시하지 않는 한 소프트웨어 개발 키트의 버전 3을 사용합니다.

2.1. 버전 4에서 Red Hat Virtualization Manager에 연결

Java 소프트웨어 개발 키트의 V4에서 Connection 클래스는 Red Hat Virtualization 환경에서 개체에 연결하고 조작하는 데 사용하는 기본 클래스입니다. 이 클래스의 인스턴스를 선언하려면 ConnectionBuilder 클래스 인스턴스를 선언하고, 빌더 메서드를 사용하여 필요한 인수를 이 인스턴스에 전달한 다음, 인스턴스에서 빌드 메서드를 호출해야 합니다. build 메서드는 변수에 할당할 수 있는 Connection 클래스의 인스턴스를 반환하고 후속 작업을 수행하는 데 사용합니다.

다음은 소프트웨어 개발 키트 버전 4를 사용하여 Red Hat Virtualization 환경과의 연결을 생성하는 간단한 Java SE 프로그램의 예입니다.

예 2.1. Red Hat Virtualization Manager에 연결

package rhevm;

import org.ovirt.engine.sdk4.Connection;
import org.ovirt.engine.sdk4.ConnectionBuilder;

public class rhevm {

    public static void main(String[] args) {

            ConnectionBuilder myBuilder = ConnectionBuilder.connection()

            .url("https://rhevm.example.com/ovirt-engine/api")
            .user("admin@internal")
            .password("p@ssw0rd")
            .trustStoreFile("/home/username/server.truststore")
            .trustStorePassword("p@ssw0rd");

        try (Connection conn = myBuilder.build()) {

            // Requests

        } catch (Exception e) {

            // Error handling

        }
    }
}

이 예제에서는 기본 인증을 사용하여 연결을 생성하지만 다른 방법도 사용할 수 있습니다. ConnectionBuilder 클래스의 인스턴스에 전달할 수 있는 키 인수 목록은 부록 A. ConnectionBuilder 방법 을 참조하십시오.

2.2. 엔터티 나열

다음 예제에서는 Red Hat Virtualization Manager의 엔터티를 나열하는 방법을 간략하게 설명합니다. 이 예에서는 목록에 있는 엔터티가 Api 클래스의 getVMs() 메서드를 사용하여 나열되는 가상 머신입니다.

엔터티 나열

  1. 나열 할 엔터티 유형 목록을 선언하고 해당 메서드를 사용하여 엔터티 목록을 가져옵니다.

    List<VM> vms = api.getVMs().list();

2.3. 리소스의 속성 수정

다음 예제에서는 리소스의 특성을 수정하는 방법을 간략하게 설명합니다. 이 예에서 수정할 속성은 'test'라는 이름의 가상 시스템에 대한 설명으로, 'java_sdk'로 변경됩니다.

리소스의 속성 수정

  1. 속성을 수정할 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 특성의 새 값을 설정합니다.

    vm.setDescription("java_sdk");
  3. 변경 사항을 적용하도록 가상 머신을 업데이트합니다.

    VM newVM = vm.update();

2.4. 리소스 가져오기

Java Software Development Kit에서 리소스는 name, UUID 라는 두 가지 특성을 통해 참조할 수 있습니다. 둘 다 지정된 속성이 있는 경우 해당 오브젝트가 있는 개체를 반환합니다.

name 특성 값을 사용하여 리소스를 가져오려면 다음을 수행합니다.

VM vm = api.getVMs().get("test");

UUID 특성 값을 사용하여 리소스를 가져오려면 다음을 수행합니다.

VM vm = api.getVMs().get(UUID.fromString("5a89a1d2-32be-33f7-a0d1-f8b5bc974ff6"));

2.5. 리소스 추가

다음 예제에서는 Red Hat Virtualization Manager에 리소스를 추가하는 두 가지 방법을 간략하게 설명합니다. 이러한 예에서 추가할 리소스는 가상 머신입니다.

예시 1

이 예제에서는 추가할 새 가상 머신을 나타내기 위해 VM 클래스의 인스턴스를 선언합니다. 다음으로 해당 가상 머신의 속성은 기본 값으로 설정됩니다. 마지막으로 새 가상 머신이 Manager에 추가됩니다.

org.ovirt.engine.sdk.entities.VM vmParams = new org.ovirt.engine.sdk.entities.VM();

vmParams.setName("myVm");
vmParams.setCluster(api.getClusters().get("myCluster"));
vmParams.setTemplate(api.getTemplates().get("myTemplate"));
...
VM vm = api.getVMs().add(vmParams);

예시 2

이 예에서는 VM 클래스의 인스턴스가 Example 1과 동일한 방식으로 선언됩니다. 그러나 Manager에서 기존 개체를 참조하는 데 get 메서드를 사용하는 대신 해당 특성의 인스턴스를 선언하여 각 특성을 참조합니다. 마지막으로 새 가상 머신이 Manager에 추가됩니다.

org.ovirt.engine.sdk.entities.VM vmParams = new org.ovirt.engine.sdk.entities.VM();

vmParams.setName("myVm");
org.ovirt.engine.sdk.entities.Cluster clusterParam = new Cluster();
clusterParam.setName("myCluster");
vmParams.setCluster(clusterParam);
org.ovirt.engine.sdk.entities.Template templateParam = new Template();
templateParam.setName("myTemplate");
vmParams.setTemplate(templateParam);
...
VM vm = api.getVMs().add(vmParams);

2.6. 리소스에 대한 작업 수행

다음 예제에서는 리소스에서 작업을 수행하는 방법을 간략하게 설명합니다. 이 예에서는 'test'라는 이름의 가상 머신이 시작됩니다.

리소스에서 작업 수행

  1. 리소스의 인스턴스를 선언합니다.

     VM vm = api.getVMs().get("test");
  2. 리소스에 전송할 action 매개변수를 선언합니다.

    Action actionParam = new Action();
    org.ovirt.engine.sdk.entities.VM vmParam = new org.ovirt.engine.sdk.entities.VM();
    actionParam.setVm(vmParam);
  3. 작업을 수행합니다.

    Action res = vm.start(actionParam);

    또는 내부 방법으로 작업을 수행할 수 있습니다.

    Action res = vm.start(new Action()
    {
        {
            setVm(new org.ovirt.engine.sdk.entities.VM());
        }
    });

2.7. Sub-Resources 나열

다음 예제에서는 리소스의 하위 리소스를 나열하는 방법을 간략하게 설명합니다. 이 예에서는 'test'라는 이름의 가상 시스템의 하위 리소스가 나열됩니다.

Sub-Resources 나열

  1. 하위 리소스를 나열할 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 하위 리소스를 나열합니다.

    List<VMDisk>; disks = vm.getDisks().list();

    하위 리소스 가져오기

다음 예제에서는 리소스의 하위 리소스를 참조하는 방법을 간략하게 설명합니다. 이 예에서는 'test'라는 이름의 가상 머신에 속하는 'my disk'라는 이름의 디스크를 참조합니다.

리소스의 하위 리소스 가져오기

  1. 하위 리소스를 참조할 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 참조할 하위 리소스의 인스턴스를 선언합니다.

    VMDisk disk = vm.getDisks().get("my disk");

2.8. 리소스에 하위 리소스 추가

다음 예제에서는 리소스에 하위 리소스를 추가하는 방법을 간략하게 설명합니다. 이 예에서는 크기가 '1073741824L', 인터페이스 'virtio' 및 'cow' 형식의 새 디스크가 'test'라는 이름의 가상 머신에 추가됩니다.

리소스에 하위 리소스 추가Adding a Sub-Resource to a Resource

  1. 하위 리소스를 추가할 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 리소스 속성을 정의하는 매개변수를 생성합니다.

    Disk diskParam = new Disk();
    diskParam.setProvisionedSize(1073741824L);
    diskParam.setInterface("virtio");
    diskParam.setFormat("cow");
  3. 하위 리소스를 추가합니다.

    Disk disk = vm.getDisks().add(diskParam);

2.9. Sub-Resources 수정

다음 예제에서는 하위 리소스를 수정하는 방법을 간략하게 설명합니다. 이 예에서 이름이 'test'인 가상 머신에 'test_Disk1'이라는 이름의 디스크 이름이 'test_Disk1_updated'로 변경됩니다.

Sub-Resource 업데이트

  1. 하위 리소스를 수정할 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 수정할 하위 리소스의 인스턴스를 선언합니다.

    VMDisk disk = vm.getDisks().get("test_Disk1");
  3. 특성의 새 값을 설정합니다.

    disk.setAlias("test_Disk1_updated");
  4. 하위 리소스를 업데이트합니다.

    VMDisk updateDisk = disk.update();

2.10. Sub-Resources에서 작업 수행

다음 예제에서는 하위 리소스에서 작업을 수행하는 방법을 간략하게 설명합니다. 이 예에서는 'test'라는 이름이 'test'인 가상 머신에 'test_Disk1'이라는 이름의 디스크가 활성화됩니다.

하위 리소스에서 작업 수행

  1. 작업을 수행할 하위 리소스가 포함된 리소스의 인스턴스를 선언합니다.

    VM vm = api.getVMs().get("test");
  2. 하위 리소스의 인스턴스를 선언합니다.

    VMDisk disk = vm.getDisks().get("test_Disk1");
  3. 하위 리소스로 전송할 action 매개변수를 선언합니다.

    Action actionParam = new Action();
  4. 작업을 수행합니다.

    Action result = disk.activate(actionParam);

부록 A. ConnectionBuilder 방법

다음 표에서는 Java 소프트웨어 개발 키트의 V4에서 사용되는 ConnectionBuilder 클래스에서 사용할 수 있는 주요 방법을 간략하게 설명합니다.

표 A.1. ConnectionBuilder 방법

방법인수 유형설명

user

문자열

Manager에 연결할 사용자의 이름입니다. 사용자 이름과 도메인(예: admin@internal )을 모두 지정해야 합니다. 이 방법은 암호 방법과 함께 사용해야 합니다.

암호

문자열

Manager에 연결할 사용자의 암호입니다.

compress

부울

Manager가 호스팅되어야 하는 서버의 응답이 압축되어야 하는지 여부를 지정합니다. 이 옵션은 기본적으로 비활성화되어 있으므로 이 방법은 이 옵션을 활성화하는 데만 필요합니다.

timeout

정수

요청에 대한 응답이 있을 때까지 대기하는 시간 초과(초)입니다. 요청이 이 값보다 더 오래 걸리는 경우 요청이 취소되고 예외가 발생합니다. 이 인수는 선택 사항입니다.

ssoUrl

문자열

Manager가 호스팅되는 서버의 기본 URL입니다. 예를 들어 암호 인증은 https://server.example.com/ovirt-engine/sso/oauth/token?\grant_type=password&scope=ovirt-app-api 입니다.

ssoRevokeUrl

문자열

SSO에서 서비스를 취소하는 기본 URL입니다. 이 옵션은 외부 인증 서비스를 사용하는 경우에만 지정해야 합니다. 기본적으로 이 URL은 URL 옵션 값에서 자동으로 계산되므로 SSO 토큰 취소는 엔진의 일부인 SSO 서비스를 사용하여 수행됩니다.

ssoTokenName

문자열

SSO 서버에서 반환된 JSON SSO 응답의 토큰 이름입니다. 기본적으로 이 값은 access_token 입니다.

insecure

부울

Manager가 호스팅되는 서버에서 제공하는 SSL 인증서에서 호스트 이름 확인을 활성화하거나 비활성화합니다. 기본적으로 호스트 이름의 ID가 확인되고 호스트 이름이 올바르지 않은 경우 연결이 거부되므로 이 옵션을 비활성화하는 데만 이 방법이 필요합니다.

trustStoreFile

문자열

Manager가 호스팅되는 서버에서 제공하는 인증서를 확인하는 데 사용되는 CA 인증서가 포함된 파일의 위치를 지정합니다. 이 방법은 trustStorePassword 방법과 함께 사용해야 합니다.

trustStorePassword

문자열

trustStorePath 메서드에 지정된 키 저장소 파일에 액세스하는 데 사용되는 암호입니다.