shopify-junos-ez-stdlib 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|