arkisto/src/lib/actions/apply.cr
2022-08-18 21:47:42 +02:00

92 lines
2.7 KiB
Crystal

require "../openstack"
require "../actions"
module Arkisto
class ApplyAction < Action
def initialize(config : ConfigModel, options : ActionOptions)
puts "action = Apply"
@config = config
end
# First create today's backup
# Then remove old backups
def perform
_create_backup_all
_delete_backup_all
return
end
def _create_backup_all
puts "_create_backup_all".colorize(:yellow)
os_volumes = OpenStack.volume_list
@config.targets.each do |config_volume_item|
os_volume_item =
os_volumes.select {|vol| vol.id == config_volume_item.volume_id }.first?
if os_volume_item.nil?
puts " ERROR: no volume found with this id".colorize(:red)
exit(1)
end
_create_backup(config_volume_item, os_volume_item)
end
end
def _create_backup(config_item : TargetItemModel, volume_item : OSVolume::ListItemModel)
puts "_create_backup".colorize(:yellow)
puts "+ openstack volume snapshot #{config_item.name.colorize(:yellow)} {"
puts "+ volume_id #{config_item.volume_id}"
puts "+ name #{volume_item.name}"
puts "+ size #{volume_item.size}"
puts "+ }"
created_volume = OpenStack.volume_snapshot_create(volume_item, config_item.name)
end
def _delete_backup_all
puts "_delete_backup_all".colorize(:yellow)
os_volumes = OpenStack.volume_list
os_all_snapshots = OpenStack.volume_snapshot_list
@config.targets.each do |config_volume_item|
os_volume_item = os_volumes.select {|vol|
vol.id == config_volume_item.volume_id
}.try &.first
os_volume_snapshots = os_all_snapshots.select {|snap|
snap.volume == config_volume_item.volume_id
}
os_volume_snapshots.each do |snap_item|
_delete_backup(config_volume_item, snap_item)
pp snap_item
end
# _delete_backup(config_volume_item, os_volume_snapshot_item)
# volume_snapshots.each do |target_snapshot|
# os_volume_item =
# os_volumes.select {|vol| vol.id == config_volume_item.volume_id }.first
end
end
def _delete_backup(config_item : TargetItemModel, snap_item : OSVolume::SnapshotListItemModel)
puts "_delete_backup".colorize(:yellow)
puts "- openstack volume snapshot #{config_item.name.colorize(:yellow)} {"
puts "- volume_id #{config_item.volume_id}"
puts "- created_at #{snap_item.created_at}"
puts "- snap_id #{snap_item.id}"
puts "- name #{snap_item.name}"
puts "- size #{snap_item.size}"
puts "- }"
pp config_item
pp snap_item
# FIXME: not implemented
end
end
end