Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 7 additions & 82 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,37 +30,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
&& update-ca-certificates \
&& rm -rf /var/lib/apt/lists/*

# Install cross-compiler for ARM64 if building for arm64 on an amd64 host
RUN if [ "$TARGETARCH" = "arm64" ] && [ "$BUILDARCH" = "amd64" ]; then \
dpkg --add-architecture arm64 && \
apt-get update && apt-get install -y --no-install-recommends \
gcc-aarch64-linux-gnu librbd-dev:arm64 librados-dev:arm64 libc6-dev:arm64; \
fi

# Install cross-compiler for AMD64 if building for amd64 on an arm64 host
RUN if [ "$TARGETARCH" = "amd64" ] && [ "$BUILDARCH" = "arm64" ]; then \
apt update && \
apt-get install -y --no-install-recommends \
gcc-x86-64-linux-gnu; \
fi
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg \
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o libvirt-provider ./cmd/libvirt-provider/main.go

# Set compiler and linker flags based on target architecture
ENV CC=""
ENV CGO_LDFLAGS=""

RUN if [ "$TARGETARCH" != "$BUILDARCH" ] && [ "$TARGETARCH" = "arm64" ]; then \
export CC="/usr/bin/aarch64-linux-gnu-gcc"; \
export CGO_LDFLAGS="-L/usr/lib/aarch64-linux-gnu -Wl,-lrados -Wl,-lrbd"; \
elif [ "$TARGETARCH" != "$BUILDARCH" ] && [ "$TARGETARCH" = "amd64" ]; then \
export CC="/usr/bin/x86_64-linux-gnu-gcc"; \
export CGO_LDFLAGS="-L/usr/lib/x86_64-linux-gnu -Wl,-lrados -Wl,-lrbd"; \
else \
export CC="/usr/bin/gcc"; \
export CGO_LDFLAGS=""; \
fi && \
CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH \
CC="$CC" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -ldflags="-s -w -linkmode=external" -o libvirt-provider ./cmd/libvirt-provider/main.go

# Install irictl-machine
RUN --mount=type=cache,target=/root/.cache/go-build \
Expand All @@ -75,63 +49,14 @@ RUN if [ "$TARGETARCH" = "$BUILDARCH" ]; then \
mv /go/bin/linux_$TARGETARCH/irictl-machine /workspace/irictl-machine; \
fi


FROM busybox:1.37.0-uclibc AS busybox

# Since we're leveraging apt to pull in dependencies, we use `gcr.io/distroless/base` because it includes glibc.
FROM gcr.io/distroless/base-debian11 AS distroless-base

# The distroless amd64 image has a target triplet of x86_64
FROM distroless-base AS distroless-amd64
ENV LIB_DIR_PREFIX=x86_64
ENV LIB_DIR_PREFIX_MINUS=x86-64
ENV LIB_DIR_SUFFIX_NUMBER=2
ENV LIB_DIR=lib64

# The distroless arm64 image has a target triplet of aarch64
FROM distroless-base AS distroless-arm64
ENV LIB_DIR_PREFIX=aarch64
ENV LIB_DIR_PREFIX_MINUS=aarch64
ENV LIB_DIR_SUFFIX_NUMBER=1
ENV LIB_DIR=lib
FROM gcr.io/distroless/base-debian11 AS libvirt-provider

FROM busybox:1.37.0-uclibc AS busybox
FROM distroless-$TARGETARCH AS libvirt-provider
WORKDIR /
COPY --from=busybox /bin/sh /bin/sh
COPY --from=busybox /bin/mkdir /bin/mkdir
COPY --from=builder /lib/${LIB_DIR_PREFIX}-linux-gnu/librados.so.2 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/librbd.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libc.so.6 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libfmt.so.9 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libstdc++.so.6 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libgcc_s.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libssl.so.3 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libcryptsetup.so.12 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libcrypto.so.3 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libresolv.so.2 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libboost_thread.so.1.74.0 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libboost_iostreams.so.1.74.0 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libblkid.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libudev.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libibverbs.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/librdmacm.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libm.so.6 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libuuid.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libdevmapper.so.1.02.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libargon2.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libjson-c.so.5 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libz.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libbz2.so.1.0 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/liblzma.so.5 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libzstd.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libnl-route-3.so.200 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libnl-3.so.200 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libselinux.so.1 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libpthread.so.0 \
/lib/${LIB_DIR_PREFIX}-linux-gnu/libpcre2-8.so.0 /lib/${LIB_DIR_PREFIX}-linux-gnu/
RUN mkdir -p /${LIB_DIR}
COPY --from=builder /${LIB_DIR}/ld-linux-${LIB_DIR_PREFIX_MINUS}.so.${LIB_DIR_SUFFIX_NUMBER} /${LIB_DIR}/
RUN mkdir -p /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph/
COPY --from=builder /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph/libceph-common.so.2 /usr/lib/${LIB_DIR_PREFIX}-linux-gnu/ceph
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

COPY --from=builder /workspace/libvirt-provider /libvirt-provider
COPY --from=builder /workspace/irictl-machine /irictl-machine
Expand Down
11 changes: 6 additions & 5 deletions api/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,12 @@ type EmptyDiskSpec struct {
}

type VolumeConnection struct {
Driver string ` json:"driver,omitempty"`
Handle string ` json:"handle,omitempty"`
Attributes map[string]string ` json:"attributes,omitempty"`
SecretData map[string][]byte ` json:"secret_data,omitempty"`
EncryptionData map[string][]byte ` json:"encryption_data,omitempty"`
Driver string ` json:"driver,omitempty"`
Handle string ` json:"handle,omitempty"`
Attributes map[string]string ` json:"attributes,omitempty"`
SecretData map[string][]byte ` json:"secret_data,omitempty"`
EncryptionData map[string][]byte ` json:"encryption_data,omitempty"`
EffectiveStorageBytes int64 ` json:"effective_storage_bytes,omitempty"`
}

type VolumeState string
Expand Down
3 changes: 0 additions & 3 deletions cmd/libvirt-provider/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ type Options struct {
RootDir string

PathSupportedMachineClasses string
ResyncIntervalVolumeSize time.Duration

EnableHugepages bool

Expand Down Expand Up @@ -111,7 +110,6 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&o.RootDir, "libvirt-provider-dir", filepath.Join(homeDir, ".libvirt-provider"), "Path to the directory libvirt-provider manages its content at.")

fs.StringVar(&o.PathSupportedMachineClasses, "supported-machine-classes", o.PathSupportedMachineClasses, "File containing supported machine classes.")
fs.DurationVar(&o.ResyncIntervalVolumeSize, "volume-size-resync-interval", 1*time.Minute, "Interval to determine volume size changes.")

fs.StringVar(&o.StreamingAddress, "streaming-address", ":20251", "Address to run the streaming server on")
fs.StringVar(&o.BaseURL, "base-url", "", "The base url to construct urls for streaming from. If empty it will be "+
Expand Down Expand Up @@ -314,7 +312,6 @@ func Run(ctx context.Context, opts Options) error {
Raw: rawInst,
VolumePluginManager: volumePlugins,
NetworkInterfacePlugin: nicPlugin,
ResyncIntervalVolumeSize: opts.ResyncIntervalVolumeSize,
ResyncIntervalGarbageCollector: opts.ResyncIntervalGarbageCollector,
EnableHugepages: opts.EnableHugepages,
GCVMGracefulShutdownTimeout: opts.GCVMGracefulShutdownTimeout,
Expand Down
27 changes: 13 additions & 14 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@ toolchain go1.24.1

require (
github.com/blang/semver/v4 v4.0.0
github.com/ceph/go-ceph v0.33.0
github.com/containerd/containerd v1.7.27
github.com/digitalocean/go-libvirt v0.0.0-20250417173424-a6a66ef779d6
github.com/digitalocean/go-libvirt v0.0.0-20250512231903-57024326652b
github.com/go-chi/chi/v5 v5.2.1
github.com/go-logr/logr v1.4.2
github.com/go-logr/logr v1.4.3
github.com/google/uuid v1.6.0
github.com/ironcore-dev/controller-utils v0.9.9
github.com/ironcore-dev/ironcore v0.2.3
github.com/ironcore-dev/ironcore v0.2.4-0.20250605101147-768826bd8776
github.com/ironcore-dev/ironcore-image v0.2.4
github.com/ironcore-dev/ironcore-net v0.2.3
github.com/ironcore-dev/provider-utils v0.0.0-20250409071032-ef57cc16e3c6
github.com/ironcore-dev/provider-utils v0.0.0-20250603083958-8628d8f587bc
github.com/moby/term v0.5.2
github.com/onsi/ginkgo/v2 v2.23.4
github.com/onsi/gomega v1.37.0
Expand All @@ -25,13 +24,13 @@ require (
github.com/shirou/gopsutil/v3 v3.24.5
github.com/spf13/cobra v1.9.1
github.com/spf13/pflag v1.0.6
golang.org/x/sync v0.14.0
google.golang.org/grpc v1.72.1
golang.org/x/sync v0.15.0
google.golang.org/grpc v1.73.0
k8s.io/api v0.33.1
k8s.io/apimachinery v0.33.1
k8s.io/client-go v0.33.1
k8s.io/kubectl v0.33.1
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
libvirt.org/go/libvirtxml v1.11004.0
sigs.k8s.io/controller-runtime v0.21.0
)
Expand Down Expand Up @@ -113,14 +112,14 @@ require (
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.37.0 // indirect
golang.org/x/net v0.39.0 // indirect
golang.org/x/crypto v0.38.0 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/oauth2 v0.29.0 // indirect
golang.org/x/sys v0.32.0 // indirect
golang.org/x/term v0.31.0 // indirect
golang.org/x/text v0.24.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.11.0 // indirect
golang.org/x/tools v0.32.0 // indirect
golang.org/x/tools v0.33.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250421163800-61c742ae3ef0 // indirect
Expand Down
Loading
Loading