return MaterialPageRoute(
fullscreenDialog: false,
settings: context,
- builder: (_) {
+ builder: (context) {
+ final rbloc = Provider.of<PveResourceBloc>(context);
return MultiProvider(
providers: [
Provider<PveNodeOverviewBloc>(
create: (context) => PveNodeOverviewBloc(
apiClient: state.apiClient,
nodeID: nodeID,
- init: PveNodeOverviewState.init(),
+ init: PveNodeOverviewState.init(
+ rbloc.latestState.isStandalone),
)..events.add(UpdateNodeStatus()),
dispose: (context, bloc) => bloc.dispose(),
),
BuiltList<PveNodeServicesModel> get services;
BuiltList<PveNodesAptUpdateModel> get updates;
BuiltList<PveNodesDisksListModel> get disks;
+ bool get standalone;
- bool get allServicesRunning => !services.any((s) => s.state != 'running');
- bool get allDisksHealthy => !disks.any((s) => s.health != 'OK');
+ bool get allServicesRunning => !services.any((s) {
+ if (s.name == 'corosync' && standalone) {
+ return false;
+ }
+ return s.state != 'running';
+ });
PveNodeOverviewState._();
factory PveNodeOverviewState(
[void Function(PveNodeOverviewStateBuilder) updates]) =
_$PveNodeOverviewState;
- factory PveNodeOverviewState.init() => PveNodeOverviewState((b) => b
+ factory PveNodeOverviewState.init(bool standalone) =>
+ PveNodeOverviewState((b) => b
//base
..errorMessage = ''
..isBlank = true
..isLoading = false
..isSuccess = false
- //class
- );
+ //class
+ ..standalone = standalone);
}
PveClusterResourcesModel resourceByID(String id) =>
resources.singleWhere((element) => element.id == id);
+ bool get isStandalone => nodes.length < 2;
+
PveResourceState._();
factory PveResourceState([void Function(PveResourceStateBuilder) updates]) =