본문 바로가기

Automation Tools/Ansible

[ansible] proxmox vm 설정 하기

반응형

모듈 설치

ansible을 이용하여 proxmox의 VM을 설정하기 위하여 proxmox host에 필요한 python 모듈이 있다.

 

proxmoxer

requests

 

모듈 설치를 위하여 아래 기본 패키지를 설치한다.

apt install python3-pip python3-dev build-essential

 

모듈을 설치한다.

pip3 install proxmoxer
pip3 install requests

 

모듈이 잘 설치 되었는지 확인한다.

$ pip3 list
Package           Version
----------------- --------------
...
proxmoxer         2.0.1
...
requests          2.25.1
...

 

 

 

proxmox host api 테스트

ansible host에서 proxmox api 동작 확인을 위하여 아래와 같은 명령을 수행해 본다.

 

curl -k -d 'username=root@pam&password=<password>' https://<proxmox_host>:8006/api2/json/access/ticket

$ curl -k -d 'username=root@pam&password=ㅅtest' https://10.10.10.100:8006/api2/json/access/ticket | jq .
{
  "data": {
    "clustername": "TEST-CLUSTER",
    "ticket": "PVE:root@pam:64F925D4::U7Og....1rtAU/GYI13W2aA==",
    "username": "root@pam",
    "cap": {
      "nodes": {
        "Sys.Syslog": 1,
        "Sys.Console": 1,
        "Permissions.Modify": 1,
        "Sys.PowerMgmt": 1,
        "Sys.Modify": 1,
        "Sys.Audit": 1,
        "Sys.Incoming": 1
      },
      "vms": {
        "VM.Config.CPU": 1,
        "VM.Allocate": 1,
        "VM.Config.HWType": 1,
        "VM.Config.Options": 1,
        "VM.Config.Cloudinit": 1,
        "VM.Audit": 1,
        "VM.PowerMgmt": 1,
        "VM.Monitor": 1,
        "VM.Config.CDROM": 1,
        "VM.Clone": 1,
        "VM.Console": 1,
        "VM.Snapshot": 1,
        "VM.Config.Network": 1,
        "Permissions.Modify": 1,
        "VM.Backup": 1,
        "VM.Migrate": 1,
        "VM.Config.Disk": 1,
        "VM.Config.Memory": 1,
        "VM.Snapshot.Rollback": 1
      },
      "access": {
        "Group.Allocate": 1,
        "Permissions.Modify": 1,
        "User.Modify": 1
      },
      "sdn": {
        "SDN.Audit": 1,
        "SDN.Allocate": 1,
        "Permissions.Modify": 1
      },
      "dc": {
        "SDN.Audit": 1,
        "Sys.Audit": 1,
        "SDN.Allocate": 1
      },
      "storage": {
        "Datastore.Allocate": 1,
        "Datastore.Audit": 1,
        "Datastore.AllocateSpace": 1,
        "Datastore.AllocateTemplate": 1,
        "Permissions.Modify": 1
      }
    },
    "CSRFPreventionToken": "64F925D4:cIsJ7X...D++TJYkk"
  }
}

 

결과가 null로 나오는 경우 proxmox host의 계정 정보나 접속 포트 정보를 확인 한다.

{
  "data": null
}

 

 

 

 

VM 생성하기

ansible proxmox_kvm 모듈을 사용할 예정이며 proxmox의 api token을 생성할수 있지만 여기서는 계정정보를 이용한다.

만들어져 있는 template을 full clone 하는 방식으로 수행한다.

 

inventory

pve    ansible_host=10.10.10.100

 

 

playbook

vmid를 지정하지 않으면 자동으로 다음 id를 할당한다.

---
- hosts: all
  gather_facts: no
  ignore_unreachable: yes
  tasks:
  - name: Create New VM
    proxmox:
      api_user: root@pam
      api_password: '<proxmox_password>'
      api_host: 10.10.10.100
      node: "pve_node01"
      name: "<vm name>"
      clone: "<template name>"

 

 

 

 

VM update 하기

core, memory, cpuunit 등을 수정한다.

---
- hosts: all
  gather_facts: no
  ignore_unreachable: yes
  tasks:
  - name: Update VM
    proxmox_kvm:
      api_user: root@pam
      api_password: '<proxmox_password>'
      api_host: 10.10.10.100
      node: "pve_node01"
      cores: "8"
      memory: "16384"
      cpuunits: 1000
      vmid: <vmid>
      update: yes

 

 

 

VM 삭제하기

---
- hosts: all
  gather_facts: no
  ignore_unreachable: yes
  tasks:
  - name: Update VM
    proxmox_kvm:
      api_user: root@pam
      api_password: '<proxmox_password>'
      api_host: 10.10.10.100
      node: "pve_node01"
      vmid: <vmid>
      state: absent
반응형