aubergine 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/courgette/chain.rb +28 -0
- data/lib/courgette/client.rb +1 -1
- data/lib/courgette/device.rb +6 -25
- data/lib/courgette/fetchers/commutateurs_fetcher.rb +31 -0
- data/lib/courgette/fetchers/fetcher.rb +17 -0
- data/lib/courgette/fetchers/hp_fetcher.rb +27 -0
- data/lib/courgette/processors/default_processor.rb +9 -0
- data/lib/courgette/processors/processor.rb +9 -0
- data/lib/courgette.rb +6 -1
- metadata +83 -8
- data/lib/courgette/hp.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 388d030db072626bc9579ca8d02c396d3565b23a
|
4
|
+
data.tar.gz: cc43c7224d192a3f763448b89651628b69e001a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f36e8c6fd9195638dd76ddd53d09289c333e507ae7dbc5bf871f9a9d87b8d82727e7c9fce34d2b2078789d2e7bcb479e3888ff36ec2fe5857f22880a1fe0419
|
7
|
+
data.tar.gz: bfa96c89c00451e5f581d0e5c230d072fe79a8208e80a8b8adeb0c3f3acdabe4cbf452db88424244ce783a6d685f8869eb2b8a01993ac9760a87febd9698deee
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Courgette
|
2
|
+
class Chain
|
3
|
+
def initialize(fetcher, processors)
|
4
|
+
@fetcher = fetcher
|
5
|
+
@processors = processors
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.of(fetcher, *processors)
|
9
|
+
new(fetcher, processors)
|
10
|
+
end
|
11
|
+
|
12
|
+
def apply(ip, hash)
|
13
|
+
raw = @fetcher.new(ip, hash).fetch
|
14
|
+
@processors.map(&:new).inject(raw) { |acc, p| acc = p.process(acc) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def responsible_of(vendor)
|
18
|
+
@fetcher.responsible_of(vendor)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.all
|
22
|
+
[
|
23
|
+
Chain.of(Fetchers::CommutateursFetcher, Processors::DefaultProcessor),
|
24
|
+
Chain.of(Fetchers::HpFetcher, Processors::DefaultProcessor)
|
25
|
+
]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/courgette/client.rb
CHANGED
@@ -10,7 +10,7 @@ module Courgette
|
|
10
10
|
def devices
|
11
11
|
response = self.class.get("#{@base}/configuration.json", @headers)
|
12
12
|
if response.code == 200
|
13
|
-
response.parsed_response.map { |raw| Device.
|
13
|
+
response.parsed_response.map { |raw| Device.new(raw) }
|
14
14
|
else
|
15
15
|
raise "Configuration not found."
|
16
16
|
end
|
data/lib/courgette/device.rb
CHANGED
@@ -1,35 +1,16 @@
|
|
1
1
|
module Courgette
|
2
2
|
class Device
|
3
|
-
VENDOR_CLASSES = {
|
4
|
-
'hp' => Courgette::HP, # using sftp
|
5
|
-
'cisco' => Commutateurs::Cisco,
|
6
|
-
'juniper' => Commutateurs::Juniper,
|
7
|
-
'fortigate' => Commutateurs::Fortigate,
|
8
|
-
'h3c' => Commutateurs::H3c
|
9
|
-
}
|
10
|
-
|
11
3
|
attr_reader :ip, :vendor
|
12
4
|
|
13
|
-
def initialize(
|
14
|
-
@ip = ip
|
15
|
-
@vendor = vendor
|
16
|
-
@
|
17
|
-
@password = password
|
18
|
-
@enable = enable
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.build(hash)
|
22
|
-
new(hash['ip'], hash['vendor'], hash['login'], hash['password'], hash['enable'] || hash['password'])
|
5
|
+
def initialize(details)
|
6
|
+
@ip = details['ip']
|
7
|
+
@vendor = details['vendor']
|
8
|
+
@details = details
|
23
9
|
end
|
24
10
|
|
25
11
|
def fetch(debug = false)
|
26
|
-
|
27
|
-
|
28
|
-
device = VENDOR_CLASSES[vendor].new(ip, credentials, debug)
|
29
|
-
device.connect
|
30
|
-
device.enable
|
31
|
-
|
32
|
-
device.configuration.unpack('C*').pack('U*').gsub("\r\n", "\n")
|
12
|
+
chain = Chain.all.find { |chain| chain.responsible_of(@vendor) }
|
13
|
+
chain ? chain.apply(@ip, @details) : raise("Vendor not found")
|
33
14
|
end
|
34
15
|
end
|
35
16
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Courgette
|
2
|
+
module Fetchers
|
3
|
+
class CommutateursFetcher < Fetcher
|
4
|
+
VENDORS = {
|
5
|
+
'cisco' => Commutateurs::Cisco,
|
6
|
+
'fortigate' => Commutateurs::Fortigate,
|
7
|
+
'h3c' => Commutateurs::H3c,
|
8
|
+
'juniper' => Commutateurs::Juniper
|
9
|
+
}
|
10
|
+
|
11
|
+
def initialize(ip, details)
|
12
|
+
@ip = ip
|
13
|
+
@klass = VENDORS[details['vendor']]
|
14
|
+
@credentials = Commutateurs::Credentials.new(details['login'], details['password'], details['enable'])
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.responsible_of(vendor)
|
18
|
+
["cisco", "h3c", "juniper", "fortigate"].include? vendor
|
19
|
+
end
|
20
|
+
|
21
|
+
def fetch
|
22
|
+
device = @klass.new(@ip, @credentials, false)
|
23
|
+
|
24
|
+
device.connect
|
25
|
+
device.enable
|
26
|
+
|
27
|
+
device.configuration
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Courgette
|
2
|
+
module Fetchers
|
3
|
+
class Fetcher
|
4
|
+
def initialize(ip, details)
|
5
|
+
raise "Not implemented"
|
6
|
+
end
|
7
|
+
|
8
|
+
def fetch
|
9
|
+
raise "Not implemented"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.responsible_of(vendor)
|
13
|
+
raise "Not implemented"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Courgette
|
2
|
+
module Fetchers
|
3
|
+
class HpFetcher < Fetcher
|
4
|
+
def initialize(ip, details)
|
5
|
+
@ip = ip
|
6
|
+
@user = details['login']
|
7
|
+
@password = details['password']
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.responsible_of(vendor)
|
11
|
+
"hp" == vendor
|
12
|
+
end
|
13
|
+
|
14
|
+
def fetch
|
15
|
+
begin
|
16
|
+
data = ""
|
17
|
+
Net::SFTP.start(@ip, @user, :password => @password) do |sftp|
|
18
|
+
data = sftp.download!("/cfg/running-config")
|
19
|
+
end
|
20
|
+
data
|
21
|
+
rescue IOError => e
|
22
|
+
data
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/courgette.rb
CHANGED
@@ -9,7 +9,12 @@ require 'parallel'
|
|
9
9
|
|
10
10
|
require 'net/sftp'
|
11
11
|
|
12
|
-
require_relative './courgette/
|
12
|
+
require_relative './courgette/fetchers/fetcher.rb'
|
13
|
+
require_relative './courgette/fetchers/commutateurs_fetcher.rb'
|
14
|
+
require_relative './courgette/fetchers/hp_fetcher.rb'
|
15
|
+
require_relative './courgette/processors/processor.rb'
|
16
|
+
require_relative './courgette/processors/default_processor.rb'
|
17
|
+
require_relative './courgette/chain.rb'
|
13
18
|
require_relative './courgette/device.rb'
|
14
19
|
require_relative './courgette/client.rb'
|
15
20
|
require_relative './courgette/executor.rb'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aubergine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Rose
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commutateurs
|
@@ -94,22 +94,97 @@ dependencies:
|
|
94
94
|
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: minitest
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ramcrest
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rack-test
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: mocha
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
97
167
|
description: Distributed RANCID - backup your network devices
|
98
168
|
email: guillaume.rose@gmail.com
|
99
169
|
executables: []
|
100
170
|
extensions: []
|
101
171
|
extra_rdoc_files: []
|
102
172
|
files:
|
103
|
-
- lib/aubergine/
|
173
|
+
- lib/aubergine/device.rb
|
174
|
+
- lib/aubergine/server.rb
|
104
175
|
- lib/aubergine/satellite.rb
|
105
|
-
- lib/aubergine/satellite_provider.rb
|
106
176
|
- lib/aubergine/file_satellite_provider.rb
|
177
|
+
- lib/aubergine/satellite_provider.rb
|
107
178
|
- lib/aubergine/merge_satellite_provider.rb
|
108
|
-
- lib/aubergine/
|
109
|
-
- lib/
|
110
|
-
- lib/courgette/hp.rb
|
111
|
-
- lib/courgette/client.rb
|
179
|
+
- lib/aubergine/path.rb
|
180
|
+
- lib/courgette/chain.rb
|
112
181
|
- lib/courgette/device.rb
|
182
|
+
- lib/courgette/client.rb
|
183
|
+
- lib/courgette/fetchers/hp_fetcher.rb
|
184
|
+
- lib/courgette/fetchers/commutateurs_fetcher.rb
|
185
|
+
- lib/courgette/fetchers/fetcher.rb
|
186
|
+
- lib/courgette/processors/default_processor.rb
|
187
|
+
- lib/courgette/processors/processor.rb
|
113
188
|
- lib/courgette/executor.rb
|
114
189
|
- lib/aubergine.rb
|
115
190
|
- lib/courgette.rb
|
data/lib/courgette/hp.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module Courgette
|
2
|
-
class HP
|
3
|
-
def initialize(ip, credentials, verbose = false)
|
4
|
-
@ip = ip
|
5
|
-
@credentials = credentials
|
6
|
-
end
|
7
|
-
|
8
|
-
def enable
|
9
|
-
end
|
10
|
-
|
11
|
-
def connect
|
12
|
-
end
|
13
|
-
|
14
|
-
def configuration
|
15
|
-
begin
|
16
|
-
data = ""
|
17
|
-
Net::SFTP.start(@ip, @credentials.user, :password => @credentials.password) do |sftp|
|
18
|
-
data = sftp.download!("/cfg/running-config")
|
19
|
-
end
|
20
|
-
data
|
21
|
-
rescue IOError => e
|
22
|
-
data
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def save
|
27
|
-
end
|
28
|
-
|
29
|
-
def disconnect
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|