arista-eapi 0.10.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/version_tmp
17
17
  tmp
18
18
  .env
19
19
  test.rb
20
+ .rbenv-version
@@ -12,47 +12,5 @@ require 'arista/eapi/version'
12
12
 
13
13
  module Arista
14
14
  module EAPI
15
- JSON_COMMANDS = [
16
- 'show aliases',
17
- 'show interfaces',
18
- 'show interfaces counters',
19
- 'show interfaces counters discards',
20
- 'show interfaces status',
21
- 'show interfaces switchport vlan mapping',
22
- 'show ip interface',
23
- 'show ipv6 interface',
24
- 'show mac address-table',
25
- 'show mac address-table aging-time',
26
- 'show management api http-commands',
27
- 'show management api http-commands certificate',
28
- 'show monitor server-failure history',
29
- 'show monitor server-failure servers',
30
- 'show monitor session',
31
- 'show privilege',
32
- 'show sflow',
33
- 'show sflow interfaces',
34
- 'show spanning-tree topology status',
35
- 'show version',
36
- 'show version license',
37
- 'show vlan',
38
- 'show vlan trunk group',
39
- ]
40
-
41
-
42
- # Public: Determine the eAPI supported format based on the commands.
43
- #
44
- # options - List of commands to check format options for.
45
- #
46
- # Examples
47
- #
48
- # Arista::EAPI.format_for('show vlan')
49
- # #=> 'json'
50
- # Arista::EAPI.format_for('show vlan', 'show lldp neighbors')
51
- # #=> text
52
- #
53
- # Returns json if all commands support JSON output, otherwise returns text.
54
- def self.format_for(*commands)
55
- (commands.flatten - JSON_COMMANDS).size > 0 ? 'text' : 'json'
56
- end
57
15
  end
58
16
  end
@@ -1,11 +1,14 @@
1
1
  module Arista
2
2
  module EAPI
3
3
  class Request
4
- attr_accessor :switch, :commands
4
+ attr_accessor :switch, :commands, :options
5
+
6
+ def initialize(switch, commands, options = {})
7
+ options[:format] ||= 'json'
5
8
 
6
- def initialize(switch, *commands)
7
9
  self.switch = switch
8
10
  self.commands = commands
11
+ self.options = options
9
12
  end
10
13
 
11
14
  def payload
@@ -16,7 +19,7 @@ module Arista
16
19
  :params => {
17
20
  :version => 1,
18
21
  :cmds => commands,
19
- :format => Arista::EAPI.format_for(commands)
22
+ :format => options[:format]
20
23
  },
21
24
  })
22
25
  end
@@ -24,11 +27,6 @@ module Arista
24
27
  def execute
25
28
  Arista::EAPI::Response.new(commands, RestClient.post(switch.url, payload))
26
29
  end
27
-
28
- def self.execute!(switch, *commands)
29
- req = self.new(switch, *commands)
30
- req.execute
31
- end
32
30
  end
33
31
  end
34
32
  end
@@ -40,8 +40,7 @@ module Arista
40
40
  end
41
41
 
42
42
  def process_result(cmd, result)
43
- case Arista::EAPI.format_for(cmd)
44
- when 'json' then
43
+ if result.is_a? Hash then
45
44
  convert_hash_keys(result)
46
45
  else
47
46
  Arista::EAPI::Parser.parse(cmd, result['output'])
@@ -15,20 +15,41 @@ module Arista
15
15
  end
16
16
 
17
17
  def interfaces
18
- run('show interfaces')
18
+ run!('show interfaces')
19
19
  attributes[:interfaces]
20
20
  end
21
21
 
22
22
  def version
23
- run('show version').first
23
+ run!('show version')
24
24
  end
25
25
 
26
26
  def update_attributes!(results)
27
27
  results.each { |result| attributes.merge!(result) if result.is_a?(Hash) }
28
28
  end
29
29
 
30
- def run(*commands)
31
- request = Arista::EAPI::Request.new(self, *commands)
30
+ # Public: Runs a single command and returns the first result.
31
+ #
32
+ # options - Options to pass to the eAPI call.
33
+ # :format - The format for the eAPI response. Accepts the strings
34
+ # "json" or "text". (Defaults to json)
35
+ #
36
+ # Examples
37
+ #
38
+ # switch.run!('show version')
39
+ # #=> {:model_name=>"DCS-7048T-A-R", :internal_version=>"4.12.0-1244071.EOS4120", :system_mac_address=>"00:1c:73:16:c2:c8", :serial_number=>"redacted", :mem_total=>4009152, :bootup_timestamp=>1368735672.690161, :mem_free=>1848284, :version=>"4.12.0", :architecture=>"i386", :internal_build_id=>"c25ec8ea-cb8f-40a8-af0b-d11eaa94d57c", :hardware_revision=>"01.04"}
40
+ #
41
+ def run!(command, options={})
42
+ run([command], options).first
43
+ end
44
+
45
+ # Public: Run the
46
+ #
47
+ # options - Options to pass to the eAPI call.
48
+ # :format - The format for the eAPI response. Accepts the strings
49
+ # "json" or "text". (Defaults to json)
50
+ #
51
+ def run(commands, options={})
52
+ request = Arista::EAPI::Request.new(self, commands, options)
32
53
  self.update_attributes!(request.execute.results)
33
54
  end
34
55
  end
@@ -1,5 +1,5 @@
1
1
  module Arista
2
2
  module EAPI
3
- VERSION = "0.10.3"
3
+ VERSION = "0.11.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arista-eapi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 49
4
+ hash: 51
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 10
9
- - 3
10
- version: 0.10.3
8
+ - 11
9
+ - 0
10
+ version: 0.11.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mark Imbriaco
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-05-19 00:00:00 -04:00
18
+ date: 2013-05-24 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency