From 0e046c183afdef3be9a9f25629487817302579cf Mon Sep 17 00:00:00 2001 From: Wild Kat Date: Tue, 10 Apr 2018 09:33:06 +0200 Subject: Update ssh_spec.rb --- spec/input/ssh_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/input/ssh_spec.rb') diff --git a/spec/input/ssh_spec.rb b/spec/input/ssh_spec.rb index d86ffa0..7be9139 100644 --- a/spec/input/ssh_spec.rb +++ b/spec/input/ssh_spec.rb @@ -24,7 +24,7 @@ describe Oxidized::SSH do model = mock() model.expects(:cfg).returns({'ssh' => []}) - @node.expects(:model).returns(model) + @node.expects(:model).returns(model).at_least_once proxy = mock() Net::SSH::Proxy::Command.expects(:new).with("ssh test.com -W %h:%p").returns(proxy) -- cgit v1.2.3 From 9ed50b5de4be4ae49c381fd539b9184631958d5b Mon Sep 17 00:00:00 2001 From: Wild Kat Date: Thu, 19 Apr 2018 22:42:44 +0200 Subject: tidy up tests with rubocop --- .rubocop_todo.yml | 28 ---------------------------- spec/githubrepo_spec.rb | 31 +++++++++++++++---------------- spec/input/ssh_spec.rb | 15 +++++++-------- spec/node_spec.rb | 7 +++---- spec/nodes_spec.rb | 4 ++-- 5 files changed, 27 insertions(+), 58 deletions(-) (limited to 'spec/input/ssh_spec.rb') diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 81776bd..55642fc 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -29,16 +29,6 @@ Layout/AccessModifierIndentation: Exclude: - 'lib/oxidized/output/gitcrypt.rb' -# Offense count: 2 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. -# SupportedHashRocketStyles: key, separator, table -# SupportedColonStyles: key, separator, table -# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit -Layout/AlignHash: - Exclude: - - 'spec/input/ssh_spec.rb' - # Offense count: 4 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. @@ -150,8 +140,6 @@ Layout/EmptyLinesAroundBlockBody: - 'lib/oxidized/model/audiocodes.rb' - 'lib/oxidized/model/ciscosma.rb' - 'lib/oxidized/model/tplink.rb' - - 'spec/input/ssh_spec.rb' - - 'spec/node_spec.rb' # Offense count: 158 # Cop supports --auto-correct. @@ -220,8 +208,6 @@ Layout/IndentHash: - 'lib/oxidized/hook/githubrepo.rb' - 'lib/oxidized/input/ssh.rb' - 'lib/oxidized/output/http.rb' - - 'spec/githubrepo_spec.rb' - - 'spec/node_spec.rb' # Offense count: 21 # Cop supports --auto-correct. @@ -381,8 +367,6 @@ Layout/SpaceInsideHashLiteralBraces: - 'lib/oxidized/output/git.rb' - 'lib/oxidized/output/gitcrypt.rb' - 'lib/oxidized/output/http.rb' - - 'spec/githubrepo_spec.rb' - - 'spec/input/ssh_spec.rb' # Offense count: 9 # Cop supports --auto-correct. @@ -697,9 +681,6 @@ Style/BracesAroundHashParameters: - 'lib/oxidized/input/telnet.rb' - 'lib/oxidized/model/procurve.rb' - 'lib/oxidized/output/http.rb' - - 'spec/githubrepo_spec.rb' - - 'spec/input/ssh_spec.rb' - - 'spec/node_spec.rb' # Offense count: 3 Style/CaseEquality: @@ -850,13 +831,6 @@ Style/LineEndConcatenation: Exclude: - 'lib/oxidized/hook.rb' -# Offense count: 9 -# Cop supports --auto-correct. -Style/MethodCallWithoutArgsParentheses: - Exclude: - - 'spec/githubrepo_spec.rb' - - 'spec/input/ssh_spec.rb' - # Offense count: 131 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. @@ -968,7 +942,6 @@ Style/PercentLiteralDelimiters: - 'lib/oxidized/config.rb' - 'lib/oxidized/input/ssh.rb' - 'oxidized.gemspec' - - 'spec/nodes_spec.rb' # Offense count: 22 # Cop supports --auto-correct. @@ -1134,7 +1107,6 @@ Style/TrailingUnderscoreVariable: Exclude: - 'lib/oxidized/node.rb' - 'lib/oxidized/output/git.rb' - - 'spec/node_spec.rb' # Offense count: 3 # Cop supports --auto-correct. diff --git a/spec/githubrepo_spec.rb b/spec/githubrepo_spec.rb index e676534..baa9a14 100644 --- a/spec/githubrepo_spec.rb +++ b/spec/githubrepo_spec.rb @@ -3,11 +3,11 @@ require 'rugged' require 'oxidized/hook/githubrepo' describe GithubRepo do - let(:credentials) { mock() } - let(:remote) { mock() } - let(:remotes) { mock() } - let(:repo_head) { mock() } - let(:repo) { mock() } + let(:credentials) { mock } + let(:remote) { mock } + let(:remotes) { mock } + let(:repo_head) { mock } + let(:repo) { mock } let(:gr) { GithubRepo.new } before do @@ -44,15 +44,15 @@ describe GithubRepo do gr.fetch_and_merge_remote(repo).must_equal nil end describe "when there is update considering conflicts" do - let(:merge_index) { mock() } - let(:their_branch) { mock() } + let(:merge_index) { mock } + let(:their_branch) { mock } before(:each) do - repo.expects(:fetch).with('origin', ['refs/heads/master'], credentials: credentials).returns({total_deltas: 1}) + repo.expects(:fetch).with('origin', ['refs/heads/master'], credentials: credentials).returns(total_deltas: 1) their_branch.expects(:target_id).returns(1) repo_head.expects(:target_id).returns(2) repo.expects(:merge_commits).with(2, 1).returns(merge_index) - repo.expects(:branches).returns({"origin/master" => their_branch}) + repo.expects(:branches).returns("origin/master" => their_branch) end it "should not try merging when there's conflict" do @@ -70,12 +70,11 @@ describe GithubRepo do repo_head.expects(:target).returns("our_target") merge_index.expects(:write_tree).with(repo).returns("tree") merge_index.expects(:conflicts?).returns(false) - Rugged::Commit.expects(:create).with(repo, { - parents: ["our_target", "their_target"], - tree: "tree", - message: "Merge remote-tracking branch 'origin/master'", - update_ref: "HEAD" - }).returns(1) + Rugged::Commit.expects(:create).with(repo, + parents: ["our_target", "their_target"], + tree: "tree", + message: "Merge remote-tracking branch 'origin/master'", + update_ref: "HEAD").returns(1) gr.fetch_and_merge_remote(repo).must_equal 1 end end @@ -101,7 +100,7 @@ describe GithubRepo do Oxidized.config.output.git.repo = '/foo.git' remote.expects(:url).returns('https://github.com/username/foo.git') remote.expects(:push).with(['refs/heads/master'], credentials: credentials).returns(true) - repo.expects(:remotes).returns({'origin' => remote}) + repo.expects(:remotes).returns('origin' => remote) Rugged::Repository.expects(:new).with('/foo.git').returns(repo) end diff --git a/spec/input/ssh_spec.rb b/spec/input/ssh_spec.rb index 7be9139..2d1f5ce 100644 --- a/spec/input/ssh_spec.rb +++ b/spec/input/ssh_spec.rb @@ -14,23 +14,22 @@ describe Oxidized::SSH do model: 'junos', username: 'alma', password: 'armud', - vars: {ssh_proxy: 'test.com'}) - + vars: { ssh_proxy: 'test.com' }) end describe "#connect" do it "should use proxy command when proxy host given" do ssh = Oxidized::SSH.new - model = mock() - model.expects(:cfg).returns({'ssh' => []}) + model = mock + model.expects(:cfg).returns('ssh' => []) @node.expects(:model).returns(model).at_least_once - proxy = mock() + proxy = mock Net::SSH::Proxy::Command.expects(:new).with("ssh test.com -W %h:%p").returns(proxy) - Net::SSH.expects(:start).with('93.184.216.34', 'alma', {:port => 22, :password => 'armud', :timeout => Oxidized.config.timeout, - :paranoid => Oxidized.config.input.ssh.secure, :auth_methods => ['none', 'publickey', 'password', 'keyboard-interactive'], - :number_of_password_prompts => 0, :proxy => proxy}) + Net::SSH.expects(:start).with('93.184.216.34', 'alma', :port => 22, :password => 'armud', :timeout => Oxidized.config.timeout, + :paranoid => Oxidized.config.input.ssh.secure, :auth_methods => ['none', 'publickey', 'password', 'keyboard-interactive'], + :number_of_password_prompts => 0, :proxy => proxy) ssh.instance_variable_set("@exec", true) ssh.connect(@node) diff --git a/spec/node_spec.rb b/spec/node_spec.rb index 829e05a..f769751 100644 --- a/spec/node_spec.rb +++ b/spec/node_spec.rb @@ -14,7 +14,6 @@ describe Oxidized::Node do username: 'alma', password: 'armud', prompt: 'test_prompt') - end describe '#new' do @@ -39,7 +38,7 @@ describe Oxidized::Node do it 'should fetch the configuration' do stub_oxidized_ssh - status, _ = @node.run + status, = @node.run status.must_equal :success end end @@ -52,9 +51,9 @@ describe Oxidized::Node do let(:group) { nil } let(:node) do - Oxidized::Node.new({ + Oxidized::Node.new( ip: '127.0.0.1', group: group, model: 'junos' - }) + ) end it 'when there are no groups' do diff --git a/spec/nodes_spec.rb b/spec/nodes_spec.rb index 6fa4b41..a801107 100644 --- a/spec/nodes_spec.rb +++ b/spec/nodes_spec.rb @@ -17,8 +17,8 @@ describe Oxidized::Nodes do Oxidized::Node.any_instance.stubs(:resolve_repo) Oxidized::Node.any_instance.stubs(:resolve_output) - @nodes_org = %w(ltt-pe1.hel kes2-rr1.tku tor-peer1.oul - hal-p2.tre sav-gr1-sw1.kuo psl-sec-pe1.hel).map { |e| Oxidized::Node.new(opts.merge(name: e)) } + @nodes_org = %w[ltt-pe1.hel kes2-rr1.tku tor-peer1.oul + hal-p2.tre sav-gr1-sw1.kuo psl-sec-pe1.hel].map { |e| Oxidized::Node.new(opts.merge(name: e)) } @node = @nodes_org.delete_at(0) @nodes = Oxidized::Nodes.new(nodes: @nodes_org.dup) end -- cgit v1.2.3 From cf770c557fc5d55786b56a31e389ff6d629315b4 Mon Sep 17 00:00:00 2001 From: Saku Ytti Date: Fri, 27 Apr 2018 11:32:47 +0300 Subject: Add SSH keepalive Closes #1276 --- lib/oxidized/input/ssh.rb | 11 ++++++----- spec/input/ssh_spec.rb | 11 ++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'spec/input/ssh_spec.rb') diff --git a/lib/oxidized/input/ssh.rb b/lib/oxidized/input/ssh.rb index 05c33c0..dc1eb27 100644 --- a/lib/oxidized/input/ssh.rb +++ b/lib/oxidized/input/ssh.rb @@ -26,11 +26,12 @@ module Oxidized port = vars(:ssh_port) || 22 ssh_opts = { - :port => port.to_i, - :password => @node.auth[:password], :timeout => Oxidized.config.timeout, - :paranoid => secure, - :auth_methods => %w(none publickey password keyboard-interactive), - :number_of_password_prompts => 0, + port: port.to_i, + paranoid: secure, + keepalive: true, + auth_methods: %w(none publickey password keyboard-interactive), + password: @node.auth[:password], :timeout => Oxidized.config.timeout, + number_of_password_prompts: 0, } if proxy_host = vars(:ssh_proxy) diff --git a/spec/input/ssh_spec.rb b/spec/input/ssh_spec.rb index 2d1f5ce..9e08cea 100644 --- a/spec/input/ssh_spec.rb +++ b/spec/input/ssh_spec.rb @@ -27,9 +27,14 @@ describe Oxidized::SSH do proxy = mock Net::SSH::Proxy::Command.expects(:new).with("ssh test.com -W %h:%p").returns(proxy) - Net::SSH.expects(:start).with('93.184.216.34', 'alma', :port => 22, :password => 'armud', :timeout => Oxidized.config.timeout, - :paranoid => Oxidized.config.input.ssh.secure, :auth_methods => ['none', 'publickey', 'password', 'keyboard-interactive'], - :number_of_password_prompts => 0, :proxy => proxy) + Net::SSH.expects(:start).with('93.184.216.34', 'alma', port: 22, + timeout: Oxidized.config.timeout, + paranoid: Oxidized.config.input.ssh.secure, + keepalive: true, + proxy: proxy, + password: 'armud', + number_of_password_prompts: 0, + auth_methods: ['none', 'publickey', 'password', 'keyboard-interactive']) ssh.instance_variable_set("@exec", true) ssh.connect(@node) -- cgit v1.2.3 From 91caa88b868decb8e063e95cfe63100dd990d2e7 Mon Sep 17 00:00:00 2001 From: Wild Kat Date: Fri, 27 Apr 2018 13:00:48 +0200 Subject: confucious say: man who rebases broken test of another simply shifting blame --- spec/input/ssh_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/input/ssh_spec.rb') diff --git a/spec/input/ssh_spec.rb b/spec/input/ssh_spec.rb index 9e08cea..3c33cd8 100644 --- a/spec/input/ssh_spec.rb +++ b/spec/input/ssh_spec.rb @@ -34,7 +34,7 @@ describe Oxidized::SSH do proxy: proxy, password: 'armud', number_of_password_prompts: 0, - auth_methods: ['none', 'publickey', 'password', 'keyboard-interactive']) + auth_methods: %w[none publickey password]) ssh.instance_variable_set("@exec", true) ssh.connect(@node) -- cgit v1.2.3 From 73175e95c253471f7f06dee04f88e76c77204e6c Mon Sep 17 00:00:00 2001 From: Wild Kat Date: Fri, 27 Apr 2018 19:07:31 +0200 Subject: add docs and tests for resolve_dns --- docs/Configuration.md | 10 ++++++++++ lib/oxidized/config.rb | 2 +- spec/input/ssh_spec.rb | 49 +++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 52 insertions(+), 9 deletions(-) (limited to 'spec/input/ssh_spec.rb') diff --git a/docs/Configuration.md b/docs/Configuration.md index 1d16c91..aea5e3c 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -214,3 +214,13 @@ next_adds_job: true ``` This will allow for a more timely fetch of the device configuration. + +## Disabling DNS resolution + +In some instances it might not be desirable to attempt to resolve names of nodes. One such use case is when nodes are accessed through an SSH proxy, where the remote end resolves the names differently than the host on which Oxidized runs would. + +Names can instead be passed verbatim to the input: + +```yaml +resolve_dns: false +``` diff --git a/lib/oxidized/config.rb b/lib/oxidized/config.rb index 0a8fdfd..36d9d73 100644 --- a/lib/oxidized/config.rb +++ b/lib/oxidized/config.rb @@ -20,7 +20,7 @@ module Oxidized asetus.default.username = 'username' asetus.default.password = 'password' asetus.default.model = 'junos' - asetus.default.resolve_dns = true # if false, don't resolve DNS to IP + asetus.default.resolve_dns = true # if false, don't resolve DNS to IP asetus.default.interval = 3600 asetus.default.use_syslog = false asetus.default.debug = false diff --git a/spec/input/ssh_spec.rb b/spec/input/ssh_spec.rb index 3c33cd8..0a3bd8d 100644 --- a/spec/input/ssh_spec.rb +++ b/spec/input/ssh_spec.rb @@ -8,17 +8,19 @@ describe Oxidized::SSH do Oxidized::Node.any_instance.stubs(:resolve_repo) Oxidized::Node.any_instance.stubs(:resolve_input) Oxidized::Node.any_instance.stubs(:resolve_output) - @node = Oxidized::Node.new(name: 'example.com', - input: 'ssh', - output: 'git', - model: 'junos', - username: 'alma', - password: 'armud', - vars: { ssh_proxy: 'test.com' }) end describe "#connect" do - it "should use proxy command when proxy host given" do + it "should use proxy command when proxy host given and connect by ip if resolve_dns is true" do + Oxidized.config.resolve_dns = true + @node = Oxidized::Node.new(name: 'example.com', + input: 'ssh', + output: 'git', + model: 'junos', + username: 'alma', + password: 'armud', + vars: { ssh_proxy: 'test.com' }) + ssh = Oxidized::SSH.new model = mock @@ -39,5 +41,36 @@ describe Oxidized::SSH do ssh.instance_variable_set("@exec", true) ssh.connect(@node) end + + it "should use proxy command when proxy host given and connect by name if resolve_dns is false" do + Oxidized.config.resolve_dns = false + @node = Oxidized::Node.new(name: 'example.com', + input: 'ssh', + output: 'git', + model: 'junos', + username: 'alma', + password: 'armud', + vars: { ssh_proxy: 'test.com' }) + + ssh = Oxidized::SSH.new + + model = mock + model.expects(:cfg).returns('ssh' => []) + @node.expects(:model).returns(model).at_least_once + + proxy = mock + Net::SSH::Proxy::Command.expects(:new).with("ssh test.com -W %h:%p").returns(proxy) + Net::SSH.expects(:start).with('example.com', 'alma', port: 22, + timeout: Oxidized.config.timeout, + paranoid: Oxidized.config.input.ssh.secure, + keepalive: true, + proxy: proxy, + password: 'armud', + number_of_password_prompts: 0, + auth_methods: %w[none publickey password]) + + ssh.instance_variable_set("@exec", true) + ssh.connect(@node) + end end end -- cgit v1.2.3