Class: Zsnap::FSInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/zsnap.rb

Instance Method Summary collapse

Constructor Details

#initialize(fs_name, values) ⇒ FSInfo

Returns a new instance of FSInfo.



95
96
97
98
99
100
101
102
103
104
105
# File 'lib/zsnap.rb', line 95

def initialize(fs_name, values)
  @name = fs_name
  raise "Filesystem #{fs_name} has no creation rule" unless values['creation_rule']
  raise "Filesystem #{fs_name} has no preservation rules" unless values['preservation_rules']

  @creation_rule = Rule.new(values['creation_rule'])
  @preservation_rules = values['preservation_rules'].map do |value|
    PreservationRule.new(value)
  end
  @is_recursive = values['recursive'] ? true : false
end

Instance Method Details

#create?(now_minutes) ⇒ Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/zsnap.rb', line 107

def create?(now_minutes)
  @creation_rule.condition_met?(now_minutes)
end

#create_snapshot(now_minutes, prefix) ⇒ Object



132
133
134
135
136
# File 'lib/zsnap.rb', line 132

def create_snapshot(now_minutes, prefix)
  if create?(now_minutes)
    create_snapshot_from_info(SnapshotInfo.new(prefix + Time.now.strftime('%Y-%m-%d_%H.%M'), @name, prefix))
  end
end

#poolObject



138
139
140
141
142
# File 'lib/zsnap.rb', line 138

def pool
  # More or less according to ZFS Component Naming Requirements
  # http://docs.sun.com/app/docs/doc/819-5461/gbcpt
  @name[/\A[a-zA-Z_:.-]+/]
end

#remove_snapshots(now_minutes, prefix) ⇒ Object



126
127
128
129
130
# File 'lib/zsnap.rb', line 126

def remove_snapshots(now_minutes, prefix)
  snapshots_to_remove(now_minutes, prefix).each do |snapshot|
    remove_snapshot(snapshot)
  end
end

#snapshots(prefix) ⇒ Object



111
112
113
114
115
116
# File 'lib/zsnap.rb', line 111

def snapshots(prefix)
  path = File.join(mount_point, '.zfs', 'snapshot')
  Dir.open(path).select do |name|
    name[0, prefix.length] == prefix
  end.map { |name| SnapshotInfo.new(name, @name, prefix) }
end

#snapshots_to_remove(now_minutes, prefix) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/zsnap.rb', line 118

def snapshots_to_remove(now_minutes, prefix)
  snapshots(prefix).reject do |snapshot|
    @preservation_rules.any? do |rule|
      rule.condition_met_for_snapshot?(now_minutes, snapshot)
    end
  end
end