Skip to content

Commit d011ec5

Browse files
authored
Merge pull request #29 from mahant3sh/master
Check if speed and duplex properties are configurable
2 parents e74a219 + 7d43f3d commit d011ec5

File tree

4 files changed

+175
-39
lines changed

4 files changed

+175
-39
lines changed

lib/facter/interface_properties.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Facts: speed_configurable, duplex_configurable
2+
#
3+
# Purpose:
4+
# Checks if speed and duplex properties of interfaces
5+
# are configurable dependening on the productmodel.
6+
#
7+
# Test:
8+
# # facter -p speed_configurable
9+
# # false
10+
#
11+
# # facter -p duplex_configurable
12+
# # false
13+
#
14+
# Caveats:
15+
#
16+
17+
Facter.add(:speed_configurable) do
18+
setcode do
19+
case Facter.value("productmodel")
20+
when /PTX10003-80C|PTX10003-160C/
21+
false
22+
when /QFX10003-80C|QFX10003-160C/
23+
false
24+
else
25+
true
26+
end
27+
end
28+
end
29+
30+
31+
Facter.add(:duplex_configurable) do
32+
setcode do
33+
case Facter.value("productmodel")
34+
when /PTX10003-80C|PTX10003-160C/
35+
false
36+
when /QFX10003-80C|QFX10003-160C/
37+
false
38+
else
39+
true
40+
end
41+
end
42+
end

lib/facter/junos.rb

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
### -----------------------------------------------------------------------------
3+
### junos_personality
4+
### -----------------------------------------------------------------------------
5+
6+
Facter.add(:junos_personality) do
7+
setcode do
8+
case Facter.value("productmodel")
9+
when /^(ex)|(qfx)|(pvi-model)/
10+
"JUNOS_switch"
11+
when /^srx(\d){4}/
12+
"JUNOS_SRX_HE"
13+
when /^srx(\d){3}/
14+
"JUNOS_SRX_branch"
15+
when /^junosv-firefly/
16+
"JUNOS_SRX_branch"
17+
when /^mx|^vmx/
18+
"JUNOS_MX"
19+
when /PTX/
20+
"JUNOS_switch"
21+
end
22+
end
23+
end
24+
25+
### -----------------------------------------------------------------------------
26+
### junos_ifd_style [ 'classis', 'switch' ]
27+
### -----------------------------------------------------------------------------
28+
29+
Facter.add(:junos_ifd_style) do
30+
confine :junos_personality => :JUNOS_switch
31+
setcode { "switch" }
32+
end
33+
34+
Facter.add(:junos_ifd_style) do
35+
setcode { "classic" }
36+
end
37+
38+
### -----------------------------------------------------------------------------
39+
### junos_switch_style [ 'vlan', 'bridge_domain', 'vlan_l2ng', 'none' ]
40+
### -----------------------------------------------------------------------------
41+
42+
Facter.add(:junos_switch_style) do
43+
confine :junos_personality => [:JUNOS_switch, :JUNOS_SRX_branch]
44+
setcode do
45+
case Facter.value("productmodel")
46+
when /^(ex9)|(ex43)|(pvi-model)/
47+
"vlan_l2ng"
48+
when /^(qfx5)|(qfx3)/
49+
Facter.value("kernelmajversion")[0..3].to_f >= 13.2 ? "vlan_l2ng" : "vlan"
50+
else
51+
"vlan"
52+
end
53+
end
54+
end
55+
56+
Facter.add(:junos_switch_style) do
57+
confine :junos_personality => [:JUNOS_MX, :JUNOS_SRX_HE]
58+
setcode { "bridge_domain" }
59+
end

lib/facter/productmodel.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Fact: productmodel
2+
#
3+
# Purpose:
4+
# Returns the product model of the system.
5+
#
6+
# Test:
7+
# # facter -p productmodel
8+
# JNP10003-160C [PTX10003-160C]
9+
#
10+
# Caveats:
11+
#
12+
13+
Facter.add(:productmodel) do
14+
setcode do
15+
require 'net/netconf/jnpr/ioproc'
16+
ndev = Netconf::IOProc.new
17+
ndev.open
18+
inv_info = ndev.rpc.get_chassis_inventory
19+
errs = inv_info.xpath('//output')[0]
20+
21+
if errs and errs.text.include? "This command can only be used on the master routing engine"
22+
raise Junos::Ez::NoProviderError, "Puppet can only be used on master routing engine !!"
23+
end
24+
25+
chassis = inv_info.xpath('chassis')
26+
ndev.close
27+
#Return chassis description which contains productmodel.
28+
chassis.xpath('description').text
29+
end
30+
end

lib/puppet/provider/junos/junos_interface.rb

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -50,27 +50,28 @@ def netdev_res_exists?
5050
@ndev_res[:admin] = ifd.xpath('disable').empty? ? :up : :down
5151
@ndev_res[:mtu] = (mtu = ifd.xpath('mtu')[0]).nil? ? -1 : mtu.text.to_i
5252

53-
phy_options = ifd.xpath('ether-options')
53+
if $speed_configurable || $duplex_configurable
54+
phy_options = ifd.xpath('ether-options')
5455

55-
if phy_options.empty?
56-
@ndev_res[:speed] = :auto
57-
@ndev_res[:duplex] = :auto
58-
else
56+
if phy_options.empty?
57+
@ndev_res[:speed] = :auto
58+
@ndev_res[:duplex] = :auto
59+
else
5960

60-
@ndev_res[:duplex] = case phy_options.xpath('link-mode').text.chomp
61-
when 'full-duplex' then :full
62-
when 'half-duplex' then :half
63-
else :auto
64-
end
61+
@ndev_res[:duplex] = case phy_options.xpath('link-mode').text.chomp
62+
when 'full-duplex' then :full
63+
when 'half-duplex' then :half
64+
else :auto
65+
end
6566

66-
if speed = phy_options.xpath('speed')[0]
67-
@ndev_res[:speed] = speed_from_junos( speed.first_element_child.name )
68-
else
69-
@ndev_res[:speed] = :auto
67+
if speed = phy_options.xpath('speed')[0]
68+
@ndev_res[:speed] = speed_from_junos( speed.first_element_child.name )
69+
else
70+
@ndev_res[:speed] = :auto
71+
end
7072
end
71-
end
72-
73-
return true
73+
end #### $speed_configurable || $duplex_configurable
74+
return true
7475
end
7576

7677
### ---------------------------------------------------------------
@@ -137,33 +138,37 @@ def xml_change_description( xml )
137138
end
138139

139140
def xml_change_speed( xml )
140-
xml.send(:'ether-options') {
141-
xml.speed {
142-
if resource[:speed] == :auto
143-
if not @ndev_res.is_new?
144-
jval = speed_to_junos( @ndev_res[:speed] )
145-
xml.send( jval, Netconf::JunosConfig::DELETE )
141+
if $speed_configurable
142+
xml.send(:'ether-options') {
143+
xml.speed {
144+
if resource[:speed] == :auto
145+
if not @ndev_res.is_new?
146+
jval = speed_to_junos( @ndev_res[:speed] )
147+
xml.send( jval, Netconf::JunosConfig::DELETE )
148+
end
149+
else
150+
xml.send( speed_to_junos( resource[:speed] ))
146151
end
147-
else
148-
xml.send( speed_to_junos( resource[:speed] ))
149-
end
152+
}
150153
}
151-
}
154+
end
152155
end
153156

154157
def xml_change_duplex( xml )
155-
xml.send(:'ether-options') {
156-
if resource[:duplex] == :auto
157-
unless @ndev_res.is_new?
158-
xml.send( :'link-mode', Netconf::JunosConfig::DELETE )
158+
if $duplex_configurable
159+
xml.send(:'ether-options') {
160+
if resource[:duplex] == :auto
161+
unless @ndev_res.is_new?
162+
xml.send( :'link-mode', Netconf::JunosConfig::DELETE )
163+
end
164+
else
165+
xml.send( :'link-mode', case resource[:duplex]
166+
when :full then 'full-duplex'
167+
when :half then 'half-duplex'
168+
end )
159169
end
160-
else
161-
xml.send( :'link-mode', case resource[:duplex]
162-
when :full then 'full-duplex'
163-
when :half then 'half-duplex'
164-
end )
165-
end
166-
}
170+
}
171+
end
167172
end
168-
173+
169174
end

0 commit comments

Comments
 (0)