def ovirt_rsyslog(server, port, protocol): if server == "": disable = "#" else: disable = "" if protocol == "tcp": DELIM = "@@" else: DELIM = "@" if _functions.is_valid_ipv6(server): server = "[" + server + "]" rsyslog_dict = { "disable": disable, "delim": DELIM, "server": server, "port": port } rsyslog_config_out = RSYSLOG_CONFIG_TEMPLATE % rsyslog_dict rsyslog_config = open(RSYSLOG_FILE, "w") rsyslog_config.write(rsyslog_config_out) rsyslog_config.close() _functions.system_closefds("/sbin/service rsyslog restart &> /dev/null") if _functions.ovirt_store_config("/etc/rsyslog.conf"): logger.info("Syslog Configuration Updated") return True
def ovirt_netconsole(server, port): _functions.augtool("set", \ "/files/etc/sysconfig/netconsole/SYSLOGADDR", server) _functions.augtool("set", \ "/files/etc/sysconfig/netconsole/SYSLOGPORT", port) _functions.system_closefds("/sbin/service netconsole restart &> /dev/null") if _functions.ovirt_store_config("/etc/sysconfig/netconsole"): logger.info("Netconsole Configuration Updated") return True
def set_iscsi_initiator(initiator_name): iscsi_config = open(INITIATOR_FILE, "w") iscsi_config.write("InitiatorName=" + initiator_name + "\n") iscsi_config.close() if _functions.ovirt_store_config(INITIATOR_FILE): _functions.logger.info("Initiator name set as: " + initiator_name) else: _functions.logger.warning("Setting initiator name failed") _functions.system_closefds("service iscsid restart &> /dev/null")
def commit(self): if not verifyStringFormat(self.path, "^\/[\w\_\-\s]+(\/[\w\_\-\s]+)*\/?$"): return if not os.path.exists(self.path): _functions.system_closefds("mkdir -p %s" % self.path) _functions.system_closefds("chown 36:36 %s" % self.path) else : _functions.system_closefds("rm -rf %s &> /dev/null" % self.path) _functions.system_closefds("mkdir -p %s &> /dev/null" % self.path) _functions.system_closefds("chown 36:36 %s &> /dev/null" % self.path)
def commit(self): if not verifyStringFormat(self.path, "^\/[\w\_\-\s]+(\/[\w\_\-\s]+)*\/?$"): return if not os.path.exists(self.path): _functions.system_closefds("mkdir -p %s" % self.path) _functions.system_closefds("chown 36:36 %s" % self.path) else: _functions.system_closefds("rm -rf %s &> /dev/null" % self.path) _functions.system_closefds("mkdir -p %s &> /dev/null" % self.path) _functions.system_closefds("chown 36:36 %s &> /dev/null" % self.path)
def set_ssh_conf(self, path, _): try: from ocsetup import ocs ssh_btn = ocs.page_security.enable_ssh_CheckButton check_button_state = ssh_btn.get_active() current_state = augtool_get(path) if check_button_state is False: datautil.augtool_set(path, "no") else: datautil.augtool_set(path, "yes") if ((current_state == "no" and check_button_state is True) or (current_state != "no" and check_button_state is False)): # SSHD CONFIGURE CHANGED, RESTART. system_closefds("service sshd restart &>/dev/null") except Exception, e: print e
def set_nfsv4_domain(domain): idmap_conf = "/etc/idmapd.conf" current_domain = get_current_nfsv4_domain() _functions.unmount_config(idmap_conf) if current_domain.startswith("#"): current_domain = "#Domain = %s" % current_domain.replace("# ", "") _functions.system("sed -i 's/%s/Domain = %s/g' %s" \ % (current_domain, domain, idmap_conf)) else: _functions.system("sed -i 's/%s/%s/g' %s" \ % (current_domain, domain, idmap_conf)) if _functions.ovirt_store_config(idmap_conf): logger.info("NFSv4 domain set as: " + domain) else: logger.warning("Setting nfsv4 domain failed") _functions.system_closefds("service rpcidmapd restart") _functions.system_closefds("nfsidmap -c &>/dev/null")
def toggle_ssh_access(): ssh_config = augeas.Augeas("root=/") ssh_config.set("/files/etc/ssh/sshd_config", _functions.OVIRT_VARS["ssh_pass_enabled"]) ssh_config.save() _functions.ovirt_store_config("/etc/ssh/sshd_config") rc = _functions.system_closefds("service sshd reload") return rc
def set_nfsv4_domain(domain): idmap_conf = "/etc/idmapd.conf" current_domain = get_current_nfsv4_domain() _functions.unmount_config(idmap_conf) if current_domain.startswith("#"): current_domain = "#Domain = %s" % current_domain.replace("# ","") _functions.system("sed -i 's/%s/Domain = %s/g' %s" \ % (current_domain, domain, idmap_conf)) else: _functions.system("sed -i '/^Domain/ s/%s/%s/g' %s" \ % (current_domain, domain, idmap_conf)) if _functions.ovirt_store_config(idmap_conf): logger.info("NFSv4 domain set as: " + domain) else: logger.warning("Setting nfsv4 domain failed") _functions.system_closefds("service rpcidmapd restart") _functions.system_closefds("nfsidmap -c &>/dev/null")
def save_ntp_configuration(self): _functions.ovirt_store_config(self.NTP_CONFIG_FILE) ntproot = "/files/etc/ntp.conf" ntpconf = "rm %s\n" % ntproot ntpconf += "set %s/driftfile /var/lib/ntp/drift\n" % ntproot ntpconf += "set %s/includefile /etc/ntp/crypto/pw\n" % ntproot ntpconf += "set %s/keys /etc/ntp/keys" % ntproot ntpconf = ntpconf.split("\n") for line in ntpconf: try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: oper, key = line.split() _functions.augtool(oper, key, "") if "OVIRT_NTP" in OVIRT_VARS: SERVERS = [s for s in OVIRT_VARS["OVIRT_NTP"].split(",") if s] for n in [1, 2]: _functions.augtool("rm", \ "/files/etc/ntp.conf/server[%d]" % n, "") for idx, server in enumerate(SERVERS): n = idx + 1 # Augeas starts at 1 _functions.augtool("set", \ "/files/etc/ntp.conf/server[%d]" % n, server) _functions.system_closefds("service ntpd stop &> /dev/null") _functions.system_closefds("service ntpdate start &> /dev/null") _functions.system_closefds("service ntpd start &> /dev/null")
def c(): cmd = "engine-setup --config=/home/mujun/ovirt_config/20141230183208-setup.conf" out = "" current = 0 try: import pdb pdb.set_trace() for line in process.pipe_async(cmd): print line if line == "" or line == None : break line = ''.join(filter(lambda x: x, line.split('\033[0;31m'))) line = ''.join(filter(lambda x: x, line.split('\033[32m'))) line = ''.join(filter(lambda x: x, line.split('\033[0m'))) out += line # if "icmp_req" in line: # current += 100.0 / float(count) current += 1 if current%7 == 0: current =0 out = "" # self.widgets["ping.progress"].current(current) with open('/root/abc','a+') as f: f.writelines('Result :\n\n%s' %out) self.widgets["ping.result"].text("Result:\n\n %s" % out) if isRun(): _functions.system_closefds("rm -rf /etc/ovirt-engine/engine-setup.conf &> /dev/null") _functions.system_closefds("engine-setup --gen-answer-file=/etc/ovirt-engine/engine-setup.conf &> /dev/null") _functions.system_closefds("sed -i 1d /etc/ovirt-engine/engine-setup.conf &> /dev/null") #self.logger.debug(out) except: import traceback traceback.print_exc()
def save_ntp_configuration(self): ntproot = "/files/etc/ntp.conf" ntpconf = "rm %s\n" % ntproot ntpconf += "set %s/driftfile /var/lib/ntp/drift\n" % ntproot ntpconf += "set %s/includefile /etc/ntp/crypto/pw\n" % ntproot ntpconf += "set %s/keys /etc/ntp/keys" % ntproot ntpconf = ntpconf.split("\n") for line in ntpconf: try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: oper, key = line.split() _functions.augtool(oper, key, "") if "OVIRT_NTP" in OVIRT_VARS: offset = 1 SERVERS = OVIRT_VARS["OVIRT_NTP"].split(",") for server in SERVERS: if offset == 1: _functions.augtool("set", \ "/files/etc/ntp.conf/server[1]", server) elif offset == 2: _functions.augtool("set", \ "/files/etc/ntp.conf/server[2]", server) offset = offset + 1 _functions.system_closefds("service ntpd stop &> /dev/null") _functions.system_closefds("service ntpdate start &> /dev/null") _functions.system_closefds("service ntpd start &> /dev/null")
def c(): cmd = "engine-setup --config=/home/mujun/ovirt_config/20141230183208-setup.conf" out = "" current = 0 try: import pdb pdb.set_trace() for line in process.pipe_async(cmd): print line if line == "" or line == None: break line = ''.join( filter(lambda x: x, line.split('\033[0;31m'))) line = ''.join(filter(lambda x: x, line.split('\033[32m'))) line = ''.join(filter(lambda x: x, line.split('\033[0m'))) out += line # if "icmp_req" in line: # current += 100.0 / float(count) current += 1 if current % 7 == 0: current = 0 out = "" # self.widgets["ping.progress"].current(current) with open('/root/abc', 'a+') as f: f.writelines('Result :\n\n%s' % out) self.widgets["ping.result"].text("Result:\n\n %s" % out) if isRun(): _functions.system_closefds( "rm -rf /etc/ovirt-engine/engine-setup.conf &> /dev/null" ) _functions.system_closefds( "engine-setup --gen-answer-file=/etc/ovirt-engine/engine-setup.conf &> /dev/null" ) _functions.system_closefds( "sed -i 1d /etc/ovirt-engine/engine-setup.conf &> /dev/null" ) #self.logger.debug(out) except: import traceback traceback.print_exc()
def commit(self): _functions.system_closefds("echo %s > /tmp/password" % (self.passwd)) _functions.system_closefds("engine-manage-domains -action=add -domain=%s \ -user=admin -interactive -provider=ActiveDirectory -addPermissions -passwordFile=/tmp/password \ &> /dev/null" % (self.domain))
def get_dev_name(self): devices = [] # list separator for d in os.listdir("/sys/block/"): if re.match("^[hsv]+d", d): devices.append("/dev/%s" % d) byid_list_cmd = ("find /dev/disk/by-id -mindepth 1 -not -name " + "'*-part*' 2>/dev/null") byid_list = _functions.subprocess_closefds(byid_list_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) byid_list_output, byid_list_err = byid_list.communicate() for d in byid_list_output.split(): d = os.readlink(d) d_basename = os.path.basename(d) udev_cmd = ("udevadm info --name=/dev/" + d_basename + " --query=property | grep -q ^ID_BUS: &>>/dev/null") if _functions.system_closefds(udev_cmd): devices.append("/dev/%s" % d_basename) # FIXME: workaround for detecting cciss devices if os.path.exists("/dev/cciss"): for d in os.listdir("/dev/cciss"): if not re.match("p[0-9]+\$", d): devices.append("/dev/cciss/%s" % d) # include multipath devices mpath_sets = "" devs_to_remove = {} multipath_list_cmd = "dmsetup ls --target=multipath | cut -f1" multipath_list = _functions.subprocess_closefds(multipath_list_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) multipath_list_output, multipath_list_err = multipath_list.communicate() for d in multipath_list_output.split(): devices.append("/dev/mapper/%s" % d) sd_devs = "" sd_devs = self.get_multipath_deps(d) dm_dev_cmd = ("multipath -ll \"%s\" | grep \"%s\" | " + "sed -r 's/^.*(dm-[0-9]+ ).*$/\\1/'") % (d, d) dm_dev = _functions.subprocess_closefds(dm_dev_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) dm_dev_output, dm_dev_err = dm_dev.communicate() [devs_to_remove.update({d: True}) for d in sd_devs.split()] mpath_sets = ("%s %s %s" % (mpath_sets, sd_devs, dm_dev_output)) logger.debug("Multipath sets are %s" % mpath_sets) logger.debug("Removing the following from the list of disks, because " "they're part of a multipath set: %s" % sorted( devs_to_remove)) # Remove /dev/sd* devices that are part of a multipath device dev_list = set() for d in devices: if (os.path.basename(d) not in devs_to_remove and not "/dev/dm-" in d): dev_list.add(d) return list(dev_list)
def commit(self): _functions.system_closefds("sed -i '/%s %s/d' /etc/hosts" % (self.ip,self.hostname)) _functions.system_closefds("sed -i '$a\%s %s' /etc/hosts" % (self.ip,self.hostname))
def create_hostvg(self): logger.info("Creating LVM partition") self.physical_vols = [] for drv in self.HOSTVGDRIVE.strip(",").split(","): drv = _functions.translate_multipath_device(drv) if drv != "": if self.ROOTDRIVE == drv and not _functions.is_iscsi_install(): self.reread_partitions(self.ROOTDRIVE) parted_cmd = ("parted \"" + drv + "\" -s \"mkpart " + "primary ext2 " + str(self.RootBackup_end) + "M -1\"") logger.debug(parted_cmd) _functions.system(parted_cmd) hostvgpart = "4" elif self.BOOTDRIVE == drv: parted_cmd = ("parted \"" + drv + "\" -s \"mkpart " + "primary ext2 " + str(self.boot_size_si * 2) + " -1\"") logger.debug(parted_cmd) _functions.system(parted_cmd) hostvgpart = "3" self.ROOTDRIVE = self.BOOTDRIVE elif self.ISCSIDRIVE == drv: parted_cmd = ("parted \"" + drv + "\" -s \"mkpart " + "primary ext2 " + str(self.ROOT_SIZE * 2) + " -1\"") logger.debug(parted_cmd) _functions.system(parted_cmd) hostvgpart = "3" else: _functions.system("parted \"" + drv + "\" -s \"mklabel " + self.LABEL_TYPE + "\"") parted_cmd = ("parted \"" + drv + "\" -s \"mkpart " + "primary ext2 1M -1 \"") logger.debug(parted_cmd) _functions.system(parted_cmd) hostvgpart = "1" logger.info("Toggling LVM on") parted_cmd = ("parted \"" + drv + "\" -s \"set " + str(hostvgpart) + " lvm on\"") logger.debug(parted_cmd) _functions.system(parted_cmd) _functions.system("parted \"" + self.ROOTDRIVE + \ "\" -s \"print\"") _functions.system("udevadm settle 2> /dev/null || " + \ "udevsettle &>/dev/null") # sync GPT to the legacy MBR partitions if ("OVIRT_INSTALL_ROOT" in _functions.OVIRT_VARS and _functions.OVIRT_VARS["OVIRT_INSTALL_ROOT"] == "y"): if self.LABEL_TYPE == "gpt": logger.info("Running gptsync to create legacy mbr") _functions.system("gptsync \"" + \ self.ROOTDRIVE + "\"") self.physical_vols.append((drv, hostvgpart)) drv_count = 0 logger.debug(self.physical_vols) for drv, hostvgpart in self.physical_vols: partpv = None logger.info("Creating physical volume on (%s, %s)" % (drv, hostvgpart)) for _drv in self.HOSTVGDRIVE.strip(",").split(","): self.reread_partitions(_drv) i = 15 while i > 0 and partpv is None: # e.g. /dev/cciss/c0d0p2 for _partpv in [drv + hostvgpart, drv + "p" + hostvgpart]: if os.path.exists(_partpv): partpv = _partpv break logger.info(_partpv + " is not available!") i -= 1 time.sleep(1) if i is 0: return False assert(partpv is not None) if not _functions.system("dd if=/dev/zero of=\"" + partpv + "\" bs=1024k count=1"): logger.error("Failed to wipe lvm partition") return False if not _functions.system("pvcreate -ff -y \"" + partpv + "\""): logger.error("Failed to pvcreate on " + partpv) return False if drv_count < 1: logger.info("Creating volume group on " + partpv) if not _functions.system("vgcreate /dev/HostVG \"" + \ partpv + "\""): logger.error("Failed to vgcreate /dev/HostVG on " + partpv) return False else: logger.info("Extending volume group on " + partpv) if not _functions.system("vgextend /dev/HostVG \"" + \ partpv + "\""): logger.error("Failed to vgextend /dev/HostVG on " + partpv) return False drv_count = drv_count + 1 if self.SWAP_SIZE > 0: logger.info("Creating swap partition") _functions.system("lvcreate --name Swap --size " + \ str(self.SWAP_SIZE) + "M /dev/HostVG") _functions.system("mkswap -L \"SWAP\" /dev/HostVG/Swap") _functions.system_closefds("echo \"/dev/HostVG/Swap swap swap " + "defaults 0 0\" >> /etc/fstab") if "OVIRT_CRYPT_SWAP" in _functions.OVIRT_VARS: _functions.system_closefds("echo \"SWAP /dev/HostVG/Swap " + "/dev/mapper/ovirt-crypt-swap " + _functions.OVIRT_VARS["OVIRT_CRYPT_SWAP"] + "\" >> /etc/ovirt-crypttab") if self.CONFIG_SIZE > 0: logger.info("Creating config partition") _functions.system("lvcreate --name Config --size " + str(self.CONFIG_SIZE) + "M /dev/HostVG") _functions.system("mke2fs -j -t ext4 /dev/HostVG/Config " + \ "-L \"CONFIG\"") _functions.system("tune2fs -c 0 -i 0 /dev/HostVG/Config") if self.LOGGING_SIZE > 0: logger.info("Creating log partition") _functions.system("lvcreate --name Logging --size " + str(self.LOGGING_SIZE) + "M /dev/HostVG") _functions.system("mke2fs -j -t ext4 /dev/HostVG/Logging " + \ "-L \"LOGGING\"") _functions.system("tune2fs -c 0 -i 0 /dev/HostVG/Logging") _functions.system_closefds("echo \"/dev/HostVG/Logging " + \ "/var/log ext4 defaults,noatime 0 0\" >> " + \ "/etc/fstab") use_data = 1 if self.DATA_SIZE == -1: logger.info("Creating data partition with remaining free space") _functions.system("lvcreate --name Data -l 100%FREE /dev/HostVG") use_data = 0 elif self.DATA_SIZE > 0: logger.info("Creating data partition") _functions.system("lvcreate --name Data --size " + \ str(self.DATA_SIZE) + "M /dev/HostVG") use_data = 0 if use_data == 0: _functions.system("mke2fs -j -t ext4 /dev/HostVG/Data -L \"DATA\"") _functions.system("tune2fs -c 0 -i 0 /dev/HostVG/Data") _functions.system_closefds("echo \"/dev/HostVG/Data /data ext4 " + "defaults,noatime 0 0\" >> /etc/fstab") _functions.system_closefds("echo \"/data/images " + \ "/var/lib/libvirt/images bind bind 0 0\" >> " + \ "/etc/fstab") _functions.system_closefds("echo \"/data/core " + \ "/var/log/core bind bind 0 0\" >> /etc/fstab") logger.info("Mounting config partition") _functions.mount_config() if os.path.ismount("/config"): _functions.ovirt_store_config("/etc/fstab") # remount /var/log from tmpfs to HostVG/Logging _functions.unmount_logging() _functions.mount_logging() if use_data == 0: logger.info("Mounting data partition") _functions.mount_data() logger.info("Completed HostVG Setup!") return True
def set_sasl_password(user, password): _functions.system_closefds("saslpasswd2 -a libvirt -p %s") % user
def commit(self): _functions.system_closefds("echo %s > /tmp/password" % (self.passwd)) _functions.system_closefds( "engine-manage-domains -action=add -domain=%s \ -user=admin -interactive -provider=ActiveDirectory -addPermissions -passwordFile=/tmp/password \ &> /dev/null" % (self.domain))
def get_system_nics(): # Re-trigger udev for rhbz#866584 for sysfspath in glob("/sys/class/net/*"): _functions.system_closefds("udevadm test %s > /dev/null 2> /dev/null" % quote(sysfspath)) client = _functions.gudev.Client(['net']) configured_nics = 0 ntp_dhcp = 0 nic_dict = {} for device in client.query_by_subsystem("net"): try: dev_interface = device.get_property("INTERFACE") dev_vendor = device.get_property("ID_VENDOR_FROM_DATABASE") dev_type = device.get_property("DEVTYPE") dev_path = device.get_property("DEVPATH") if (dev_interface == "lo" or \ dev_interface.startswith("bond") or \ dev_interface.startswith("sit") or \ dev_interface.startswith("vnet") or \ "." in dev_interface or \ dev_type == "bridge"): logger.info("Skipping interface '%s'" % dev_interface) continue else: logger.info("Gathering informations for '%s'" % dev_interface) try: dev_vendor = dev_vendor.replace(",", "") except AttributeError: logger.debug("2. vendor approach: %s" % dev_vendor) try: # rhevh workaround since udev version # doesn't have vendor info dev_path = dev_path.split('/') if "virtio" in dev_path[4]: pci_dev = dev_path[3].replace("0000:", "") else: pci_dev = dev_path[4].replace("0000:", "") pci_lookup_cmd = (("lspci|grep '%s'|awk -F \":\" " % pci_dev) + "{'print $3'}") pci_lookup = _functions.subprocess_closefds(pci_lookup_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) dev_vendor = pci_lookup.stdout.read().strip() except: dev_vendor = "unknown" logger.debug("3. vendor approach: %s" % dev_vendor) try: dev_vendor = dev_vendor.replace(",", "") except AttributeError: dev_vendor = "unknown" logger.debug("4. vendor approach: %s" % dev_vendor) dev_vendor = _functions.pad_or_trim(25, dev_vendor) dev_driver = "" try: dev_driver = os.readlink("/sys/class/net/" + dev_interface + \ "/device/driver") dev_driver = os.path.basename(dev_driver) except Exception as e: logger.debug("Exception while determining NIC driver: %s" % ( repr(e))) nic_addr_file = open("/sys/class/net/" + dev_interface + \ "/address") dev_address = nic_addr_file.read().strip() cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BOOTPROTO") % str(dev_interface) dev_bootproto = _functions.augtool_get(cmd) type_cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/TYPE") % str(dev_interface) bridge_cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BRIDGE") % str(dev_interface) dev_bridge = _functions.augtool_get(bridge_cmd) # check for vlans logger.debug("checking for vlan") vlans = glob("/etc/sysconfig/network-scripts/ifcfg-%s.*" % dev_interface) if (len(vlans) > 0): dev_conf_status = "Configured " vlanid = vlans[0].split(".")[-1] logger.debug("found vlan %s" % vlanid) # if no bridge in nic, check clan-nic for bridge if not dev_bridge: vlancfg = "ifcfg-%s.%s" % (str(dev_interface), vlanid) cmd = ("/files/etc/sysconfig/network-scripts/%s/" + "BRIDGE") % vlancfg dev_bridge = augtool_get(cmd) logger.debug("Getting bridge '%s' from vlan: %s" % ( dev_bridge, cmd)) if dev_bootproto is None: logger.debug("Looking for bootproto in %s" % dev_bridge) cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BOOTPROTO") % str(dev_bridge) dev_bootproto = _functions.augtool_get(cmd) if dev_bootproto is None: dev_bootproto = "Disabled" dev_conf_status = "Unconfigured" else: dev_conf_status = "Configured " else: dev_conf_status = "Configured " if dev_conf_status == "Configured ": configured_nics = configured_nics + 1 except Exception as e: logger.warning("Error while determining NICs: %s" % repr(e)) nic_info = "%s,%s,%s,%s,%s,%s,%s" % ( \ dev_interface, dev_bootproto, \ dev_vendor, dev_address, \ dev_driver, dev_conf_status, \ dev_bridge) logger.debug("NIC info: %s" % nic_info) nic_dict[dev_interface] = nic_info if dev_bootproto == "dhcp": ntp_dhcp = 1 return nic_dict, configured_nics, ntp_dhcp
def save_network_configuration(self): _functions.aug.load() net_configured = 0 _functions.augtool_workdir_list = "ls %s/augtool-* >/dev/null" logger.info("Configuring network for NIC %s" % self.CONFIGURED_NIC) # Wee need to bring down all network stuff, with the current network # config, before we change the config. Otherwise the interfaces can # not be brought down correctly. logger.info("Stopping Network services") _functions.system("service network stop") # FIXME can't this be done further down were we remove the bridges? for vlan in get_system_vlans(): # XXX wrong match e.g. eth10.1 with eth1 if self.CONFIGURED_NIC in vlan: _functions.system_closefds("vconfig rem " + vlan + \ "&> /dev/null") _functions.ovirt_safe_delete_config(self.IFSCRIPTS_PATH + vlan) _functions.system_closefds("rm -rf " + \ self.IFSCRIPTS_PATH + vlan) # All old config files are gone, the new ones are created step by step logger.debug("Removing persisted network configs") # This should cover NICs, VLANs and bridges for script in glob("%s*" % (self.IFSCRIPTS_PATH)): if not _functions.is_persisted(script): continue logger.debug("Removing Script: " + script) _functions.ovirt_safe_delete_config(script) _functions.aug.load() logger.debug("Updating interface config") for line in self.IF_CONFIG: logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: oper, key = line.split() _functions.augtool(oper, key, "") logger.debug("Updating bridge config") if not self.disabled_nic == 1: for line in self.BR_CONFIG: logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: try: oper, key = line.split() _functions.augtool(oper, key, "") except: pass logger.debug("Updating VLAN config") for line in self.VL_CONFIG.split("\n"): logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: try: oper, key = line.split() _functions.augtool(oper, key, "") except: pass # preserve current MAC mappings for *all physical* network interfaces logger.debug("Preserving current MAC mappings") for nicdev in glob('/sys/class/net/*/device'): nic = nicdev.split('/')[4] if nic != self.CONFIGURED_NIC: f = open('/sys/class/net/%s/address' % nic) mac = f.read().strip() f.close() if len(mac) > 0: logger.debug("Mapping for %s" % nic) self.CONFIGURED_NICS.append(nic) nicroot = "%s%s" % (self.IFCONFIG_FILE_ROOT, nic) # XXX _functions.augtool does save every time! _functions.augtool("set", "%s/DEVICE" % nicroot, nic) _functions.augtool("set", "%s/HWADDR" % nicroot, mac) _functions.augtool("set", "%s/ONBOOT" % nicroot, "no") logger.debug("Storing configured NICs") net_configured = 1 for nic in self.CONFIGURED_NICS: logger.debug("Storing %s" % nic) _functions.ovirt_store_config("%s%s" % (self.IFSCRIPTS_PATH, nic)) _functions.ovirt_store_config(self.NTP_CONFIG_FILE) if self.disabled_nic == 1: _functions.augtool("set", \ "/files/etc/sysconfig/network/NETWORKING", "no") else: _functions.augtool("set", \ "/files/etc/sysconfig/network/NETWORKING", "yes") _functions.ovirt_store_config("/etc/sysconfig/network") _functions.ovirt_store_config("/etc/hosts") # Copy the initial net rules to a file that get's not # overwritten at each boot, rhbz#773495 rulesfile = "/etc/udev/rules.d/70-persistent-net.rules" newrulesfile = "/etc/udev/rules.d/71-persistent-node-net.rules" if os.path.exists(rulesfile): _functions.system_closefds("cp %s %s >> /var/log/ovirt.log" % ( rulesfile, newrulesfile)) _functions.ovirt_store_config(newrulesfile) # Eventully it makes sense to rename the NICs #system_closefds("sed -ic 's/NAME=\"eth/NAME=\"eth00/' " + # "/etc/udev/rules.d/71-persistent-node-net.rules") logger.info("Network configured successfully") if net_configured == 1: logger.info("Stopping Network services") _functions.system_closefds("service network stop &> /dev/null") _functions.system_closefds("service ntpd stop &> /dev/null") # XXX eth assumed in breth brctl_cmd = "ip --details --oneline link " \ "| awk -F':' '/^[0-9]: br[ep]/ {print $2}'" brctl = _functions.subprocess_closefds(brctl_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) brctl_output = brctl.stdout.read() for i in brctl_output.split(): if_down_cmd = "ifconfig %s down &> /dev/null" % i _functions.system_closefds(if_down_cmd) del_br_cmd = "ip link delete %s type bridge &> /dev/null" % i _functions.system_closefds(del_br_cmd) logger.info("Starting Network service") _functions.system_closefds("service network start &> /dev/null") _functions.system_closefds("service ntpdate start &> /dev/null") _functions.system_closefds("service ntpd start &> /dev/null") # rhbz#745541 _functions.system_closefds("service rpcbind start &> /dev/null") _functions.system_closefds("service nfslock start &> /dev/null") _functions.system_closefds("service rpcidmapd start &> /dev/null") _functions.system_closefds("service rpcgssd start &> /dev/null") if "NTP" in OVIRT_VARS: logger.info("Testing NTP Configuration") _functions.test_ntp_configuration()
def confirm_cmd(self, obj): warn_message = "Warn %s" % obj.get_label() resp_id = ConfirmDialog(message=warn_message).run_and_close() if resp_id == gtk.RESPONSE_OK: cmd = ("_".join(obj.get_label().split())).lower() system_closefds(exec_extra_buttons_cmds[cmd])
def confirm_cmd(self, obj): warn_message = "Warn %s" % obj.get_label() resp_id = ConfirmDialog(message=warn_message).run_and_close() if resp_id == gtk.RESPONSE_OK: cmd = ('_'.join(obj.get_label().split())).lower() system_closefds(exec_extra_buttons_cmds[cmd])
def get_dev_name(self): devices = [] # list separator for d in os.listdir("/sys/block/"): if re.match("^[hsv]+d", d): devices.append("/dev/%s" % d) byid_list_cmd = ("find /dev/disk/by-id -mindepth 1 -not -name " + "'*-part*' 2>/dev/null") byid_list = _functions.subprocess_closefds(byid_list_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) byid_list_output, byid_list_err = byid_list.communicate() for d in byid_list_output.split(): d = os.readlink(d) d_basename = os.path.basename(d) udev_cmd = ("udevadm info --name=/dev/" + d_basename + " --query=property | grep -q ^ID_BUS: &>>/dev/null") if _functions.system_closefds(udev_cmd): devices.append("/dev/%s" % d_basename) # FIXME: workaround for detecting cciss devices if os.path.exists("/dev/cciss"): for d in os.listdir("/dev/cciss"): if not re.match("p[0-9]+\$", d): devices.append("/dev/cciss/%s" % d) # include multipath devices devs_to_remove = "" multipath_list_cmd = "dmsetup ls --target=multipath | cut -f1" multipath_list = _functions.subprocess_closefds(multipath_list_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) multipath_list_output, multipath_list_err = multipath_list.communicate() for d in multipath_list_output.split(): devices.append("/dev/mapper/%s" % d) sd_devs = "" sd_devs = self.get_multipath_deps(d) dm_dev_cmd = ("multipath -ll \"%s\" | grep \"%s\" | " + "sed -r 's/^.*(dm-[0-9]+ ).*$/\\1/'") % (d, d) dm_dev = _functions.subprocess_closefds(dm_dev_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) dm_dev_output, dm_dev_err = dm_dev.communicate() devs_to_remove = ("%s %s %s" % (devs_to_remove, sd_devs, dm_dev_output)) # Remove /dev/sd* devices that are part of a multipath device dev_list = [] for d in devices: if (os.path.basename(d) not in devs_to_remove and not "/dev/dm-" in d): dev_list.append(d) for dev in dev_list: if dev_list.count(dev) > 1: count = dev_list.count(dev) while (count > 1): dev_list.remove(dev) count = count - 1 return dev_list
def get_system_nics(): # Re-trigger udev for rhbz#866584 for sysfspath in glob("/sys/class/net/*"): _functions.system_closefds("udevadm test %s > /dev/null 2> /dev/null" % sysfspath) client = _functions.gudev.Client(['net']) configured_nics = 0 ntp_dhcp = 0 nic_dict = {} for device in client.query_by_subsystem("net"): try: dev_interface = device.get_property("INTERFACE") dev_vendor = device.get_property("ID_VENDOR_FROM_DATABASE") dev_type = device.get_property("DEVTYPE") dev_path = device.get_property("DEVPATH") if (dev_interface == "lo" or \ dev_interface.startswith("bond") or \ dev_interface.startswith("sit") or \ dev_interface.startswith("vnet") or \ "." in dev_interface or \ dev_type == "bridge"): logger.info("Skipping interface '%s'" % dev_interface) continue else: logger.info("Gathering informations for '%s'" % dev_interface) try: dev_vendor = dev_vendor.replace(",", "") except AttributeError: logger.debug("2. vendor approach: %s" % dev_vendor) try: # rhevh workaround since udev version # doesn't have vendor info dev_path = dev_path.split('/') if "virtio" in dev_path[4]: pci_dev = dev_path[3].replace("0000:", "") else: pci_dev = dev_path[4].replace("0000:", "") pci_lookup_cmd = ( ("lspci|grep '%s'|awk -F \":\" " % pci_dev) + "{'print $3'}") pci_lookup = _functions.subprocess_closefds( pci_lookup_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) dev_vendor = pci_lookup.stdout.read().strip() except: dev_vendor = "unknown" logger.debug("3. vendor approach: %s" % dev_vendor) try: dev_vendor = dev_vendor.replace(",", "") except AttributeError: dev_vendor = "unknown" logger.debug("4. vendor approach: %s" % dev_vendor) dev_vendor = _functions.pad_or_trim(25, dev_vendor) dev_driver = "" try: dev_driver = os.readlink("/sys/class/net/" + dev_interface + \ "/device/driver") dev_driver = os.path.basename(dev_driver) except Exception as e: logger.debug("Exception while determining NIC driver: %s" % (repr(e))) nic_addr_file = open("/sys/class/net/" + dev_interface + \ "/address") dev_address = nic_addr_file.read().strip() cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BOOTPROTO") % str(dev_interface) dev_bootproto = _functions.augtool_get(cmd) type_cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/TYPE") % str(dev_interface) bridge_cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BRIDGE") % str(dev_interface) dev_bridge = _functions.augtool_get(bridge_cmd) # check for vlans logger.debug("checking for vlan") vlans = glob("/etc/sysconfig/network-scripts/ifcfg-%s.*" % dev_interface) if (len(vlans) > 0): dev_conf_status = "Configured " vlanid = vlans[0].split(".")[-1] logger.debug("found vlan %s" % vlanid) # if no bridge in nic, check clan-nic for bridge if not dev_bridge: vlancfg = "ifcfg-%s.%s" % (str(dev_interface), vlanid) cmd = ("/files/etc/sysconfig/network-scripts/%s/" + "BRIDGE") % vlancfg dev_bridge = augtool_get(cmd) logger.debug("Getting bridge '%s' from vlan: %s" % (dev_bridge, cmd)) if dev_bootproto is None: logger.debug("Looking for bootproto in %s" % dev_bridge) cmd = ("/files/etc/sysconfig/network-scripts/" + \ "ifcfg-%s/BOOTPROTO") % str(dev_bridge) dev_bootproto = _functions.augtool_get(cmd) if dev_bootproto is None: dev_bootproto = "Disabled" dev_conf_status = "Unconfigured" else: dev_conf_status = "Configured " else: dev_conf_status = "Configured " if dev_conf_status == "Configured ": configured_nics = configured_nics + 1 except Exception as e: logger.warning("Error while determining NICs: %s" % repr(e)) nic_info = "%s,%s,%s,%s,%s,%s,%s" % ( \ dev_interface, dev_bootproto, \ dev_vendor, dev_address, \ dev_driver, dev_conf_status, \ dev_bridge) logger.debug("NIC info: %s" % nic_info) nic_dict[dev_interface] = nic_info if dev_bootproto == "dhcp": ntp_dhcp = 1 return nic_dict, configured_nics, ntp_dhcp
def create_appvg(self): logger.info("Creating LVM partition(s) for AppVG") physical_vols = [] logger.debug("APPVGDRIVE: " + ' '.join(self.APPVGDRIVE)) logger.debug("SWAP2_SIZE: " + str(self.SWAP2_SIZE)) logger.debug("DATA2_SIZE: " + str(self.DATA2_SIZE)) for drv in self.APPVGDRIVE: _functions.wipe_partitions(drv) self.reread_partitions(drv) logger.info("Labeling Drive: " + drv) appvgpart = "1" while True: parted_cmd = ("parted -s \"" + drv + "\" \"mklabel " + self.LABEL_TYPE + " mkpart primary ext2 2048s -1 set " + appvgpart + " lvm on print\"") _functions.system(parted_cmd) self.reread_partitions(drv) if (os.path.exists(drv + appvgpart) or os.path.exists(drv + "p" + appvgpart)): break partpv = drv + appvgpart if not os.path.exists(partpv): # e.g. /dev/cciss/c0d0p2 partpv = drv + "p" + appvgpart logger.info("Creating physical volume") if not os.path.exists(partpv): logger.error(partpv + " is not available!") return False dd_cmd = "dd if=/dev/zero of=\"" + partpv + "\" bs=1024k count=1" logger.info(dd_cmd) _functions.system(dd_cmd) _functions.system("pvcreate -ff -y \"" + partpv + "\"") physical_vols.append(partpv) logger.info("Creating volume group AppVG") is_first = True for drv in physical_vols: if is_first: _functions.system("vgcreate AppVG \"" + drv + "\"") is_first = False else: _functions.system("vgextend AppVG \"" + drv + "\"") if self.SWAP2_SIZE > 0: logger.info("Creating swap2 partition") lv_cmd = ("lvcreate --name Swap2 --size \"" + str(self.SWAP2_SIZE) + "M\" /dev/AppVG") logger.debug(lv_cmd) _functions.system(lv_cmd) if "OVIRT_CRYPT_SWAP2" in _functions.OVIRT_VARS: _functions.system_closefds("echo \"SWAP2 /dev/AppVG/Swap2 " + "/dev/mapper/ovirt-crypt-swap2 " + _functions.OVIRT_VARS["OVIRT_CRYPT_SWAP2"] + "\" >> /etc/ovirt-crypttab") else: _functions.system("mkswap -L \"SWAP2\" /dev/AppVG/Swap2") _functions.system_closefds("echo \"/dev/AppVG/Swap2 " + \ "swap swap defaults 0 0\" >> /etc/fstab") use_data = "1" if self.DATA2_SIZE == -1: logger.info("Creating data2 partition with remaining free space") _functions.system("lvcreate --name Data2 -l 100%FREE /dev/AppVG") use_data = 0 elif self.DATA2_SIZE > 0: logger.info("Creating data2 partition") _functions.system("lvcreate --name Data2 --size " + \ str(self.DATA2_SIZE) + "M /dev/AppVG") use_data = 0 if use_data == 0: _functions.system("mke2fs -j -t ext4 /dev/AppVG/Data2 " + \ "-L \"DATA2\"") _functions.system("tune2fs -c 0 -i 0 /dev/AppVG/Data2") _functions.system_closefds("echo \"/dev/AppVG/Data2 /data2 ext4 " + "defaults,noatime 0 0\" >> /etc/fstab") logger.info("Mounting data2 partition") _functions.mount_data2() logger.info("Completed AppVG!") return True
def on_merge(self, effective_changes): """Applies the changes to the plugins model, will do all required logic Normally on_merge is called by pushing the SaveButton instance, in this case it is called by on_change """ #if "ping.address" in self._model: # addr = self._model["ping.address"] # count = self._model["ping.count"] # self.logger.debug("Pinging %s" % addr) # cmd = "ping" # if valid.IPv6Address().validate(addr): # cmd = "ping6" #cmd = "%s -c %s %s" % (cmd, count, addr) changes = Changeset(self.pending_changes(False)) if changes.contains_any(["ping.do_ping"]): #_functions.system_closefds("cat - /etc/ovirt-engine/engine-setup.conf <<< [general] > \ # /etc/ovirt-engine/engine-setup.conf.temp") cmd = "engine-setup --config="+self.filename out = "" current = 0 try: for line in process.pipe_async(cmd): if line == "" or line == None : break line = ''.join(filter(lambda x: x, line.split('\033[0;31m'))) line = ''.join(filter(lambda x: x, line.split('\033[32m'))) line = ''.join(filter(lambda x: x, line.split('\033[0m'))) out += line # if "icmp_req" in line: # current += 100.0 / float(count) current += 1 if current%7 == 0: current =0 out = "" # self.widgets["ping.progress"].current(current) #with open('/root/abc','a+') as f: # f.writelines('Result :\n\n%s' %out) self.widgets["ping.result"].text("Result:\n\n %s" % out) if isRun(): _functions.system_closefds("rm -rf /etc/ovirt-engine/engine-setup.conf &> /dev/null") _functions.system_closefds("engine-setup --gen-answer-file=/etc/ovirt-engine/engine-setup.conf &> /dev/null") _functions.system_closefds("sed -i 1d /etc/ovirt-engine/engine-setup.conf &> /dev/null") #self.logger.debug(out) except: pass #self._miscEncrypted() #shutil.copy(cfile, file+'c') self.widgets["ping.result"].text('') self.widgets["ping.result"].text("Operate successfully") elif changes.contains_any(["ping.cancel"]): plugin_type = engine_page.Plugin self.application.switch_to_plugin(plugin_type)
def on_merge(self, effective_changes): self.logger.info("Saving engine stuff") changes = Changeset(self.pending_changes(False)) effective_model = Changeset(self.model()) effective_model.update(effective_changes) self.logger.debug("Changes: %s" % changes) self.logger.debug("Effective Model: %s" % effective_model) if changes.contains_any(["action.fetch_options"]): http_port = effective_model.values_for(["engine_cfg.httpPORT"])[0] https_port = effective_model.values_for(["engine_cfg.httpsPORT" ])[0] auth_pass = effective_model.values_for(["engine_cfg.authPASS"])[0] org_license = effective_model.values_for(["engine_cfg.license"])[0] host_fqdn = effective_model.values_for(["engine_cfg.hostFQDN"])[0] db_local_pass = effective_model.values_for( ["engine_cfg.adminPASS"])[0] org_name = effective_model.values_for(["engine_cfg.orgNAME"])[0] nfs_mp = effective_model.values_for(["engine_cfg.isoPATH"])[0] pieces={"OVESETUP_CONFIG/httpPort":http_port,'OVESETUP_CONFIG/httpsPort':\ https_port,"OVESETUP_CONFIG/adminPassword":auth_pass,\ "ORG_LICENSE":org_license,'OVESETUP_DB/password':db_local_pass,\ "OVESETUP_PKI/organization":org_name,'OVESETUP_CONFIG/isoDomainMountPoint':nfs_mp} if not auth_pass: pieces.update({'TUI_change_admin': False}) self.engine_config.update(**pieces) self._fp_dialog = AdvanceOptionsDialog( self, 'Engine Advance Options:', app_mode=self.cfg["OVESETUP_CONFIG/applicationMode"], db_type=self.cfg["OVESETUP_CONFIG/storageIsLocal"], config_nfs=self.cfg["OVESETUP_SYSTEM/nfsConfigEnabled"], firewall=self.cfg["OVESETUP_CONFIG/firewallManager"], dc_type=self.cfg["OVESETUP_CONFIG/storageType"]) return self._fp_dialog elif changes.contains_any(["action.reset"]): _functions.system_closefds( "rm -rf /etc/ovirt-engine/engine-setup.conf &> /dev/null") _functions.system_closefds( "engine-setup --gen-answer-file=/etc/ovirt-engine/engine-setup.conf &> /dev/null" ) _functions.system_closefds( "sed -i 1d /etc/ovirt-engine/engine-setup.conf &> /dev/null") elif changes.contains_any(["dialog.options.save"]): #LOGGER.debug("dialog.options.save................................!!!!") args = effective_model.values_for(self._options_details_group) self._advance_configure(*args) self._fp_dialog.close() if effective_changes.contains_any(["action.register"]): self.logger.debug("engine setup") #txs += [ActivateVDSM()] http_port = effective_model.values_for(["engine_cfg.httpPORT"])[0] https_port = effective_model.values_for(["engine_cfg.httpsPORT" ])[0] auth_pass = effective_model.values_for(["engine_cfg.authPASS"])[0] org_license = effective_model.values_for(["engine_cfg.license"])[0] host_fqdn = effective_model.values_for(["engine_cfg.hostFQDN"])[0] db_local_pass = effective_model.values_for( ["engine_cfg.adminPASS"])[0] org_name = effective_model.values_for(["engine_cfg.orgNAME"])[0] nfs_mp = effective_model.values_for(["engine_cfg.isoPATH"])[0] self.cfg = self.engine_config.retrieve() if self.cfg['OVESETUP_SYSTEM/nfsConfigEnabled']: if not nfs_mp: return pieces={"OVESETUP_CONFIG/httpPort":http_port,'OVESETUP_CONFIG/httpsPort':\ https_port,"OVESETUP_CONFIG/adminPassword":auth_pass,\ "ORG_LICENSE":org_license,'OVESETUP_DB/password':db_local_pass,\ "OVESETUP_PKI/organization":org_name,'OVESETUP_CONFIG/isoDomainMountPoint':nfs_mp} if not auth_pass: pieces.update({"TUI_change_admin": False}) self.engine_config.update(**pieces) #args = effective_model.values_for(self._options_details_group) #self._advance_configure(*args) plugin_type = setup.Plugin self.cfg = self.engine_config.retrieve() plugin_type.environment = self.cfg plugin_type.filename = self.fn self.application.switch_to_plugin(plugin_type) return #if len(txs) > 0: # progress_dialog = ui.TransactionProgressDialog("dialog.txs", txs, # self) # progress_dialog.run() # VDSM messes with logging, and we just reset it # app.configure_logging() # Acts like a page reload return self.ui_content()
def commit(self): _functions.system_closefds("sed -i '/%s %s/d' /etc/hosts" % (self.ip, self.hostname)) _functions.system_closefds("sed -i '$a\%s %s' /etc/hosts" % (self.ip, self.hostname))
def save_network_configuration(self): _functions.aug.load() net_configured = 0 _functions.augtool_workdir_list = "ls %s/augtool-* >/dev/null" logger.info("Configuring network for NIC %s" % self.CONFIGURED_NIC) # Wee need to bring down all network stuff, with the current network # config, before we change the config. Otherwise the interfaces can # not be brought down correctly. logger.info("Stopping Network services") _functions.system("service network stop") # FIXME can't this be done further down were we remove the bridges? for vlan in get_system_vlans(): # XXX wrong match e.g. eth10.1 with eth1 if self.CONFIGURED_NIC in vlan: _functions.system_closefds("vconfig rem " + vlan + \ "&> /dev/null") _functions.ovirt_safe_delete_config(self.IFSCRIPTS_PATH + vlan) _functions.system_closefds("rm -rf " + \ self.IFSCRIPTS_PATH + vlan) # All old config files are gone, the new ones are created step by step logger.debug("Removing persisted network configs") # This should cover NICs, VLANs and bridges for script in glob("%s*" % (self.IFSCRIPTS_PATH)): #print script #print 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' if not _functions.is_persisted(script): continue logger.debug("Removing Script: " + script) _functions.ovirt_safe_delete_config(script) _functions.aug.load() logger.debug("Updating interface config") for line in self.IF_CONFIG: logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: oper, key = line.split() _functions.augtool(oper, key, "") logger.debug("Updating bridge config") if not self.disabled_nic == 1: for line in self.BR_CONFIG: logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: try: oper, key = line.split() _functions.augtool(oper, key, "") except: pass logger.debug("Updating VLAN config") for line in self.VL_CONFIG.split("\n"): logger.debug(line) try: oper, key, value = line.split() _functions.augtool(oper, key, value) except: try: oper, key = line.split() _functions.augtool(oper, key, "") except: pass # preserve current MAC mappings for *all physical* network interfaces logger.error("Preserving current MAC mappings") for nicdev in glob('/sys/class/net/*/device'): nic = nicdev.split('/')[4] if nic != self.CONFIGURED_NIC: f = open('/sys/class/net/%s/address' % nic) mac = f.read().strip() f.close() if len(mac) > 0: logger.debug("Mapping for %s" % nic) self.CONFIGURED_NICS.append(nic) nicroot = "%s%s" % (self.IFCONFIG_FILE_ROOT, nic) # XXX _functions.augtool does save every time! _functions.augtool("set", "%s/DEVICE" % nicroot, nic) _functions.augtool("set", "%s/HWADDR" % nicroot, mac) _functions.augtool("set", "%s/ONBOOT" % nicroot, "no") logger.debug("Storing configured NICs") net_configured = 1 for nic in self.CONFIGURED_NICS: logger.debug("Storing %s" % nic) _functions.ovirt_store_config("%s%s" % (self.IFSCRIPTS_PATH, nic)) _functions.ovirt_store_config(self.NTP_CONFIG_FILE) if self.disabled_nic == 1: _functions.augtool("set", \ "/files/etc/sysconfig/network/NETWORKING", "no") else: _functions.augtool("set", \ "/files/etc/sysconfig/network/NETWORKING", "yes") _functions.ovirt_store_config("/etc/sysconfig/network") _functions.ovirt_store_config("/etc/hosts") # Copy the initial net rules to a file that get's not # overwritten at each boot, rhbz#773495 rulesfile = "/etc/udev/rules.d/70-persistent-net.rules" newrulesfile = "/etc/udev/rules.d/71-persistent-node-net.rules" if os.path.exists(rulesfile): _functions.system_closefds("cp %s %s >> /var/log/ovirt.log" % (rulesfile, newrulesfile)) _functions.ovirt_store_config(newrulesfile) # Eventully it makes sense to rename the NICs #system_closefds("sed -ic 's/NAME=\"eth/NAME=\"eth00/' " + # "/etc/udev/rules.d/71-persistent-node-net.rules") logger.info("Network configured successfully") if net_configured == 1: logger.info("Stopping Network services") _functions.system_closefds("service network stop &> /dev/null") _functions.system_closefds("service ntpd stop &> /dev/null") # XXX eth assumed in breth brctl_cmd = "brctl show| awk 'NR>1 && /^br[ep]/ {print $1}'" brctl = _functions.subprocess_closefds(brctl_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) brctl_output = brctl.stdout.read() for i in brctl_output.split(): if_down_cmd = "ifconfig %s down &> /dev/null" % i _functions.system_closefds(if_down_cmd) del_br_cmd = "brctl delbr %s &> /dev/null" % i _functions.system_closefds(del_br_cmd) logger.info("Starting Network service") _functions.system_closefds("service network start &> /dev/null") _functions.system_closefds("service ntpdate start &> /dev/null") _functions.system_closefds("service ntpd start &> /dev/null") # rhbz#745541 _functions.system_closefds("service rpcbind start &> /dev/null") _functions.system_closefds("service nfslock start &> /dev/null") _functions.system_closefds("service rpcidmapd start &> /dev/null") _functions.system_closefds("service rpcgssd start &> /dev/null") if "NTP" in OVIRT_VARS: logger.info("Testing NTP Configuration") _functions.test_ntp_configuration()