92 lines
2.7 KiB
Crystal
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
|