Package backend :: Package server :: Package config_common :: Module templated_document
[hide private]
[frames] | no frames]

Source Code for Module backend.server.config_common.templated_document

  1  # 
  2  # Copyright (c) 2008--2016 Red Hat, Inc. 
  3  # 
  4  # This software is licensed to you under the GNU General Public License, 
  5  # version 2 (GPLv2). There is NO WARRANTY for this software, express or 
  6  # implied, including the implied warranties of MERCHANTABILITY or FITNESS 
  7  # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 
  8  # along with this software; if not, see 
  9  # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 
 10  # 
 11  # Red Hat trademarks are not licensed under GPLv2. No permission is 
 12  # granted to use or replicate Red Hat trademarks that are incorporated 
 13  # in this software or its documentation. 
 14  # 
 15  # 
 16  # 
 17   
 18  from base_templated_document import TemplatedDocument 
 19   
 20  from spacewalk.common.rhnLog import log_debug 
 21   
 22  from spacewalk.server.rhnServer.server_hardware import NetworkInformation 
 23  from spacewalk.server.rhnServer.server_hardware import NetIfaceInformation 
 24   
 25  RHN_PREFIX = 'rhn.system.' 
 26   
 27   
28 -def var_interp_prep(server):
29 # make sure we have the necessary data in the server obj 30 server.reload_hardware_byid(server.getid()) 31 server.load_custom_info() 32 return server
33 34
35 -class ServerTemplatedDocument(TemplatedDocument):
36
37 - def __init__(self, server, start_delim=None, end_delim=None):
38 TemplatedDocument.__init__(self, start_delim=start_delim, end_delim=end_delim) 39 40 self.server = server
41
42 - def fallback_call(self, fname, params, defval):
43 # Re-compose the macro if we don't know the function 44 return self.null_call(fname, params, defval)
45
46 - def set_functions(self):
47 self.functions.clear() 48 self.functions.update({ 49 RHN_PREFIX + 'sid': self.sid, 50 RHN_PREFIX + 'profile_name': self.profile_name, 51 RHN_PREFIX + 'description': self.description, 52 RHN_PREFIX + 'hostname': self.hostname, 53 RHN_PREFIX + 'ip_address': self.ipaddr, 54 RHN_PREFIX + 'ip6_address': self.ip6addr, 55 RHN_PREFIX + 'custom_info': self.custom_info, 56 RHN_PREFIX + 'net_interface.ip_address': self.net_intf_ipaddr, 57 RHN_PREFIX + 'net_interface.netmask': self.net_intf_netmask, 58 RHN_PREFIX + 'net_interface.broadcast': self.net_intf_broadcast, 59 RHN_PREFIX + 'net_interface.hardware_address': self.net_intf_hwaddr, 60 RHN_PREFIX + 'net_interface.driver_module': self.net_intf_module, 61 RHN_PREFIX + 'net_interface.ip6_address': self.net_intf_ip6addr, 62 RHN_PREFIX + 'net_interface.ip6_netmask': self.net_intf_ip6netmask, 63 })
64 65 ####################### 66 # HANDLER FUNCTIONS 67 # 68 # If any of these can't come up w/ a good value, they should return None 69 # If None is returned, the default value will be used if provided 70 # Otherwise, the empty string '' will be substituted
71 - def sid(self):
72 return self.server.server['id']
73
74 - def profile_name(self):
75 return self.server.server['name']
76
77 - def description(self):
78 return self.server.server['description']
79
80 - def hostname(self):
81 return self._get_network_info_attr('hostname')
82
83 - def ipaddr(self):
84 return self._get_network_info_attr('ipaddr')
85
86 - def ip6addr(self):
87 return self._get_network_info_attr('ip6addr')
88
89 - def _get_network_info_attr(self, attr):
90 network_infos = self.server.hardware_by_class(NetworkInformation) 91 92 if network_infos: 93 return network_infos[0].data[attr] 94 else: 95 return None
96
97 - def custom_info(self, key):
98 if self.server.custom_info is None: 99 log_debug(4, "no custom info", self.server) 100 raise "didn't load custom info" 101 102 if key in self.server.custom_info: 103 return self.server.custom_info[key] 104 105 return None
106
107 - def _interface_info(self, interface_name):
108 infos = self.server.hardware_by_class(NetIfaceInformation) 109 if infos: 110 network_interfaces = infos[0].db_ifaces 111 else: 112 return None 113 114 for iface in network_interfaces: 115 if iface['name'] == interface_name: 116 return iface 117 return None
118
119 - def net_intf_ipaddr(self, interface_name):
120 ipv4 = self._get_interface_info_attr(interface_name, 'ipv4') 121 return self._get_interface_address_attr(ipv4, 'address')
122
123 - def net_intf_netmask(self, interface_name):
124 ipv4 = self._get_interface_info_attr(interface_name, 'ipv4') 125 return self._get_interface_address_attr(ipv4, 'netmask')
126
127 - def net_intf_broadcast(self, interface_name):
128 ipv4 = self._get_interface_info_attr(interface_name, 'ipv4') 129 return self._get_interface_address_attr(ipv4, 'broadcast')
130
131 - def net_intf_ip6addr(self, interface_name, scope='universe', order=0):
132 """ get IPv6 address 133 134 interface_name is name of interface, e.g. 'eth0' 135 scope is either 'link', 'universe' or 'host' 136 order is zero based index as there can be more than one IP address 137 for given scope and interface 138 """ 139 ipv6 = self._get_interface_info_attr(interface_name, 'ipv6') 140 return self._get_interface_address6_attr(ipv6, scope, order, 'address')
141
142 - def net_intf_ip6netmask(self, interface_name, scope='universe', order=0):
143 """ get IPv6 netmask 144 145 interface_name is name of interface, e.g. 'eth0' 146 scope is either 'link', 'universe' or 'host' 147 order is zero based index as there can be more than one IP address 148 for given scope and interface 149 """ 150 ipv6 = self._get_interface_info_attr(interface_name, 'ipv6') 151 return self._get_interface_address6_attr(ipv6, scope, order, 'netmask')
152
153 - def net_intf_hwaddr(self, interface_name):
154 return self._get_interface_info_attr(interface_name, 'hw_addr')
155
156 - def net_intf_module(self, interface_name):
157 return self._get_interface_info_attr(interface_name, 'module')
158
159 - def _get_interface_info_attr(self, interface_name, attr):
160 iface = self._interface_info(interface_name) 161 162 if not iface: 163 return None 164 165 return iface[attr]
166
167 - def _get_interface_address_attr(self, address, attr):
168 if (address is None) or (len(address.db_ifaces) == 0) or (attr not in address.db_ifaces[0]): 169 return None 170 else: 171 return address.db_ifaces[0][attr]
172
173 - def _get_interface_address6_attr(self, address, scope, order, attr):
174 """ return attribute of given address 175 176 address is list of interfaces 177 e.g.: [{'scope': 'universe', 'netmask': '64', 'address': '2620:52:0:2223:20c:29ff:fecb:d06e', 178 'interface_id': 127}, {'scope': 'link', 'netmask': '64', 'address': 179 'fe80::20c:29ff:fecb:d06e', 'interface_id': 127}] 180 scope is either 'link', 'universe' or 'host' 181 order is zero based index as there can be more than one IP address 182 for given scope and interface 183 attr is attribute, e.g "netmask" 184 """ 185 if (address is None): 186 return None 187 ifaces = [i for i in address.db_ifaces if (i['scope'] == scope)] 188 if (order >= len(ifaces)) or (attr not in ifaces[order]): 189 return None 190 else: 191 return ifaces[order][attr]
192