def satisfying_machine(constraints): for machine in maas_machines: if satisfies(machine, constraints)[0]: maas_machines.remove(machine) return machine return None
def update(self): for cc in self.controller.charm_classes(): if self.machine: if not satisfies(self.machine, cc.constraints)[0] \ or not self.controller.is_assigned(cc, self.machine): self.remove_service_widget(cc) continue if self.unplaced_only: n_units = self.controller.machine_count_for_charm(cc) if n_units == cc.required_num_units() \ and cc not in self.controller.unplaced_services: self.remove_service_widget(cc) continue is_required = self.controller.service_is_required(cc) if self.show_type == 'required': if not is_required: self.remove_service_widget(cc) continue elif self.show_type == 'non-required': if is_required: self.remove_service_widget(cc) continue if not cc.allow_multi_units and \ cc not in self.controller.unplaced_services: self.remove_service_widget(cc) continue sw = self.find_service_widget(cc) if sw is None: sw = self.add_service_widget(cc) sw.update()
def update(self): for cc in self.controller.charm_classes(): if self.machine: if not satisfies(self.machine, cc.constraints)[0] \ or not (self.controller.is_assigned_to(cc, self.machine) or self.controller.is_deployed_to(cc, self.machine)): self.remove_service_widget(cc) continue if self.ignore_assigned and self.assigned_only: raise Exception("Can't both ignore and only show assigned.") if self.ignore_assigned: n = self.controller.assignment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and self.controller.is_assigned(cc): self.remove_service_widget(cc) continue elif self.assigned_only: if not self.controller.is_assigned(cc): self.remove_service_widget(cc) continue if self.ignore_deployed and self.deployed_only: raise Exception("Can't both ignore and only show deployed.") if self.ignore_deployed: n = self.controller.deployment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and self.controller.is_deployed(cc): self.remove_service_widget(cc) continue elif self.deployed_only: if not self.controller.is_deployed(cc): self.remove_service_widget(cc) continue state, _, _ = self.controller.get_charm_state(cc) if self.show_type == 'required': if state != CharmState.REQUIRED: self.remove_service_widget(cc) continue elif self.show_type == 'non-required': if state == CharmState.REQUIRED: self.remove_service_widget(cc) continue if not cc.allow_multi_units and \ not (self.controller.is_assigned(cc) or self.controller.is_deployed(cc)): self.remove_service_widget(cc) continue sw = self.find_service_widget(cc) if sw is None: sw = self.add_service_widget(cc) sw.update()
def update(self): machines = self.controller.machines() for mw in self.machine_widgets: machine = next( (m for m in machines if mw.machine.instance_id == m.instance_id), None) if machine is None: self.remove_machine(mw.machine) n_satisfying_machines = len(machines) def get_placement_filter_label(d): s = "" for atype, al in d.items(): s += " ".join([ "{} {}".format(cc.charm_name, cc.display_name) for cc in al ]) return s for m in machines: if not satisfies(m, self.constraints)[0]: self.remove_machine(m) n_satisfying_machines -= 1 continue assignment_names = "" ad = self.controller.assignments_for_machine(m) assignment_names = get_placement_filter_label(ad) dd = self.controller.deployments_for_machine(m) deployment_names = get_placement_filter_label(dd) filter_label = "{} {} {}".format(m.filter_label(), assignment_names, deployment_names) if self.filter_string != "" and \ self.filter_string not in filter_label: self.remove_machine(m) continue mw = self.find_machine_widget(m) if mw is None: mw = self.add_machine_widget(m) mw.update() self.filter_edit_box.set_info(len(self.machine_widgets), n_satisfying_machines)
def update(self): machines = self.controller.machines() for mw in self.machine_widgets: machine = next((m for m in machines if mw.machine.instance_id == m.instance_id), None) if machine is None: self.remove_machine(mw.machine) n_satisfying_machines = len(machines) def get_placement_filter_label(d): s = "" for atype, al in d.items(): s += " ".join(["{} {}".format(cc.charm_name, cc.display_name) for cc in al]) return s for m in machines: if not satisfies(m, self.constraints)[0]: self.remove_machine(m) n_satisfying_machines -= 1 continue assignment_names = "" ad = self.controller.assignments_for_machine(m) assignment_names = get_placement_filter_label(ad) dd = self.controller.deployments_for_machine(m) deployment_names = get_placement_filter_label(dd) filter_label = "{} {} {}".format(m.filter_label(), assignment_names, deployment_names) if self.filter_string != "" and \ self.filter_string not in filter_label: self.remove_machine(m) continue mw = self.find_machine_widget(m) if mw is None: mw = self.add_machine_widget(m) mw.update() self.filter_edit_box.set_info(len(self.machine_widgets), n_satisfying_machines)
def _do_test(self, cons, nfailures, machine=None): if not machine: machine = self.machine1 sat, failures = satisfies(machine, cons) self.assertEqual(sat, nfailures == 0) self.assertEqual(len(failures), nfailures)
def update(self): def trace(cc, s): if self.trace: log.debug("{}: {} {}".format(self.title, cc, s)) for cc in self.controller.charm_classes(): if self.machine: if not satisfies(self.machine, cc.constraints)[0] \ or not (self.controller.is_assigned_to(cc, self.machine) or self.controller.is_deployed_to(cc, self.machine)): self.remove_service_widget(cc) trace(cc, "removed because machine doesn't match") continue if self.ignore_assigned and self.assigned_only: raise Exception("Can't both ignore and only show assigned.") if self.ignore_assigned: n = self.controller.assignment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and not cc.allow_multi_units \ and self.controller.is_assigned(cc): self.remove_service_widget(cc) trace(cc, "removed because max units are " "assigned") continue elif self.assigned_only: if not self.controller.is_assigned(cc): self.remove_service_widget(cc) trace(cc, "removed because it is not assigned and " "assigned_only is True") continue if self.ignore_deployed and self.deployed_only: raise Exception("Can't both ignore and only show deployed.") if self.ignore_deployed: n = self.controller.deployment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and self.controller.is_deployed(cc): self.remove_service_widget(cc) trace(cc, "removed because the required number of units" " has been deployed") continue elif self.deployed_only: if not self.controller.is_deployed(cc): self.remove_service_widget(cc) continue state, _, _ = self.controller.get_charm_state(cc) if self.show_type == 'required': if state != CharmState.REQUIRED: self.remove_service_widget(cc) continue elif self.show_type == 'non-required': if state == CharmState.REQUIRED: self.remove_service_widget(cc) trace(cc, "removed because show_type is 'non-required' and" "state is REQUIRED.") continue assigned_or_deployed = (self.controller.is_assigned(cc) or self.controller.is_deployed(cc)) if not cc.allow_multi_units and assigned_or_deployed: self.remove_service_widget(cc) trace(cc, "removed because it doesn't allow multiple units" " and is not assigned or deployed.") continue sw = self.find_service_widget(cc) if sw is None: sw = self.add_service_widget(cc) trace(cc, "added widget") sw.update()
def update(self): def trace(cc, s): if self.trace: log.debug("{}: {} {}".format(self.title, cc, s)) for cc in self.controller.charm_classes(): if self.machine: if not satisfies(self.machine, cc.constraints)[0] \ or not (self.controller.is_assigned_to(cc, self.machine) or self.controller.is_deployed_to(cc, self.machine)): self.remove_service_widget(cc) trace(cc, "removed because machine doesn't match") continue if self.ignore_assigned and self.assigned_only: raise Exception("Can't both ignore and only show assigned.") if self.ignore_assigned: n = self.controller.assignment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and not cc.allow_multi_units \ and self.controller.is_assigned(cc): self.remove_service_widget(cc) trace(cc, "removed because max units are " "assigned") continue elif self.assigned_only: if not self.controller.is_assigned(cc): self.remove_service_widget(cc) trace( cc, "removed because it is not assigned and " "assigned_only is True") continue if self.ignore_deployed and self.deployed_only: raise Exception("Can't both ignore and only show deployed.") if self.ignore_deployed: n = self.controller.deployment_machine_count_for_charm(cc) if n == cc.required_num_units() \ and self.controller.is_deployed(cc): self.remove_service_widget(cc) trace( cc, "removed because the required number of units" " has been deployed") continue elif self.deployed_only: if not self.controller.is_deployed(cc): self.remove_service_widget(cc) continue state, _, _ = self.controller.get_charm_state(cc) if self.show_type == 'required': if state != CharmState.REQUIRED: self.remove_service_widget(cc) continue elif self.show_type == 'non-required': if state == CharmState.REQUIRED: self.remove_service_widget(cc) trace( cc, "removed because show_type is 'non-required' and" "state is REQUIRED.") continue assigned_or_deployed = (self.controller.is_assigned(cc) or self.controller.is_deployed(cc)) if not cc.allow_multi_units and assigned_or_deployed: self.remove_service_widget(cc) trace( cc, "removed because it doesn't allow multiple units" " and is not assigned or deployed.") continue sw = self.find_service_widget(cc) if sw is None: sw = self.add_service_widget(cc) trace(cc, "added widget") sw.update()