def _refresh_nodes_on_main_thread(self): status = model_status() for name, service in sorted(status['applications'].items()): service_w = ServiceWidget(name, service) for unit in service_w.Units: try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] self.table.addColumns( unit._name, [ ('fixed', 3, getattr(unit_w, 'Icon')), ('fixed', 50, getattr(unit_w, 'Name')), ('fixed', 20, getattr(unit_w, 'AgentStatus')) ] ) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [ ('fixed', 5, Text("")), Color.info_context( unit_w.WorkloadInfo) ], force=True) self.update_ui_state(unit_w, unit._unit)
def refresh_nodes(self): """ Adds services to the view if they don't already exist """ status = model_status() for name, service in sorted(status['applications'].items()): service_w = ServiceWidget(name, service) for unit in service_w.Units: services_list = [] try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] for k, label, width in self.view_columns: if width == 0: services_list.append(getattr(unit_w, k)) else: if not hasattr(unit_w, k): continue services_list.append(('fixed', width, getattr(unit_w, k))) self.table.addColumns(unit._name, services_list) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [ ('fixed', 5, Text("")), Color.info_context( unit_w.WorkloadInfo) ], force=True) self.update_ui_state(unit_w, unit._unit)
def refresh_nodes(self): """ Adds services to the view if they don't already exist """ status = model_status() for name, service in sorted(status['applications'].items()): service_w = ServiceWidget(name, service) for unit in service_w.Units: services_list = [] try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] for k, label, width in self.view_columns: if width == 0: services_list.append(getattr(unit_w, k)) else: if not hasattr(unit_w, k): continue services_list.append( ('fixed', width, getattr(unit_w, k))) self.table.addColumns(unit._name, services_list) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [('fixed', 5, Text("")), Color.info_context(unit_w.WorkloadInfo)], force=True) self.update_ui_state(unit_w, unit._unit)
def refresh_nodes(self, applications): """Adds services to the view if they don't already exist Schedules UI update on main thread to avoid urwid issues with changing listbox state during render. """ for name, service in sorted(applications.items()): service_w = ServiceWidget(name, service) for unit in service_w.Units: try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] self.table.addColumns( unit._name, [ ('fixed', 3, getattr(unit_w, 'Icon')), ('fixed', 50, getattr(unit_w, 'Name')), ('fixed', 20, getattr(unit_w, 'AgentStatus')) ] ) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [ ('fixed', 5, Text("")), Color.info_context( unit_w.WorkloadInfo) ], force=True) self.update_ui_state(unit_w, unit._unit)
def _build_widget(self): if len(self.public_clouds) > 0: self._add_item(Text("Public Clouds")) self._add_item(HR()) for item in self.public_clouds: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self._add_item(Padding.line_break("")) if len(self.custom_clouds) > 0: self._add_item(Text("Your Clouds")) self._add_item(HR()) for item in self.custom_clouds: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self._add_item(Padding.line_break("")) new_clouds = juju.get_compatible_clouds( ['localhost', 'maas', 'vsphere']) if new_clouds: self._add_item(Text("Configure a New Cloud")) self._add_item(HR()) for item in sorted(new_clouds): if item == 'localhost': self._add_item( Color.info_context(menu_btn( label=cloud_types.LOCALHOST, on_press=None), focus_map='disabled_button')) self._add_item( Color.info_context( Padding.center_90( Text("LXD not found, please install and wait " "for this message to disappear:\n\n" " $ sudo snap install lxd\n" " $ /snap/bin/lxd init --auto\n" " $ /snap/bin/lxc network create lxdbr0 " "ipv4.address=auto ipv4.nat=true " "ipv6.address=none ipv6.nat=false ")))) else: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self.pile.focus_position = 2 return self.pile
def _build_widget(self): if len(self.public_clouds) > 0: self._add_item(Text("Public Clouds")) self._add_item(HR()) for item in self.public_clouds: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self._add_item(Padding.line_break("")) if len(self.custom_clouds) > 0: self._add_item(Text("Your Clouds")) self._add_item(HR()) for item in self.custom_clouds: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self._add_item(Padding.line_break("")) new_clouds = juju.get_compatible_clouds( ['localhost', 'maas', 'vsphere']) if new_clouds: self._add_item(Text("Configure a New Cloud")) self._add_item(HR()) for item in sorted(new_clouds): if item == 'localhost': self._add_item( Color.info_context(menu_btn( label=cloud_types.LOCALHOST, on_press=None), focus_map='disabled_button')) self._add_item( Color.info_context( Padding.center_90( Text("LXD not found, please install with " "`sudo snap install lxd && lxd init` " "and wait for this message to disappear.") ))) else: self._add_item( Color.body(menu_btn(label=item, on_press=self.submit), focus_map='menu_button focus')) self.pile.focus_position = 2 return self.pile
def refresh_nodes(self, applications): """Adds services to the view if they don't already exist Schedules UI update on main thread to avoid urwid issues with changing listbox state during render. """ for name, application in sorted(applications.items()): # XXX refactor ubuntui to accept libjuju objects directly service = { 'units': { unit.name: { 'public-address': unit.public_address, 'machine': unit.machine_id, 'agent-status': { 'status': unit.agent_status, 'info': unit.agent_status_message, }, 'workload-status': { 'status': unit.workload_status, 'info': unit.workload_status_message, }, } for unit in application.units } } service_w = ServiceWidget(application.name, service) for unit in service_w.Units: try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] self.table.addColumns( unit._name, [ ('fixed', 3, getattr(unit_w, 'Icon')), ('fixed', 50, getattr(unit_w, 'Name')), ('fixed', 20, getattr(unit_w, 'AgentStatus')) ] ) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [ ('fixed', 5, Text("")), Color.info_context( unit_w.WorkloadInfo) ], force=True) self.update_ui_state(unit_w, unit._unit)
def __init__(self, name, cb, enabled=True, enabled_msg=None, disabled_msg=None): self.name = name self._enabled_widget = Color.body(menu_btn(label=self.name, on_press=cb), focus_map='menu_button focus') self._disabled_widget = Color.info_context(menu_btn(label=name, on_press=None), focus_map='disabled_button') self.enabled_msg = enabled_msg or self.default_enabled_msg self.disabled_msg = disabled_msg or self.default_disabled_msg self._enabled = enabled super().__init__( self._enabled_widget if enabled else self._disabled_widget)
def _refresh_nodes_on_main_thread(self): status = model_status() for name, service in sorted(status['applications'].items()): service_w = ServiceWidget(name, service) for unit in service_w.Units: try: unit_w = self.deployed[unit._name] except: self.deployed[unit._name] = unit unit_w = self.deployed[unit._name] self.table.addColumns( unit._name, [('fixed', 3, getattr(unit_w, 'Icon')), ('fixed', 50, getattr(unit_w, 'Name')), ('fixed', 20, getattr(unit_w, 'AgentStatus'))]) if not hasattr(unit_w, 'WorkloadInfo'): continue self.table.addColumns( unit._name, [('fixed', 5, Text("")), Color.info_context(unit_w.WorkloadInfo)], force=True) self.update_ui_state(unit_w, unit._unit)