uniak/puppet-networkdevice

View on GitHub
lib/puppet/util/network_device/cisco_ios/model/archive/base.rb

Summary

Maintainability
A
15 mins
Test Coverage
require 'puppet/util/network_device/cisco_ios/model'
require 'puppet/util/network_device/cisco_ios/model/archive'

module Puppet::Util::NetworkDevice::Cisco_ios::Model::Archive::Base
  def self.archive_prop(base, param, base_command = param, &block)
    archive_scope = /^((archive)\n(?:\s[^\n]*\n)*)/
    base.register_scoped param, archive_scope do
      cmd 'sh run'
      match /^\s*#{base_command}\s+(.*)$/
      scope_match do |scope, _|
        [[scope, :running]]
      end
      add do |transport, value|
        transport.command("#{base_command} #{value}")
      end
      remove do |transport, old_value|
        transport.command("no #{base_command} #{old_value}")
      end
      # Pass the Block to a Helper Method so we are in the right Scope
      # when evaluating the block
      evaluate(&block) if block
    end
  end

  def self.register(base)
    archive_prop(base, :path)
    archive_prop(base, :write_memory) do
      match do |txt|
        txt.match(/write-memory/) ? :present : :absent
      end
      add do |transport, _|
        transport.command('write-memory')
      end
      remove do |transport, _|
        transport.command('no write-memory')
      end
    end
    archive_prop(base, :time_period, 'time-period')
  end
end