98 lines
3.9 KiB
Ruby
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
|