def __init__(self, parent): self.name = "Network Setup" self.priority = 5 self.visible = True self.netsettings = dict() self.parent = parent self.screen = None self.log = logging self.log.basicConfig(filename='./fuelmenu.log', level=logging.DEBUG) self.getNetwork() self.gateway = self.get_default_gateway_linux() self.activeiface = sorted(self.netsettings.keys())[0] self.extdhcp = True # UI text self.net_choices = widget.ChoicesGroup(sorted(self.netsettings.keys()), default_value=self.activeiface, fn=self.radioSelectIface) # Placeholders for network settings text self.net_text1 = widget.TextLabel("") self.net_text2 = widget.TextLabel("") self.net_text3 = widget.TextLabel("") self.header_content = [ self.net_choices, self.net_text1, self.net_text2, self.net_text3 ] self.fields = [ "blank", "ifname", "onboot", "bootproto", "ipaddr", "netmask", "gateway" ] self.defaults = \ { "ifname": {"label": "Interface name:", "tooltip": "Interface system identifier", "value": "locked"}, "onboot": {"label": "Enable interface:", "tooltip": "", "type": WidgetType.RADIO, "callback": self.radioSelect}, "bootproto": {"label": "Configuration via DHCP:", "tooltip": "", "type": WidgetType.RADIO, "choices": ["Static", "DHCP"], "callback": self.radioSelect}, "ipaddr": {"label": "IP address:", "tooltip": "Manual IP address (example \ 192.168.1.2)" , "value": ""}, "netmask": {"label": "Netmask:", "tooltip": "Manual netmask (example \ 255.255.255.0)" , "value": "255.255.255.0"}, "gateway": {"label": "Default Gateway:", "tooltip": "Manual gateway to access Internet \ (example 192.168.1.1)" , "value": ""}, }
def __init__(self, parent): self.name = "PXE Setup" self.priority = 20 self.visible = True self.netsettings = dict() self.parent = parent self.getNetwork() self.gateway = self.get_default_gateway_linux() self.activeiface = sorted(self.netsettings.keys())[0] self.parent.managediface = self.activeiface # UI text text1 = "Settings for PXE booting of slave nodes." text2 = "Select the interface where PXE will run:" # Placeholder for network settings text self.net_choices = widget.ChoicesGroup(sorted(self.netsettings.keys()), default_value=self.activeiface, fn=self.radioSelect) self.net_text1 = widget.TextLabel("") self.net_text2 = widget.TextLabel("") self.net_text3 = widget.TextLabel("") self.net_text4 = widget.TextLabel("") self.header_content = [ text1, text2, self.net_choices, self.net_text1, self.net_text2, self.net_text3, self.net_text4 ] self.fields = [ "dynamic_label", "ADMIN_NETWORK/dhcp_pool_start", "ADMIN_NETWORK/dhcp_pool_end", "ADMIN_NETWORK/dhcp_gateway" ] self.defaults = \ { "ADMIN_NETWORK/dhcp_pool_start": {"label": "DHCP Pool Start", "tooltip": "Used for \ defining IPs for hosts and instance public addresses" , "value": "10.0.0.3"}, "ADMIN_NETWORK/dhcp_pool_end": {"label": "DHCP Pool End", "tooltip": "Used for defining \ IPs for hosts and instance public addresses" , "value": "10.0.0.254"}, "ADMIN_NETWORK/dhcp_gateway": {"label": "DHCP Gateway", "tooltip": "Default gateway \ to advertise via DHCP to nodes" , "value": "10.0.0.2"}, "dynamic_label": {"label": "DHCP pool for node discovery:", "tooltip": "", "type": WidgetType.LABEL}, } self.load() self.extdhcp = True self.screen = None
def _create_radiobutton_widget(cls, default_data): label = widget.TextLabel(('editlbl', default_data["label"])) callback = default_data.get("callback", None) choices_list = default_data.get("choices") if not choices_list: choices_list = ["Yes", "No"] choices = widget.ChoicesGroup(choices_list, default_value=choices_list[0], fn=callback) columns = widget.Columns([('weight', 2, label), ('weight', 3, choices)]) # Attach choices rb_group so we can use it later columns.rb_group = choices.rb_group return columns
def screenUI(cls, modobj, headertext, fields, defaults, showallbuttons=False, buttons_visible=True): log.debug("Preparing screen UI for %s" % modobj.name) #Define text labels, text fields, and buttons first header_content = [] for text in headertext: if isinstance(text, str): header_content.append(urwid.Text(text)) else: header_content.append(text) edits = [] toolbar = modobj.parent.footer for key in fields: #Example: key = hostname, label = Hostname, value = fuel-pm if key == "blank": edits.append(blank) elif defaults[key]["value"] == "radio": label = widget.TextLabel(defaults[key]["label"]) if "choices" in defaults[key]: choices_list = defaults[key]["choices"] else: choices_list = ["Yes", "No"] choices = widget.ChoicesGroup(choices_list, default_value="Yes", fn=modobj.radioSelect) columns = widget.Columns([('weight', 2, label), ('weight', 3, choices)]) #Attach choices rb_group so we can use it later columns.rb_group = choices.rb_group edits.append(columns) elif defaults[key]["value"] == "label": edits.append(widget.TextLabel(defaults[key]["label"])) else: ispassword = "******" in key.upper() caption = defaults[key]["label"] default = defaults[key]["value"] tooltip = defaults[key]["tooltip"] edits.append( widget.TextField(key, caption, 23, default, tooltip, toolbar, ispassword=ispassword)) listbox_content = [] listbox_content.extend(header_content) listbox_content.append(blank) listbox_content.extend(edits) listbox_content.append(blank) #Wrap buttons into Columns so it doesn't expand and look ugly if buttons_visible: #Button to check button_check = widget.Button("Check", modobj.check) #Button to revert to previously saved settings button_cancel = widget.Button("Cancel", modobj.cancel) #Button to apply (and check again) button_apply = widget.Button("Apply", modobj.apply) if modobj.parent.globalsave and showallbuttons is False: check_col = widget.Columns([button_check]) else: check_col = widget.Columns([ button_check, button_cancel, button_apply, ('weight', 2, blank) ]) listbox_content.append(check_col) #Add everything into a ListBox and return it listwalker = widget.TabbedListWalker(listbox_content) screen = urwid.ListBox(listwalker) modobj.edits = edits modobj.walker = listwalker modobj.listbox_content = listbox_content return screen