shopify-junos-ez-stdlib 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +91 -0
- data/LICENSE +26 -0
- data/README.md +199 -0
- data/docs/Facts.md +192 -0
- data/docs/Providers/Group.md +61 -0
- data/docs/Providers/IPports.md +61 -0
- data/docs/Providers/L1ports.md +29 -0
- data/docs/Providers/L2ports.md +43 -0
- data/docs/Providers/LAGports.md +57 -0
- data/docs/Providers/StaticHosts.md +26 -0
- data/docs/Providers/StaticRoutes.md +37 -0
- data/docs/Providers/UserAuths.md +32 -0
- data/docs/Providers/Users.md +122 -0
- data/docs/Providers/Vlans.md +43 -0
- data/docs/Providers_Resources.md +353 -0
- data/docs/README_FIRST.md +27 -0
- data/docs/Utils/Config.md +160 -0
- data/docs/Utils/Filesystem.md +360 -0
- data/docs/Utils/Routing-Engine.md +379 -0
- data/docs/Utils/SCP.md +24 -0
- data/examples/config/config_file.rb +72 -0
- data/examples/config/config_template_object.rb +81 -0
- data/examples/config/config_template_simple.rb +76 -0
- data/examples/config/multi_config.rb +60 -0
- data/examples/fs_utils.rb +31 -0
- data/examples/lag_port.rb +27 -0
- data/examples/re_upgrade.rb +99 -0
- data/examples/re_utils.rb +33 -0
- data/examples/simple.rb +46 -0
- data/examples/st_hosts.rb +33 -0
- data/examples/user.rb +32 -0
- data/examples/vlans.rb +31 -0
- data/junos-ez-stdlib.gemspec +15 -0
- data/lib/junos-ez/exceptions.rb +3 -0
- data/lib/junos-ez/facts.rb +83 -0
- data/lib/junos-ez/facts/chassis.rb +51 -0
- data/lib/junos-ez/facts/ifd_style.rb +17 -0
- data/lib/junos-ez/facts/personality.rb +25 -0
- data/lib/junos-ez/facts/switch_style.rb +31 -0
- data/lib/junos-ez/facts/version.rb +58 -0
- data/lib/junos-ez/group.rb +206 -0
- data/lib/junos-ez/ip_ports.rb +30 -0
- data/lib/junos-ez/ip_ports/classic.rb +188 -0
- data/lib/junos-ez/l1_ports.rb +121 -0
- data/lib/junos-ez/l1_ports/classic.rb +87 -0
- data/lib/junos-ez/l1_ports/switch.rb +134 -0
- data/lib/junos-ez/l2_ports.rb +66 -0
- data/lib/junos-ez/l2_ports/bridge_domain.rb +499 -0
- data/lib/junos-ez/l2_ports/vlan.rb +433 -0
- data/lib/junos-ez/l2_ports/vlan_l2ng.rb +502 -0
- data/lib/junos-ez/lag_ports.rb +268 -0
- data/lib/junos-ez/provider.rb +619 -0
- data/lib/junos-ez/stdlib.rb +18 -0
- data/lib/junos-ez/system.rb +48 -0
- data/lib/junos-ez/system/st_hosts.rb +92 -0
- data/lib/junos-ez/system/st_routes.rb +159 -0
- data/lib/junos-ez/system/syscfg.rb +103 -0
- data/lib/junos-ez/system/userauths.rb +84 -0
- data/lib/junos-ez/system/users.rb +217 -0
- data/lib/junos-ez/utils/config.rb +236 -0
- data/lib/junos-ez/utils/fs.rb +385 -0
- data/lib/junos-ez/utils/re.rb +558 -0
- data/lib/junos-ez/version.rb +6 -0
- data/lib/junos-ez/vlans.rb +38 -0
- data/lib/junos-ez/vlans/bridge_domain.rb +89 -0
- data/lib/junos-ez/vlans/vlan.rb +119 -0
- data/lib/junos-ez/vlans/vlan_l2ng.rb +126 -0
- data/shipit.yml +4 -0
- data/tmp +7 -0
- metadata +129 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
require 'junos-ez/provider' # framework code
|
3
|
+
require 'junos-ez/facts' # fact keeper
|
4
|
+
require 'junos-ez/system' # various system resources
|
5
|
+
require 'junos-ez/l1_ports' # physical ports
|
6
|
+
require 'junos-ez/vlans' # vlans
|
7
|
+
require 'junos-ez/l2_ports' # switch ports
|
8
|
+
require 'junos-ez/ip_ports' # ip ports (v4)
|
9
|
+
require 'junos-ez/lag_ports' # Link Aggregation Groups
|
10
|
+
require 'junos-ez/group'
|
11
|
+
|
12
|
+
# -------------------------------------------------------------------
|
13
|
+
# utility libraries, not providers
|
14
|
+
# -------------------------------------------------------------------
|
15
|
+
|
16
|
+
require 'junos-ez/utils/re'
|
17
|
+
require 'junos-ez/utils/fs'
|
18
|
+
require 'junos-ez/utils/config'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
require "junos-ez/provider"
|
3
|
+
require 'junos-ez/system/st_hosts'
|
4
|
+
require 'junos-ez/system/st_routes'
|
5
|
+
require 'junos-ez/system/users'
|
6
|
+
require 'junos-ez/system/userauths'
|
7
|
+
|
8
|
+
### -----------------------------------------------------------------
|
9
|
+
### the 'syscfg' is a work in progress, do not use ...
|
10
|
+
### -----------------------------------------------------------------
|
11
|
+
|
12
|
+
module Junos::Ez::SysConfig
|
13
|
+
|
14
|
+
PROPERTIES = [
|
15
|
+
:host_name, # String, host-name
|
16
|
+
:domain_name, # domain name, string or array
|
17
|
+
:domain_search, # array of dns name suffix values
|
18
|
+
:dns_servers, # array of ip-addrs
|
19
|
+
:ntp_servers, # array NTP servers HASH of
|
20
|
+
# :version
|
21
|
+
# :key
|
22
|
+
:timezone, # String time-zone
|
23
|
+
:date, # String format: YYYYMMDDhhmm.ss
|
24
|
+
:location, # location HASH with properties
|
25
|
+
# :countrycode
|
26
|
+
# :building,
|
27
|
+
# :floor,
|
28
|
+
# :rack
|
29
|
+
]
|
30
|
+
|
31
|
+
def self.Provider( ndev, varsym )
|
32
|
+
raise ArgumentError "work-in-progress ..."
|
33
|
+
|
34
|
+
newbie = Junos::Ez::SysConfig::Provider.new( ndev )
|
35
|
+
newbie.properties = Junos::Ez::Provider::PROPERTIES + PROPERTIES
|
36
|
+
Junos::Ez::Provider.attach_instance_variable( ndev, varsym, newbie )
|
37
|
+
end
|
38
|
+
|
39
|
+
class Provider < Junos::Ez::Provider::Parent
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
require 'junos-ez/system/syscfg'
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module Junos::Ez::StaticHosts
|
2
|
+
|
3
|
+
PROPERTIES = [
|
4
|
+
:ip, # ipv4 address :String
|
5
|
+
:ip6, # ipv6 address :String
|
6
|
+
]
|
7
|
+
|
8
|
+
def self.Provider( ndev, varsym )
|
9
|
+
newbie = Junos::Ez::StaticHosts::Provider.new( ndev )
|
10
|
+
newbie.properties = Junos::Ez::Provider::PROPERTIES + PROPERTIES
|
11
|
+
Junos::Ez::Provider.attach_instance_variable( ndev, varsym, newbie )
|
12
|
+
end
|
13
|
+
|
14
|
+
class Provider < Junos::Ez::Provider::Parent
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class Junos::Ez::StaticHosts::Provider
|
20
|
+
|
21
|
+
### ---------------------------------------------------------------
|
22
|
+
### XML top placement
|
23
|
+
### ---------------------------------------------------------------
|
24
|
+
|
25
|
+
def xml_at_top
|
26
|
+
xml = Nokogiri::XML::Builder.new {|xml| xml.configuration {
|
27
|
+
xml.system { xml.send('static-host-mapping') {
|
28
|
+
xml.name @name
|
29
|
+
return xml
|
30
|
+
}}
|
31
|
+
}}
|
32
|
+
end
|
33
|
+
|
34
|
+
### ---------------------------------------------------------------
|
35
|
+
### XML property readers
|
36
|
+
### ---------------------------------------------------------------
|
37
|
+
|
38
|
+
def xml_get_has_xml( xml )
|
39
|
+
xml.xpath('//static-host-mapping')[0]
|
40
|
+
end
|
41
|
+
|
42
|
+
def xml_read_parser( as_xml, as_hash )
|
43
|
+
set_has_status( as_xml, as_hash )
|
44
|
+
|
45
|
+
ip_v4 = as_xml.xpath('inet').text
|
46
|
+
as_hash[:ip] = ip_v4 unless ip_v4.empty?
|
47
|
+
|
48
|
+
ip_v6 = as_xml.xpath('inet6').text
|
49
|
+
as_hash[:ip6] = ip_v6 unless ip_v6.empty?
|
50
|
+
end
|
51
|
+
|
52
|
+
### ---------------------------------------------------------------
|
53
|
+
### XML property writers
|
54
|
+
### ---------------------------------------------------------------
|
55
|
+
|
56
|
+
def xml_change_ip( xml )
|
57
|
+
xml_set_or_delete( xml, 'inet', @should[:ip] )
|
58
|
+
end
|
59
|
+
|
60
|
+
def xml_change_ip6( xml )
|
61
|
+
xml_set_or_delete( xml, 'inet6', @should[:ip6] )
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
##### ---------------------------------------------------------------
|
67
|
+
##### Provider collection methods
|
68
|
+
##### ---------------------------------------------------------------
|
69
|
+
|
70
|
+
class Junos::Ez::StaticHosts::Provider
|
71
|
+
|
72
|
+
def build_list
|
73
|
+
@ndev.rpc.get_configuration{|xml| xml.system {
|
74
|
+
xml.send(:'static-host-mapping')
|
75
|
+
}}.xpath('system/static-host-mapping/name').collect do |item|
|
76
|
+
item.text
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def build_catalog
|
81
|
+
@catalog = {}
|
82
|
+
@ndev.rpc.get_configuration{ |xml| xml.system {
|
83
|
+
xml.send(:'static-host-mapping')
|
84
|
+
}}.xpath('system/static-host-mapping').each do |item|
|
85
|
+
name = item.xpath('name').text
|
86
|
+
@catalog[name] = {}
|
87
|
+
xml_read_parser( item, @catalog[name] )
|
88
|
+
end
|
89
|
+
@catalog
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
module Junos::Ez::StaticRoutes
|
2
|
+
|
3
|
+
PROPERTIES = [
|
4
|
+
:gateway, # next-hop gateway, could be single or Array
|
5
|
+
:metric, # number or nil
|
6
|
+
:action, # one-of [ :reject, :discard, :receive ]
|
7
|
+
:active, # flag [ true, nil | false ]
|
8
|
+
:retain, # no-flag [ nil, true, false ]
|
9
|
+
:install, # no-flag [ nil, true, false ]
|
10
|
+
:readvertise, # no-flag [ nil, true, false ]
|
11
|
+
:resolve, # no-flag [ nil, true, false ]
|
12
|
+
]
|
13
|
+
|
14
|
+
def self.Provider( ndev, varsym )
|
15
|
+
newbie = Junos::Ez::StaticRoutes::Provider.new( ndev )
|
16
|
+
newbie.properties = Junos::Ez::Provider::PROPERTIES + PROPERTIES
|
17
|
+
Junos::Ez::Provider.attach_instance_variable( ndev, varsym, newbie )
|
18
|
+
end
|
19
|
+
|
20
|
+
class Provider < Junos::Ez::Provider::Parent
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class Junos::Ez::StaticRoutes::Provider
|
26
|
+
|
27
|
+
### ---------------------------------------------------------------
|
28
|
+
### XML top placement
|
29
|
+
### ---------------------------------------------------------------
|
30
|
+
|
31
|
+
def xml_at_top
|
32
|
+
@name = "0.0.0.0/0" if @name == :default
|
33
|
+
|
34
|
+
Nokogiri::XML::Builder.new {|xml| xml.configuration {
|
35
|
+
xml.send('routing-options') {
|
36
|
+
xml.static { xml.route {
|
37
|
+
xml.name @name
|
38
|
+
return xml
|
39
|
+
}}
|
40
|
+
}
|
41
|
+
}}
|
42
|
+
end
|
43
|
+
|
44
|
+
### ---------------------------------------------------------------
|
45
|
+
### XML property readers
|
46
|
+
### ---------------------------------------------------------------
|
47
|
+
|
48
|
+
def xml_get_has_xml( xml )
|
49
|
+
xml.xpath('routing-options/static/route')[0]
|
50
|
+
end
|
51
|
+
|
52
|
+
def xml_read_parser( as_xml, as_hash )
|
53
|
+
set_has_status( as_xml, as_hash )
|
54
|
+
|
55
|
+
## :gateway
|
56
|
+
unless (next_hop = as_xml.xpath('next-hop')).empty?
|
57
|
+
if next_hop.count == 1
|
58
|
+
as_hash[:gateway] = next_hop.text
|
59
|
+
else
|
60
|
+
as_hash[:gateway] = next_hop.collect{|i| i.text }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
unless (active = as_xml.xpath('active')).empty?
|
65
|
+
as_hash[:active] = true
|
66
|
+
end
|
67
|
+
|
68
|
+
unless (action = as_xml.xpath( 'reject | discard | receive' )).empty?
|
69
|
+
as_hash[:action] = action[0].name.to_sym
|
70
|
+
end
|
71
|
+
|
72
|
+
unless (metric = as_xml.xpath('metric')).empty?
|
73
|
+
as_hash[:metric] = metric.text.to_i
|
74
|
+
end
|
75
|
+
|
76
|
+
xml_read_parse_noele( as_xml, 'retain', as_hash, :retain )
|
77
|
+
xml_read_parse_noele( as_xml, 'install', as_hash, :install )
|
78
|
+
xml_read_parse_noele( as_xml, 'resolve', as_hash, :resolve )
|
79
|
+
xml_read_parse_noele( as_xml, 'readvertise', as_hash, :readvertise )
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
### ---------------------------------------------------------------
|
84
|
+
### XML property writers
|
85
|
+
### ---------------------------------------------------------------
|
86
|
+
|
87
|
+
def xml_change_action( xml )
|
88
|
+
|
89
|
+
if @should[:action].nil?
|
90
|
+
xml.send( @has[:action], Netconf::JunosConfig::DELETE )
|
91
|
+
return true
|
92
|
+
end
|
93
|
+
|
94
|
+
xml.send( @should[:action] )
|
95
|
+
end
|
96
|
+
|
97
|
+
def xml_change_active( xml )
|
98
|
+
xml_set_or_delete_element( xml, 'active', @should[:active] )
|
99
|
+
end
|
100
|
+
|
101
|
+
def xml_change_gateway( xml )
|
102
|
+
# delete existing entries
|
103
|
+
ele_nh = :'next-hop'
|
104
|
+
|
105
|
+
# clear any existing values, and return unless there are any new ones ...
|
106
|
+
xml.send(ele_nh, Netconf::JunosConfig::DELETE) if @has[:gateway]
|
107
|
+
return true unless @should[:gateway]
|
108
|
+
|
109
|
+
## adding back the ones we want now ...
|
110
|
+
if @should[:gateway].kind_of? String
|
111
|
+
xml.send( ele_nh, @should[:gateway] )
|
112
|
+
else
|
113
|
+
@should[:gateway].each{ |gw| xml.send( ele_nh, gw ) }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def xml_change_retain( xml )
|
118
|
+
xml_set_or_delete_noele( xml, 'retain' )
|
119
|
+
end
|
120
|
+
|
121
|
+
def xml_change_install( xml )
|
122
|
+
xml_set_or_delete_noele( xml, 'install' )
|
123
|
+
end
|
124
|
+
|
125
|
+
def xml_change_resolve( xml )
|
126
|
+
xml_set_or_delete_noele( xml, 'resolve' )
|
127
|
+
end
|
128
|
+
|
129
|
+
def xml_change_readvertise( xml )
|
130
|
+
xml_set_or_delete_noele( xml, 'readvertise' )
|
131
|
+
end
|
132
|
+
|
133
|
+
def xml_change_metric( xml )
|
134
|
+
xml_set_or_delete( xml, 'metric', @should[:metric] )
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
##### ---------------------------------------------------------------
|
141
|
+
##### Provider collection methods
|
142
|
+
##### ---------------------------------------------------------------
|
143
|
+
|
144
|
+
class Junos::Ez::StaticRoutes::Provider
|
145
|
+
|
146
|
+
def build_list
|
147
|
+
@ndev.rpc.get_configuration{|xml| xml.send(:'routing-options') {
|
148
|
+
xml.static { xml.route }
|
149
|
+
}}.xpath('//route/name').collect do |item|
|
150
|
+
item.text
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def build_catalog
|
155
|
+
@catalog = {}
|
156
|
+
@catalog
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
class Junos::Ez::SysConfig::Provider
|
2
|
+
|
3
|
+
### ---------------------------------------------------------------
|
4
|
+
### XML top placement
|
5
|
+
### ---------------------------------------------------------------
|
6
|
+
|
7
|
+
def xml_at_top
|
8
|
+
xml = Nokogiri::XML::Builder.new {|xml| xml.configuration {
|
9
|
+
xml.system {
|
10
|
+
return xml
|
11
|
+
}
|
12
|
+
}}
|
13
|
+
end
|
14
|
+
|
15
|
+
def xml_config_read!
|
16
|
+
xml = xml_at_top
|
17
|
+
xml.send(:'host-name')
|
18
|
+
xml.send(:'domain-name')
|
19
|
+
xml.send(:'domain-search')
|
20
|
+
xml.send(:'time-zone')
|
21
|
+
xml.location
|
22
|
+
xml.send(:'name-server')
|
23
|
+
xml.ntp
|
24
|
+
@ndev.rpc.get_configuration( xml )
|
25
|
+
end
|
26
|
+
|
27
|
+
### ---------------------------------------------------------------
|
28
|
+
### XML property readers
|
29
|
+
### ---------------------------------------------------------------
|
30
|
+
|
31
|
+
def xml_get_has_xml( xml )
|
32
|
+
xml.xpath('system')[0]
|
33
|
+
end
|
34
|
+
|
35
|
+
def xml_read_parser( as_xml, as_hash )
|
36
|
+
set_has_status( as_xml, as_hash )
|
37
|
+
as_hash[:host_name] = as_xml.xpath('host-name').text
|
38
|
+
unless (data = as_xml.xpath('domain-name')).empty?
|
39
|
+
as_hash[:domain_name] = data.text
|
40
|
+
end
|
41
|
+
unless (data = as_xml.xpath('domain-search')).empty?
|
42
|
+
as_hash[:domain_search] = data.collect{|i| i.text}
|
43
|
+
end
|
44
|
+
unless (data = as_xml.xpath('time-zone')).empty?
|
45
|
+
as_hash[:timezone] = data.text
|
46
|
+
end
|
47
|
+
unless (data = as_xml.xpath('name-server/name')).empty?
|
48
|
+
as_hash[:dns_servers] = data.collect{|i| i.text}
|
49
|
+
end
|
50
|
+
unless (data = as_xml.xpath('ntp/server/name')).empty?
|
51
|
+
as_hash[:ntp_servers] = data.collect{|i| i.text}
|
52
|
+
end
|
53
|
+
unless (location = as_xml.xpath('location')).empty?
|
54
|
+
as_hash[:location] = {}
|
55
|
+
unless (data = location.xpath('building')).empty?
|
56
|
+
as_hash[:location][:building] = data.text
|
57
|
+
end
|
58
|
+
unless (data = location.xpath('country-code')).empty?
|
59
|
+
as_hash[:location][:countrycode] = data.text
|
60
|
+
end
|
61
|
+
unless (data = location.xpath('floor')).empty?
|
62
|
+
as_hash[:location][:floor] = data.text
|
63
|
+
end
|
64
|
+
unless (data = location.xpath('rack')).empty?
|
65
|
+
as_hash[:location][:rack] = data.text
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
### ---------------------------------------------------------------
|
71
|
+
### XML property writers
|
72
|
+
### ---------------------------------------------------------------
|
73
|
+
|
74
|
+
def xml_change_host_name( xml )
|
75
|
+
xml.send(:'host-name', @should[:host_name] )
|
76
|
+
end
|
77
|
+
|
78
|
+
def xml_change_domain_name( xml )
|
79
|
+
xml.send(:'domain-name', @should[:domain_name] )
|
80
|
+
end
|
81
|
+
|
82
|
+
def xml_change_domain_search( xml )
|
83
|
+
end
|
84
|
+
|
85
|
+
def xml_change_timezone( xml )
|
86
|
+
xml.send(:'time-zone', @should[:timezone])
|
87
|
+
end
|
88
|
+
|
89
|
+
def xml_change_dns_servers( xml )
|
90
|
+
end
|
91
|
+
|
92
|
+
def xml_change_ntp_servers( xml )
|
93
|
+
end
|
94
|
+
|
95
|
+
def xml_change_date( xml )
|
96
|
+
end
|
97
|
+
|
98
|
+
def xml_change_location( xml )
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
|
@@ -0,0 +1,84 @@
|
|
1
|
+
=begin
|
2
|
+
=end
|
3
|
+
|
4
|
+
module Junos::Ez::UserAuths
|
5
|
+
|
6
|
+
VALID_KEY_TYPES = ['ssh-rsa','ssh-dsa']
|
7
|
+
|
8
|
+
def self.Provider( ndev, varsym )
|
9
|
+
newbie = Junos::Ez::UserAuths::Provider.new( ndev )
|
10
|
+
newbie.properties = Junos::Ez::Provider::PROPERTIES
|
11
|
+
Junos::Ez::Provider.attach_instance_variable( ndev, varsym, newbie )
|
12
|
+
end
|
13
|
+
|
14
|
+
class Provider < Junos::Ez::Provider::Parent
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
##### ---------------------------------------------------------------
|
20
|
+
##### Resource Property Methods
|
21
|
+
##### ---------------------------------------------------------------
|
22
|
+
|
23
|
+
class Junos::Ez::UserAuths::Provider
|
24
|
+
|
25
|
+
### ---------------------------------------------------------------
|
26
|
+
### XML top placement
|
27
|
+
### ---------------------------------------------------------------
|
28
|
+
|
29
|
+
def xml_at_top
|
30
|
+
Nokogiri::XML::Builder.new{|x| x.configuration{
|
31
|
+
x.system { x.login { x.user {
|
32
|
+
x.name @name[:user]
|
33
|
+
x.authentication {
|
34
|
+
x.send( @name[:keytype].to_sym ) {
|
35
|
+
x.name @name[:publickey]
|
36
|
+
return x
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}}}
|
40
|
+
}}
|
41
|
+
end
|
42
|
+
|
43
|
+
### ---------------------------------------------------------------
|
44
|
+
### XML readers
|
45
|
+
### ---------------------------------------------------------------
|
46
|
+
|
47
|
+
def xml_get_has_xml( xml )
|
48
|
+
@should[:_active] = true # mark it so it will write!
|
49
|
+
xml.xpath('//user/authentication/*')[0]
|
50
|
+
end
|
51
|
+
|
52
|
+
def xml_read_parser( as_xml, as_hash )
|
53
|
+
set_has_status( as_xml, as_hash )
|
54
|
+
end
|
55
|
+
|
56
|
+
### ---------------------------------------------------------------
|
57
|
+
### XML writers
|
58
|
+
### ---------------------------------------------------------------
|
59
|
+
|
60
|
+
## !! since we're not actually modifying any properties, we need
|
61
|
+
## !! to overload the xml_build_change method to simply return
|
62
|
+
## !! the config at-top (includes ssh name)
|
63
|
+
|
64
|
+
def xml_build_change( xml_at_here = nil )
|
65
|
+
xml_at_top.doc.root
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
##### ---------------------------------------------------------------
|
71
|
+
##### Provider Collection Methods
|
72
|
+
##### ---------------------------------------------------------------
|
73
|
+
|
74
|
+
class Junos::Ez::UserAuths::Provider
|
75
|
+
def build_list
|
76
|
+
[]
|
77
|
+
end
|
78
|
+
|
79
|
+
def build_catalog
|
80
|
+
{}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|