class AssistantInfoRadioBar(Grid):
    def __init__(self, screen, info):
        """
        @param buttonarray is an array in the form ([radiobutton, widget], ...)
        """
        from snack import RadioGroup, Textbox, Entry, FLAG_DISABLED

        self.group = RadioGroup()
        self.list = []
        self.item = 0
        self.info = info

        Grid.__init__(self, 1, len(info.getSuggestions()) + 6)

        self.setField(Textbox(20, 1, "Default:"), 0, 0, padding=(0, 0, 0, 0), anchorLeft=1)
        db = self.group.add(info.getDefault(), info.getDefault(), info.getValue() == info.getDefault())

        # print >> sys.stderr, "default: %s, value %s" %(info.getDefault(), info.getValue())

        db.setCallback(self._hasManualToggled)
        self.setField(db, 0, 1, (0, 0, 0, 0), anchorLeft=1, growx=1)
        # self.setField(dt, 1, self.item)
        self.setField(Textbox(20, 1, "Detected:"), 0, 2, padding=(0, 0, 0, 0), anchorLeft=1)

        self.item = self.item + 3
        self.list.append(db)
        for value in info.getSuggestions():
            b = self.group.add(value, value, info.getValue() == value)
            b.setCallback(self._hasManualToggled)
            self.setField(b, 0, self.item, (0, 0, 1, 0), anchorLeft=1, growx=1)
            # self.setField(t, 1, self.item)
            self.item = self.item + 1

        self.setField(Textbox(20, 1, "Manual:"), 0, self.item, padding=(0, 0, 0, 0), anchorLeft=1)
        self.item = self.item + 1
        self.dm = self.group.add("edit", "manual", info.getValue() == info.getManual())
        self.dm.setCallback(self._hasManualToggled)
        self.manualentry = Entry(15, info.getManual())
        self.manualentry.setFlags(FLAG_DISABLED, sense=not (self.dm.selected()))
        self.setField(self.dm, 0, self.item, (0, 0, 1, 0), anchorLeft=1, growx=1)
        self.setField(self.manualentry, 0, self.item + 1, (0, 0, 1, 0), anchorLeft=1)
        self._hasManualToggled()

    def _hasManualToggled(self):
        from snack import FLAG_DISABLED

        self.manualentry.setFlags(FLAG_DISABLED, sense=self.dm.selected())

    def getSelection(self):
        # print >> sys.stderr, "getSelection"
        if self.group.getSelection() == "manual":
            self.info.setManual(self.manualentry.value())
            return self.manualentry.value()
        return self.group.getSelection()
Beispiel #2
0
 def display_configure_occi(self):
     """Display OCCI configuration menu"""
     occi_entry = Entry(30, c('occi', 'server'))
     occi_input_entry = Entry(30, c('occi', 'input_rendering'))
     occi_output_entry = Entry(30, c('occi', 'output_rendering'))
     command, _ = EntryWindow(self.screen, TITLE, 'Please, enter OCCI endpoint parameters',
             [('OCCI endpoint', occi_entry),
              ('OCCI input rendering', occi_input_entry),
              ('OCCI output rendering', occi_output_entry)], 
             buttons = [('Save', 'save'), ('Back', 'main_menu')])
     if command == 'save':
         cs('occi', 'server', occi_entry.value().strip())
         cs('occi', 'input_rendering', occi_input_entry.value().strip())
         cs('occi', 'output_rendering', occi_output_entry.value().strip())
     self.display_main_screen()
Beispiel #3
0
 def display_configure_cdmi(self):
     """Display CDMI configuration menu"""
     cdmi_entry = Entry(30, c('cdmi', 'cdmi_server'))
     cdmi_user_entry = Entry(30, c('cdmi', 'username'))
     cdmi_pass_entry = Entry(30, c('cdmi', 'password'))
     command, _ = EntryWindow(self.screen, TITLE, 'Please, enter CDMI endpoint parameters',
             [('CDMI endpoint', cdmi_entry),
              ('Username', cdmi_user_entry),
              ('Password', cdmi_pass_entry)], 
             buttons = [('Save', 'save'), ('Back', 'main_menu')])
     if command == 'save':
         cs('cdmi', 'server', cdmi_entry.value().strip())
         cs('cdmi', 'username', cdmi_user_entry.value().strip())
         cd('cdmi', 'password', cdmi_pass_entry.value().strip())
     self.display_main_screen()
Beispiel #4
0
def display_create_template(screen, title, vm_type, templates, help=None):
    """Helper class for displaying a form for creating a new VM template"""
    label_base = Textbox(40, 2, 
        'Select %s VM to be used as a basis\n(only stopped VMs are allowed)' % 
        vm_type, 0, 0)
    
    base_tmpl = Listbox(7, 1, 0, 30, 1)
    for vm in templates.keys():
        base_tmpl.append(templates[vm], vm)
    
    label_newname = Textbox(40, 2, 'Name of the template to be created', 0, 0)
    spacer1 = Textbox(1, 1, "", 0, 0)
    spacer2 = Textbox(1, 1, "", 0, 0)
    entry_newname = Entry(30, 'template_name')
    bb = ButtonBar(screen, ('Create new template', ('Back to menu', 'back')))
    form = GridFormHelp(screen, title, help, 1, 7)
    form.add(label_base, 0, 0)
    form.add(base_tmpl, 0, 1)
    form.add(spacer1, 0, 2)
    form.add(label_newname, 0, 3)
    form.add(entry_newname, 0, 4)
    form.add(spacer2, 0, 5)
    form.add(bb, 0, 6)
    form_result = form.runOnce()
    tmpl_name = entry_newname.value()
    # remove whitespaces from the template name
    tmpl_name = re.sub(r'\s', '', tmpl_name)
    return (bb.buttonPressed(form_result), str(base_tmpl.current()), tmpl_name)
Beispiel #5
0
def display_create_template(screen, title, vm_type, templates, help=None):
    """Helper function for displaying a form for creating a new VM template"""
    label_base = Textbox(
        40, 2,
        'Select %s VM to be used as a basis\n(only stopped VMs are allowed)' %
        vm_type, 0, 0)

    base_tmpl = Listbox(7, 1, 0, 30, 1)
    for vm in templates.keys():
        base_tmpl.append(templates[vm], vm)

    label_newname = Textbox(40, 2, 'Name of the template to be created', 0, 0)
    spacer1 = Textbox(1, 1, "", 0, 0)
    spacer2 = Textbox(1, 1, "", 0, 0)
    entry_newname = Entry(30, 'template_name')
    bb = ButtonBar(screen, ('Create new template', ('Back to menu', 'back')))
    form = GridFormHelp(screen, title, help, 1, 7)
    form.add(label_base, 0, 0)
    form.add(base_tmpl, 0, 1)
    form.add(spacer1, 0, 2)
    form.add(label_newname, 0, 3)
    form.add(entry_newname, 0, 4)
    form.add(spacer2, 0, 5)
    form.add(bb, 0, 6)
    form_result = form.runOnce()
    tmpl_name = entry_newname.value()
    # remove whitespaces from the template name
    tmpl_name = re.sub(r'\s', '', tmpl_name)
    return (bb.buttonPressed(form_result), str(base_tmpl.current()), tmpl_name)
Beispiel #6
0
    def run(self):
        toplevel = GridForm(self.screen, _("Passphrase"), 1, 3)

        txt = TextboxReflowed(65, self.txt)
        toplevel.add(txt, 0, 0)

        passphraseentry = Entry(60, password=1)
        toplevel.add(passphraseentry, 0, 1, (0, 0, 0, 1))

        buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON])
        toplevel.add(buttons, 0, 2, growx=1)

        rc = toplevel.run()
        res = buttons.buttonPressed(rc)

        passphrase = None
        if res == TEXT_OK_CHECK or rc == "F12":
            passphrase = passphraseentry.value().strip()

        self.rc = passphrase
        return self.rc
Beispiel #7
0
    def run(self):
        toplevel = GridForm(self.screen, _("Passphrase"), 1, 3)

        txt = TextboxReflowed(65, self.txt)
        toplevel.add(txt, 0, 0)

        passphraseentry = Entry(60, password=1)
        toplevel.add(passphraseentry, 0, 1, (0, 0, 0, 1))

        buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_CANCEL_BUTTON])
        toplevel.add(buttons, 0, 2, growx=1)

        rc = toplevel.run()
        res = buttons.buttonPressed(rc)

        passphrase = None
        if res == TEXT_OK_CHECK or rc == "F12":
            passphrase = passphraseentry.value().strip()

        self.rc = passphrase
        return self.rc
Beispiel #8
0
class Plugin(PluginBase):
    """Plugin for RHEV-M configuration.
    """
    def __init__(self, ncs):
        PluginBase.__init__(self, "RHEV-M", ncs)

    def form(self):
        elements = Grid(2, 8)
        is_network_up = network_up()
        if is_network_up:
            header_message = "RHEV-M Configuration"
        else:
            header_message = "Network Down, RHEV-M Configuration Disabled"
        heading = Label(header_message)
        self.ncs.screen.setColor(customColorset(1), "black", "magenta")
        heading.setColors(customColorset(1))
        elements.setField(heading, 0, 0, anchorLeft=1)
        rhevm_grid = Grid(2, 2)
        rhevm_grid.setField(Label("Management Server:"), 0, 0, anchorLeft=1)
        self.rhevm_server = Entry(25, "")
        self.rhevm_server.setCallback(self.valid_rhevm_server_callback)
        rhevm_grid.setField(Label("Management Server Port:"),
                            0,
                            1,
                            anchorLeft=1)
        self.rhevm_server_port = Entry(6, "", scroll=0)
        self.rhevm_server_port.setCallback(
            self.valid_rhevm_server_port_callback)
        rhevm_grid.setField(self.rhevm_server,
                            1,
                            0,
                            anchorLeft=1,
                            padding=(2, 0, 0, 1))
        rhevm_grid.setField(self.rhevm_server_port,
                            1,
                            1,
                            anchorLeft=1,
                            padding=(2, 0, 0, 1))
        elements.setField(rhevm_grid, 0, 1, anchorLeft=1, padding=(0, 0, 0, 0))
        elements.setField(Label(""), 0, 2, anchorLeft=1)
        self.verify_rhevm_cert = Checkbox(
            "Connect to RHEV Manager and Validate Certificate", isOn=True)
        elements.setField(self.verify_rhevm_cert,
                          0,
                          3,
                          anchorLeft=1,
                          padding=(0, 0, 0, 0))
        elements.setField(Label(""), 0, 4, anchorLeft=1)

        elements.setField(Label("Set RHEV-M Admin Password"),
                          0,
                          5,
                          anchorLeft=1)
        pw_elements = Grid(3, 3)

        pw_elements.setField(Label("Password: "******"Confirm Password: "******"", wrap=1)

        elements.setField(pw_elements, 0, 6, anchorLeft=1)
        elements.setField(self.pw_msg, 0, 7, padding=(0, 0, 0, 0))

        inputFields = [
            self.rhevm_server, self.rhevm_server_port, self.verify_rhevm_cert,
            self.root_password_1, self.root_password_2
        ]
        if not is_network_up:
            for field in inputFields:
                field.setFlags(FLAG_DISABLED, FLAGS_SET)

        try:
            rhevm_server = get_rhevm_config()
            rhevm_server, rhevm_port = rhevm_server.split(":")
            if rhevm_server.startswith("None"):
                self.rhevm_server.set("")
            else:
                self.rhevm_server.set(rhevm_server)
            self.rhevm_server_port.set(rhevm_port)

        except:
            pass
        return [Label(""), elements]

    def password_check_callback(self):
        resp, msg = password_check(self.root_password_1.value(),
                                   self.root_password_2.value())
        self.pw_msg.setText(msg)
        return

    def action(self):
        self.ncs.screen.setColor("BUTTON", "black", "red")
        self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
        if self.root_password_1.value() != "" and self.root_password_2.value(
        ) != "" and self.root_password_1.value() == self.root_password_2.value(
        ):
            set_password(self.root_password_1.value(), "root")
            augtool("set", "/files/etc/ssh/sshd_config/PasswordAuthentication",
                    "yes")
            dn = file('/dev/null', 'w+')
            subprocess.Popen(['/sbin/service', 'sshd', 'restart'],
                             stdout=dn,
                             stderr=dn)
        if len(self.rhevm_server.value()) > 0:
            deployUtil.nodeCleanup()
            if self.verify_rhevm_cert.selected():
                if deployUtil.getRhevmCert(self.rhevm_server.value(),
                                           self.rhevm_server_port.value()):
                    path, dontCare = deployUtil.certPaths('')
                    fp = deployUtil.generateFingerPrint(path)
                    approval = ButtonChoiceWindow(
                        self.ncs.screen,
                        "Certificate Fingerprint:",
                        fp,
                        buttons=['Approve', 'Reject'])
                    if 'reject' == approval:
                        ButtonChoiceWindow(self.ncs.screen,
                                           "Fingerprint rejected",
                                           "RHEV-M Configuration Failed",
                                           buttons=['Ok'])
                        return False
                    else:
                        ovirt_store_config(path)
                        self.ncs.reset_screen_colors()
                else:
                    ButtonChoiceWindow(self.ncs.screen,
                                       "RHEV-M Configuration",
                                       "Failed downloading RHEV-M certificate",
                                       buttons=['Ok'])
                    self.ncs.reset_screen_colors()
            # Stopping vdsm-reg may fail but its ok - its in the case when the menus are run after installation
            deployUtil._logExec([constants.EXT_SERVICE, 'vdsm-reg', 'stop'])
            if write_vdsm_config(self.rhevm_server.value(),
                                 self.rhevm_server_port.value()):
                deployUtil._logExec(
                    [constants.EXT_SERVICE, 'vdsm-reg', 'start'])
                ButtonChoiceWindow(self.ncs.screen,
                                   "RHEV-M Configuration",
                                   "RHEV-M Configuration Successfully Updated",
                                   buttons=['Ok'])
                self.ncs.reset_screen_colors()
                return True
            else:
                ButtonChoiceWindow(self.ncs.screen,
                                   "RHEV-M Configuration",
                                   "RHEV-M Configuration Failed",
                                   buttons=['Ok'])
                self.ncs.reset_screen_colors()
                return False

    def valid_rhevm_server_callback(self):
        if not is_valid_host_or_ip(self.rhevm_server.value()):
            self.ncs.screen.setColor("BUTTON", "black", "red")
            self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
            ButtonChoiceWindow(self.ncs.screen,
                               "Configuration Check",
                               "Invalid RHEV-M Hostname or Address",
                               buttons=['Ok'])
            self.ncs.reset_screen_colors()

    def valid_rhevm_server_port_callback(self):
        if not is_valid_port(self.rhevm_server_port.value()):
            self.ncs.screen.setColor("BUTTON", "black", "red")
            self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
            ButtonChoiceWindow(self.ncs.screen,
                               "Configuration Check",
                               "Invalid RHEV-M Server Port",
                               buttons=['Ok'])
            self.ncs.reset_screen_colors()
Beispiel #9
0
class Plugin(PluginBase):
    """Plugin for oVirt Engine configuration.
    """

    def __init__(self, ncs):
        PluginBase.__init__(self, "oVirt Engine", ncs)

    def form(self):
        elements = Grid(2, 8)
        is_network_up = network_up()
        if is_network_up:
            header_message = "oVirt Engine Configuration"
        else:
            header_message = "Network Down, oVirt Engine Configuration Disabled"
        heading = Label(header_message)
        self.ncs.screen.setColor(customColorset(1), "black", "magenta")
        heading.setColors(customColorset(1))
        elements.setField(heading, 0, 0, anchorLeft = 1)
        rhevm_grid = Grid(2,2)
        rhevm_grid.setField(Label("Management Server:"), 0, 0, anchorLeft = 1)
        self.rhevm_server = Entry(25, "")
        self.rhevm_server.setCallback(self.valid_rhevm_server_callback)
        rhevm_grid.setField(Label("Management Server Port:"), 0, 1, anchorLeft = 1)
        self.rhevm_server_port = Entry(6, "", scroll = 0)
        self.rhevm_server_port.setCallback(self.valid_rhevm_server_port_callback)
        rhevm_grid.setField(self.rhevm_server, 1, 0, anchorLeft = 1, padding=(2, 0, 0, 1))
        rhevm_grid.setField(self.rhevm_server_port, 1, 1, anchorLeft = 1, padding=(2, 0, 0, 1))
        elements.setField(rhevm_grid, 0, 1, anchorLeft = 1, padding = (0,0,0,0))
        elements.setField(Label(""), 0, 2, anchorLeft = 1)
        self.verify_rhevm_cert = Checkbox("Connect to oVirt Engine and Validate Certificate", isOn=True)
        elements.setField(self.verify_rhevm_cert, 0, 3, anchorLeft = 1, padding = (0,0,0,0))
        elements.setField(Label(""), 0, 4, anchorLeft = 1)

        elements.setField(Label("Set oVirt Engine Admin Password"), 0, 5, anchorLeft = 1)
        pw_elements = Grid(3,3)

        pw_elements.setField(Label("Password: "******"Confirm Password: "******"", wrap=1)

        elements.setField(pw_elements, 0, 6, anchorLeft=1)
        elements.setField(self.pw_msg, 0, 7, padding = (0,0,0,0))

        inputFields = [self.rhevm_server, self.rhevm_server_port, self.verify_rhevm_cert,
                       self.root_password_1, self.root_password_2]
        if not is_network_up:
            for field in inputFields:
                field.setFlags(FLAG_DISABLED, FLAGS_SET)

        try:
            rhevm_server = get_rhevm_config()
            rhevm_server,rhevm_port = rhevm_server.split(":")
            if rhevm_server.startswith("None"):
                self.rhevm_server.set("")
            else:
                self.rhevm_server.set(rhevm_server)
            self.rhevm_server_port.set(rhevm_port)

        except:
            pass
        return [Label(""), elements]

    def password_check_callback(self):
        resp, msg = password_check(self.root_password_1.value(), self.root_password_2.value())
        self.pw_msg.setText(msg)
        return

    def action(self):
        self.ncs.screen.setColor("BUTTON", "black", "red")
        self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
        if self.root_password_1.value() != "" and self.root_password_2.value() != "" and self.root_password_1.value() == self.root_password_2.value():
            set_password(self.root_password_1.value(), "root")
            augtool("set", "/files/etc/ssh/sshd_config/PasswordAuthentication", "yes")
            dn = file('/dev/null', 'w+')
            subprocess.Popen(['/sbin/service', 'sshd', 'restart'], stdout=dn, stderr=dn)
        if len(self.rhevm_server.value()) > 0:
            deployUtil.nodeCleanup()
            if self.verify_rhevm_cert.selected():
                if deployUtil.getRhevmCert(self.rhevm_server.value(),  self.rhevm_server_port.value()):
                    path, dontCare = deployUtil.certPaths('')
                    fp = deployUtil.generateFingerPrint(path)
                    approval = ButtonChoiceWindow(self.ncs.screen,
                                "Certificate Fingerprint:",
                                fp, buttons = ['Approve', 'Reject'])
                    if 'reject' == approval:
                        ButtonChoiceWindow(self.ncs.screen, "Fingerprint rejected", "oVirt Engine Configuration Failed", buttons = ['Ok'])
                        return False
                    else:
                        ovirt_store_config(path)
                        self.ncs.reset_screen_colors()
                else:
                    ButtonChoiceWindow(self.ncs.screen, "oVirt Engine Configuration", "Failed downloading oVirt Engine certificate", buttons = ['Ok'])
                    self.ncs.reset_screen_colors()
            # Stopping vdsm-reg may fail but its ok - its in the case when the menus are run after installation
            deployUtil._logExec([constants.EXT_SERVICE, 'vdsm-reg', 'stop'])
            if write_vdsm_config(self.rhevm_server.value(), self.rhevm_server_port.value()):
                deployUtil._logExec([constants.EXT_SERVICE, 'vdsm-reg',
                    'start'])
                ButtonChoiceWindow(self.ncs.screen, "oVirt Engine Configuration", "oVirt Engine Configuration Successfully Updated", buttons = ['Ok'])
                self.ncs.reset_screen_colors()
                return True
            else:
                ButtonChoiceWindow(self.ncs.screen, "oVirt Engine Configuration", "oVirt Engine Configuration Failed", buttons = ['Ok'])
                self.ncs.reset_screen_colors()
                return False

    def valid_rhevm_server_callback(self):
        if not is_valid_host_or_ip(self.rhevm_server.value()):
            self.ncs.screen.setColor("BUTTON", "black", "red")
            self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
            ButtonChoiceWindow(self.ncs.screen, "Configuration Check", "Invalid oVirt Engine Hostname or Address", buttons = ['Ok'])
            self.ncs.reset_screen_colors()


    def valid_rhevm_server_port_callback(self):
        if not is_valid_port(self.rhevm_server_port.value()):
            self.ncs.screen.setColor("BUTTON", "black", "red")
            self.ncs.screen.setColor("ACTBUTTON", "blue", "white")
            ButtonChoiceWindow(self.ncs.screen, "Configuration Check", "Invalid oVirt Engine Server Port", buttons = ['Ok'])
            self.ncs.reset_screen_colors()
class AssistantInfoRadioBar(Grid):
    def __init__(self, screen, info):
        """
        @param buttonarray is an array in the form ([radiobutton, widget], ...)
        """
        from snack import RadioGroup, Textbox, Entry, FLAG_DISABLED
        self.group = RadioGroup()
        self.list = []
        self.item = 0
        self.info = info

        Grid.__init__(self, 1, len(info.getSuggestions()) + 6)

        self.setField(Textbox(20, 1, "Default:"),
                      0,
                      0,
                      padding=(0, 0, 0, 0),
                      anchorLeft=1)
        db = self.group.add(info.getDefault(), info.getDefault(), \
                            info.getValue() == info.getDefault())

        #print >> sys.stderr, "default: %s, value %s" %(info.getDefault(), info.getValue())

        db.setCallback(self._hasManualToggled)
        self.setField(db, 0, 1, (0, 0, 0, 0), anchorLeft=1, growx=1)
        #self.setField(dt, 1, self.item)
        self.setField(Textbox(20, 1, "Detected:"),
                      0,
                      2,
                      padding=(0, 0, 0, 0),
                      anchorLeft=1)

        self.item = self.item + 3
        self.list.append(db)
        for value in info.getSuggestions():
            b = self.group.add(value, value, info.getValue() == value)
            b.setCallback(self._hasManualToggled)
            self.setField(b, 0, self.item, (0, 0, 1, 0), anchorLeft=1, growx=1)
            #self.setField(t, 1, self.item)
            self.item = self.item + 1

        self.setField(Textbox(20, 1, "Manual:"),
                      0,
                      self.item,
                      padding=(0, 0, 0, 0),
                      anchorLeft=1)
        self.item = self.item + 1
        self.dm = self.group.add("edit", "manual",
                                 info.getValue() == info.getManual())
        self.dm.setCallback(self._hasManualToggled)
        self.manualentry = Entry(15, info.getManual())
        self.manualentry.setFlags(FLAG_DISABLED,
                                  sense=not (self.dm.selected()))
        self.setField(self.dm,
                      0,
                      self.item, (0, 0, 1, 0),
                      anchorLeft=1,
                      growx=1)
        self.setField(self.manualentry,
                      0,
                      self.item + 1, (0, 0, 1, 0),
                      anchorLeft=1)
        self._hasManualToggled()

    def _hasManualToggled(self):
        from snack import FLAG_DISABLED
        self.manualentry.setFlags(FLAG_DISABLED, sense=self.dm.selected())

    def getSelection(self):
        #print >> sys.stderr, "getSelection"
        if self.group.getSelection() == "manual":
            self.info.setManual(self.manualentry.value())
            return self.manualentry.value()
        return self.group.getSelection()