Packer với OpenStack plugin cho phép build immutable VM images và push thẳng vào Glance. Pattern này tạo ra một image lifecycle có kiểm soát: build → validate → approve — thay vì import images thủ công và không có versioning.
Packer Template Cấu Trúc
packer {
required_plugins {
openstack = {
source = "github.com/hashicorp/openstack"
version = "~> 1"
}
}
}
source "openstack" "ubuntu_pg16" {
image_name = "ubuntu-24.04-pg16-candidate"
source_image_name = "ubuntu-24.04-base"
flavor = "m1.medium"
networks = ["provider-net-id"]
use_floating_ip = false # Quan trọng: không cần floating IP
communicator = "ssh"
ssh_username = "ubuntu"
}
build {
sources = ["source.openstack.ubuntu_pg16"]
provisioner "shell" {
scripts = ["scripts/install-postgresql.sh"]
}
}use_floating_ip = false
Mặc định Packer tạo floating IP để SSH vào build VM. Trong môi trường không có floating IP (hoặc dùng static route như lab này), phải set:
use_floating_ip = falsePacker sẽ dùng direct provider-net IP của build VM để SSH. Điều này yêu cầu build host (tools-1) có thể reach provider network trực tiếp — đúng với openstack-provider-net-routing.
Image Lifecycle: candidate → approved
Một pattern kiểm soát chất lượng image:
- Build: Packer push image với name suffix
-candidatevào Glance - Validate: Boot một VM từ candidate image, chạy smoke tests (PostgreSQL start, basic queries)
- Promote: Rename image sang
-approvedsau khi validate pass - Cleanup: Xóa candidate image (hoặc retain với
archivedtag)
# Promote candidate to approved
openstack image set --name "ubuntu-24.04-pg16-approved" \
$(openstack image show ubuntu-24.04-pg16-candidate -f value -c id)
# Tag với metadata
openstack image set --property status=approved \
--property build-date=$(date +%Y-%m-%d) \
<image-id>Glance Metadata Tagging
Tags trong Glance giúp Trove và automation tools filter đúng image:
openstack image set \
--property db_type=postgresql \
--property db_version=16 \
--property os_version=24.04 \
<image-id>Trove sử dụng image_tags filter trong datastore config để tìm đúng image.
Connections
- openstack-provider-net-routing —
use_floating_ip = falsecần static route - openstack-trove-postgresql-ha — approved image được Trove dùng để tạo instances
- openstack-external-network-mapping — provider network topology