def autoconfig_dryrun(ask_questions=True): """ Execute the dryrun function. :param ask_questions: When true ask the user for paraameters :type ask_questions: bool """ acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE, clean=True) # Stop VPP on each node nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] VPPUtil.stop(node) # Discover acfg.discover() # Check the system resources nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if not acfg.min_system_resources(node): return # Modify the devices if ask_questions: acfg.modify_devices() else: acfg.update_interfaces_config() # If there are no interfaces, just return for i in nodes.items(): node = i[1] if not acfg.has_interfaces(node): print("\nThere are no VPP interfaces configured, please configure at least 1.") return # Modify CPU acfg.modify_cpu(ask_questions) # Calculate the cpu parameters acfg.calculate_cpu_parameters() # Acquire TCP stack parameters if ask_questions: acfg.acquire_tcp_params() # Apply the startup acfg.apply_vpp_startup() # Apply the grub configuration acfg.apply_grub_cmdline() # Huge Pages if ask_questions: acfg.modify_huge_pages() acfg.apply_huge_pages()
def autoconfig_dryrun(ask_questions=True): """ Execute the dryrun function. :param ask_questions: When true ask the user for paraameters :type ask_questions: bool """ vutil = VPPUtil() pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) == 0: print "\nVPP is not installed, please install VPP." return acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE, clean=True) # Stop VPP on each node nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] VPPUtil.stop(node) # Discover acfg.discover() # Check the system resources nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if not acfg.min_system_resources(node): return # Modify the devices if ask_questions: acfg.modify_devices() else: acfg.update_interfaces_config() # Modify CPU acfg.modify_cpu(ask_questions) # Calculate the cpu parameters acfg.calculate_cpu_parameters() # Acquire TCP stack parameters if ask_questions: acfg.acquire_tcp_params() # Apply the startup acfg.apply_vpp_startup() # Apply the grub configuration acfg.apply_grub_cmdline() # Huge Pages if ask_questions: acfg.modify_huge_pages() acfg.apply_huge_pages()
def autoconfig_dryrun(): """ Execute the dryrun function. """ vutil = VPPUtil() pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) == 0: print "\nVPP is not installed, install VPP with option 4." return acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) # Stop VPP on each node nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] VPPUtil.stop(node) # Discover acfg.discover() # Check the system resources nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if not acfg.min_system_resources(node): return # Modify the devices acfg.modify_devices() # Modify CPU acfg.modify_cpu() # Calculate the cpu parameters acfg.calculate_cpu_parameters() # Acquire TCP stack parameters acfg.acquire_tcp_params() # Apply the startup acfg.apply_vpp_startup() # Apply the grub configuration acfg.apply_grub_cmdline() # Huge Pages acfg.modify_huge_pages() acfg.apply_huge_pages()
def autoconfig_setup(ask_questions=True): """ The auto configuration setup function. We will copy the configuration files to the dryrun directory. """ global rootdir distro = VPPUtil.get_linux_distro() if distro[0] == 'Ubuntu': rootdir = '/usr/local' else: rootdir = '/usr' # If there is a system configuration file use that, if not use the initial auto-config file filename = rootdir + VPP_AUTO_CONFIGURATION_FILE if os.path.isfile(filename) is True: acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) else: raise RuntimeError( 'The Auto configuration file does not exist {}'.format(filename)) if ask_questions: print("\nWelcome to the VPP system configuration utility") print("\nThese are the files we will modify:") print(" /etc/vpp/startup.conf") print(" /etc/sysctl.d/80-vpp.conf") print(" /etc/default/grub") print("\nBefore we change them, we'll create working copies in " "{}".format(rootdir + VPP_DRYRUNDIR)) print("Please inspect them carefully before applying the actual " "configuration (option 3)!") nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if (os.path.isfile(rootdir + VPP_STARTUP_FILE) is not True) and \ (os.path.isfile(VPP_REAL_STARTUP_FILE) is True): autoconfig_cp(node, VPP_REAL_STARTUP_FILE, '{}'.format(rootdir + VPP_STARTUP_FILE)) if (os.path.isfile(rootdir + VPP_HUGE_PAGE_FILE) is not True) and \ (os.path.isfile(VPP_REAL_HUGE_PAGE_FILE) is True): autoconfig_cp(node, VPP_REAL_HUGE_PAGE_FILE, '{}'.format(rootdir + VPP_HUGE_PAGE_FILE)) if (os.path.isfile(rootdir + VPP_GRUB_FILE) is not True) and \ (os.path.isfile(VPP_REAL_GRUB_FILE) is True): autoconfig_cp(node, VPP_REAL_GRUB_FILE, '{}'.format(rootdir + VPP_GRUB_FILE)) # Be sure the uio_pci_generic driver is installed cmd = 'modprobe uio_pci_generic' (ret, stdout, stderr) = VPPUtil.exec_command(cmd) if ret != 0: logging.warning('{} failed on node {} {}'.format( cmd, node['host'], stderr))
def autoconfig_setup(ask_questions=True): """ The auto configuration setup function. We will copy the configuration files to the dryrun directory. """ global rootdir distro = VPPUtil.get_linux_distro() if distro[0] == 'Ubuntu': rootdir = '/usr/local' else: rootdir = '/usr' # If there is a system configuration file use that, if not use the initial auto-config file filename = rootdir + VPP_AUTO_CONFIGURATION_FILE if os.path.isfile(filename) is True: acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) else: raise RuntimeError('The Auto configuration file does not exist {}'. format(filename)) if ask_questions: print ("\nWelcome to the VPP system configuration utility") print ("\nThese are the files we will modify:") print (" /etc/vpp/startup.conf") print (" /etc/sysctl.d/80-vpp.conf") print (" /etc/default/grub") print ( "\nBefore we change them, we'll create working copies in " "{}".format(rootdir + VPP_DRYRUNDIR)) print ( "Please inspect them carefully before applying the actual " "configuration (option 3)!") nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if (os.path.isfile(rootdir + VPP_STARTUP_FILE) is not True) and \ (os.path.isfile(VPP_REAL_STARTUP_FILE) is True): autoconfig_cp(node, VPP_REAL_STARTUP_FILE, '{}'.format(rootdir + VPP_STARTUP_FILE)) if (os.path.isfile(rootdir + VPP_HUGE_PAGE_FILE) is not True) and \ (os.path.isfile(VPP_REAL_HUGE_PAGE_FILE) is True): autoconfig_cp(node, VPP_REAL_HUGE_PAGE_FILE, '{}'.format(rootdir + VPP_HUGE_PAGE_FILE)) if (os.path.isfile(rootdir + VPP_GRUB_FILE) is not True) and \ (os.path.isfile(VPP_REAL_GRUB_FILE) is True): autoconfig_cp(node, VPP_REAL_GRUB_FILE, '{}'.format(rootdir + VPP_GRUB_FILE)) # Be sure the uio_pci_generic driver is installed cmd = 'modprobe uio_pci_generic' (ret, stdout, stderr) = VPPUtil.exec_command(cmd) if ret != 0: logging.warning('{} failed on node {} {}'. format(cmd, node['host'], stderr))
def autoconfig_apply(ask_questions=True): """ Apply the configuration. Show the diff of the dryrun file and the actual configuration file Copy the files from the dryrun directory to the actual file. Peform the system function :param ask_questions: When true ask the user questions :type ask_questions: bool """ vutil = VPPUtil() pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) == 0: print "\nVPP is not installed, Install VPP with option 4." return acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) if ask_questions: print "\nWe are now going to configure your system(s).\n" answer = autoconfig_yn("Are you sure you want to do this [Y/n]? ", 'y') if answer == 'n': return nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] # Check the system resources if not acfg.min_system_resources(node): return # Stop VPP VPPUtil.stop(node) # Huge Pages ret = autoconfig_hugepage_apply(node, ask_questions) if ret != 0: return # VPP ret = autoconfig_vpp_apply(node, ask_questions) if ret != 0: return # Grub ret = autoconfig_grub_apply(node, ask_questions) if ret != 0: # We can still start VPP, even if we haven't configured grub VPPUtil.start(node) return # Everything is configured start vpp VPPUtil.start(node)
def autoconfig_apply(ask_questions=True): """ Apply the configuration. Show the diff of the dryrun file and the actual configuration file Copy the files from the dryrun directory to the actual file. Peform the system function :param ask_questions: When true ask the user questions :type ask_questions: bool """ vutil = VPPUtil() pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) == 0: print ("\nVPP is not installed, Install VPP with option 4.") return acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) if ask_questions: print ("\nWe are now going to configure your system(s).\n") answer = autoconfig_yn("Are you sure you want to do this [Y/n]? ", 'y') if answer == 'n': return nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] # Check the system resources if not acfg.min_system_resources(node): return # Stop VPP VPPUtil.stop(node) # Huge Pages ret = autoconfig_hugepage_apply(node, ask_questions) if ret != 0: return # VPP ret = autoconfig_vpp_apply(node, ask_questions) if ret != 0: return # Grub ret = autoconfig_grub_apply(node, ask_questions) if ret != 0: # We can still start VPP, even if we haven't configured grub VPPUtil.start(node) return # Everything is configured start vpp VPPUtil.start(node)
def autoconfig_setup(ask_questions=True): """ The auto configuration setup function. We will copy the configuration files to the dryrun directory. """ global rootdir logging.basicConfig(level=logging.ERROR) distro = VPPUtil.get_linux_distro() if distro[0] == 'Ubuntu': rootdir = '/usr/local' else: rootdir = '/usr' # If there is a system configuration file use that, if not use the initial auto-config file filename = rootdir + VPP_AUTO_CONFIGURATION_FILE if os.path.isfile(filename) is True: acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) else: raise RuntimeError( 'The Auto configuration file does not exist {}'.format(filename)) if ask_questions: print "\nWelcome to the VPP system configuration utility" print "\nThese are the files we will modify:" print " /etc/vpp/startup.conf" print " /etc/sysctl.d/80-vpp.conf" print " /etc/default/grub" print "\nBefore we change them, we'll create working copies in {}".format( rootdir + VPP_DRYRUNDIR) print "Please inspect them carefully before applying the actual configuration (option 3)!" nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] if (os.path.isfile(rootdir + VPP_STARTUP_FILE) is not True) and \ (os.path.isfile(VPP_REAL_STARTUP_FILE) is True): autoconfig_cp(node, VPP_REAL_STARTUP_FILE, '{}'.format(rootdir + VPP_STARTUP_FILE)) if (os.path.isfile(rootdir + VPP_HUGE_PAGE_FILE) is not True) and \ (os.path.isfile(VPP_REAL_HUGE_PAGE_FILE) is True): autoconfig_cp(node, VPP_REAL_HUGE_PAGE_FILE, '{}'.format(rootdir + VPP_HUGE_PAGE_FILE)) if (os.path.isfile(rootdir + VPP_GRUB_FILE) is not True) and \ (os.path.isfile(VPP_REAL_GRUB_FILE) is True): autoconfig_cp(node, VPP_REAL_GRUB_FILE, '{}'.format(rootdir + VPP_GRUB_FILE))
def autoconfig_install(): """ Install or Uninstall VPP. """ # Since these commands will take a while, we # want to see the progress logger = logging.getLogger() acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) vutil = VPPUtil() nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) > 0: print ("\nThese packages are installed on node {}" .format(node['host'])) print ("{:25} {}".format("Name", "Version")) for pkg in pkgs: try: print ("{:25} {}".format( pkg['name'], pkg['version'])) except KeyError: print ("{}".format(pkg['name'])) question = "\nDo you want to uninstall these " question += "packages [y/N]? " answer = autoconfig_yn(question, 'n') if answer == 'y': logger.setLevel(logging.INFO) vutil.uninstall_vpp(node) else: print ("\nThere are no VPP packages on node {}." .format(node['host'])) question = "Do you want to install VPP [Y/n]? " answer = autoconfig_yn(question, 'y') if answer == 'y': question = "Do you want to install the release version [Y/n]? " answer = autoconfig_yn(question, 'y') if answer == 'y': branch = 'release' else: branch = 'master' logger.setLevel(logging.INFO) vutil.install_vpp(node, branch) # Set the logging level back logger.setLevel(logging.ERROR)
def autoconfig_apply(): """ Apply the configuration. Show the diff of the dryrun file and the actual configuration file Copy the files from the dryrun directory to the actual file. Peform the system function """ vutil = VPPUtil() pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) == 0: print "\nVPP is not installed, Install VPP with option 4." return acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) print "\nWe are now going to configure your system(s).\n" answer = autoconfig_yn("Are you sure you want to do this [Y/n]? ", 'y') if answer == 'n': return nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] # Check the system resources if not acfg.min_system_resources(node): return # Huge Pages ret = autoconfig_hugepage_apply(node) if ret != 0: return # VPP ret = autoconfig_vpp_apply(node) if ret != 0: return # Grub ret = autoconfig_grub_apply(node) if ret != 0: return # Everything is configured start vpp cmd = "service vpp start" (ret, stdout, stderr) = VPPUtil.exec_command(cmd) if ret != 0: raise RuntimeError('{} failed on node {} {} {}'.format( cmd, node['host'], stdout, stderr))
def autoconfig_install(): """ Install or Uninstall VPP. """ # Since these commands will take a while, we # want to see the progress logger = logging.getLogger() acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) vutil = VPPUtil() nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] pkgs = vutil.get_installed_vpp_pkgs() if len(pkgs) > 0: print("\nThese packages are installed on node {}".format( node['host'])) print("{:25} {}".format("Name", "Version")) for pkg in pkgs: try: print("{:25} {}".format(pkg['name'], pkg['version'])) except KeyError: print("{}".format(pkg['name'])) question = "\nDo you want to uninstall these " question += "packages [y/N]? " answer = autoconfig_yn(question, 'n') if answer == 'y': logger.setLevel(logging.INFO) vutil.uninstall_vpp(node) else: print("\nThere are no VPP packages on node {}.".format( node['host'])) question = "Do you want to install VPP [Y/n]? " answer = autoconfig_yn(question, 'y') if answer == 'y': question = "Do you want to install the release version [Y/n]? " answer = autoconfig_yn(question, 'y') if answer == 'y': branch = 'release' else: branch = 'master' logger.setLevel(logging.INFO) vutil.install_vpp(node, branch) # Set the logging level back logger.setLevel(logging.ERROR)
def autoconfig_patch_qemu(): """ Patch the correct qemu version that is needed for openstack """ # Since these commands will take a while, we # want to see the progress logger = logging.getLogger() acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE) nodes = acfg.get_nodes() for i in nodes.items(): node = i[1] logger.setLevel(logging.INFO) acfg.patch_qemu(node)