summaryrefslogtreecommitdiff
path: root/lib/oxidized
diff options
context:
space:
mode:
Diffstat (limited to 'lib/oxidized')
-rw-r--r--lib/oxidized/hook/exec.rb2
-rw-r--r--lib/oxidized/model/fortios.rb2
-rw-r--r--lib/oxidized/model/powerconnect.rb17
-rw-r--r--lib/oxidized/model/saos.rb24
-rw-r--r--lib/oxidized/node.rb3
-rw-r--r--lib/oxidized/output/file.rb12
-rw-r--r--lib/oxidized/output/git.rb7
-rw-r--r--lib/oxidized/worker.rb6
8 files changed, 61 insertions, 12 deletions
diff --git a/lib/oxidized/hook/exec.rb b/lib/oxidized/hook/exec.rb
index af2aeb1..58d6fd5 100644
--- a/lib/oxidized/hook/exec.rb
+++ b/lib/oxidized/hook/exec.rb
@@ -71,6 +71,8 @@ class Exec < Oxidized::Hook
"OX_NODE_MSG" => ctx.node.msg.to_s,
"OX_NODE_GROUP" => ctx.node.group.to_s,
"OX_EVENT" => ctx.event.to_s,
+ "OX_REPO_COMMITREF" => ctx.commitref.to_s,
+ "OX_REPO_NAME" => ctx.node.repo.to_s,
)
end
if ctx.job
diff --git a/lib/oxidized/model/fortios.rb b/lib/oxidized/model/fortios.rb
index 2c796cb..a9d219c 100644
--- a/lib/oxidized/model/fortios.rb
+++ b/lib/oxidized/model/fortios.rb
@@ -2,7 +2,7 @@ class FortiOS < Oxidized::Model
comment '# '
- prompt /^([-\w\.]+(\s[\(\w\-\.\)]+)?\s?[#>]\s?)$/
+ prompt /^([-\w\.]+(\s[\(\w\-\.\)]+)?\~?\s?[#>]\s?)$/
cmd :all do |cfg, cmdstring|
new_cfg = comment "COMMAND: #{cmdstring}\n"
diff --git a/lib/oxidized/model/powerconnect.rb b/lib/oxidized/model/powerconnect.rb
index ec15402..cd04766 100644
--- a/lib/oxidized/model/powerconnect.rb
+++ b/lib/oxidized/model/powerconnect.rb
@@ -14,6 +14,9 @@ class PowerConnect < Oxidized::Model
end
cmd 'show version' do |cfg|
+ if (@stackable.nil?)
+ @stackable = true if cfg.match /(U|u)nit\s/
+ end
cfg = cfg.split("\n").select { |line| not line[/Up\sTime/] }
comment cfg.join("\n") + "\n"
end
@@ -47,15 +50,17 @@ class PowerConnect < Oxidized::Model
def clean cfg
out = []
- skip_block = false
+ skip_blocks = 0
cfg.each_line do |line|
- if line.match /Up\sTime|Temperature|Power Supplies/i
- # For 34xx, 35xx, 54xx, 55xx, 62xx and 8024F we should skip this block (terminated by a blank line)
- skip_block = true if @model =~ /^(34|35)(24|48)$|^(54|55)(24|48)$|^(62)(24|48)$|^8024$/
+ # If this is a stackable switch we should skip this block of information
+ if (line.match /Up\sTime|Temperature|Power Suppl(ies|y)|Fans/i and @stackable == true)
+ skip_blocks = 1
+ # Some switches have another empty line. This is identified by this line having a colon
+ skip_blocks = 2 if line.match /:/
end
# If we have lines to skip do this until we reach and empty line
- if skip_block
- skip_block = false if /\S/ !~ line
+ if skip_blocks > 0
+ skip_blocks -= 1 if /\S/ !~ line
next
end
out << line.strip
diff --git a/lib/oxidized/model/saos.rb b/lib/oxidized/model/saos.rb
new file mode 100644
index 0000000..cada35b
--- /dev/null
+++ b/lib/oxidized/model/saos.rb
@@ -0,0 +1,24 @@
+class SAOS < Oxidized::Model
+
+ # Ciena SAOS switch
+ # used for 6.x devices
+
+ comment '! '
+
+ cmd :all do |cfg|
+ cfg.each_line.to_a[1..-2].join
+ end
+
+ cmd 'configuration show' do |cfg|
+ cfg
+ end
+
+ cfg :telnet do
+ username /login:/
+ password /assword:/
+ end
+ cfg :telnet do
+ post_login 'system shell session set more off'
+ pre_logout 'exit'
+ end
+end \ No newline at end of file
diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb
index c847416..df5b830 100644
--- a/lib/oxidized/node.rb
+++ b/lib/oxidized/node.rb
@@ -5,7 +5,7 @@ module Oxidized
class MethodNotFound < OxidizedError; end
class ModelNotFound < OxidizedError; end
class Node
- attr_reader :name, :ip, :model, :input, :output, :group, :auth, :prompt, :vars, :last
+ attr_reader :name, :ip, :model, :input, :output, :group, :auth, :prompt, :vars, :last, :repo
attr_accessor :running, :user, :msg, :from, :stats, :retry
alias :running? :running
def initialize opt
@@ -24,6 +24,7 @@ module Oxidized
@vars = opt[:vars]
@stats = Stats.new
@retry = 0
+ @repo = CFG.output.git.repo
# model instance needs to access node instance
@model.node = self
diff --git a/lib/oxidized/output/file.rb b/lib/oxidized/output/file.rb
index 38c9917..eb915c3 100644
--- a/lib/oxidized/output/file.rb
+++ b/lib/oxidized/output/file.rb
@@ -2,6 +2,8 @@ module Oxidized
class OxidizedFile < Output
require 'fileutils'
+ attr_reader :commitref
+
def initialize
@cfg = CFG.output.file
end
@@ -22,6 +24,7 @@ class OxidizedFile < Output
FileUtils.mkdir_p file
file = File.join file, node
open(file, 'w') { |fh| fh.write outputs.to_cfg }
+ @commitref = file
end
def fetch node, group
@@ -39,5 +42,14 @@ class OxidizedFile < Output
end
end
+ def version node, group
+ # not supported
+ []
+ end
+
+ def get_version node, group, oid
+ 'not supported'
+ end
+
end
end
diff --git a/lib/oxidized/output/git.rb b/lib/oxidized/output/git.rb
index 3757cfc..fff3941 100644
--- a/lib/oxidized/output/git.rb
+++ b/lib/oxidized/output/git.rb
@@ -7,6 +7,8 @@ class Git < Output
raise OxidizedError, 'rugged not found: sudo gem install rugged'
end
+ attr_reader :commitref
+
def initialize
@cfg = CFG.output.git
end
@@ -27,6 +29,7 @@ class Git < Output
@user = (opt[:user] or @cfg.user)
@email = (opt[:email] or @cfg.email)
@opt = opt
+ @commitref = nil
repo = @cfg.repo
outputs.types.each do |type|
@@ -63,7 +66,7 @@ class Git < Output
end
end
- #give a hash of all oid revision for the givin node, and the date of the commit
+ #give a hash of all oid revision for the given node, and the date of the commit
def version node, group
begin
repo = @cfg.repo
@@ -176,7 +179,7 @@ class Git < Output
if tree_old != tree_new
repo.config['user.name'] = user
repo.config['user.email'] = email
- Rugged::Commit.create(repo,
+ @commitref = Rugged::Commit.create(repo,
:tree => index.write_tree(repo),
:message => msg,
:parents => repo.empty? ? [] : [repo.head.target].compact,
diff --git a/lib/oxidized/worker.rb b/lib/oxidized/worker.rb
index eea747e..c886a5b 100644
--- a/lib/oxidized/worker.rb
+++ b/lib/oxidized/worker.rb
@@ -39,11 +39,13 @@ module Oxidized
msg = "update #{node.name}"
msg += " from #{node.from}" if node.from
msg += " with message '#{node.msg}'" if node.msg
- if node.output.new.store node.name, job.config,
+ output = node.output.new
+ if output.store node.name, job.config,
:msg => msg, :user => node.user, :group => node.group
Log.info "Configuration updated for #{node.group}/#{node.name}"
Oxidized.Hooks.handle :post_store, :node => node,
- :job => job
+ :job => job,
+ :commitref => output.commitref
end
node.reset
else