후크 사용¶
SolusVM 2의 후크를 사용하여 특정 이벤트가 발생하기 전이나 후에 사용자 정의 스크립트를 자동으로 실행할 수 있습니다.
간단히 말해서 SolusVM 2의 후크 작동 방식은 다음과 같습니다.
-
관리 노드 및/또는 컴퓨팅 리소스에 특수 디렉터리를 생성할 수 있습니다. 특정 이벤트에 연결된 후크가 컴퓨팅 리소스 A와 B에서 다르게 동작하도록 하고 컴퓨팅 리소스 C에는 전혀 없을 수 있습니다.
-
디렉터리에는 사용자 정의 스크립트가 포함된 하나 이상의 실행 파일을 배치해야 합니다. 사용자 정의 스크립트는 Bash, PHP, Python, Golang, Java 또는 전달된 JSON 파일을 구문 분석할 수 있는 기타 프로그래밍 언어로 작성할 수 있습니다.
-
가상 서버 재부팅과 같은 지원되는 이벤트 중 하나가 가상 서버에 대해 발생할 때마다 SolusVM 2는 해당 가상 서버를 호스팅하는 관리 노드 또는 컴퓨팅 리소스에 있는 모든 사용자 지정 스크립트를 실행합니다. 이 항목에서 지원되는 이벤트의 전체 목록을 자세히 확인할 수 있습니다. 지원되지 않는 이벤트에 대해서는 후크를 생성할 수 없습니다. 구성된 모든 후크는 이벤트 발생 전후에 이벤트당 두 번 트리거됩니다. 지원되는 이벤트가 GUI, CLI 또는 API를 통해 시작되는지 여부에 관계없이 후크가 트리거됩니다.
-
후크가 트리거되면 SolusVM 2는 이벤트 유형, 후크가 이벤트 전후에 트리거되었는지 여부, 가상 서버 ID와 같은 특정 관련 데이터 등의 정보가 포함된 JSON 개체를 전달합니다. 문제의.
예를 들어, 새 가상 서버가 생성되면 "가상 서버 생성됨" 이벤트가 트리거됩니다. 이는 다른 데이터 중에서 새로 생성된 가상 서버의 IP 주소를 전달합니다. 들어오는 JSON 개체를 구문 분석하고 해당 데이터를 가져와 이를 호스팅하는 컴퓨팅 리소스에 필요한 방화벽 규칙을 만드는 데 사용하는 사용자 지정 스크립트를 만들 수 있습니다.
후크 만들기¶
실행할 다른 스크립트나 명령을 결정하는 시작점으로 단일 파일을 사용하는 것이 좋습니다.
관리 노드 또는 컴퓨팅 리소스에 대한 후크를 생성하려면 다음을 수행하십시오.
-
SSH를 통해 "루트" 사용자로 관리 노드 또는 컴퓨팅 리소스에 로그인합니다.
-
존재하지 않는 경우
/usr/local/solus/hooks/
라는 이름의 디렉토리를 만듭니다.
mkdir /usr/local/solus/hooks/
- 파일을 만들고 사용자 정의 스크립트를 파일에 붙여넣습니다. 예를 들어 "hook.sh"와 같이 원하는 이름을 파일에 지정할 수 있습니다.
touch /usr/local/solus/hooks/hook.sh
- 파일을 실행 가능하게 만듭니다.
chmod +x /usr/local/solus/hooks/hook.sh
이제 후크가 생성되었습니다. 지원되는 이벤트가 발생할 때마다 실행 파일이 실행됩니다. 특정 이벤트에 대해서만 특정 실행 파일을 실행하도록 SolusVM 2를 구성할 수 없습니다. 사용자 정의 스크립트는 JSON 개체를 구문 분석하고 해당 콘텐츠에 따라 특정 작업을 수행할 수 있어야 합니다.
지원되는 이벤트가 발생하면 모든 구성 후크(있는 경우)가 트리거됩니다. 모든 사용자 정의 스크립트가 종료되거나 1분이 경과할 때까지(둘 중 먼저 도래하는 시점까지) SolusVM 2 측에서 작업이 일시 중지됩니다. 예를 들어, 가상 서버가 다시 시작되고 해당 가상 서버를 호스팅하는 관리 노드 또는 컴퓨팅 리소스에 하나 이상의 후크가 구성되어 있으면 다음과 같은 일이 발생합니다.
- 가상 서버를 다시 시작하는 명령은 GUI, CLI 또는 API를 통해 제공됩니다.
- SolusVM 2는
/usr/local/solus/hooks/
디렉터리에 있는 모든 실행 파일을 실행하여 지원되는 이벤트 ID 및 "사전" 단계 표시기를 포함한 모든 관련 정보가 포함된 JSON 개체를 각 실행 파일에 전달합니다. - 모든 실행 파일이 종료되거나 1분이 경과합니다.
- 가상 서버가 다시 시작됩니다.
- SolusVM 2는
/usr/local/solus/hooks/
디렉터리에 있는 모든 실행 파일을 실행하여 지원되는 이벤트 ID 및 "포스트" 단계 표시기를 포함한 모든 관련 정보가 포함된 JSON 개체를 각 실행 파일에 전달합니다.
Note
/usr/local/solus/hooks/
디렉토리에 후크 이외의 파일을 넣지 마십시오.
JSON 객체 분석¶
후크에서는 유효한 JSON 형식의 stdin(표준 입력) 데이터를 기대해야 합니다. 트리거 이벤트가 발생할 때마다 모든 관련 데이터가 포함된 JSON 개체가 /usr/local/solus/hooks/
디렉터리의 모든 바이너리에 전달됩니다. 이 개체의 모습은 다음과 같습니다.
{
"action": "server-restart",
"stage": "pre",
"data": {
"uuid": "c7ee19aa-2722-4139-9223-60ed4baf09e2",
"virtualization_type": "kvm"
}
}
여기서 "action"은 후크를 트리거한 이벤트 종류(이 경우 가상 서버가 다시 시작됨)를 지정하고, "stage"는 이벤트가 곧 발생할지 아니면 방금 발생했는지(이 경우 전자)를 지정합니다. "데이터"는 이벤트와 관련된 정보(이 경우 가상 서버 ID 및 해당 가상화 유형)를 지정합니다. 따라서 문제의 객체는 ID가 "c7ee19aa-2722-4139-9223-60ed4baf09e2"인 KVM 기반 가상 서버가 곧 다시 시작될 예정이며 후크에 의해 호출되는 사용자 정의 스크립트를 사용하여 예를 들어 다음을 수행할 수 있음을 알려줍니다. 가상 서버의 소유자에게 알립니다.
"action", "stage" 및 "data" 키는 항상 존재합니다.
-
"stage" 키에는 "pre" 및 "post" 값만 있을 수 있습니다.
-
"작업" 키에는 지원되는 이벤트에 해당하는 여러 값이 있을 수 있습니다.
-
"server-create"
- "server-delete"
- "server-migrate"
- "server-reinstall"
- "server-restart"
- "server-start"
- "server-stop"
- "server-network-create"
- "server-network-delete"
-
"server-network-update"
-
"데이터" 개체에는 다양한 값을 가질 수 있는 여러 키가 포함되어 있습니다. 하나 이상의 특정 키는 각 특정 "작업" 키에 해당합니다. 예를 들어, 다시 시작되는 가상 서버("server-restart" 작업)에 해당하는 JSON 개체는 항상 "data" 개체 내에 "uuid" 및 "virtualization_type" 키를 포함하며 다른 키는 포함하지 않습니다.
Note
단일 이벤트가 여러 후크를 트리거할 수 있습니다. 예를 들어, 새 가상 서버를 생성하면 "server-create" 및 "server-network-create" 후크가 모두 트리거됩니다.
Note
실행 중에 이벤트가 실패하면(예: 가상 서버를 생성할 수 없음) "사전" 후크만 트리거되고 "포스트" 후크는 트리거되지 않습니다.
후크 예¶
배시 예시
-
SSH를 통해 "루트" 사용자로 관리 노드 또는 컴퓨팅 리소스에 로그인합니다.
-
존재하지 않는 경우
/usr/local/solus/hooks/
라는 이름의 디렉토리를 만듭니다.
mkdir /usr/local/solus/hooks/
- 파일을 만듭니다.
touch /usr/local/solus/hooks/hook.sh
- 실행 가능하게 만드세요.
chmod +x /usr/local/solus/hooks/hook.sh
-
다음 내용을 파일에 붙여넣습니다.
#!/bin/bash set -xEeuo pipefail tfile=$(mktemp /tmp/hook_test_$(date "+%Y-%m-%d-%H-%M-%S-%N")_XXX) cat /dev/stdin | jq > $tfile
-
서버에 "jq" 프로그램을 설치합니다.
apt install jq
또는 dnf install jq
파이썬 예
-
SSH를 통해 "루트" 사용자로 관리 노드 또는 컴퓨팅 리소스에 로그인합니다.
-
존재하지 않는 경우
/usr/local/solus/hooks/
라는 이름의 디렉토리를 만듭니다.
mkdir /usr/local/solus/hooks/
- 파일을 만듭니다.
touch /usr/local/solus/hooks/hook.py
- 실행 가능하게 만드세요.
chmod +x /usr/local/solus/hooks/hook.py
-
다음 내용을 파일에 붙여넣습니다.
#!/usr/bin/env python3 import sys import json ACTION_SERVER_RESTART = "server-restart" STAGE_PRE = "pre" STAGE_POST = "post" event = json.loads(sys.stdin.read()) def handle_server_restart_pre(event_data): print(f'Server going restart: {event_data["uuid"]}') def handle_server_restart_post(event_data): print(f'Server was restarted: {event_data["uuid"]}') action = event["action"] stage = event["stage"] data = event["data"] if ACTION_SERVER_RESTART == action: if STAGE_PRE == stage: handle_server_restart_pre(data) sys.exit(0) if STAGE_POST == stage: handle_server_restart_post(data) sys.exit(0)
-
서버에 "json" 모듈을 설치합니다.
python -c "help('modules')"
훅 테스트 중
- SSH를 통해 "루트" 사용자로 관리 노드 또는 컴퓨팅 리소스에 로그인합니다.
-
JSON 객체를 후크에 전달합니다. 예를 들면 다음과 같습니다.
echo '{ "action": "server-restart", "stage": "pre", "data": { "uuid": "c7ee19aa-2722-4139-9223-60ed4baf09e2", "virtualization_type": "kvm" } }' | /usr/local/solus/hooks/hook.sh