diff options
-rw-r--r-- | README.md | 14 | ||||
-rw-r--r-- | lib/oxidized/output/http.rb | 58 |
2 files changed, 72 insertions, 0 deletions
@@ -31,6 +31,7 @@ Oxidized is a network device configuration backup tool. It's a RANCID replacemen * [Source: SQLite](#source-sqlite) * [Source: HTTP](#source-http) * [Output: GIT](#output-git) + * [Output: HTTP](#output-http) * [Output: File](#output-file) * [Output types](#output-types) * [Advanced Configuration](#advanced-configuration) @@ -383,6 +384,19 @@ output: repo: "/var/lib/oxidized/devices.git" ``` +### Output: Http + +POST a config to the specified URL + +``` +output: + default: http + http: + user: admin + password: changeit + url: "http://192.168.162.50:8080/db/coll" +``` + ### Output types If you prefer to have different outputs in different files and/or directories, you can easily do this by modifying the corresponding model. To change the behaviour for IOS, you would edit `lib/oxidized/model/ios.rb`. diff --git a/lib/oxidized/output/http.rb b/lib/oxidized/output/http.rb new file mode 100644 index 0000000..13ba300 --- /dev/null +++ b/lib/oxidized/output/http.rb @@ -0,0 +1,58 @@ +module Oxidized + class Http < Output + attr_reader :commitref + def initialize + @cfg = Oxidized.config.output.http + end + + def setup + if @cfg.empty? + CFGS.user.output.http.user = 'Oxidized' + CFGS.user.output.http.pasword = 'secret' + CFGS.user.output.http.url = 'http://localhost/web-api/oxidized' + CFGS.save :user + raise NoConfig, 'no output http config, edit ~/.config/oxidized/config' + end + end + require "net/http" + require "uri" + require "json" + def store node, outputs, opt={} + @commitref = nil + json = JSON.pretty_generate( + { + 'msg' => opt[:msg], + 'user' => opt[:user], + 'email' => opt[:email], + 'group' => opt[:group], + 'node' => node, + 'config' => outputs.to_cfg, + # actually we need to also iterate outputs, for other types like in gitlab. But most people don't use 'type' functionality. + } + ) + uri = URI.parse @cfg.url + http = Net::HTTP.new uri.host, uri.port + #http.use_ssl = true if uri.scheme = 'https' + req = Net::HTTP::Post.new(uri.request_uri, initheader = { 'Content-Type' => 'application/json'}) + req.basic_auth @cfg.user, @cfg.password + req.body = json + response = http.request req + + case response.code.to_i + when 200 || 201 + Oxidized.logger.info "Configuration http backup complete for #{node}" + p [:success] + when (400..499) + Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}" + p [:bad_request] + when (500..599) + p [:server_problems] + Oxidized.logger.info "Configuration http backup for #{node} failed status: #{response.body}" + end + + end + + end +end + + |