pve/lib/pve/cli/storage.rb

98 lines
3.9 KiB
Ruby

class PVE::Cli
def cli_storage
cli.sub :storage, "Storages", min: 3 do |cli_sm|
cli_sm.cmd :list, "List Storages", aliases: ['ls'], &lambda {|node=nil|
connect
nodes = node ? [Proxmox::Node.find_by_name!( node)] : Proxmox::Node.all
nodes.flat_map do |n|
n.lxc.map {|c| c.vmid.to_i }
end.sort.each {|c| puts c }
}
cli_sm.cmd :status, "List Storages with status", aliases: [nil], &lambda {|node=nil|
connect
to = TablizedOutput.new %w[A E S Storage Host Type]
nodes = node ? [Proxmox::Node.find_by_name!( node)] : Proxmox::Node.all
nodes.each do |n|
n.storage.each do |v|
to.push [
case v.active
when 1 then ColoredString.new 'Y', "32"
when 0 then ColoredString.new 'n', "31"
else v.active.to_s
end,
case v.enabled
when 1 then ColoredString.new 'Y', "32"
when 0 then ColoredString.new 'n', "31"
else v.enabled.to_s
end,
1 == v.shared ? 's' : 'l', v.storage, v.node.node, v.type
]
end
end
to.print order: [4,5]
}
cli_sm.sub :content, "Content of Storage", aliases: ['cnt'] do |cli_cnt|
cli_cnt.cmd :list, "List Content", aliases: ['ls'], &lambda {|node=nil, storage|
connect
node = node ? Proxmox::Node.find_by_name!( node) : Proxmox::Node.all.first
storage = node.storage.select {|sm| storage == sm.storage }.first
storage.content.each {|c| puts c.to_s }
}
cli_cnt.cmd( :help, '', aliases: ['-h', '--help', nil]) {|*args| help cli_cnt, *args }
end
cli_sm.cmd( :help, '', aliases: ['-h', '--help']) {|*args| help cli_sm, *args }
#cli_sm.provide_help
end
cli.sub :apl, "Appliances - Downloadable container images", min: 3 do |cli_apl|
cli_apl.cmd( :content, "Table of all provided appliances", aliases: [nil], &lambda {|node:, regexp:, system:, applications:|
connect
appliances node, regexp, system, applications
}).
opt( :node, '-n=NODE', '--node', 'Ask this node for appliances (any node should list the same)', default: nil).
opt( :regexp, '-r=REGEXP', '--regexp', 'Filter by template', default: nil).
opt( :system, '-s', '--system', 'Only system templates', default: nil).
opt( :applications, '-a', '--applications', 'Only applications (non system) templates', default: nil)
cli_apl.cmd( :system, "Table of provided systems", &lambda {|node:, regexp:|
connect
appliances node, regexp, true, nil
}).
opt( :node, '-n=NODE', '--node', 'Ask this node for appliances (any node should list the same)', default: nil).
opt( :regexp, '-r=REGEXP', '--regexp', 'Filter by template', default: nil)
cli_apl.cmd( :applications, "Table of provided applications", &lambda {|node:, regexp:|
connect
appliances node, regexp, nil, true
}).
opt( :node, '-n=NODE', '--node', 'Ask this node for appliances (any node should list the same)', default: nil).
opt( :regexp, '-r=REGEXP', '--regexp', 'Filter by template', default: nil)
cli_apl.cmd( :list, "List provided appliances", aliases: ['ls'], &lambda {|node=nil, regexp:|
connect
node = node ? Proxmox::Node.find_by_name!( node) : Proxmox::Node.all.first
node.aplinfo.each do |apl|
puts apl.template
end
}).
opt( :regexp, '-r=REGEXP', '--regexp', 'Filters by name', default: nil)
cli_apl.cmd :download, "Download appliance", aliases: ['dl'], min: 2, &lambda {|template, node, storage=nil|
storage ||= 'local'
connect
node = Proxmox::Node.find_by_name! node
apl = node.aplinfo.find {|apl| apl.template == template }
raise UsageError, "Appliance not found" unless apl
task = apl.download storage
wait task, text: "Download #{apl.template} on #{node.node} to #{storage}"
}
cli_apl.cmd( :help, '', aliases: ['-h', '--help']) {|*args| help cli_apl, *args }
end
end
end