본문 바로가기

서버와 홈디바이스/NAS, VPN, 클라우드

HA에 Proxmox VM 온오프 버튼 만들기

반응형

 

Proxmox 에 윈도우 VM 을 올려놓았는데

사용하지 않을때는 종료 시켜 놓는다.

그런데 짝꿍은 Proxmox 접근 권한이 없으니까...HA 에 전원 버튼을 만들어줬다.

 

 

참조 글은 아래 링크

https://www.jamescoyle.net/tag/api

 

API | JamesCoyle.net Limited

Proxmox has 2 API access points that can be used to control your Proxmox server and virtual guests. One of the API access points is using the command line, which you’re likely already familiar with. The other is the HTTP web API which is exposed as part

www.jamescoyle.net

 

 

대충 아래 내용들을 채워 넣어야 한다

  • TICKET is the authentication ticket that was produced in the Parse Proxmox Web API authentication ticket and the CSRFPreventionToken in Bash post. Ideally you would programatically call the authentication routine and then pass the values straight into the below API calls.
  • CSRF is produced in the same way as TICKET. It’s actually only required when writing data to the API but there is no harm in always including it.
  • HOST is the host or IP address of the Proxmox server.
  • NODE is the node name of the Proxmox server that the LXC Container resides on.
  • TARGET_VM  is the VMID of the LXC Container.

 

 

 

Proxmox 웹에 접속한 후에

Datacenter 선택 후

Permission -> User -> add 로 사용자를 하나 추가하고 아이디/암호 기억하자

 

 

Permission -> Roles 에서 Create 로 API 용 role 을 하나 추가해주자

 

proxmox host shell 에 접속해서 아래와 같은 명령어로 role 을 부여해주자.

pveum acl modify / -user API@pve -role APIrole

 

이제 아래와 같은 스크립트를 만들면 된다. 중간 5줄만 잘 채우자.

VM 시작 스크립트

VMwin10Start.sh

#!/bin/bash

decodeDataFromJson(){
    echo `echo $1 \
            | sed 's/{\"data\"\:{//g' \
            | sed 's/\\\\\//\//g' \
            | sed 's/[{}]//g' \
            | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \
            | sed 's/\"\:\"/\|/g' \
            | sed 's/[\,]/ /g' \
            | sed 's/\"// g' \
            | grep -w $2 \
            | awk -F "|" '{print $2}'`
}

PROX_USERNAME=user@pve
PROX_PASSWORD=password
HOST=proxmox_host_ip
NODE=proxmox_node
TARGET_VMID=VM_number

DATA=`curl -s -k -d "username=$PROX_USERNAME&password=$PROX_PASSWORD" $HOST/api2/json/access/ticket`
TICKET=$(decodeDataFromJson $DATA 'ticket')
CSRF=$(decodeDataFromJson $DATA 'CSRFPreventionToken')


START_TASK_DATA=`curl -s -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" -X POST $HOST/api2/json/nodes/$NODE/qemu/$TARGET_VMID/status/start`

 

VM 종료 스크립트

VMwin10Shutdown.sh

#!/bin/bash

decodeDataFromJson(){
    echo `echo $1 \
            | sed 's/{\"data\"\:{//g' \
            | sed 's/\\\\\//\//g' \
            | sed 's/[{}]//g' \
            | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \
            | sed 's/\"\:\"/\|/g' \
            | sed 's/[\,]/ /g' \
            | sed 's/\"// g' \
            | grep -w $2 \
            | awk -F "|" '{print $2}'`
}

PROX_USERNAME=user@pve
PROX_PASSWORD=password
HOST=proxmox_host_ip
NODE=proxmox_node
TARGET_VMID=VM_number

DATA=`curl -s -k -d "username=$PROX_USERNAME&password=$PROX_PASSWORD" $HOST/api2/json/access/ticket`
TICKET=$(decodeDataFromJson $DATA 'ticket')
CSRF=$(decodeDataFromJson $DATA 'CSRFPreventionToken')


START_TASK_DATA=`curl -s -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" -X POST $HOST/api2/json/nodes/$NODE/qemu/$TARGET_VMID/status/shutdown`

 

 

해당 스크립트를 HA config 폴더에 넣고

configuration.yaml 파일에 아래와 같은 shell 커맨드를 넣어준다.

shell_command:
  win10start: sh VMwin10Start.sh
  win10stop: sh VMwin10Shutdown.sh

 

이제 요렇게 추가 완료

전원 켜짐은 device_tracker 로 알아서 만들기

반응형