tripleo-ui/src/js/selectors/stacks.js

91 lines
2.8 KiB
JavaScript

/**
* Copyright 2017 Red Hat Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
import { createSelector } from 'reselect';
import { Map } from 'immutable';
import { Stack } from '../immutableRecords/stacks';
import { stackStates } from '../constants/StacksConstants';
import { getCurrentPlanName } from './plans';
const stacksSelector = state => state.stacks.stacks;
const currentStackEnvironmentSelector = state =>
state.stacks.currentStackEnvironment;
const stackResourcesSelector = state => state.stacks.resources;
const stackResourceDetailsSelector = state => state.stacks.resourceDetails;
/**
* Returns the stack associated with currentPlanName
*/
export const getCurrentStack = createSelector(
[stacksSelector, getCurrentPlanName],
(stacks, currentPlanName) => stacks.get(currentPlanName)
);
/**
* Returns a flag for the deployment progress of the current plan
* (true if the plan is currently being deployed, false it not).
*/
export const getCurrentStackDeploymentInProgress = createSelector(
[stacksSelector, getCurrentPlanName],
(stacks, currentPlanName) =>
[
stackStates.CREATE_IN_PROGRESS,
stackStates.UPDATE_IN_PROGRESS,
stackStates.DELETE_IN_PROGRESS
].includes(stacks.get(currentPlanName, new Stack()).stack_status)
);
/**
* Returns calculated percentage of deployment progress
*/
export const getCurrentStackDeploymentProgress = createSelector(
[stackResourcesSelector],
resources => {
let allResources = resources.size;
if (allResources > 0) {
let completeResources = resources.filter(
r => r.resource_status === 'CREATE_COMPLETE'
).size;
return Math.ceil(completeResources / allResources * 100);
}
return 0;
}
);
/**
* Returns a Map containing the overcloud information.
*/
export const getOvercloudInfo = createSelector(
[
currentStackEnvironmentSelector,
getCurrentPlanName,
stackResourceDetailsSelector
],
(currentStackEnvironment, currentPlanName, stackResourceDetails) => {
const adminPassword = currentStackEnvironment.getIn([
'parameter_defaults',
'AdminPassword'
]);
const ipAddress = stackResourceDetails.getIn([
'PublicVirtualIP',
'attributes',
'ip_address'
]);
return Map({ ipAddress, adminPassword });
}
);