summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md27
-rw-r--r--lib/oxidized/node.rb10
-rw-r--r--spec/githubrepo_spec.rb4
-rw-r--r--spec/node_spec.rb47
4 files changed, 68 insertions, 20 deletions
diff --git a/README.md b/README.md
index 3c1a41e..1dcc426 100644
--- a/README.md
+++ b/README.md
@@ -354,13 +354,40 @@ output:
This uses the rugged/libgit2 interface. So you should remember that normal Git hooks will not be executed.
+
+For a single repositories for all devices:
+
+``` yaml
+output:
+ default: git
+ git:
+ user: Oxidized
+ email: o@example.com
+ repo: "/var/lib/oxidized/devices.git"
```
+
+And for groups repositories:
+
+``` yaml
output:
default: git
git:
user: Oxidized
email: o@example.com
+ repo:
+ first: "/var/lib/oxidized/first.git"
+ second: "/var/lib/oxidized/second.git"
+```
+
+If you would like to use groups and a single repository, you can force this with the `single_repo` config.
+
+``` yaml
+output:
+ default: git
+ git:
+ single_repo: true
repo: "/var/lib/oxidized/devices.git"
+
```
### Output types
diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb
index a1504b9..35bcad9 100644
--- a/lib/oxidized/node.rb
+++ b/lib/oxidized/node.rb
@@ -171,14 +171,12 @@ module Oxidized
end
def resolve_repo
- git = Oxidized.config.output.git
- cfg_repo = git.repo
+ remote_repo = Oxidized.config.output.git.repo
- if group && !git.single_repo?
- basedir = File.dirname(cfg_repo)
- File.join(basedir, "#{group}.git")
+ if Oxidized.config.output.git.single_repo? || @group.nil? || remote_repo.is_a?(String)
+ remote_repo
else
- cfg_repo
+ remote_repo[@group]
end
end
diff --git a/spec/githubrepo_spec.rb b/spec/githubrepo_spec.rb
index b6a8d9e..ab5e251 100644
--- a/spec/githubrepo_spec.rb
+++ b/spec/githubrepo_spec.rb
@@ -12,7 +12,6 @@ describe GithubRepo do
before(:each) do
Oxidized.asetus = Asetus.new
- Oxidized.config.output.git.repo = 'foo.git'
Oxidized.config.log = '/dev/null'
Oxidized.setup_logger
end
@@ -97,6 +96,7 @@ describe GithubRepo do
describe 'when there is only one repository and no groups' do
before 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})
@@ -139,6 +139,7 @@ describe GithubRepo do
let(:repository) { './ggrroouupp.git' }
before do
+ Oxidized.config.output.git.repo.ggrroouupp = repository
Oxidized.config.hooks.github_repo_hook.remote_repo.ggrroouupp = 'ggrroouupp#remote_repo'
end
@@ -153,6 +154,7 @@ describe GithubRepo do
let(:repository) { 'foo.git' }
before do
+ Oxidized.config.output.git.repo = repository
Oxidized.config.hooks.github_repo_hook.remote_repo = 'github_repo_hook#remote_repo'
Oxidized.config.output.git.single_repo = true
end
diff --git a/spec/node_spec.rb b/spec/node_spec.rb
index f9c912e..21c6e34 100644
--- a/spec/node_spec.rb
+++ b/spec/node_spec.rb
@@ -3,7 +3,6 @@ require 'spec_helper'
describe Oxidized::Node do
before(:each) do
Oxidized.stubs(:asetus).returns(Asetus.new)
- Oxidized.config.output.git.repo = '/tmp/repository.git'
Oxidized::Node.any_instance.stubs(:resolve_output)
@node = Oxidized::Node.new(name: 'example.com',
@@ -44,25 +43,47 @@ describe Oxidized::Node do
end
describe '#repo' do
- it 'when there is no groups' do
- @node.repo.must_equal '/tmp/repository.git'
+ let(:group) { nil }
+ let(:node) do
+ Oxidized::Node.new({
+ ip: '127.0.0.1', group: group, model: 'junos'
+ })
+ end
+
+ it 'when there are no groups' do
+ Oxidized.config.output.git.repo = '/tmp/repository.git'
+ node.repo.must_equal '/tmp/repository.git'
end
describe 'when there are groups' do
- let(:node) do
- Oxidized::Node.new({
- ip: '127.0.0.1', group: 'ggrroouupp', model: 'junos'
- })
+ let(:group) { 'ggrroouupp' }
+
+ before do
+ Oxidized.config.output.git.single_repo = single_repo
end
- it 'with only one repository' do
- Oxidized.config.output.git.single_repo = true
- node.repo.must_equal '/tmp/repository.git'
+ describe 'with only one repository' do
+ let(:single_repo) { true }
+
+ before do
+ Oxidized.config.output.git.repo = '/tmp/repository.git'
+ end
+
+ it 'should use the correct remote' do
+ node.repo.must_equal '/tmp/repository.git'
+ end
end
- it 'with more than one repository' do
- Oxidized.config.output.git.single_repo = false
- node.repo.must_equal '/tmp/ggrroouupp.git'
+ describe 'with more than one repository' do
+ let(:single_repo) { nil }
+
+ before do
+ Oxidized.config.output.git.repo.ggrroouupp = '/tmp/ggrroouupp.git'
+ end
+
+ it 'should use the correct remote' do
+ node.repo.must_equal '/tmp/ggrroouupp.git'
+ end
end
end
end