shopify-junos-ez-stdlib 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +91 -0
  3. data/LICENSE +26 -0
  4. data/README.md +199 -0
  5. data/docs/Facts.md +192 -0
  6. data/docs/Providers/Group.md +61 -0
  7. data/docs/Providers/IPports.md +61 -0
  8. data/docs/Providers/L1ports.md +29 -0
  9. data/docs/Providers/L2ports.md +43 -0
  10. data/docs/Providers/LAGports.md +57 -0
  11. data/docs/Providers/StaticHosts.md +26 -0
  12. data/docs/Providers/StaticRoutes.md +37 -0
  13. data/docs/Providers/UserAuths.md +32 -0
  14. data/docs/Providers/Users.md +122 -0
  15. data/docs/Providers/Vlans.md +43 -0
  16. data/docs/Providers_Resources.md +353 -0
  17. data/docs/README_FIRST.md +27 -0
  18. data/docs/Utils/Config.md +160 -0
  19. data/docs/Utils/Filesystem.md +360 -0
  20. data/docs/Utils/Routing-Engine.md +379 -0
  21. data/docs/Utils/SCP.md +24 -0
  22. data/examples/config/config_file.rb +72 -0
  23. data/examples/config/config_template_object.rb +81 -0
  24. data/examples/config/config_template_simple.rb +76 -0
  25. data/examples/config/multi_config.rb +60 -0
  26. data/examples/fs_utils.rb +31 -0
  27. data/examples/lag_port.rb +27 -0
  28. data/examples/re_upgrade.rb +99 -0
  29. data/examples/re_utils.rb +33 -0
  30. data/examples/simple.rb +46 -0
  31. data/examples/st_hosts.rb +33 -0
  32. data/examples/user.rb +32 -0
  33. data/examples/vlans.rb +31 -0
  34. data/junos-ez-stdlib.gemspec +15 -0
  35. data/lib/junos-ez/exceptions.rb +3 -0
  36. data/lib/junos-ez/facts.rb +83 -0
  37. data/lib/junos-ez/facts/chassis.rb +51 -0
  38. data/lib/junos-ez/facts/ifd_style.rb +17 -0
  39. data/lib/junos-ez/facts/personality.rb +25 -0
  40. data/lib/junos-ez/facts/switch_style.rb +31 -0
  41. data/lib/junos-ez/facts/version.rb +58 -0
  42. data/lib/junos-ez/group.rb +206 -0
  43. data/lib/junos-ez/ip_ports.rb +30 -0
  44. data/lib/junos-ez/ip_ports/classic.rb +188 -0
  45. data/lib/junos-ez/l1_ports.rb +121 -0
  46. data/lib/junos-ez/l1_ports/classic.rb +87 -0
  47. data/lib/junos-ez/l1_ports/switch.rb +134 -0
  48. data/lib/junos-ez/l2_ports.rb +66 -0
  49. data/lib/junos-ez/l2_ports/bridge_domain.rb +499 -0
  50. data/lib/junos-ez/l2_ports/vlan.rb +433 -0
  51. data/lib/junos-ez/l2_ports/vlan_l2ng.rb +502 -0
  52. data/lib/junos-ez/lag_ports.rb +268 -0
  53. data/lib/junos-ez/provider.rb +619 -0
  54. data/lib/junos-ez/stdlib.rb +18 -0
  55. data/lib/junos-ez/system.rb +48 -0
  56. data/lib/junos-ez/system/st_hosts.rb +92 -0
  57. data/lib/junos-ez/system/st_routes.rb +159 -0
  58. data/lib/junos-ez/system/syscfg.rb +103 -0
  59. data/lib/junos-ez/system/userauths.rb +84 -0
  60. data/lib/junos-ez/system/users.rb +217 -0
  61. data/lib/junos-ez/utils/config.rb +236 -0
  62. data/lib/junos-ez/utils/fs.rb +385 -0
  63. data/lib/junos-ez/utils/re.rb +558 -0
  64. data/lib/junos-ez/version.rb +6 -0
  65. data/lib/junos-ez/vlans.rb +38 -0
  66. data/lib/junos-ez/vlans/bridge_domain.rb +89 -0
  67. data/lib/junos-ez/vlans/vlan.rb +119 -0
  68. data/lib/junos-ez/vlans/vlan_l2ng.rb +126 -0
  69. data/shipit.yml +4 -0
  70. data/tmp +7 -0
  71. metadata +129 -0
@@ -0,0 +1,6 @@
1
+ module Junos; end
2
+ module Junos::Ez; end
3
+
4
+ module Junos::Ez
5
+ VERSION = "1.0.0"
6
+ end
@@ -0,0 +1,38 @@
1
+ require "junos-ez/provider"
2
+
3
+ module Junos::Ez::Vlans
4
+
5
+ PROPERTIES = [
6
+ :vlan_id, # Fixnum, [ 1 .. 4094 ]
7
+ :description, # String, description
8
+ :no_mac_learning, # [ true | nil ] - used to disable MAC-address learning
9
+ :interfaces, # READ-ONLY, array of bound interface names
10
+ ]
11
+
12
+ def self.Provider( ndev, varsym )
13
+ newbie = case ndev.fact :switch_style
14
+ when :VLAN
15
+ Junos::Ez::Vlans::Provider::VLAN.new( ndev )
16
+ when :VLAN_L2NG
17
+ Junos::Ez::Vlans::Provider::VLAN_L2NG.new( ndev )
18
+ when :BRIDGE_DOMAIN
19
+ Junos::Ez::Vlans::Provider::BRIDGE_DOMAIN.new( ndev )
20
+ else
21
+ raise Junos::Ez::NoProviderError, "target does not support vlan bridges"
22
+ end
23
+ newbie.properties = Junos::Ez::Provider::PROPERTIES + PROPERTIES
24
+ Junos::Ez::Provider.attach_instance_variable( ndev, varsym, newbie )
25
+ end
26
+
27
+ class Provider < Junos::Ez::Provider::Parent
28
+ # common parenting goes here ...
29
+
30
+ end
31
+
32
+ end
33
+
34
+ require 'junos-ez/vlans/vlan'
35
+ require 'junos-ez/vlans/vlan_l2ng'
36
+ require 'junos-ez/vlans/bridge_domain'
37
+
38
+
@@ -0,0 +1,89 @@
1
+ class Junos::Ez::Vlans::Provider::BRIDGE_DOMAIN < Junos::Ez::Vlans::Provider
2
+
3
+ ### ---------------------------------------------------------------
4
+ ### XML top placement
5
+ ### ---------------------------------------------------------------
6
+
7
+ def xml_at_top
8
+ Nokogiri::XML::Builder.new{|x| x.configuration{
9
+ x.send( :'bridge-domains' ) { x.domain { x.name @name
10
+ return x
11
+ }}
12
+ }}
13
+ end
14
+
15
+ ### ---------------------------------------------------------------
16
+ ### XML readers
17
+ ### ---------------------------------------------------------------
18
+
19
+ def xml_read!
20
+ cfg_xml = @ndev.rpc.get_configuration( xml_at_top )
21
+ return nil unless (@has_xml = cfg_xml.xpath('//domain')[0])
22
+ xml_read_parser( @has_xml, @has )
23
+ end
24
+
25
+ def xml_get_has_xml( xml )
26
+ xml.xpath('//domain')[0]
27
+ end
28
+
29
+ def xml_read_parser( as_xml, as_hash )
30
+ set_has_status( as_xml, as_hash )
31
+ as_hash[:vlan_id] = as_xml.xpath('vlan-id').text.to_i
32
+ as_hash[:description] = as_xml.xpath('description').text
33
+ as_hash[:no_mac_learning] = as_xml.xpath('bridge-options/no-mac-learning').empty? ? :disable : :enable
34
+ return true
35
+ end
36
+
37
+ ### ---------------------------------------------------------------
38
+ ### XML writers
39
+ ### ---------------------------------------------------------------
40
+
41
+ def xml_on_create( xml )
42
+ xml.send( :'domain-type', 'bridge' )
43
+ end
44
+
45
+ def xml_change_no_mac_learning( xml )
46
+ no_ml = @should[:no_mac_learning]
47
+ return unless ( exists? and no_ml )
48
+ xml.send(:'bridge-options') {
49
+ xml.send(:'no-mac-learning', (no_ml == :enable) ? nil : Netconf::JunosConfig::DELETE )
50
+ }
51
+ end
52
+
53
+ def xml_change_vlan_id( xml )
54
+ xml.send( :'vlan-id', @should[:vlan_id] )
55
+ end
56
+
57
+ def xml_change_description( xml )
58
+ xml.description @should[:description]
59
+ end
60
+
61
+ end
62
+
63
+
64
+ ##### ---------------------------------------------------------------
65
+ ##### Provider collection methods
66
+ ##### ---------------------------------------------------------------
67
+
68
+ class Junos::Ez::Vlans::Provider::BRIDGE_DOMAIN
69
+
70
+ def build_list
71
+ bd_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'bridge-domains' }
72
+ bd_cfgs.xpath('bridge-domains/domain').collect do |domain|
73
+ domain.xpath('name').text
74
+ end
75
+ end
76
+
77
+ def build_catalog
78
+ @catalog = {}
79
+ bd_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'bridge-domains' }
80
+ bd_cfgs.xpath('bridge-domains/domain').collect do |domain|
81
+ name = domain.xpath('name').text
82
+ @catalog[name] = {}
83
+ xml_read_parser( domain, @catalog[name] )
84
+ end
85
+ return @catalog
86
+ end
87
+
88
+ end
89
+
@@ -0,0 +1,119 @@
1
+ class Junos::Ez::Vlans::Provider::VLAN < Junos::Ez::Vlans::Provider
2
+
3
+ ### ---------------------------------------------------------------
4
+ ### XML top placement
5
+ ### ---------------------------------------------------------------
6
+
7
+ def xml_at_top
8
+ Nokogiri::XML::Builder.new{|x| x.configuration{
9
+ x.vlans { x.vlan { x.name @name
10
+ return x
11
+ }}
12
+ }}
13
+ end
14
+
15
+ ### ---------------------------------------------------------------
16
+ ### XML readers
17
+ ### ---------------------------------------------------------------
18
+
19
+ def xml_get_has_xml( xml )
20
+ xml.xpath('//vlan')[0]
21
+ end
22
+
23
+ def xml_read_parser( as_xml, as_hash )
24
+ set_has_status( as_xml, as_hash )
25
+
26
+ as_hash[:vlan_id] = as_xml.xpath('vlan-id').text.to_i
27
+ xml_when_item(as_xml.xpath('description')){ |i| as_hash[:description] = i.text }
28
+ xml_when_item(as_xml.xpath('no-mac-learning')){ as_hash[:no_mac_learning] = :enable }
29
+
30
+ # get a brief list of the interfaces on this vlan
31
+ got = @ndev.rpc.get_vlan_information( :vlan_name => @name || as_xml.xpath('name').text )
32
+ as_hash[:interfaces] = got.xpath('//vlan-member-interface').collect{|ifs| ifs.text.strip }
33
+ as_hash[:interfaces] = nil if as_hash[:interfaces][0] == "None"
34
+
35
+ return true
36
+ end
37
+
38
+ ### ---------------------------------------------------------------
39
+ ### XML writers
40
+ ### ---------------------------------------------------------------
41
+
42
+ def xml_change_no_mac_learning( xml )
43
+ no_ml = @should[:no_mac_learning]
44
+ return unless exists? and no_ml
45
+ xml.send(:'no-mac-learning', no_ml ? nil : Netconf::JunosConfig::DELETE )
46
+ end
47
+
48
+ def xml_change_vlan_id( xml )
49
+ xml.send(:'vlan-id', @should[:vlan_id] )
50
+ end
51
+
52
+ def xml_change_description( xml )
53
+ value = @should[:description]
54
+ xml.description value ? value : Netconf::JunosConfig::DELETE
55
+ end
56
+
57
+ end
58
+
59
+ ##### ---------------------------------------------------------------
60
+ ##### Provider collection methods
61
+ ##### ---------------------------------------------------------------
62
+
63
+ class Junos::Ez::Vlans::Provider::VLAN
64
+
65
+ def build_list
66
+ xml_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'vlans' }
67
+ xml_cfgs.xpath('vlans/vlan').collect do |vlan|
68
+ vlan.xpath('name').text
69
+ end
70
+ end
71
+
72
+ def build_catalog
73
+ @catalog = {}
74
+ xml_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'vlans' }
75
+ xml_cfgs.xpath('vlans/vlan').collect do |vlan|
76
+ name = vlan.xpath('name').text
77
+ @catalog[name] = {}
78
+ xml_read_parser( vlan, @catalog[name] )
79
+ end
80
+ return @catalog
81
+ end
82
+
83
+ end
84
+
85
+ ##### ---------------------------------------------------------------
86
+ ##### Provider operational methods
87
+ ##### ---------------------------------------------------------------
88
+
89
+ class Junos::Ez::Vlans::Provider::VLAN
90
+
91
+ ### ---------------------------------------------------------------
92
+ ### interfaces - returns a Hash of each interface in the VLAN
93
+ ### each interface (key) will identify:
94
+ ### :mode = [ :access | :trunk ]
95
+ ### :native = true if (:mode == :trunk) and this VLAN is the
96
+ ### native vlan-id (untagged packets)
97
+ ### ---------------------------------------------------------------
98
+
99
+ def interfaces( opts = {} )
100
+ raise ArgumentError, "not a resource" if is_provider?
101
+
102
+ args = {}
103
+ args[:vlan_name] = @name
104
+ args[:extensive] = true
105
+ got = @ndev.rpc.get_vlan_information( args )
106
+
107
+ members = got.xpath('vlan/vlan-detail/vlan-member-list/vlan-member')
108
+ ifs_h = {}
109
+ members.each do |port|
110
+ port_name = port.xpath('vlan-member-interface').text.split('.')[0]
111
+ port_h = {}
112
+ port_h[:mode] = port.xpath('vlan-member-port-mode').text.to_sym
113
+ native = (port.xpath('vlan-member-tagness').text == 'untagged')
114
+ port_h[:native] = true if( native and port_h[:mode] == :trunk)
115
+ ifs_h[port_name] = port_h
116
+ end
117
+ ifs_h
118
+ end
119
+ end
@@ -0,0 +1,126 @@
1
+ class Junos::Ez::Vlans::Provider::VLAN_L2NG < Junos::Ez::Vlans::Provider
2
+
3
+ ### ---------------------------------------------------------------
4
+ ### XML top placement
5
+ ### ---------------------------------------------------------------
6
+
7
+ def xml_at_top
8
+ Nokogiri::XML::Builder.new{|x| x.configuration{
9
+ x.vlans { x.vlan { x.name @name
10
+ return x
11
+ }}
12
+ }}
13
+ end
14
+
15
+ ### ---------------------------------------------------------------
16
+ ### XML readers
17
+ ### ---------------------------------------------------------------
18
+
19
+ def xml_get_has_xml( xml )
20
+ xml.xpath('//vlan')[0]
21
+ end
22
+
23
+ def xml_read_parser( as_xml, as_hash )
24
+ set_has_status( as_xml, as_hash )
25
+
26
+ as_hash[:vlan_id] = as_xml.xpath('vlan-id').text.to_i
27
+ xml_when_item(as_xml.xpath('description')){ |i| as_hash[:description] = i.text }
28
+
29
+ xml_when_item(as_xml.xpath('switch-options/no-mac-learning')) {
30
+ as_hash[:no_mac_learning] = :enable
31
+ }
32
+
33
+ # get a brief list of the interfaces on this vlan
34
+ got = @ndev.rpc.get_vlan_information( :vlan_name => @name || as_xml.xpath('name').text )
35
+ as_hash[:interfaces] = got.xpath('//l2ng-l2rtb-vlan-member-interface').collect{|ifs| ifs.text.strip }
36
+ as_hash[:interfaces] = nil if as_hash[:interfaces][0] == "None"
37
+
38
+ return true
39
+ end
40
+
41
+ ### ---------------------------------------------------------------
42
+ ### XML writers
43
+ ### ---------------------------------------------------------------
44
+
45
+ def xml_change_no_mac_learning( xml )
46
+ no_ml = @should[:no_mac_learning]
47
+ return unless exists? and no_ml
48
+ xml.send(:'switch-options') {
49
+ xml.send(:'no-mac-learning', no_ml == :enable ? nil : Netconf::JunosConfig::DELETE )
50
+ }
51
+ end
52
+
53
+ def xml_change_vlan_id( xml )
54
+ xml.send(:'vlan-id', @should[:vlan_id] )
55
+ end
56
+
57
+ def xml_change_description( xml )
58
+ value = @should[:description]
59
+ xml.description value ? value : Netconf::JunosConfig::DELETE
60
+ end
61
+
62
+ end
63
+
64
+ ##### ---------------------------------------------------------------
65
+ ##### Provider collection methods
66
+ ##### ---------------------------------------------------------------
67
+
68
+ class Junos::Ez::Vlans::Provider::VLAN_L2NG
69
+
70
+ def build_list
71
+ xml_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'vlans' }
72
+ xml_cfgs.xpath('vlans/vlan').collect do |vlan|
73
+ vlan.xpath('name').text
74
+ end
75
+ end
76
+
77
+ def build_catalog
78
+ @catalog = {}
79
+ xml_cfgs = @ndev.rpc.get_configuration{ |x| x.send :'vlans' }
80
+ xml_cfgs.xpath('vlans/vlan').collect do |vlan|
81
+ name = vlan.xpath('name').text
82
+ @catalog[name] = {}
83
+ xml_read_parser( vlan, @catalog[name] )
84
+ end
85
+ return @catalog
86
+ end
87
+
88
+ end
89
+
90
+ ##### ---------------------------------------------------------------
91
+ ##### Provider operational methods
92
+ ##### ---------------------------------------------------------------
93
+
94
+ class Junos::Ez::Vlans::Provider::VLAN_L2NG
95
+
96
+ ### ---------------------------------------------------------------
97
+ ### interfaces - returns a Hash of each interface in the VLAN
98
+ ### each interface (key) will identify:
99
+ ### :mode = [ :access | :trunk ]
100
+ ### :native = true if (:mode == :trunk) and this VLAN is the
101
+ ### native vlan-id (untagged packets)
102
+ ### ---------------------------------------------------------------
103
+
104
+ def interfaces( opts = {} )
105
+ raise ArgumentError, "not a resource" if is_provider?
106
+
107
+ args = {}
108
+ args[:vlan_name] = @name
109
+ args[:extensive] = true
110
+ got = @ndev.rpc.get_vlan_information( args )
111
+
112
+ member_pfx = 'l2ng-l2rtb-vlan-member'
113
+ members = got.xpath("//#{member_pfx}-interface")
114
+ ifs_h = {}
115
+ members.each do |port|
116
+ port_name = port.text.split('.')[0]
117
+ port_h = {}
118
+ port_h[:mode] = port.xpath("following-sibling::#{member_pfx}-interface-mode[1]").text.to_sym
119
+ tgd = port.xpath("following-sibling::#{member_pfx}-tagness[1]").text
120
+ native = (tgd == 'untagged')
121
+ port_h[:native] = true if( native and port_h[:mode] == :trunk)
122
+ ifs_h[port_name] = port_h
123
+ end
124
+ ifs_h
125
+ end
126
+ end
data/shipit.yml ADDED
@@ -0,0 +1,4 @@
1
+ deploy:
2
+ override:
3
+ - rake build
4
+ - package_cloud push shopify/prodeng-gems pkg/ruby-junos-ez-stdlib-*.gem
data/tmp ADDED
@@ -0,0 +1,7 @@
1
+
2
+
3
+ [1,2,3,4,5].each do |num|
4
+ list << num
5
+ end
6
+
7
+ puts list
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shopify-junos-ez-stdlib
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Schulman
8
+ - John Deatherage
9
+ - Nitin Kumar
10
+ - Priyal Jain
11
+ - Ganesh Nalawade
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2016-05-03 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: netconf
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.2.5
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 0.2.5
31
+ description: 'Automation Framework for Junos/NETCONF: Facts, Providers, and Utils'
32
+ email: jnpr-community-netdev@juniper.net
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - CHANGELOG.md
38
+ - LICENSE
39
+ - README.md
40
+ - docs/Facts.md
41
+ - docs/Providers/Group.md
42
+ - docs/Providers/IPports.md
43
+ - docs/Providers/L1ports.md
44
+ - docs/Providers/L2ports.md
45
+ - docs/Providers/LAGports.md
46
+ - docs/Providers/StaticHosts.md
47
+ - docs/Providers/StaticRoutes.md
48
+ - docs/Providers/UserAuths.md
49
+ - docs/Providers/Users.md
50
+ - docs/Providers/Vlans.md
51
+ - docs/Providers_Resources.md
52
+ - docs/README_FIRST.md
53
+ - docs/Utils/Config.md
54
+ - docs/Utils/Filesystem.md
55
+ - docs/Utils/Routing-Engine.md
56
+ - docs/Utils/SCP.md
57
+ - examples/config/config_file.rb
58
+ - examples/config/config_template_object.rb
59
+ - examples/config/config_template_simple.rb
60
+ - examples/config/multi_config.rb
61
+ - examples/fs_utils.rb
62
+ - examples/lag_port.rb
63
+ - examples/re_upgrade.rb
64
+ - examples/re_utils.rb
65
+ - examples/simple.rb
66
+ - examples/st_hosts.rb
67
+ - examples/user.rb
68
+ - examples/vlans.rb
69
+ - junos-ez-stdlib.gemspec
70
+ - lib/junos-ez/exceptions.rb
71
+ - lib/junos-ez/facts.rb
72
+ - lib/junos-ez/facts/chassis.rb
73
+ - lib/junos-ez/facts/ifd_style.rb
74
+ - lib/junos-ez/facts/personality.rb
75
+ - lib/junos-ez/facts/switch_style.rb
76
+ - lib/junos-ez/facts/version.rb
77
+ - lib/junos-ez/group.rb
78
+ - lib/junos-ez/ip_ports.rb
79
+ - lib/junos-ez/ip_ports/classic.rb
80
+ - lib/junos-ez/l1_ports.rb
81
+ - lib/junos-ez/l1_ports/classic.rb
82
+ - lib/junos-ez/l1_ports/switch.rb
83
+ - lib/junos-ez/l2_ports.rb
84
+ - lib/junos-ez/l2_ports/bridge_domain.rb
85
+ - lib/junos-ez/l2_ports/vlan.rb
86
+ - lib/junos-ez/l2_ports/vlan_l2ng.rb
87
+ - lib/junos-ez/lag_ports.rb
88
+ - lib/junos-ez/provider.rb
89
+ - lib/junos-ez/stdlib.rb
90
+ - lib/junos-ez/system.rb
91
+ - lib/junos-ez/system/st_hosts.rb
92
+ - lib/junos-ez/system/st_routes.rb
93
+ - lib/junos-ez/system/syscfg.rb
94
+ - lib/junos-ez/system/userauths.rb
95
+ - lib/junos-ez/system/users.rb
96
+ - lib/junos-ez/utils/config.rb
97
+ - lib/junos-ez/utils/fs.rb
98
+ - lib/junos-ez/utils/re.rb
99
+ - lib/junos-ez/version.rb
100
+ - lib/junos-ez/vlans.rb
101
+ - lib/junos-ez/vlans/bridge_domain.rb
102
+ - lib/junos-ez/vlans/vlan.rb
103
+ - lib/junos-ez/vlans/vlan_l2ng.rb
104
+ - shipit.yml
105
+ - tmp
106
+ homepage: https://github.com/Juniper/ruby-junos-ez-stdlib
107
+ licenses: []
108
+ metadata: {}
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 2.4.5.1
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: Junos EZ Framework - Standard Libraries
129
+ test_files: []