Class: Ifupdown2Config
- Inherits:
-
Object
- Object
- Ifupdown2Config
- Defined in:
- lib/cumulus/ifupdown2.rb
Overview
defines functions that read and write ifquery output
Instance Attribute Summary collapse
-
#confighash ⇒ Object
Returns the value of attribute confighash.
-
#currenthash ⇒ Object
Returns the value of attribute currenthash.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #build_address(addr_type) ⇒ Object
- #compare_with_current ⇒ Object
-
#hash_to_if ⇒ Object
Use ifquery to generate a configuration from a hash and return the configuration.
-
#if_to_hash ⇒ Object
Use ifquery to generate a JSON representation of an interface and return the hash.
-
#initialize(resource) ⇒ Ifupdown2Config
constructor
A new instance of Ifupdown2Config.
-
#remove_nil_entries(myhash) ⇒ Object
before 2.5.4 null entries where left in place in hash in 2.5.4 and higher null entries were removed.
- #update_addr_method ⇒ Object
- #update_address ⇒ Object
-
#update_alias_name ⇒ Object
updates alias name in confighash.
- #update_attr(attr, suffix = nil) ⇒ Object
- #update_members(attrname, ifupdown_attr) ⇒ Object
- #update_speed ⇒ Object
-
#update_vrr ⇒ Object
updates vrr config in config hash.
-
#write_config ⇒ Object
convert hash to text using ifquery write to interfaces file.
Constructor Details
#initialize(resource) ⇒ Ifupdown2Config
Returns a new instance of Ifupdown2Config.
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/cumulus/ifupdown2.rb', line 5 def initialize(resource) @resource = resource @confighash = { 'addr_family' => nil, 'addr_method' => nil, 'auto' => true, 'name' => resource[:name], 'config' => {} } @currenthash = if_to_hash end |
Instance Attribute Details
#confighash ⇒ Object
Returns the value of attribute confighash.
4 5 6 |
# File 'lib/cumulus/ifupdown2.rb', line 4 def confighash @confighash end |
#currenthash ⇒ Object
Returns the value of attribute currenthash.
4 5 6 |
# File 'lib/cumulus/ifupdown2.rb', line 4 def currenthash @currenthash end |
Instance Method Details
#==(other) ⇒ Object
146 147 148 149 |
# File 'lib/cumulus/ifupdown2.rb', line 146 def ==(other) remove_nil_entries(@confighash) == remove_nil_entries(other.confighash) end |
#build_address(addr_type) ⇒ Object
71 72 73 74 75 |
# File 'lib/cumulus/ifupdown2.rb', line 71 def build_address(addr_type) return nil.to_s if @resource[addr_type.to_sym].nil? Puppet.debug "updating #{addr_type} info #{@resource[:name]}" @resource[addr_type.to_sym] end |
#compare_with_current ⇒ Object
39 40 41 42 |
# File 'lib/cumulus/ifupdown2.rb', line 39 def compare_with_current remove_nil_entries(@confighash) == remove_nil_entries(@currenthash) end |
#hash_to_if ⇒ Object
Use ifquery to generate a configuration from a hash and return the configuration.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/cumulus/ifupdown2.rb', line 48 def hash_to_if intf = '' cmd = "/sbin/ifquery -i - -t json #{@resource[:name]}" IO.popen(cmd, mode: 'r+') do |ifquery| ifquery.write([@confighash].to_json) ifquery.close_write intf = ifquery.read ifquery.close end Puppet.debug("hash_to_if hash before text:\n#{@confighash}") Puppet.debug("hash_to_if ifupdown2 text:\n#{intf}") intf rescue StandardError => ex Puppet.warning("ifquery failed: #{ex}") end |
#if_to_hash ⇒ Object
Use ifquery to generate a JSON representation of an interface and return the hash.
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/cumulus/ifupdown2.rb', line 21 def if_to_hash filepath = @resource[:location] + '/' + @resource[:name] return {} unless File.exist?(filepath) json = '' IO.popen("/sbin/ifquery #{@resource[:name]} -o json") do |ifquery| json = ifquery.read end JSON.parse(json)[0] rescue StandardError => ex Puppet.warning("ifquery failed: #{ex}") end |
#remove_nil_entries(myhash) ⇒ Object
before 2.5.4 null entries where left in place in hash in 2.5.4 and higher null entries were removed
35 36 37 |
# File 'lib/cumulus/ifupdown2.rb', line 35 def remove_nil_entries(myhash) myhash.delete_if { |_key, value| value.nil? } end |
#update_addr_method ⇒ Object
64 65 66 67 68 69 |
# File 'lib/cumulus/ifupdown2.rb', line 64 def update_addr_method return if @resource[:addr_method].nil? Puppet.info "updating address method #{@resource[:name]}" @confighash['addr_method'] = @resource[:addr_method].to_s @confighash['addr_family'] = 'inet' end |
#update_address ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/cumulus/ifupdown2.rb', line 77 def update_address ipv4_list = build_address('ipv4') ipv6_list = build_address('ipv6') addresslist = [] addresslist += ipv4_list unless ipv4_list.empty? addresslist += ipv6_list unless ipv6_list.empty? # ifquery sets hash value to a string if address list length == 1 # otherwise it sets it to an array addresslist = addresslist.length == 1 ? addresslist.join : addresslist return if addresslist.empty? @confighash['config']['address'] = addresslist end |
#update_alias_name ⇒ Object
updates alias name in confighash
112 113 114 115 116 |
# File 'lib/cumulus/ifupdown2.rb', line 112 def update_alias_name return if @resource[:alias_name].nil? Puppet.debug "updating alias #{@resource[:name]}" @confighash['config']['alias'] = @resource[:alias_name] end |
#update_attr(attr, suffix = nil) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/cumulus/ifupdown2.rb', line 92 def update_attr(attr, suffix = nil) resource_value = @resource[attr.to_sym] ifupdown_value = '' return if resource_value.nil? if resource_value == true ifupdown_value = 'yes' elsif resource_value == false ifupdown_value = 'no' elsif resource_value.is_a?(Array) ifupdown_value = resource_value.join(' ') else ifupdown_value = resource_value.to_s end # ifquery uses dash not underscore to define attributes attr.gsub! '_', '-' configattr = (suffix.nil?) ? attr : "#{suffix}-#{attr}" @confighash['config'][configattr] = ifupdown_value end |
#update_members(attrname, ifupdown_attr) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/cumulus/ifupdown2.rb', line 133 def update_members(attrname, ifupdown_attr) result = [] @resource[attrname.to_sym].each do |port_entry| if port_entry.match('-') final_port_entry = 'glob ' + port_entry else final_port_entry = port_entry end result.push(final_port_entry) end @confighash['config'][ifupdown_attr] = result.join(' ') end |
#update_speed ⇒ Object
118 119 120 121 122 123 |
# File 'lib/cumulus/ifupdown2.rb', line 118 def update_speed return if @resource[:speed].nil? Puppet.debug "configuring speed #{@resource[:name]}" @confighash['config']['link-speed'] = @resource[:speed].to_s @confighash['config']['link-duplex'] = 'full' end |
#update_vrr ⇒ Object
updates vrr config in config hash
126 127 128 129 130 131 |
# File 'lib/cumulus/ifupdown2.rb', line 126 def update_vrr return if @resource[:virtual_ip].nil? vrrstring = @resource[:virtual_mac] + ' ' + @resource[:virtual_ip] @confighash['config']['address-virtual'] = vrrstring Puppet.debug "updating vrr config #{vrrstring}" end |
#write_config ⇒ Object
convert hash to text using ifquery write to interfaces file
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/cumulus/ifupdown2.rb', line 153 def write_config Puppet.info "write config for #{@resource[:name]}" intf = hash_to_if if intf.empty? Puppet.err "ifquery could not interpret config #{@confighash}" \ "into ifupdown2 text. Not modifying #{@resource[:name]} config" return end filepath = @resource[:location] + '/' + @resource[:name] Puppet.debug "file location: #{filepath}" begin ifacefile = File.open(filepath, 'w') ifacefile.write(intf) ensure ifacefile.close end end |