Pulumiを使ってProxmoxの構成管理を試してみる

PulumiをProxmoxで利用するための自分用のメモです。

準備

  1. Pulumiをinstallします。
brew install pulumi/tap/pulumi
  1. 今回はproxmoxが対象ですが、便利なのでaws-typescriptのテンプレートを利用します。
mkdir pulumi-proxmox && cd pulumi-proxmox

# templateを使って作成する 
pulumi new  
 Would you like to create a project from a template or using a Pulumi AI prompt?  [Use arrows to move, type to filter]
> template - Create a new Pulumi project using a template
  ai - Create a new Pulumi project using Pulumi AI

> aws-typescript # aws

> Project name (pulumi-proxmox):  この辺はよしなに...

... 

> pnpm # パッケージマネージャーもよしなに...

以下ファイルを確認して以下のようになっていれば成功です。

ls
index.ts    package.json    Pulumi.dev.yaml   README.md
node_modules  pnpm-lock.yaml  Pulumi.yaml   tsconfig.json
  1. dependenciesにaws関連のパッケージが含まれているので削除し、以下のように編集します。
{
    "name": "pulumi-proxmox",
    "main": "index.ts",
    "devDependencies": {
        "@types/node": "^18",
        "typescript": "^5.0.0"
    },
    "dependencies": {
      "@muhlba91/pulumi-proxmoxve": "^7.3.0",
      "@pulumi/pulumi": "^3.189.0"
    }
}

不要なファイルも削除します。

rm Pulumi.dev.yaml

Pulumi.yamlを以下のように編集し、Proxmoxのログイン情報を設定します。

name: proxmox-pulumi
description: A minimal Proxmox TypeScript Pulumi project.
runtime:
  name: nodejs
  options:
    packagemanager: pnpm
config:
  proxmoxve:endpoint: "https://proxmox"
  proxmoxve:username: "root@pam"
  proxmoxve:password: "hogehoge"
  proxmoxve:insecure: true # Set to true if you are using a self-signed certificate

index.tsの内容を削除し、以下のように書き換えます

今回はubuntuのvmを立ち上げる設定を書きます。自分の環境に合わせて各種パラメータは編集してください。

import * as proxmox from "@muhlba91/pulumi-proxmoxve";

const vm = new proxmox.vm.VirtualMachine("ubuntu-vm", {
  nodeName: "proxmox",
  name: "ubuntu-24-04-vm",
  bios: "seabios",
  cpu: {
    cores: 2,
    sockets: 1,
  },
  memory: {
    dedicated: 2048,
  },
  disks: [
    {
      interface: "scsi0",
      datastoreId: "local-lvm",
      size: 32,
      fileFormat: "raw",
    },
  ],
  cdrom: {
    fileId: "local:iso/ubuntu-24.04.2-live-server-amd64.iso",
  },
  networkDevices: [
    {
      bridge: "vmbr0",
      model: "virtio",
    },
  ],
  onBoot: true,
  operatingSystem: {
    type: "l26",
  },
  initialization: {
    type: "nocloud",
    datastoreId: "local-lvm",
  },
});

立ち上げる

previewで所謂planが出来ます。これを実行してエラーが発生したらエラーに従って修正してください。

pulumi preview

問題なければupを実行してください。

pulumi up

Do you want to perform this update? yes # yesで適用する

これでvmが立ち上がります。