class Oxidized::SQL

Public Class Methods

new() click to toggle source
Calls superclass method Oxidized::Source::new
# File lib/oxidized/source/sql.rb, line 51
def initialize
  super
  @cfg = Oxidized.config.source.sql
end

Public Instance Methods

load(node_want = nil) click to toggle source
# File lib/oxidized/source/sql.rb, line 21
def load(node_want = nil)
  nodes = []
  db = connect
  query = db[@cfg.table.to_sym]
  query = query.with_sql(@cfg.query) if @cfg.query?

  query = query.where(@cfg.map.name.to_sym => node_want) if node_want

  query.each do |node|
    # map node parameters
    keys = {}
    @cfg.map.each { |key, sql_column| keys[key.to_sym] = node_var_interpolate node[sql_column.to_sym] }
    keys[:model] = map_model keys[:model] if keys.has_key? :model
    keys[:group] = map_group keys[:group] if keys.has_key? :group

    # map node specific vars
    vars = {}
    @cfg.vars_map.each do |key, sql_column|
      vars[key.to_sym] = node_var_interpolate node[sql_column.to_sym]
    end
    keys[:vars] = vars unless vars.empty?

    nodes << keys
  end
  db.disconnect
  nodes
end
setup() click to toggle source
# File lib/oxidized/source/sql.rb, line 9
def setup
  return unless @cfg.empty?

  Oxidized.asetus.user.source.sql.adapter   = 'sqlite'
  Oxidized.asetus.user.source.sql.database  = File.join(Config::ROOT, 'sqlite.db')
  Oxidized.asetus.user.source.sql.table     = 'devices'
  Oxidized.asetus.user.source.sql.map.name  = 'name'
  Oxidized.asetus.user.source.sql.map.model = 'rancid'
  Oxidized.asetus.save :user
  raise NoConfig, 'no source sql config, edit ~/.config/oxidized/config'
end

Private Instance Methods

connect() click to toggle source
# File lib/oxidized/source/sql.rb, line 56
def connect
  options = {
    adapter:  @cfg.adapter,
    host:     @cfg.host?,
    user:     @cfg.user?,
    password: @cfg.password?,
    database: @cfg.database,
    ssl_mode: @cfg.ssl_mode?
  }
  if @cfg.with_ssl?
    options.merge!(sslca:   @cfg.ssl_ca?,
                   sslcert: @cfg.ssl_cert?,
                   sslkey:  @cfg.ssl_key?)
  end
  Sequel.connect(options)
rescue Sequel::AdapterNotFound => e
  raise OxidizedError, "SQL adapter gem not installed: " + e.message
end