ubicloud/kubernetes/csi/bin/ubi-csi-server
mohi-kalantari 77218bf77b Allow setting the max limit of CSI using env var
DISK_LIMIT_GB is introduced in this PR which allows us to set a
dynamic size for the max limit
2025-09-24 11:59:14 +02:00

58 lines
1.7 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# frozen_string_literal: true
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
require "bundler/setup"
require "ubi_csi"
require "logger"
$stdout.sync = true
logger = Logger.new($stdout)
logger.level = $VERBOSE ? Logger::DEBUG : Logger::INFO
logger.debug("Starting main function")
if (disk_limit_gb_env = ENV["DISK_LIMIT_GB"])
disk_limit_gb = begin
Integer(disk_limit_gb_env)
rescue
0
end
if disk_limit_gb <= 0
raise "DISK_LIMIT_GB environment variable ('#{disk_limit_gb_env}') must be a positive integer."
end
logger.info("Maximum volume size is configured to #{disk_limit_gb}GB via DISK_LIMIT_GB env var.")
end
endpoint = ENV["CSI_ENDPOINT"].dup
raise "CSI_ENDPOINT environment variable is not set" if endpoint.nil?
endpoint.strip!
raise "CSI_ENDPOINT must have unix:// prefix" unless endpoint.start_with?("unix://")
node_id = ENV["NODE_ID"].dup
raise "NODE_ID environment variable is not set" if node_id.nil?
node_id.strip!
raise "NODE_ID cannot be nil" if node_id.empty?
logger.debug("Creating gRPC server")
server = GRPC::RpcServer.new
socket_path = endpoint.sub("unix://", "")
logger.debug("Socket path: #{socket_path}")
File.delete(socket_path) if File.exist?(socket_path)
server.add_http2_port("unix:#{socket_path}", :this_port_is_insecure)
Csi::V1::NodeService.mkdir_p
logger.debug("Registering services")
server.handle(Csi::V1::IdentityService.new(logger:))
server.handle(Csi::V1::ControllerService.new(logger:))
server.handle(Csi::V1::NodeService.new(logger:, node_id:))
logger.debug("Starting UbiCSI server on #{endpoint}")
begin
server.run_till_terminated
rescue => e
warn("Error starting server: #{e.message}\n#{e.backtrace.join("\n")}")
raise
end