Compute API 서버 개념 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
52번째 줄: 52번째 줄:


* <code>ERROR</code> (오류 발생 시)
* <code>ERROR</code> (오류 발생 시)
:서버를 생성할 때, 이 작업은 비동기적으로 새로운 서버를 프로비저닝합니다. 이 작업의 진행 상황은 요청된 이미지의 위치, 네트워크 I/O, 호스트 로드, 선택된 플레이버 등 여러 요인에 따라 달라집니다. 요청의 진행 상황은 /servers/{server_id}에 대해 '''GET''' 요청을 수행하여 진행률 속성(0%에서 100% 완료)을 확인할 수 있습니다. 새로 생성된 서버에 대한 전체 URL은 <code>Location</code> 헤더를 통해 반환되며, 서버 표현의 <code>self</code>와 <code>bookmark</code> 링크로 사용할 수 있습니다. 서버를 생성할 때 서버 ID, 링크, 관리 비밀번호만 반환되는 것이 보장됩니다. 추가 속성은 서버에 대한 후속 '''GET''' 작업을 수행하여 조회할 수 있습니다.
:서버를 생성할 때, 이 작업은 비동기적으로 새로운 서버를 프로비저닝합니다. 이 작업의 진행 상황은 요청된 이미지의 위치, 네트워크 I/O, 호스트 로드, 선택된 플레이버 등 여러 요인에 따라 달라집니다. 요청의 진행 상황은 /servers/{server_id}에 대해 '''GET''' 요청을 수행하여 진행률 속성(0%에서 100% 완료)을 확인할 수 있습니다. 새로 생성된 서버에 대한 전체 URL은 Location 헤더를 통해 반환되며, 서버 표현의 <code>self</code>와 <code>bookmark</code> 링크로 사용할 수 있습니다. 서버를 생성할 때 서버 ID, 링크, 관리 비밀번호만 반환되는 것이 보장됩니다. 추가 속성은 서버에 대한 후속 '''GET''' 작업을 수행하여 조회할 수 있습니다.


==서버 쿼리==
==서버 쿼리==
서버를 쿼리하는 데 두 가지 API가 있습니다: <code>GET /servers</code>와 <code>GET /servers/detail</code>. 이 두 API는 쿼리 옵션을 사용하여 쿼리 결과를 필터링하는 것을 지원합니다.
사용자 역할에 따라 사용할 수 있는 쿼리 옵션 세트가 다릅니다:
* 일반 사용자는 제한된 서버 속성 세트만 쿼리 옵션으로 사용할 수 있습니다. 지원되는 옵션은 다음과 같습니다:
** <code>changes-since</code>
** <code>flavor</code>
** <code>image</code>
** <code>ip</code>
** <code>ip6</code> (버전 2.5에서 새로 추가됨)
** <code>name</code>
** <code>not-tags</code> (버전 2.26에서 새로 추가됨)
** <code>not-tags-any</code> (버전 2.26에서 새로 추가됨)
** <code>reservation_id</code>
** <code>status</code>
** <code>tags</code> (버전 2.26에서 새로 추가됨)
** <code>tags-any</code> (버전 2.26에서 새로 추가됨)
** <code>changes-before</code> (버전 2.66에서 새로 추가됨)
** <code>locked</code> (버전 2.73에서 새로 추가됨)
** <code>availability_zone</code> (버전 2.83에서 새로 추가됨)
** <code>config_drive </code>(버전 2.83에서 새로 추가됨)
** <code>key_name</code> (버전 2.83에서 새로 추가됨)
** <code>created_at</code> (버전 2.83에서 새로 추가됨)
** <code>launched_at</code> (버전 2.83에서 새로 추가됨)
** <code>terminated_at</code> (버전 2.83에서 새로 추가됨)
** <code>power_state</code> (버전 2.83에서 새로 추가됨)
** <code>task_state</code> (버전 2.83에서 새로 추가됨)
** <code>vm_state</code> (버전 2.83에서 새로 추가됨)
** <code>progress</code> (버전 2.83에서 새로 추가됨)
** <code>user_id</code> (버전 2.83에서 새로 추가됨)
:기타 옵션은 nova에 의해 조용히 무시됩니다.
* 관리자의 경우 대부분의 서버 속성을 쿼리 옵션으로 사용할 수 있습니다. Ocata 릴리스 이전에는 서버의 데이터베이스 스키마에 있는 필드가 쿼리 옵션으로 노출되어 예상치 못한 API 변경을 초래할 수 있었습니다. Ocata 릴리스 이후로는 쿼리 옵션의 정의와 데이터베이스 스키마가 분리되었습니다. 이는 서버 API 응답에서 속성 명명과 쿼리 옵션 명명이 다른 이유이기도 합니다.
사전조건: 다음과 같은 정보가 있는 클라우드에 2개의 서버가 존재합니다:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            "OS-EXT-SRV-ATTR:host": "devstack1",
            ...
        },
        {
            "name": "t2",
            "OS-EXT-SRV-ATTR:host": "devstack2",
            ...
        }
    ]
}
</syntaxhighlight>
;<nowiki>예시: 관리자 전용 옵션이 있는 일반 사용자 쿼리(서버 조회)</nowiki>
비관리자 컨텍스트로 요청: <code>GET /servers/detail?host=devstack1</code>
{{NOTE}}
host 쿼리 매개변수는 관리자 사용자만 사용할 수 있으며, 비관리자 사용자가 지정한 경우 쿼리 매개변수가 무시됩니다. 따라서 이 예시에서는 devstack1과 devstack2의 서버가 모두 반환됩니다.
{{/NOTE}}
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            ...
        },
        {
            "name": "t2",
            ...
        }
    ]
}
</syntaxhighlight>
;<nowiki>예시: 관리자 전용 옵션이 있는 관리자 쿼리(서버 조회)</nowiki>
관리자 컨텍스트로 요청: <code>GET /servers/detail?host=devstack1</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            ...
        }
    ]
}
</syntaxhighlight>
특별한 쿼리 옵션도 있습니다:
* <code>changes-since</code>: 주어진 시간 이후에 업데이트된 서버를 반환합니다. 자세한 내용은: [[Compute API 효율적 폴링|효율적 폴링]]
* <code>changes-before</code>: 주어진 시간 이전에 업데이트된 서버를 반환합니다. 자세한 내용은: [[Compute API 효율적 폴링|효율적 폴링]]
* <code>deleted</code>: 삭제된 서버를 반환(또는 제외)합니다.
* <code>soft_deleted</code>: 'deleted'의 동작을 수정하여 vm_state가 SOFT_DELETED인 인스턴스를 포함하거나 제외합니다.
* <code>all_tenants</code>: 관리자가 모든 테넌트의 서버를 쿼리할 수 있게 하는 관리자 전용 옵션입니다.
;<nowiki>예시: 특별 키 changes-since 또는 changes-before가 있는 사용자 쿼리(서버 조회)</nowiki>
요청: <code>GET /servers/detail</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            "updated": "2015-12-15T15:55:52Z",
            ...
        },
        {
            "name": "t2",
            "updated": "2015-12-17T15:55:52Z",
            ...
        }
    ]
}
</syntaxhighlight>
요청: <code>GET /servers/detail?changes-since='2015-12-16T15:55:52Z'</code>
응답:
<syntaxhighlight lang='json'>
{
    {
        "name": "t2",
        "updated": "2015-12-17T15:55:52Z",
        ...
    }
}
</syntaxhighlight>
요청: <code>GET /servers/detail?changes-before='2015-12-16T15:55:52Z'</code>
응답:
<syntaxhighlight lang='json'>
{
    {
        "name": "t1",
        "updated": "2015-12-15T15:55:52Z",
        ...
    }
}
</syntaxhighlight>
요청: <code>GET /servers/detail?changes-since='2015-12-10T15:55:52Z'&changes-before='2015-12-28T15:55:52Z'</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            "updated": "2015-12-15T15:55:52Z",
            ...
        },
        {
            "name": "t2",
            "updated": "2015-12-17T15:55:52Z",
            ...
        }
    ]
}
</syntaxhighlight>
쿼리 옵션에는 두 가지 종류의 매칭이 있습니다: 정확한 매칭과 정규식 매칭.
;<nowiki>호스트로 정확한 매칭을 사용한 쿼리(서버 조회)</nowiki>
관리자 컨텍스트로 요청: <code>GET /servers/detail</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            "OS-EXT-SRV-ATTR:host": "devstack"
            ...
        },
        {
            "name": "t2",
            "OS-EXT-SRV-ATTR:host": "devstack1"
            ...
        }
    ]
}
</syntaxhighlight>
관리자 컨텍스트로 요청: <code>GET /servers/detail?host=devstack</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "t1",
            "OS-EXT-SRV-ATTR:host": "devstack"
            ...
        }
    ]
}
</syntaxhighlight>
;<nowiki>예시: 이름으로 정규식 매칭을 사용한 쿼리(서버 조회)</nowiki>
관리자 컨텍스트로 요청: <code>GET /servers/detail</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "test11",
            ...
        },
        {
            "name": "test21",
            ...
        },
        {
            "name": "t1",
            ...
        },
        {
            "name": "t14",
            ...
        }
    ]
}
</syntaxhighlight>
관리자 컨텍스트로 요청: <code>GET /servers/detail?name=t1</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "test11",
            ...
        },
        {
            "name": "t1",
            ...
        },
        {
            "name": "t14",
            ...
        }
    ]
}
</syntaxhighlight>
;<nowiki>예시: 호스트로 정확한 매칭, 이름으로 정규식 매칭을 사용한 쿼리(서버 조회)</nowiki>
관리자 컨텍스트로 요청: <code>GET /servers/detail</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "test1",
            "OS-EXT-SRV-ATTR:host": "devstack"
            ...
        },
        {
            "name": "t2",
            "OS-EXT-SRV-ATTR:host": "devstack1"
            ...
        },
        {
            "name": "test3",
            "OS-EXT-SRV-ATTR:host": "devstack1"
            ...
        }
    ]
}
</syntaxhighlight>
관리자 컨텍스트로 요청: <code>GET /servers/detail?host=devstack1&name=test</code>
응답:
<syntaxhighlight lang='json'>
{
    "servers": [
        {
            "name": "test3",
            "OS-EXT-SRV-ATTR:host": "devstack1"
            ...
        }
    ]
}
</syntaxhighlight>
요청: <code>GET /servers/detail?changes-since='2015-12-16T15:55:52Z'</code>
응답:
<syntaxhighlight lang='json'>
{
    {
        "name": "t2",
        "updated": "2015-12-17T15:55:52Z"
        ...
    }
}
</syntaxhighlight>
==서버 액션==
==서버 액션==
* '''Reboot'''(재부팅)
* '''Reboot'''(재부팅)

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)