class Rtprov::CLI

Public Instance Methods

edit(router_name) click to toggle source
# File lib/rtprov/cli.rb, line 12
def edit(router_name)
  Router.edit(router_name)
end
get(router_name) click to toggle source
# File lib/rtprov/cli.rb, line 23
def get(router_name)
  router = Router.load(router_name)
  sftp = Sftp.new(router.host, router.user, router.administrator_password)
  puts sftp.get("/system/config#{options[:number]}")
end
ls() click to toggle source
# File lib/rtprov/cli.rb, line 70
def ls
  Router.names.each do |name|
    puts name
  end
end
new(name) click to toggle source
# File lib/rtprov/cli.rb, line 7
def new(name)
  Initializer.run(name)
end
put(router_name, template_name) click to toggle source
# File lib/rtprov/cli.rb, line 32
def put(router_name, template_name)
  current_file = "/system/config#{options[:number]}"
  router = Router.load(router_name)

  template = Template.find(router_name, template_name)
  new_config = template.render(router.variables)

  sftp = Sftp.new(router.host, router.user, router.administrator_password)
  current_config = sftp.get(current_file)
  diff = ENV["RTPROV_DIFF"] || %w(colordiff diff).find {|cmd| system("which", cmd, out: "/dev/null", err: "/dev/null") }

  Dir.mktmpdir do |dir|
    Dir.chdir(dir) do
      File.write("new.conf", new_config.gsub(/^#.*$/, "").gsub(/(\r\n|\r|\n)+/, "\r\n"))
      File.write("current.conf", current_config.gsub(/^#.*$/, "").gsub(/(\r\n|\r|\n)+/, "\r\n"))
      system("#{diff} -u current.conf new.conf", out: $stdout, err: $stderr)

      unless options[:force]
        loop do
          print "apply? (y/n): "
          case $stdin.gets.strip
          when "y"
            break
          when "n"
            return nil
          end
        end
      end

      sftp.put("new.conf", current_file)
      Session.start(router) do |s|
        s.exec_with_passwords "load config #{options[:number]} silent no-key-generate"
      end
    end
  end
end
show(router_name) click to toggle source
# File lib/rtprov/cli.rb, line 17
def show(router_name)
  puts Router.decrypt(router_name)
end
ssh(router_name) click to toggle source
# File lib/rtprov/cli.rb, line 77
def ssh(router_name)
  router = Router.load(router_name)
  warn "Password: #{router.password}"
  exec "ssh", "#{router.user}@#{router.host}"
end