Module: ForemanFogProxmox::ProxmoxPools
- Included in:
- ProxmoxVMCommands, ProxmoxVMQueries
- Defined in:
- app/models/foreman_fog_proxmox/proxmox_pools.rb
Instance Method Summary collapse
- #add_vm_to_pool(poolid, vmid) ⇒ Object
- #pool_owner(vm) ⇒ Object
- #pools ⇒ Object
- #remove_vm_from_pool(poolid, vmid) ⇒ Object
- #update_pool(vm, poolid) ⇒ Object
Instance Method Details
#add_vm_to_pool(poolid, vmid) ⇒ Object
52 53 54 55 56 |
# File 'app/models/foreman_fog_proxmox/proxmox_pools.rb', line 52 def add_vm_to_pool(poolid, vmid) logger.debug("add_vm_to_pool(#{poolid}, #{vmid})") pool = identity_client.pools.get poolid pool&.add_server vmid end |
#pool_owner(vm) ⇒ Object
44 45 46 47 48 49 50 |
# File 'app/models/foreman_fog_proxmox/proxmox_pools.rb', line 44 def pool_owner(vm) logger.debug("pool_owner(#{vm&.vmid})") pools_owners = pools.select { |pool| pool.has_server?(vm&.vmid) } pool = pools_owners.first logger.debug("found vm: #{vm&.vmid} member of pool: #{pool&.poolid}") vm&.config&.pool = pool&.poolid end |
#pools ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/models/foreman_fog_proxmox/proxmox_pools.rb', line 22 def pools cached_pools = cache.cache(:pools) do pools = identity_client.pools.all pools.sort_by(&:poolid).map do |pool| extract_attributes(pool, [:poolid, :comment]).merge( members: Array(pool.try(:members)).map do |member| { vmid: member['vmid'] } end ) end end # Store only serializable hashes in the cache. After retrieval we recreate the pool objects and reattach the `has_server?` helper method. Array(cached_pools).map do |pool| OpenStruct.new(pool).tap do |pool_object| pool_object.define_singleton_method(:has_server?) do |vmid| Array(members).any? { |member| member[:vmid].to_s == vmid.to_s || member['vmid'].to_s == vmid.to_s } end end end end |
#remove_vm_from_pool(poolid, vmid) ⇒ Object
58 59 60 61 62 |
# File 'app/models/foreman_fog_proxmox/proxmox_pools.rb', line 58 def remove_vm_from_pool(poolid, vmid) logger.debug("remove_vm_from_pool(#{poolid}, #{vmid})") pool = identity_client.pools.get poolid pool&.remove_server vmid end |
#update_pool(vm, poolid) ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'app/models/foreman_fog_proxmox/proxmox_pools.rb', line 64 def update_pool(vm, poolid) pool_owner(vm) vm_pool = vm.config.pool || '' return if vm_pool.eql?(poolid) remove_vm_from_pool(vm_pool, vm.vmid) add_vm_to_pool(poolid, vm.vmid) end |