Class: Puppet::NetDev::CE::L3InterfaceApi
- Defined in:
- lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb
Instance Method Summary collapse
- #create_l3_interface(resource) ⇒ Object
- #delete_l3_interface(resource) ⇒ Object
- #get_l3_interface ⇒ Object
-
#initialize ⇒ L3InterfaceApi
constructor
A new instance of L3InterfaceApi.
- #set_l3_interface(resource) ⇒ Object
Constructor Details
permalink #initialize ⇒ L3InterfaceApi
Returns a new instance of L3InterfaceApi.
22 23 24 |
# File 'lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb', line 22 def initialize super() end |
Instance Method Details
permalink #create_l3_interface(resource) ⇒ Object
[View source]
147 148 149 150 151 152 153 154 |
# File 'lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb', line 147 def create_l3_interface(resource) session = Puppet::NetDev::CE::Device.session create_l3_interface_xml = '<rpc><edit-config><target><running/></target><default-operation>merge</default-operation><error-option>rollback-on-error</error-option><config><ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"><interfaces><interface operation="create"><ifName>' + (resource[:name]).to_s + '</ifName></interface></interfaces></ifm></config></edit-config></rpc>' session.rpc.do_config(create_l3_interface_xml) end |
permalink #delete_l3_interface(resource) ⇒ Object
[View source]
156 157 158 159 160 161 162 163 |
# File 'lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb', line 156 def delete_l3_interface(resource) session = Puppet::NetDev::CE::Device.session delete_l3_interface_xml = '<rpc><edit-config><target><running/></target><default-operation>merge</default-operation><error-option>rollback-on-error</error-option><config><ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"><interfaces><interface operation="delete"><ifName>' + (resource[:name]).to_s + '</ifName></interface></interfaces></ifm></config></edit-config></rpc>' session.rpc.do_config(delete_l3_interface_xml) end |
permalink #get_l3_interface ⇒ Object
[View source]
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb', line 26 def get_l3_interface l3_interface_array = [] session = Puppet::NetDev::CE::Device.session get_l3_interface_xml = '<rpc><get><filter type="subtree"><ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"><interfaces><interface><ifName></ifName><ifDescr></ifDescr><ifAdminStatus></ifAdminStatus><isL2SwitchPort></isL2SwitchPort><ifmAm4></ifmAm4></interface></interfaces></ifm></filter></get></rpc>' interface_all = session.rpc.do_config(get_l3_interface_xml) interface_elements = interface_all.first_element_child.first_element_child interface_elements.element_children.each do |interface_elem| interface_doc = Nokogiri::XML(interface_elem.to_s) interface_mode = interface_doc.xpath('/interface/isL2SwitchPort').text next if interface_mode == 'true' interface_name = interface_doc.xpath('/interface/ifName').text interface_des = interface_doc.xpath('/interface/ifDescr').text interface_enable = interface_doc.xpath('/interface/ifAdminStatus').text interface_ipaddress = nil ip_info = interface_doc.xpath('/interface/ifmAm4/am4CfgAddrs/am4CfgAddr') ip_info.each do |node| ip_node = Nokogiri::XML(node.to_s) add_type = ip_node.xpath('/am4CfgAddr/addrType').text next unless add_type == 'main' ipaddress = ip_node.xpath('/am4CfgAddr/ifIpAddr').text netmask = ip_node.xpath('/am4CfgAddr/subnetMask').text interface_ipaddress = ipaddress + ' ' + netmask break end property_hash = { ensure: :present } property_hash[:name] = interface_name property_hash[:description] = interface_des if interface_des if interface_enable == 'up' property_hash[:enable] = :true elsif interface_enable == 'down' property_hash[:enable] = :false end property_hash[:ipaddress] = if !interface_ipaddress.nil? interface_ipaddress else 'null' end l3_interface_array << property_hash end l3_interface_array end |
permalink #set_l3_interface(resource) ⇒ Object
[View source]
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/puppet/provider/ce/api/l3_interface/l3_interface_api.rb', line 81 def set_l3_interface(resource) session = Puppet::NetDev::CE::Device.session set_interface_xml = '<rpc><edit-config><target><running/></target><default-operation>merge</default-operation><error-option>rollback-on-error</error-option><config><ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"><interfaces><interface operation="merge"><ifName>' + (resource[:name]).to_s + '</ifName>' if resource[:description] set_interface_xml += '<ifDescr>' + (resource[:description]).to_s + '</ifDescr>' end if resource[:enable] == :true set_interface_xml += '<ifAdminStatus>up</ifAdminStatus>' end if resource[:enable] == :false set_interface_xml += '<ifAdminStatus>down</ifAdminStatus>' end # e.g. '192.168.1.1 255.255.255.0' if resource[:ipaddress] && resource[:ipaddress] != 'null' ipadd_and_mask = resource[:ipaddress].split # ipadd_and_mask include IP address and netmask if ipadd_and_mask.count == 2 ip_address = ipadd_and_mask[0] net_mask = ipadd_and_mask[1] set_interface_xml += '<ifmAm4><am4CfgAddrs><am4CfgAddr operation="merge"><ifIpAddr>' + ip_address.to_s + '</ifIpAddr><subnetMask>' + net_mask.to_s + '</subnetMask><addrType>main</addrType></am4CfgAddr></am4CfgAddrs></ifmAm4>' end end if resource[:ipaddress] == 'null' # check whether main IP address exists, if true, delete it. get_l3_interface_xml = '<rpc><get><filter type="subtree"><ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0"><interfaces><interface><ifName>' + (resource[:name]).to_s + '</ifName><ifmAm4></ifmAm4></interface></interfaces></ifm></filter></get></rpc>' main_ipaddress_exist = false main_ipaddress = '0.0.0.0' interface_all = session.rpc.do_config(get_l3_interface_xml) interface_elements = interface_all.first_element_child.first_element_child interface_elements.element_children.each do |interface_elem| interface_doc = Nokogiri::XML(interface_elem.to_s) ip_info = interface_doc.xpath('/interface/ifmAm4/am4CfgAddrs/am4CfgAddr') ip_info.each do |node| ip_node = Nokogiri::XML(node.to_s) add_type = ip_node.xpath('/am4CfgAddr/addrType').text next unless add_type == 'main' ipaddress = ip_node.xpath('/am4CfgAddr/ifIpAddr').text netmask = ip_node.xpath('/am4CfgAddr/subnetMask').text main_ipaddress_exist = true main_ipaddress = ipaddress break end end if main_ipaddress_exist == true set_interface_xml += '<ifmAm4><am4CfgAddrs><am4CfgAddr operation="delete"><ifIpAddr>' + main_ipaddress + '</ifIpAddr></am4CfgAddr></am4CfgAddrs></ifmAm4>' end end set_interface_xml += '</interface></interfaces></ifm></config></edit-config></rpc>' session.rpc.do_config(set_interface_xml) end |