Class: Pvectl::Parsers::CloudInitConfig
- Inherits:
-
Object
- Object
- Pvectl::Parsers::CloudInitConfig
- Defined in:
- lib/pvectl/parsers/cloud_init_config.rb
Overview
Parses and converts cloud-init configuration strings for Proxmox VMs.
CloudInitConfig handles the conversion between user-friendly key=value cloud-init specifications and the parameter names required by the Proxmox API. Unlike DiskConfig and NetConfig, all keys are optional.
Constant Summary collapse
- VALID_KEYS =
All recognized cloud-init configuration keys.
%w[user password sshkeys ip gw nameserver searchdomain].freeze
Class Method Summary collapse
-
.parse(string) ⇒ Hash<Symbol, String>
Parses a comma-separated key=value cloud-init config string into a Hash.
-
.to_proxmox_params(config) ⇒ Hash<Symbol, String>
Converts a parsed cloud-init config Hash to Proxmox API parameter names.
Class Method Details
.parse(string) ⇒ Hash<Symbol, String>
Parses a comma-separated key=value cloud-init config string into a Hash.
35 36 37 38 39 40 41 |
# File 'lib/pvectl/parsers/cloud_init_config.rb', line 35 def self.parse(string) pairs = string.split(",").map { |pair| pair.strip.split("=", 2).map(&:strip) } config = pairs.to_h { |k, v| [k.to_sym, v] } validate!(config) config end |
.to_proxmox_params(config) ⇒ Hash<Symbol, String>
Converts a parsed cloud-init config Hash to Proxmox API parameter names.
Maps user-friendly keys to their Proxmox API equivalents:
-
userbecomesciuser -
passwordbecomescipassword -
sshkeysstayssshkeys -
ipbecomesipconfig0with “ip=” prefix -
nameserverstaysnameserver -
searchdomainstayssearchdomain
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/pvectl/parsers/cloud_init_config.rb', line 63 def self.to_proxmox_params(config) params = {} params[:ciuser] = config[:user] if config[:user] params[:cipassword] = config[:password] if config[:password] params[:sshkeys] = config[:sshkeys] if config[:sshkeys] if config[:ip] ip_str = "ip=#{config[:ip]}" ip_str += ",gw=#{config[:gw]}" if config[:gw] params[:ipconfig0] = ip_str end params[:nameserver] = config[:nameserver] if config[:nameserver] params[:searchdomain] = config[:searchdomain] if config[:searchdomain] params end |