[node-patches] Change in ovirt-node[master]: [DRAFT] installer: Use transaction for auto-installation
fabiand at fedoraproject.org
fabiand at fedoraproject.org
Wed Jun 12 09:20:02 UTC 2013
Fabian Deutsch has uploaded a new change for review.
Change subject: [DRAFT] installer: Use transaction for auto-installation
......................................................................
[DRAFT] installer: Use transaction for auto-installation
Change-Id: I26e93e6ec664a31810350dd8a25c86c6afe1e2eb
Signed-off-by: Fabian Deutsch <fabiand at fedoraproject.org>
---
M scripts/ovirt-auto-install.py
M src/ovirtnode/network.py
2 files changed, 126 insertions(+), 79 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/90/15590/1
diff --git a/scripts/ovirt-auto-install.py b/scripts/ovirt-auto-install.py
index cb2399f..f5523ef 100755
--- a/scripts/ovirt-auto-install.py
+++ b/scripts/ovirt-auto-install.py
@@ -18,7 +18,6 @@
# MA 02110-1301, USA. A copy of the GNU General Public License is
# also available at http://www.gnu.org/copyleft/gpl.html.
-import os
import sys
from ovirtnode.ovirtfunctions import *
from ovirtnode.storage import *
@@ -26,72 +25,119 @@
from ovirtnode.network import *
from ovirtnode.log import *
from ovirtnode.kdump import *
-from ovirt.node.config import defaults
-def config_networking():
- # network configuration
- print "Configuring Network"
- if OVIRT_VARS["OVIRT_BOOTIF"] != "":
- network_auto()
- if "OVIRT_HOSTNAME" in OVIRT_VARS:
- cfg = defaults.Hostname()
- tx = cfg.transaction()
- tx()
-# setup network before storage for iscsi installs
-if is_iscsi_install():
- config_networking()
+class AutomaticDiskPartitioning(Transaction.Element):
+ title = "Performing automatic disk partitioning"
-if not is_stateless():
- print "Performing automatic disk partitioning"
+ def commit(self):
+ if storage_auto():
+ # store /etc/shadow if adminpw/rootpw are set,
+ # handled already in ovirt-early
+ file = open("/proc/cmdline")
+ args = file.read()
+ if "adminpw" in args or "rootpw" in args:
+ print "Storing /etc/shadow"
+ ovirt_store_config("/etc/passwd")
+ ovirt_store_config("/etc/shadow")
+ file.close()
+ else:
+ raise RuntimeError("Automatic installation failed. " +
+ "Please review /var/log/ovirt.log")
- if storage_auto():
- print "Completed automatic disk partitioning"
- # store /etc/shadow if adminpw/rootpw are set,
- # handled already in ovirt-early
- file = open("/proc/cmdline")
- args = file.read()
- if "adminpw" in args or "rootpw" in args:
- print "Storing /etc/shadow"
- ovirt_store_config("/etc/passwd")
- ovirt_store_config("/etc/shadow")
- file.close()
- else:
- if not is_iscsi_install():
- config_networking()
- print "Automatic installation failed. Please review /var/log/ovirt.log"
+
+class EnableSshPasswordAuthentication(Transaction.Element):
+ title = "Enabling SSH password authentication"
+
+ def commit(self):
+ if OVIRT_VARS["OVIRT_SSH_PWAUTH"] == "yes":
+ augtool("set",
+ "/files/etc/ssh/sshd_config/PasswordAuthentication",
+ "yes")
+ elif OVIRT_VARS["OVIRT_SSH_PWAUTH"] == "no":
+ augtool("set",
+ "/files/etc/ssh/sshd_config/PasswordAuthentication",
+ "no")
+ ovirt_store_config("/etc/ssh/sshd_config")
+ system_closefds("service sshd restart &> /dev/null")
+
+
+class ConfigureLogging(Transaction.Element):
+ title = "Configuring Logging"
+
+ def commit(self):
+ logging_auto()
+
+
+class ConfigureCollectd(Transaction.Element):
+ title = "Configuring Collectd"
+
+ def commit(self):
+ try:
+ from ovirt_config_setup.collectd import *
+ collectd_auto()
+ except:
+ pass
+
+
+class PerformInstallation(Transaction.Element):
+ title = "Transferring image"
+
+ def commit(self):
+ Install()
+
+
+class ConfigureKdump(Transaction.Element):
+ title = "Configuring KDump"
+
+ def commit(self):
+ kdump_auto()
+
+
+class InstallBootloader(Transaction.Element):
+ title = "Installing Bootloader"
+
+ def commit(self):
+ install = Install()
+ if not install.ovirt_boot_setup():
+ raise RuntimeError("Bootloader Installation Failed")
+
+
+if __name__ == "__main__":
+ tx = Transaction("Automatic Installation")
+
+ configure_network_tx = build_network_auto_transaction
+
+ # setup network before storage for iscsi installs
+ if is_iscsi_install():
+ tx.append(configure_network_tx)
+
+ if not is_stateless():
+ tx.append(AutomaticDiskPartitioning())
+
+ if not is_iscsi_install():
+ tx.append(configure_network_tx)
+
+ #set ssh_passwd_auth
+ if "OVIRT_SSH_PWAUTH" in OVIRT_VARS:
+ tx.append(EnableSshPasswordAuthentication())
+
+ tx.append(ConfigureLogging())
+
+ tx.append(ConfigureCollectd())
+
+ tx.append(PerformInstallation()) # FIXME needed??
+
+ tx.append(ConfigureKdump())
+
+ if not is_stateless():
+ tx.append(InstallBootloader())
+
+ try:
+ TransactionProgress(txs, is_dry=False).run()
+ print "Installation and Configuration Completed"
+ except:
+ print "Installation and Configuration Failed"
sys.exit(1)
-if not is_iscsi_install():
- config_networking()
-#set ssh_passwd_auth
-if "OVIRT_SSH_PWAUTH" in OVIRT_VARS:
- if OVIRT_VARS["OVIRT_SSH_PWAUTH"] == "yes":
- augtool("set", "/files/etc/ssh/sshd_config/PasswordAuthentication", \
- "yes")
- elif OVIRT_VARS["OVIRT_SSH_PWAUTH"] == "no":
- augtool("set", "/files/etc/ssh/sshd_config/PasswordAuthentication", \
- "no")
- ovirt_store_config("/etc/ssh/sshd_config")
- system_closefds("service sshd restart &> /dev/null")
-
-# iscsi handled in install.py
-print "Configuring Logging"
-logging_auto()
-try:
- from ovirt_config_setup.collectd import *
- print "Configuring Collectd"
- collectd_auto()
-except:
- pass
-install = Install()
-print "Configuring KDump"
-kdump_auto()
-if not is_stateless():
- print "Installing Bootloader"
- if install.ovirt_boot_setup():
- print "Bootloader Installation Completed"
- else:
- print "Bootloader Installation Failed"
- sys.exit(1)
- print "Installation and Configuration Completed"
+ sys.exit(0)
diff --git a/src/ovirtnode/network.py b/src/ovirtnode/network.py
index fe0e1fe..5b91590 100644
--- a/src/ovirtnode/network.py
+++ b/src/ovirtnode/network.py
@@ -56,6 +56,7 @@
from ovirt.node.config.defaults import Network
return Network().commit()
+
def convert_to_biosdevname():
if not "BIOSDEVNAMES_CONVERSION" in OVIRT_VARS:
# check for appropriate bios version
@@ -111,21 +112,23 @@
return True
-def network_auto():
- try:
- from ovirt.node.config.defaults import Network, Nameservers, \
- Timeservers
- from ovirt.node.utils.console import TransactionProgress
+def build_network_auto_transaction():
+ from ovirt.node.config.defaults import Network, Nameservers, \
+ Timeservers, Hostname
+ from ovirt.node.utils.console import TransactionProgress
- txs = Transaction("Automatic Installation")
+ txs = Transaction("Automatic Installation")
- mnet = Network()
- netmodel = mnet.retrieve()
+ mhostname = Hostname()
+ txs += mhostname.transaction()
- logger.debug("Got netmodel: %s" % netmodel)
-
+ mnet = Network()
+ netmodel = mnet.retrieve()
+ logger.debug("Got netmodel: %s" % netmodel)
+ if netmodel["iface"]:
+ # Only running net configuration if bootif is given
# use dhcp if bootif is given
- if netmodel["iface"] and not netmodel["ipaddr"]:
+ if not netmodel["ipaddr"]:
netmodel.update(bootproto="dhcp")
txs += mnet.transaction()
@@ -136,7 +139,5 @@
mntp = Timeservers()
txs += mntp.transaction()
- TransactionProgress(txs, is_dry=False).run()
- except:
- logger.warn("Network Configuration Failed....")
- return False
+ return txs
+
--
To view, visit http://gerrit.ovirt.org/15590
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I26e93e6ec664a31810350dd8a25c86c6afe1e2eb
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: Fabian Deutsch <fabiand at fedoraproject.org>
More information about the node-patches
mailing list