vHoge

VMwareのアレコレ備忘録。CLIでがんばるネタ多め。

MINISFORUM Venus Series UM560 ってどう?

Nested でもいいので、そろそろ自宅 vSAN やりたいな…
ということで、約1年3か月ぶりのノード追加。

MINISFORUM Venus Series UM560
スペック/コスパだけなら HM90 でも全然足りるのですが、1年3か月も経ったのにまた同じ PC 調達するのもなんかなーということで、色々調べて Venus Series を買うことに。

本当は UM580 が狙いだったのだがしばらく売り切りとなっており、入荷予定を個別に問い合わせてみても予定無しとのことなので、コア数は妥協して UM560 を選択。

Minisforum UM560/UM580/UM480store.minisforum.jp

NIC の詳細については特に言及が無いが、サポートページを追うと I225-V のドライバを配っているので、Intel NIC なのは確定なのかなと。

基本スペック

コンポーネント スペック値
製品名 MINISFORUM Venus Series UM560
CPU Ryzen5 5625U 6c/12t
Memory (ベアボーン)
GPU AMD Radeon™ Graphics (1800MHz)
Disk (ベアボーン)
拡張Disk 2.5inch SATA 3.0 スロット x 1
NIC M.2 2230 WI-Fi6 / 2.5Gbps NIC
電源 Type-C 給電 65W GaN 電源
本体サイズ 127 x 128 x 47mm

HM80/HM90 よりは一回り小さめ。
その分、2.5inch スロットが1個減っている。

HM80/HM90 に重ねた絵

梱包物。特徴は何と言っても GaN 電源。
このスペックでコンパクトな GaN 電源でいけるのは魅力。
(※ UM580 も 100W GaN 電源)

個別調達品

ベアボーンモデルなので、メモリ/ディスクは個別調達。
本当はバラバラのお店で調達しているが、面倒なのでリンクは Amazon

装着

背面のゴムカバーを外し、ネジを外す。



メモリ取り付け、斜めから差し込み、水平に押し込み金具をはめる。

M.2 NVMe、ネジを外し、斜めから差し込む。


SATA SSD、ドライブに接続端子をはめ、フタに固定。


端子はマザボにつなぎ、フタを閉める。

ESXi インストール

手元にあった ESXi 7.0 u3d の offline bundle に Community Networking Driver / USB NIC Driver を混ぜたカスタムイメージにてインストール。

ウェーイ。

ディスク/NIC も特に問題なさげ。
(* 2.5Gbps USB-NIC が 1Gbps なのは対向の問題)

上級者用

ESXi 上で CLI を叩いてみてみる。

esxcli hardware hoge

[root@minis04:~] esxcli hardware cpu list
CPU:0
   Id: 0
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x0
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:1
   Id: 1
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x1
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:2
   Id: 2
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x2
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:3
   Id: 3
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x3
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:4
   Id: 4
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x4
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:5
   Id: 5
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x5
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:6
   Id: 6
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x6
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:7
   Id: 7
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x7
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:8
   Id: 8
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x8
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:9
   Id: 9
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0x9
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:10
   Id: 10
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0xa
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12

CPU:11
   Id: 11
   Package Id: 0
   Family: 25
   Model: 80
   Type: 0
   Stepping: 0
   Brand: AuthenticAMD
   Core Speed: 2295686956
   Bus Speed: 99812457
   APIC ID: 0xb
   Node: 0
   L2 Cache Size: 524288
   L2 Cache Associativity: 8
   L2 Cache Line Size: 64
   L2 Cache CPU Count: 2
   L3 Cache Size: 16777216
   L3 Cache Associativity: 16
   L3 Cache Line Size: 64
   L3 Cache CPU Count: 12
[root@minis04:~] esxcli hardware memory get
   Physical Memory: 68101595136 Bytes
   Reliable Memory: 0 Bytes
   NUMA Node Count: 1
[root@minis04:~] esxcli hardware platform get
Platform Information
   UUID: 0xe5 0x42 0x3a 0x80 0xa3 0x99 0x11 0xed 0x97 0x12 0xc0 0x15 0xd5 0xab 0x26 0x0
   Product Name: UM560
   Vendor Name: Micro Computer (HK) Tech Limited
   Serial Number: Default string
   Enclosure Serial Number: Default string
   BIOS Asset Tag: Default string
   IPMI Supported: false

esxcli network nic list

[root@minis04:~] esxcli network nic list
Name    PCI Device    Driver         Admin Status  Link Status  Speed  Duplex  MAC Address         MTU  Description
------  ------------  -------------  ------------  -----------  -----  ------  -----------------  ----  -----------
vmnic0  0000:01:00.0  igc-community  Up            Up            2500  Full    58:47:ca:70:87:8b  4000  Intel Corporation Ethernet Controller I225-V
vusb0   Pseudo        uether         Up            Up            1000  Full    1c:c0:35:03:fc:ed  1500  Planex USB 101001G2.5G LAN
* ストレージ(NFS)用に MTU いじってます(4000 なのはどこかの機器の限界…)

esxcli storage core hoge

[root@minis04:~] esxcli storage core device list
t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________
   Display Name: Local ATA Disk (t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________)
   Has Settable Display Name: false
   Size: 114473
   Device Type: Direct-Access
   Multipath Plugin: HPP
   Devfs Path: /vmfs/devices/disks/t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________
   Vendor: ATA
   Model: ADATA SU650
   Revision: 3G5P
   SCSI Level: 5
   Is Pseudo: false
   Status: on
   Is RDM Capable: false
   Is Local: true
   Is Removable: false
   Is SSD: true
   Is VVOL PE: false
   Is Offline: false
   Is Perennially Reserved: false
   Queue Full Sample Size: 0
   Queue Full Threshold: 0
   Thin Provisioning Status: yes
   Attached Filters:
   VAAI Status: unsupported
   Other UIDs: vml.0100000000344d303232333944413642432020202020202020414441544120
   Is Shared Clusterwide: false
   Is SAS: false
   Is USB: false
   Is Boot Device: true
   Device Max Queue Depth: 31
   No of outstanding IOs with competing worlds: 31
   Drive Type: unknown
   RAID Level: unknown
   Number of Physical Drives: unknown
   Protection Enabled: false
   PI Activated: false
   PI Type: 0
   PI Protection Mask: NO PROTECTION
   Supported Guard Types: NO GUARD SUPPORT
   DIX Enabled: false
   DIX Guard Type: NO GUARD SUPPORT
   Emulated DIX/DIF Enabled: false

t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000
   Display Name: Local NVMe Disk (t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000)
   Has Settable Display Name: false
   Size: 1953514
   Device Type: Direct-Access
   Multipath Plugin: HPP
   Devfs Path: /vmfs/devices/disks/t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000
   Vendor: NVMe
   Model: SUNEAST SE900NVG
   Revision: SN10
   SCSI Level: 7
   Is Pseudo: false
   Status: on
   Is RDM Capable: false
   Is Local: true
   Is Removable: false
   Is SSD: true
   Is VVOL PE: false
   Is Offline: false
   Is Perennially Reserved: false
   Queue Full Sample Size: 0
   Queue Full Threshold: 0
   Thin Provisioning Status: yes
   Attached Filters:
   VAAI Status: unsupported
   Other UIDs: vml.05f2cd24fb76937c2015e4a4c5a75bd8aa508e0d65fffa8dd6fc7b3bd0fa47f6fb
   Is Shared Clusterwide: false
   Is SAS: false
   Is USB: false
   Is Boot Device: false
   Device Max Queue Depth: 1023
   No of outstanding IOs with competing worlds: 32
   Drive Type: physical
   RAID Level: NA
   Number of Physical Drives: 1
   Protection Enabled: false
   PI Activated: false
   PI Type: 0
   PI Protection Mask: NO PROTECTION
   Supported Guard Types: NO GUARD SUPPORT
   DIX Enabled: false
   DIX Guard Type: NO GUARD SUPPORT
   Emulated DIX/DIF Enabled: false
[root@minis04:~] esxcli storage core adapter list
HBA Name  Driver     Link State  UID          Capabilities  Description
--------  ---------  ----------  -----------  ------------  -----------
vmhba0    nvme_pcie  link-n/a    pcie.300                   (0000:03:00.0) MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202
vmhba1    vmw_ahci   link-n/a    sata.vmhba1                (0000:05:00.0) Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode]
vmhba2    vmw_ahci   link-n/a    sata.vmhba2                (0000:05:00.1) Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode]

esxcfg-scsidevs -l

[root@minis04:~] esxcfg-scsidevs -l
t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________
   Device Type: Direct-Access
   Size: 114473 MB
   Display Name: Local ATA Disk (t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________)
   Multipath Plugin: HPP
   Console Device: /vmfs/devices/disks/t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________
   Devfs Path: /vmfs/devices/disks/t10.ATA_____ADATA_SU650_____________________________4M02239DA6BC________
   Vendor: ATA       Model: ADATA SU650       Revis: 3G5P
   SCSI Level: 5  Is Pseudo: false Status: on
   Is RDM Capable: false Is Removable: false
   Is Local: true  Is SSD: true
   Other Names:
      vml.0100000000344d303232333944413642432020202020202020414441544120
   VAAI Status: unsupported
t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000
   Device Type: Direct-Access
   Size: 1953514 MB
   Display Name: Local NVMe Disk (t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000)
   Multipath Plugin: HPP
   Console Device: /vmfs/devices/disks/t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000
   Devfs Path: /vmfs/devices/disks/t10.NVMe____SUNEAST_SE900NVG3_2048G_________________0100000000000000
   Vendor: NVMe      Model: SUNEAST SE900NVG  Revis: SN10
   SCSI Level: 7  Is Pseudo: false Status: on
   Is RDM Capable: false Is Removable: false
   Is Local: true  Is SSD: true
   Other Names:
      vml.05f2cd24fb76937c2015e4a4c5a75bd8aa508e0d65fffa8dd6fc7b3bd0fa47f6fb
      vml.0100000000303130305f303030305f303030305f303030300053554e454153
   VAAI Status: unsupported

lspci -vvv

[root@minis04:~] lspci -vvv
0000:00:00.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne Root Complex
         Class 0600: 1022:1630

0000:00:00.2 Generic system peripheral IOMMU: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne IOMMU
         Class 0806: 1022:1631

0000:00:01.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
         Class 0600: 1022:1632

0000:00:01.3 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [PCIe RP[0000:00:01.3]]
         Class 0604: 1022:1634

0000:00:02.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
         Class 0600: 1022:1632

0000:00:02.1 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [PCIe RP[0000:00:02.1]]
         Class 0604: 1022:1634

0000:00:02.2 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge [PCIe RP[0000:00:02.2]]
         Class 0604: 1022:1634

0000:00:08.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
         Class 0600: 1022:1632

0000:00:08.1 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [PCIe RP[0000:00:08.1]]
         Class 0604: 1022:1635

0000:00:08.2 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [PCIe RP[0000:00:08.2]]
         Class 0604: 1022:1635

0000:00:14.0 Serial bus controller SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller
         Class 0c05: 1022:790b

0000:00:14.3 Bridge ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge
         Class 0601: 1022:790e

0000:00:18.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166a
         Class 0600: 1022:166a

0000:00:18.1 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166b
         Class 0600: 1022:166b

0000:00:18.2 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166c
         Class 0600: 1022:166c

0000:00:18.3 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166d
         Class 0600: 1022:166d

0000:00:18.4 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166e
         Class 0600: 1022:166e

0000:00:18.5 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 166f
         Class 0600: 1022:166f

0000:00:18.6 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 1670
         Class 0600: 1022:1670

0000:00:18.7 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Device 1671
         Class 0600: 1022:1671

0000:01:00.0 Network controller Ethernet controller: Intel Corporation Ethernet Controller I225-V [vmnic0]
         Class 0200: 8086:15f3

0000:02:00.0 Network controller Network controller: MEDIATEK Corp. Device 0608
         Class 0280: 14c3:0608

0000:03:00.0 Mass storage controller Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 [vmhba0]
         Class 0108: 1e4b:1202

0000:04:00.0 Display controller VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 15e7
         Class 0300: 1002:15e7

0000:04:00.1 Multimedia controller Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller
         Class 0403: 1002:1637

0000:04:00.2 Encryption controller Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor
         Class 1080: 1022:15df

0000:04:00.3 Serial bus controller USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
         Class 0c03: 1022:1639

0000:04:00.4 Serial bus controller USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
         Class 0c03: 1022:1639

0000:04:00.5 Multimedia controller Multimedia controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir Audio Processor
         Class 0480: 1022:15e2

0000:04:00.6 Multimedia controller Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller
         Class 0403: 1022:15e3

0000:04:00.7 Signal processing controller Signal processing controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/Renoir Sensor Fusion Hub
         Class 1180: 1022:15e4

0000:05:00.0 Mass storage controller SATA controller: Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode] [vmhba1]
         Class 0106: 1022:7901

0000:05:00.1 Mass storage controller SATA controller: Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode] [vmhba2]
         Class 0106: 1022:7901

smbiosDump

[root@minis04:~] smbiosDump
Dumping live SMBIOS data!
  BIOS Info (Type 0): #0
    Size: 0x0001a
    Vendor: "American Megatrends International, LLC."
    Version: "5.07"
    Date: "11/09/2022"
    Start Address: 0xf0000
    ROM Size: 16384 kB
    Features: 0x0d03000000017ffb9880
      PCI supported
      BIOS flashable
      BIOS shadowing allowed
      CD boot supported
      Selectable boot supported
      BIOS ROM socketed
      EDD spec supported
      1.2MB NEC 9800 Japanese Floppy supported
      1.2MB Toshiba Japanese Floppy supported
      360kB Floppy supported
      1.2MB Floppy supported
      720kB Floppy supported
      2.88MB Floppy supported
      Print Screen supported
      8042 Keyboard Services supported
      Serial Services supported
      Printer Services supported
      CGA/Mono Video supported
      ACPI supported
      USB Legacy supported
      BIOS Boot Spec supported
      Enable targeted content distribution
      UEFI supported
    System BIOS release: 5.19
  System Info (Type 1): #1
    Manufacturer: "Micro Computer (HK) Tech Limited"
    Product: "UM560"
    Version: "Default string"
    Serial: "Default string"
    SKU: "Default string"
    Family: "Default string"
    UUID: 0026abd515c0129711eda399e5423a80
    Wake-up: 0x06 (Power Switch)
  Baseboard Info (Type 2): #2
    Manufacturer: "Shenzhen Meigao Electronic Equipment Co.,Ltd"
    Product: "F6BFC"
    Version: "Default string"
    Serial: "Default string"
    Asset Tag: "Default string"
    Type: 0x0a (Motherboard)
    Features: 0x09
      Hosting Board
      Replaceable
    Location: "Default string"
    Chassis: #3
  Chassis Info (Type 3): #3
    Manufacturer: "Default string"
    Version: "Default string"
    Serial: "Default string"
    Asset Tag: "Default string"
    Type: 0x03 (Desktop)
    Bootup State: 0x03 (Safe)
    Power Supply State: 0x03 (Safe)
    Thermal State: 0x03 (Safe)
    Security Status: 0x03 (None)
    Power Cords: 1
    SKU: "Default string"
  Onboard Devices (Type 10): #4
    Video: "To Be Filled By O.E.M."
  OEM Strings (Type 11): #5
    Default string
  System Config Options (Type 12) #6:
    Default string
  Type 32 Record: #7
    Data 00: 20 14 07 00 00 00 00 00 00 00 00 00 00 00 00 00
    Data 10: 00 00 00 00
  Type 44 Record: #8
    Data 00: 2c 09 08 00 ff ff 01 01 00
  Type 43 Record: #9
    Data 00: 2b 1f 09 00 41 4d 44 00 02 00 54 00 03 00 05 00
    Data 10: 00 00 02 10 00 00 00 00 00 00 00 00 00 00 00
    String 1: "TPM 2.0"
    String 2: "AMD"
  32bit-Memory Error Info (Type 18): #10
    Type: 0x03 (OK)
    Granularity: 0x02 (Unknown)
    Operation: 0x02 (Unknown)
  Physical Memory Array (Type 16): #11
    Use: 0x03 (System memory)
    Location: 0x03 (Motherboard)
    Slots: 2
    Max. Size: 32 GB
    ECC: 0x03 (None)
    Error Info: #10
  Memory Array Mapping (Type 19): #12
    Memory Array: #11
    Partition Width: 2
    Start Address: 0x0000000000000000
    End Address: 0x0000001000000000
  Cache Info (Type 7): #13
    Designation: "L1 - Cache"
    Level: L1
    State: Enabled
    Mode: 0x01 (Write Back)
    Location: 0x00 (Internal, Not Socketed)
    ECC: 0x06 (Multi-bit)
    Type: 0x05 (Unified)
    Associativity: 0x07 (8-way Set-Associative)
    Max. Size: 384 kB
    Current Size: 384 kB
    Speed: 1 ns
    Supported SRAM Types: 0x0010 (Pipeline Burst)
    Current SRAM Type: 0x0010 (Pipeline Burst)
  Cache Info (Type 7): #14
    Designation: "L2 - Cache"
    Level: L2
    State: Enabled
    Mode: 0x01 (Write Back)
    Location: 0x00 (Internal, Not Socketed)
    ECC: 0x06 (Multi-bit)
    Type: 0x05 (Unified)
    Associativity: 0x07 (8-way Set-Associative)
    Max. Size: 3072 kB
    Current Size: 3072 kB
    Speed: 1 ns
    Supported SRAM Types: 0x0010 (Pipeline Burst)
    Current SRAM Type: 0x0010 (Pipeline Burst)
  Cache Info (Type 7): #15
    Designation: "L3 - Cache"
    Level: L3
    State: Enabled
    Mode: 0x01 (Write Back)
    Location: 0x00 (Internal, Not Socketed)
    ECC: 0x06 (Multi-bit)
    Type: 0x05 (Unified)
    Associativity: 0x08 (16-way Set-Associative)
    Max. Size: 16384 kB
    Current Size: 16384 kB
    Speed: 1 ns
    Supported SRAM Types: 0x0010 (Pipeline Burst)
    Current SRAM Type: 0x0010 (Pipeline Burst)
  Processor Info (Type 4): #16
    Payload length: 0x30
    Socket: "FP6"
    Socket Type: 0x06 (None)
    Socket Status: Populated
    Type: 0x03 (CPU)
    Family: 0x6b (Zen)
    Manufacturer: "Advanced Micro Devices, Inc."
    Version: "AMD Ryzen 5 5625U with Radeon Graphics"
    Serial: "Unknown"
    Asset Tag: "Unknown"
    Part Number: "Unknown"
    Processor ID: 0x178bfbff00a50f00
    Status: 0x01 (Enabled)
    Voltage: 1.2 V
    External Clock: 100 MHz
    Max. Speed: 4350 MHz
    Current Speed: 2300 MHz
    L1 Cache: #13
    L2 Cache: #14
    L3 Cache: #15
    Core Count: 6
    Core Enabled Count: 6
    Thread Count: 12
    Characteristics: 0x00fc (64-bit Capable, Multi-Core, Hardware Thread, Execute Protection, Enhanced Virtualization, Power/Performance Control)
  32bit-Memory Error Info (Type 18): #17
    Type: 0x03 (OK)
    Granularity: 0x02 (Unknown)
    Operation: 0x02 (Unknown)
  Memory Device (Type 17): #18
    Location: "DIMM 0"
    Bank: "P0 CHANNEL A"
    Manufacturer: "Kingston"
    Serial: "CEBC3E00"
    Part Number: "9905744-061.A00G"
    Memory Array: #11
    Error Info: #17
    Form Factor: 0x0d (SODIMM)
    Type: 0x1a (DDR4)
    Type Detail: 0x4080 (Synchronous, Unregistered)
    Data Width: 64 bits
    Size: 32 GB
    Max. Speed: 2933 MT/s
    Rank: 2
    Configured Speed: 2933 MT/s
    Min. Voltage: 1200 mV
    Max. Voltage: 1200 mV
    Configured Voltage: 1200 mV
    Technology: 0x03 (DRAM)
    Mode Capability: 0x0008 (Volatile)
    Firmware Version: "Unknown"
    Module Manufacturer ID: 0x9801
    Volatile Size: 34359738368 bytes
  Memory Device Mapping (Type 20): #19
    Memory Device: #18
    Array Mapping: #12
    Start Address: 0x0000000000000000
    End Address: 0x0000001000000000
  32bit-Memory Error Info (Type 18): #20
    Type: 0x03 (OK)
    Granularity: 0x02 (Unknown)
    Operation: 0x02 (Unknown)
  Memory Device (Type 17): #21
    Location: "DIMM 0"
    Bank: "P0 CHANNEL B"
    Manufacturer: "Kingston"
    Serial: "C7BC4154"
    Part Number: "9905744-061.A00G"
    Memory Array: #11
    Error Info: #20
    Form Factor: 0x0d (SODIMM)
    Type: 0x1a (DDR4)
    Type Detail: 0x4080 (Synchronous, Unregistered)
    Data Width: 64 bits
    Size: 32 GB
    Max. Speed: 2933 MT/s
    Rank: 2
    Configured Speed: 2933 MT/s
    Min. Voltage: 1200 mV
    Max. Voltage: 1200 mV
    Configured Voltage: 1200 mV
    Technology: 0x03 (DRAM)
    Mode Capability: 0x0008 (Volatile)
    Firmware Version: "Unknown"
    Module Manufacturer ID: 0x9801
    Volatile Size: 34359738368 bytes
  Memory Device Mapping (Type 20): #22
    Memory Device: #21
    Array Mapping: #12
    Start Address: 0x0000000000000000
    End Address: 0x0000001000000000
  Port Connector (Type 8): #23
    Type: 0x0d (Keyboard Port)
    Internal Designator: "J2304/J2300"
    External Designator: "Keyboard"
    External Connector: 0x0f (PS/2)
  Port Connector (Type 8): #24
    Type: 0x0e (Mouse Port)
    Internal Designator: "J3811"
    External Designator: "Touch pad"
    External Connector: 0x0f (PS/2)
  Port Connector (Type 8): #25
    Type: 0x10 (USB)
    Internal Designator: "J1504"
    External Designator: "USB 3.0"
    External Connector: 0x12 (Access Bus [USB])
  Port Connector (Type 8): #26
    Type: 0x10 (USB)
    Internal Designator: "J1500"
    External Designator: "USB 3.1"
    External Connector: 0x12 (Access Bus [USB])
  Port Connector (Type 8): #27
    Type: 0x10 (USB)
    Internal Designator: "J1502"
    External Designator: "USB 3.1"
    External Connector: 0x12 (Access Bus [USB])
  Port Connector (Type 8): #28
    Type: 0x10 (USB)
    Internal Designator: "J1501"
    External Designator: "USB 3.1 Type-C"
    External Connector: 0x12 (Access Bus [USB])
  Port Connector (Type 8): #29
    Type: 0x10 (USB)
    Internal Designator: "J1503"
    External Designator: "USB 3.1 Type-C"
    External Connector: 0x12 (Access Bus [USB])
  Port Connector (Type 8): #30
    Type: 0x1f (Network Port)
    Internal Designator: "J1300"
    External Designator: "Network"
    External Connector: 0x0b (RJ-45)
  Port Connector (Type 8): #31
    Type: 0x20 (SATA)
    Internal Designator: "J1701"
    Internal Connector: 0x22 (SAS/SATA Plug Receptacle)
    External Designator: "Sata HDD"
  Port Connector (Type 8): #32
    Type: 0x20 (SATA)
    Internal Designator: "J1703"
    Internal Connector: 0x22 (SAS/SATA Plug Receptacle)
    External Designator: "Sata ODD"
  Port Connector (Type 8): #33
    Type: 0x1c (Video Port)
    Internal Designator: "J1101"
    External Designator: "DP0"
  Port Connector (Type 8): #34
    Type: 0x1c (Video Port)
    Internal Designator: "J1100"
    External Designator: "DP1"
  Port Connector (Type 8): #35
    Type: 0x1d (Audio Port)
    Internal Designator: "J2103"
    External Designator: "Microphone"
    External Connector: 0x1f (Mini-jack [headphones])
  Port Connector (Type 8): #36
    Type: 0x1d (Audio Port)
    Internal Designator: "J2105"
    External Designator: "Headphone"
    External Connector: 0x1f (Mini-jack [headphones])
  System Slot (Type 9): #37
    Designation: "J3604"
    Type: 0xa9 (PCI Express x8)
    Bus Width: 0x0b (x8)
    Status: 0x03 (Available)
    Length: 0x03 (Short)
    Slot ID: 1
    Characteristics: 0x0304 (3.3 V, PME#, Hot-Plug)
    PCI Address: 0200:00:01.1
  System Slot (Type 9): #38
    Designation: "J3711"
    Type: 0x15 (M.2 Socket 1-SD [Mechanical Key E])
    Bus Width: 0x08 (x1)
    Status: 0x03 (Available)
    Length: 0x03 (Short)
    Slot ID: 3
    Characteristics: 0x0304 (3.3 V, PME#, Hot-Plug)
    PCI Address: 0200:00:01.2
  System Slot (Type 9): #39
    Designation: "J3704"
    Type: 0x17 (M.2 Socket 3 [Mechanical Key M])
    Bus Width: 0x09 (x2)
    Status: 0x03 (Available)
    Length: 0x03 (Short)
    Slot ID: 5
    Characteristics: 0x0304 (3.3 V, PME#, Hot-Plug)
    PCI Address: 0200:00:01.7
  System Slot (Type 9): #40
    Designation: "J3709"
    Type: 0x15 (M.2 Socket 1-SD [Mechanical Key E])
    Bus Width: 0x08 (x1)
    Status: 0x03 (Available)
    Length: 0x03 (Short)
    Slot ID: 6
    Characteristics: 0x0304 (3.3 V, PME#, Hot-Plug)
    PCI Address: 0200:00:01.5
  Onboard Device (Type 41): #41
    Designation: "Onboard LAN Brodcom"
    Status: Enabled
    Type: 0x05 (Ethernet)
    Instance: 0x01
    PCI Address: 0000:01:00.0
  Onboard Device (Type 41): #42
    Designation: "HD Audio Controller"
    Status: Enabled
    Type: 0x07 (Sound)
    Instance: 0x01
    PCI Address: 0000:04:00.6
  Language Info (Type 13): #43
    Languages: en|US|iso8859-1
    Current: en|US|iso8859-1

まとめ

このスペックが約 80,000 JPY で調達できるのは結構あり。何より GaN 電源が魅力的。
UM580 があれば 8c/16t となり個人的には完璧なのだが…
コア数/2.5 inch ディスク搭載数を求めるなら HM90 かな…?

DDR5 化も来ているがまだ価格は熟れていないので、DDR4 で安くあげておくなら今が買いどき(最後のチャンス)なのかも。

Windows Server 2022 の仮想マシンに KB5022842 を適用すると起動しなくなる

なかなかヤバそうな KB が…
Virtual Machine with Windows Server 2022 KB5022842 (OS Build 20348.1547) configured with secure boot enabled not booting up (90947) kb.vmware.com

どういうことだってばよ?

以下の条件全てに合致してしまった場合、OS boot に失敗します。

  • ESXi 6.7 U2/U3 or 7.0
  • Windows Server 2022
  • セキュアブート有効
  • 2023/2/14 公開の Windows パッチ KB5022842 を適用

MS の KB5022842 詳細サイト。
こちらにも Known issues として記載されていますね。
support.microsoft.com

OS boot に失敗ですが、具体的にはこうなる。

Security Violation...

もうチョイ詳しく

即アウトというわけでもない。パッチを適用する。
適用後 Reboot、初回はログイン画面が上がってくる。
パッチのインストールも成功しているし問題ないように思えるが…
再び Reboot をかけると… OS は Boot しないまま最終的には BIOS 画面に落ちてしまいます…

どうしよう…

vSphere 側でとれる対応策として

Secure Boot の無効化は仮想マシンの設定にて。
グレーアウトされているが、上の「仮想化ベースのセキュリティ(VBS)」を外せばセキュアブートのチェックも外れる。
この状態であれば Boot する。
ただ、KB5022842 をアンインストールしたとしてもダメらしく、この後セキュアブートを戻したとしても OS Boot に失敗するので、当面はセキュアブート無効化運用が必須に…

なかなかヤバい

この件、初回再起動では OS Boot するというのが曲者っぽく、今月の Windows Update では問題ないが、直前に作業を行ってなかったとしてもどこかのタイミングで再起動した際に上がらなくなり、原因特定が困難になるというような時限爆弾が多発しそうな。
対応策も一応あるが、ESXi アップデート or Secure Boot 無効化と影響度合いやセキュリティ要件といった話になっていき、おいそれと進められるものでもなく厄介。

ひとまず現時点では KB5022842 の適用は保留し、MS 側で何らかの対応がとられることを注視しておくのがベターなのではなかろうか。。。
適用しても次回再起動までに OS の修正がふってきて、翌月には何もなかったかのように Windows Update やれるんじゃないかといのもワンチャン…

2023/3/21 追記

3月の Windows UpdateWindows Server での対応がとられたっぽい。
当初の投稿でも貼り付けましたが KB 再載。
kb.vmware.com

This issue is resolved in the latest update released by Microsoft March 14, 2023 - KB5023705

Microsoft 側の KB 情報は…何も書いてないな… support.microsoft.com 実機で試してみたいがもう仮想マシン消しちゃったんだよなぁ…
機会があればまた試してみます。
試してみました。

vhoge.hateblo.jp

vExpert 2023 受賞で振り返る 2022 Activity

少し遅くなりましたが…
2/17 (JST で 2/18 深夜) に vExpert 2023 の発表がありました。
blogs.vmware.com
そして今回も引き続き vExpert 2023 を受賞することができました!
ありがとうございます!★ も5つ目。



昨年はグローバルで 2000人以上、日本で 90人ぐらいいた vExpert ですが、
2023 はグローバルで 1300 人程度、日本で 50 人強とかなり減った様子。
昨年までは covid-19 を踏まえた配慮(継続申請は自動更新)があったが、今年はそれも終了し、審査もやや厳しめになったようで。
その中でも継続受賞できたのは日々の活動の賜物かなと実感するところです…

2022 の Activity

ブログ

昨年投稿した記事は 14本。
退職エントリ、入社エントリがあるので VMware 絡みとなると 12本。
(入社エントリも VMware 絡みと言えばそうだけどw)

vROps やら vRSLCM やら TAM 業務で触ることがでてきた内容が増加な印象。
逆に業務で携わる機会がまだ少ない(≒本番運用がまだそこまでではない) vSphere8 やらの先端系の話は離れ気味。
homelab もあるけど、実務関連の検証で使うことも多く、vSphere8 化もまだしばらくは先になりそうという状況。homelab 増強かなぁ…w vhoge.hateblo.jp

2022 も Advent Calendar に参加。
その後の LT でも喋ったりと Advent Calendar ネタは例年再利用しがち。 adventar.org

登壇

LT 含め、スピーカーとしてのイベント参加は 3回。

  • Japan VMUG「vExpert が語る」#12 LT
  • Japan VMUG「vExpert が語る」#17
  • Japan VMUG「vExpert が語る」#22 LT

www.youtube.com www.youtube.com www.youtube.com
登壇スライドは以下に。追加は上記の3件。
speakerdeck.com
このくらいのペースでではあるが、他の場(特に VMware 関連以外)でも登壇したいなと…

ところで、気が付けば VMware DevOps Meetup の開催は無かったのですが、この役目は TUNA-JP の方に引き継がれた…のかな?
Tanzu とか OSS ではない、かつ、VMware 製品のマニアックなネタを喋る場としてよかったんだけど、今後当面は VMUG 一本になるかなぁ

その他

Github アカウントようやく作った。
ガッツリとソフトウェア開発をする予定は無いが、スクリプト系とかは置いていくかも。 github.com

vROps のレポートをチャット(Slack)に POST するのは結構大変

こちらの投稿は vExperts Advent Calendar 2022 の 19 日目になります。
今年はセンセーショナルなネタ仕入れられなかったので日常 TIPS 系…
と思ったら結構ハマった話(`・ω・´)
adventar.org

TL;DR

持ってけドロボー github.com

vROps のレポート出力先

vROps って使えるようになれば頗る便利なのですが、如何せん見られる情報が多く、使い慣れるまではなかなかハードルが高い…

そのような場合、レポート機能で定期スケジュールでどこかにファイル出力しておけば vROps の GUI にログイン不要でサクッと見られ、断面を蓄積し見比べたりできるのでとりあえず使い始めたいという場合においてはオススメしています。

さて、そんなレポートの出力先ですが

  • メール添付
  • ファイルサーバ(CIFS)に保存

と、2種類。

まぁでも、最近はよくあるんですよね。
「社内チャット(Slack, Teams etcetc) に投稿できない?」
実際、vROps のアラートの方は Slack とか Webhook のプラグインがあるぐらいだし…

残念ながら vROps だけでは POST できないが、
vROps API を駆使して、外部からレポートを取得し、それを Slack に POST させてみる。

vROps API

一応 API リファレンスは ↓ にありますが… developer.vmware.com

vROps は内部に Swagger が立っていて、API 仕様が載っていたり、Web GUI ベースで API を叩いたりができるので、こちらで試しながら開発してみるのが楽。
URL は https://【vROps IP or FQDN】/suite-api/

サンプル

苦労話をする前に先にサンプルを書いておく。
vROps 環境は 8.6.4 で、スクリプトUbuntu 20.04 LTS (on WSL2) + jqで確認。

#!/bin/sh
# 各種パラメータ
VROPS_FQDN=【vROps IP or FQDN】
VROPS_USER=【vROps のユーザ】
VROPS_PASSWORD=【vROps のパスワード】
VROPS_REPORT_NAME=【対象のレポート名を URL エンコード】

SLACK_CHANNEL=【Slack のチャンネルID】
SLACK_TOKEN=【Slack API の TOKEN】
SLACK_TITLE="【Slack に投稿するタイトル】"
SLACK_COMMENT="【Slack に投稿するメッセージ】"

TMPPATH="/tmp/vrops_report.pdf"

# # vROps の TOKEN を取得し、対象のレポートリストを取得
TOKEN=`curl -X POST "https://$VROPS_FQDN/suite-api/api/auth/token/acquire" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"username\" : \"$VROPS_USER\", \"password\" : \"$VROPS_PASSWORD\"}" -k | jq -r .token`
REPORTS=`curl -X GET "https://$VROPS_FQDN/suite-api/api/reports?name=$VROPS_REPORT_NAME&status=COMPLETED&_no_links=true" -H "accept: application/json" -H "Authorization: vRealizeOpsToken $TOKEN" -k`
LENGTH=`echo $REPORTS | jq -r "[.reports[]] | length"`

# vROps の対象のレポートから最新のファイルをダウンロード
if [ "$LENGTH" != "" ] ;
then
  i=0
  SDATE="19700101000000"
  while [ $i -lt $LENGTH ];
  do
    TMP=`echo $REPORTS | jq ".reports[$i].completionTime"`
    TDATE=`python -c "import datetime;print(datetime.datetime.strptime($TMP, \"%a %b %d %H:%M:%S JST %Y\").strftime(\"%Y%m%d%H%M%S\"))"`
    if [ $SDATE -lt $TDATE ] ;
    then
      SDATE=$TDATE
      ID=`echo $REPORTS | jq -r ".reports[$i].id"`
    fi
    i=`expr $i + 1`
  done
else
  exit 1
fi
curl -X GET "https://$VROPS_FQDN/suite-api/api/reports/$ID/download?_no_links=true" -H "accept: application/pdf" -H "Authorization: vRealizeOpsToken $TOKEN" -o $TMPPATH -k

# Slack へのポスト
curl -X POST "https://slack.com/api/files.upload" -F channels=$SLACK_CHANNEL -F token=$SLACK_TOKEN -F file=@$TMPPATH -F filename=`date +"%Y%m%d"`.pdf -F title=$SLACK_TITLE -F initial_comment=$SLACK_COMMENT

# 不要ファイルは削除
rm $TMPPATH

以下愚痴苦労話

1.レポートリスト取得の検索条件

vROps のレポートリスト、人に優しく使えそうな項目としてはレポート名ぐらいかな(reportDefinitionId 条件に無いし…)ということで、仕様的に vROps のレポート名を URL エンコードして投げるわけですが…

VROPS_REPORT_NAME=【対象のレポート名を URL エンコード】
【中略】
REPORTS=`curl -X GET "https://$VROPS_FQDN/suite-api/api/reports?name=$VROPS_REPORT_NAME&status=COMPLETED&_no_links=true" -H "accept: application/json" -H "Authorization: vRealizeOpsToken $TOKEN" -k`

どうも vROps にプリセットで入っているレポート、日本語名とは別に実体は英語名らしく(?)、日本語名を URL エンコードして検索投げてもひっかからない…
英語名はブラウザ設定の言語で英語を最優先すれば取れますが、なんなのコレ…

例. "[VOA] サマリ レポート" → "%5BVOA%5D+Summary+Report"

ちなみに Swagger 上だと日本語をエンコードした値で正しく動くのでタチが悪い…
あと、クローンしたり新規で作成したものは日本語(しかないから?)ひっかかるっぽい。
(書いていて気付いたが、HTTP ヘッダの言語設定を見ているのかも)

2.最新のレポートが分からない

レポートの API を叩くと対象のレポート一覧が json で帰ってくる。

{
  "pageInfo": {
    "totalCount": 10,
    "page": 0,
    "pageSize": 1000
  },
  "reports": [
    {
      "id": "2344e840-db9f-4182-a747-851ae8dfe4b8",
      "description": "[VOA] サマリ レポート",
      "resourceId": "a7644013-3204-449e-b0e1-b9316a2c292d",
      "reportDefinitionId": "7e795e6f-e3e9-43e3-b772-6bceb6cbd533",
      "subject": [],
      "owner": "report",
      "completionTime": "Mon Dec 12 00:02:10 JST 2022",
      "status": "COMPLETED"
    },
    {
      "id": "645c400b-c2bc-40e6-ba75-e36309c920db",
      "description": "[VOA] サマリ レポート",
      "resourceId": "a7644013-3204-449e-b0e1-b9316a2c292d",
      "reportDefinitionId": "7e795e6f-e3e9-43e3-b772-6bceb6cbd533",
      "subject": [],
      "owner": "report",
      "completionTime": "Wed Dec 14 00:01:13 JST 2022",
      "status": "COMPLETED"
    },
  【以下略】

この一覧(.reports の配列)が順序保証がなく、世代を判定する項目を持っていないので、
レポートの中でどれが最新かを判断するのは全てのレポートから項目を取り出し比較する必要があり、かなり面倒…
サンプルだと while ブン回している辺りがその辺。

まぁ、これは百歩譲れるが、問題は比較に使える項目よ

3.謎の日付書式

項目中に完了日時があるので、それを比較すればどれが最新化は分かりそうですが…

     "completionTime": "Mon Dec 12 00:02:10 JST 2022",

何なのこの書式!!!

今回最大の謎、別に RFC とかでの規定フォーマットでも無いし…
date コマンドでの parse はできないし、文字列(月略称)混ざっているおかげで順序並べ替えだけでも対応できないし…

というわけで致し方なく、インライン python で整形。

TDATE=`python -c "import datetime;print(datetime.datetime.strptime($TMP, \"%a %b %d %H:%M:%S JST %Y\").strftime(\"%Y%m%d%H%M%S\"))"`

それを大小比較してなんとか最新を探すことに。

    if [ $SDATE -lt $TDATE ] ;
    then
      SDATE=$TDATE
      ID=`echo $REPORTS | jq -r ".reports[$i].id"`
    fi

4.ファイルのダウンロード

レポートのダウンロードは ID 指定なので、最新のレポートさえ分かってしまえば大したことなく…

curl -X GET "https://$VROPS_FQDN/suite-api/api/reports/$ID/download?_no_links=true" -H "accept: application/pdf" -H "Authorization: vRealizeOpsToken $TOKEN" -o $TMPPATH -k

5.Slack 投稿以降

ファイル添付は Webhook からは出来ず、https://api.slack.com/apps からアプリを作成、Channel に招待し Token を発行しておき POST。この辺りはチャットツールによりけりですが、REST API からの POST が一般的じゃないですかね…

なんとか動いた…

むかーし(6.x 時代)も似たようなスクリプト書いたことあったけど、ここまで大変じゃなかったような…というより、日付書式がまともだった気がするけど…

あのー、Windows 環境なんですけど…

そんなあなたに PowerShell 版もございます。
PowerShell 7.3.0 で確認。
(※ Invoke-WebRequest の -Form を使っているので PowerShell 6.1 以降は必須のはず)

# 各種パラメータ
$VROPS_FQDN="【vROps IP or FQDN】"
$VROPS_USER="【vROps のユーザ】"
$VROPS_PASSWORD="【vROps のパスワード】"
$VROPS_REPORT_NAME="【対象のレポート名を URL エンコード】"

$SLACK_CHANNEL="【Slack のチャンネルID】"
$SLACK_TOKEN="【Slack API の TOKEN】"
$SLACK_TITLE="【Slack に投稿するタイトル】"
$SLACK_COMMENT="【Slack に投稿するメッセージ】"

$TMPPATH="$env:TEMP/vrops_report.pdf"
$DATE=Get-Date
$DATE=$DATE.ToString("yyyyMMdd")

# vROps の TOKEN を取得し、対象のレポートリストを取得
$AUTH_JSON=Invoke-WebRequest -Headers @{"Content-type"="application/json";"accept"="application/json"} -Method POST -Body "{`"username`":`"$VROPS_USER`",`"password`":`"$VROPS_PASSWORD`"}" -Uri "https://$VROPS_FQDN/suite-api/api/auth/token/acquire" -SkipCertificateCheck | ConvertFrom-Json
$TOKEN=$AUTH_JSON.token
$REPORTS_JSON=Invoke-WebRequest -Headers @{"Content-type"="application/json";"accept"="application/json";"Authorization"="vRealizeOpsToken $TOKEN"} -Method GET -Uri "https://$VROPS_FQDN/suite-api/api/reports?name=$VROPS_REPORT_NAME&status=COMPLETED&_no_links=true" -SkipCertificateCheck | ConvertFrom-Json

# vROps の対象のレポートから最新のファイルをダウンロード
$SDATE=Get-Date -Year 1970 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0
$ID=""
for($i = 0; $i -lt $REPORTS_JSON.reports.Length; $i++)
{
    $TDATE=[DateTime]::ParseExact($REPORTS_JSON.reports.completionTime[$i], "ddd MMM dd HH:mm:ss JST yyyy", [System.Globalization.CultureInfo]::CreateSpecificCulture("en-US")).ToString()
    if($SDATE -lt $TDATE)
    {
        $SDATE=$TDATE
        $ID=$REPORTS_JSON.reports.id[$i]
    }
}
Invoke-WebRequest -Headers @{"Content-type"="application/json";"accept"="application/json";"Authorization"="vRealizeOpsToken $TOKEN"} -Method GET -Uri "https://$VROPS_FQDN/suite-api/api/reports/$ID/download?_no_links=true" -OutFile $TMPPATH -SkipCertificateCheck

# Slack へのポスト
Invoke-WebRequest -Form @{"token"=$SLACK_TOKEN;"channels"=$SLACK_CHANNEL;"title"=$SLACK_TITLE;"initial_comment"=$SLACK_COMMENT;"filename"="$DATE.pdf";"file"=Get-Item -Path $TMPPATH}  -Method POST -Uri "https://slack.com/api/files.upload"

# 不要ファイルは削除
Remove-Item $TMPPATH

PowerShell .NET オブジェクトを扱えるので、あの日付書式も扱えて楽だわね…

PowerCLI13 で VMware.ImageBuilder がマルチプラットフォーム対応にしたので試してみる

PowerCLI 13 is now GA!

blogs.vmware.com vdc-repo.vmware.com 世間的には vSphere8 対応、vSAN ESA 対応、Horizon 8 2209 辺りが大きそうですが、
個人的な注目は…

・The VMware.ImageBuilder and VMware.DeployAutomation modules have been ported to work on macOS and Linux.

全 homelab ユーザ待望、VMware.ImageBuilder がようやく Mac/Linux に対応!

Prerequirements

そんな VMware.ImageBuilder ですが、現状では前提が。

・The VMware.ImageBuilder module now requires Python 3.7 and the six, psutil, lxml, and pyopenssl Python packages as a prerequisite.

要件として Python 3.7 Python の Package として

  • six
  • psutil
  • lxml
  • pyopenssl

が必要とのこと。Python を利用する形なのね…
また、PowerCLI に対し、Python3.7 のパスを設定しておく必要がある。

We have also introduced a PowerCLI setting that allows you to set the path to the Python 3.7 installation. For this setting you can use
Set-PowerCLIConfiguration -PythonPath "<path to the Python installation>"

Ubuntu 20.04 on WSL2 で試してみる

PowerCLI 環境作成

Ubuntu 上に PowerShell 入っていなかったのでインストールから。

% sudo apt install powershell

PowerShell Core になって apt で入れられるのは楽になりました…
PowerShell を起動する。

% pwsh
PowerShell 7.2.4
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

   A new PowerShell stable release is available: v7.3.0
   Upgrade now, or check out the release page at:
     https://aka.ms/PowerShell-Release?tag=v7.3.0

PS /home/mirie>

# v7.3.0 リリースされてるでと出てくるが、一旦スルー
PowerCLI をインストールする。

PS /home/mirie> Install-Module VMware.PowerCLI

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
PS /home/mirie>

インストール完了。
バージョンを確認してみる。

PS /home/mirie> Get-InstalledModule VMware.PowerCLI

Version              Name                                Repository           Description
-------              ----                                ----------           -----------
13.0.0.20829139      VMware.PowerCLI                     PSGallery            This Windows PowerShell module contains …

PS /home/mirie> Get-InstalledModule VMware.ImageBuilder

Version              Name                                Repository           Description
-------              ----                                ----------           -----------
8.0.0.20817746       VMware.ImageBuilder                 PSGallery            This Windows PowerShell module contains …

PowerCLI は 13 系に対し、VMware.ImageBuilder は 8 系になるんですね。

CEIP の確認が毎回出てくるのは邪魔なので true で設定しておく。

PS /home/mirie> Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $true

Python 3.8 環境で強行突破してみる

Ubuntu 20.04 にデフォルトで入っている Python は 3.8.10...

% python3 --version
Python 3.8.10

3.7 より新しいし、実はイケるんじゃないかな…試してみる。

PS /home/mirie> Set-PowerCLIConfiguration -PythonPath /usr/bin/python3

Perform operation?
Performing operation 'Update VMware.PowerCLI configuration.'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Unset                     True                       300
User
AllUsers

PS /home/mirie> Add-EsxSoftwareDepot /mnt/c/Engneering/vsphere/VMware-ESXi-7.0U3g-20328353-depot.zip
RuntimeError: Bad magic number in .pyc file
Add-EsxSoftwareDepot: Could not initialize the VMware.ImageBuilder PowerCLI module. Make sure that Python 3.7 is installed and that you have set the path to the Python executable by using Set-PowerCLIConfiguration -PythonPath. See the PowerCLI Compatibility Matrixes for information on the Python requirements.

案の定失敗…
(Bad magic number in .pyc filePython のテンポラリなバイトコードらしく、これがバージョン依存になっているぽい?)
(テンポラリなので .pyc を探して消してしまえば良さそうな気もするが…)

Python3.7 環境を作る

大人しく Python 3.7 環境を作るか…
↓を参考に apt で Python3.7 をインストール。 qiita.com

# リポジトリの追加
% sudo apt install -y software-properties-common
% sudo add-apt-repository ppa:deadsnakes/ppa

# 追加したリポジトリのパッケージ情報更新
% sudo apt update

# Python3.7 のインストール
% sudo apt install -y python3.7

# python3.7 で追加されているはず
% python3.7 --version
Python 3.7.15

これだけだと Prerequirement の Package が入っていないので、
Python 3.7 用の pip をインストールし、Package を追加していく。

# distutils が無いと pip のインストールがコケるので。
% sudo apt install python3.7-distutils

# インストーラの入手
% curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

# インストールの実行
% python3.7 get-pip.py
Defaulting to user installation because normal site-packages is not writeable
Collecting pip
  Using cached pip-22.3.1-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  WARNING: The scripts pip, pip3 and pip3.7 are installed in '/home/mirie/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-22.3.1

インストールに成功すると $HOME/.local/bin 下に pip のバイナリができる。
それを使って Package をインストール。

% .local/bin/pip install six psutil lxml pyopenssl
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: six in /usr/lib/python3/dist-packages (1.14.0)
Collecting psutil
  Downloading psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (280 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 280.2/280.2 kB 1.4 MB/s eta 0:00:00
Collecting lxml
  Downloading lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (6.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 3.8 MB/s eta 0:00:00
Requirement already satisfied: pyopenssl in /usr/lib/python3/dist-packages (19.0.0)
Installing collected packages: psutil, lxml
Successfully installed lxml-4.9.1 psutil-5.9.4

これで再度 PowerCLI を試す。

PS /home/mirie> Set-PowerCLIConfiguration -PythonPath /usr/bin/python3.7

Perform operation?
Performing operation 'Update VMware.PowerCLI configuration.'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y

Scope    ProxyPolicy     DefaultVIServerMode InvalidCertificateAction  DisplayDeprecationWarnings WebOperationTimeout
                                                                                                  Seconds
-----    -----------     ------------------- ------------------------  -------------------------- -------------------
Session  UseSystemProxy  Multiple            Unset                     True                       300
User
AllUsers

PS /home/mirie> Add-EsxSoftwareDepot /mnt/c/Engneering/vsphere/VMware-ESXi-7.0U3g-20328353-depot.zip

Depot Url
---------
zip:/mnt/c/Engneering/vsphere/VMware-ESXi-7.0U3g-20328353-depot.zip?index.xml

おぉ、Add-EsxSoftwareDepot が通った(以前は通らなかった)
ISO イメージ出力するところまで試してみる。

# イメージプロファイルの一覧
PS /home/mirie> Get-EsxImageProfile

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-7.0U3g-20328353-no-tools  VMware, Inc.    2022/08/23 3:0… PartnerSupported
ESXi-7.0U3g-20328353-standard  VMware, Inc.    2022/09/01 0:0… PartnerSupported

# イメージプロファイルから ISO の生成
PS /home/mirie> Export-EsxImageProfile -ImageProfile ESXi-7.0U3g-20328353-standard -ExportToIso ./ESXi-7.0U3g-20328353-standard.iso
PS /home/mirie>

cmdlet 通りましたわー
出力された ISO を見てみる。

# ファイルタイプ確認
% file ESXi-7.0U3g-20328353-standard.iso
ESXi-7.0U3g-20328353-standard.iso: ISO 9660 CD-ROM filesystem data 'ESXI-7.0U3G-20328353-STANDARD' (bootable)

# マウントして中身を見てみる。
% sudo mount -t iso9660 ./ESXi-7.0U3g-20328353-standard.iso /mnt/iso
mount: /mnt/iso: WARNING: device write-protected, mounted read-only.
% ls /mnt/iso/
atlantic.v00  esx_ui.v00     ixgben.v00    lsuv2_oe.v02  nvmerdma.v00  safeboot.c32  vmkusb.v00
b.b00         esxio_co.v00   jumpstrt.gz   lsuv2_sm.v00  nvmetcp.v00   sb.v00        vmw_ahci.v00
basemisc.tgz  esxupdt.v00    k.b00         mboot.c32     nvmxnet3.v00  sfvmk.v00     vmware-esx-base-osl.txt
bmcal.v00     fatbootsector  ldlinux.sys   menu.c32      nvmxnet3.v01  smartpqi.v00  vmware-esx-base-readme
bnxtnet.v00   features.gz    loadesx.v00   mtip32xx.v00  procfs.b00    tools.t00     vmware_e.v00
bnxtroce.v00  gc.v00         lpfc.v00      native_m.v00  pvscsi.v00    tpm.v00       vmx.v00
boot.cat      i40en.v00      lpnic.v00     ne1000.v00    qcnic.v00     tpmesxup.v00  vsan.v00
boot.cfg      iavmd.v00      lsi_mr3.v00   nenic.v00     qedentv.v00   trx.v00       vsanheal.v00
brcmfcoe.v00  icen.v00       lsi_msgp.v00  nfnic.v00     qedrntv.v00   uc_amd.b00    vsanmgmt.v00
btldr.v00     igbn.v00       lsi_msgp.v01  nhpsa.v00     qfle3.v00     uc_hygon.b00  weaselin.v00
crx.v00       imgdb.tgz      lsi_msgp.v02  nmlx4_co.v00  qfle3f.v00    uc_intel.b00  xorg.v00
efi           imgpayld.tgz   lsuv2_hp.v00  nmlx4_en.v00  qfle3i.v00    upgrade
efiboot.img   ionic_en.v00   lsuv2_in.v00  nmlx4_rd.v00  qflge.v00     useropts.gz
elx_esx_.v00  irdman.v00     lsuv2_ls.v00  nmlx5_co.v00  qlnative.v00  vdfs.v00
elxiscsi.v00  iser.v00       lsuv2_nv.v00  nmlx5_rd.v00  resvibs.tgz   vim.v00
elxnet.v00    isolinux.bin   lsuv2_oe.v00  ntg3.v00      rste.v00      vmkata.v00
esx_dvfi.v00  isolinux.cfg   lsuv2_oe.v01  nvme_pci.v00  s.v00         vmkfcoe.v00

いけてそう。

レガシー PowerCLI を投げ捨てろ

Mac は手元に環境無いので試してないですが、Linux がいけるならまぁ大丈夫でしょ…
ということで、今までは非 Core (PowerShell 5.1以下)環境の PowerCLI でしか動かなかった VMware.ImageBuilder がやっっっと対応してくれましたので、これでようやく 古い PowerCLI は投げ捨てられるし、非 Windows 環境の homelab な人たちもアレコレ悩むことなくカスタムイメージ作成に励めそうですね。

Have a Happy Custom Image Life!(?)