Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make boot not required #95

Merged
merged 2 commits into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/apis/storage_devicetree.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ export const getRequiredDeviceSize = ({ requiredSpace }) => {
};

/**
* @returns {Promise} List of all mount points required on the platform
* @returns {Promise} List of mount point constraints for the platform
*/
export const getRequiredMountPoints = () => {
return callViewer("GetRequiredMountPoints", []);
export const getMountPointConstraints = () => {
return callViewer("GetMountPointConstraints", []);
};

/**
Expand Down
15 changes: 7 additions & 8 deletions src/components/AnacondaWizard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import { InstallationProgress } from "./installation/InstallationProgress.jsx";
import { ReviewConfiguration, ReviewConfigurationConfirmModal, getPageProps as getReviewConfigurationProps } from "./review/ReviewConfiguration.jsx";
import { exitGui } from "../helpers/exit.js";
import {
getRequiredMountPoints,
getMountPointConstraints,
} from "../apis/storage_devicetree.js";
import {
applyStorage,
Expand All @@ -57,7 +57,7 @@ const N_ = cockpit.noop;
export const AnacondaWizard = ({ dispatch, storageData, localizationData, runtimeData, onCritFail, title, conf }) => {
const [isFormDisabled, setIsFormDisabled] = useState(false);
const [isFormValid, setIsFormValid] = useState(false);
const [requiredMountPoints, setRequiredMountPoints] = useState();
const [mountPointConstraints, setMountPointConstraints] = useState();
const [reusePartitioning, setReusePartitioning] = useState(false);
const [stepNotification, setStepNotification] = useState();
const [storageEncryption, setStorageEncryption] = useState(getStorageEncryptionState());
Expand All @@ -73,12 +73,11 @@ export const AnacondaWizard = ({ dispatch, storageData, localizationData, runtim
}, [storageData.devices]);

useEffect(() => {
const updateRequiredMountPoints = async () => {
const requiredMountPoints = await getRequiredMountPoints().catch(console.error);

setRequiredMountPoints(requiredMountPoints);
const updateMountPointConstraints = async () => {
const mountPointConstraints = await getMountPointConstraints().catch(console.error);
setMountPointConstraints(mountPointConstraints);
};
updateRequiredMountPoints();
updateMountPointConstraints();
}, []);

useEffect(() => {
Expand Down Expand Up @@ -136,7 +135,7 @@ export const AnacondaWizard = ({ dispatch, storageData, localizationData, runtim
diskSelection: storageData.diskSelection,
dispatch,
partitioningData: storageData.partitioning,
requiredMountPoints,
mountPointConstraints,
reusePartitioning,
setReusePartitioning,
},
Expand Down
60 changes: 31 additions & 29 deletions src/components/storage/MountPointMapping.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ const _ = cockpit.gettext;
* - rows with required mount points
* - rows with mount points already selected by the user
* @param {Array} requests - partitioning requests
* @param {Array} requiredMountPoints - required mount points
* @param {Array} mountPointConstraints - constraints on mount points
* @returns {Array} filtered requests
*/
const getInitialRequests = (requests, requiredMountPoints) => {
const requiredRequests = requiredMountPoints.map((mountPoint, idx) => {
const getInitialRequests = (requests, mountPointConstraints) => {
const constrainedRequests = mountPointConstraints.map((mountPoint, idx) => {
const originalRequest = requests.find(request => request["mount-point"] === mountPoint["mount-point"].v);
const request = ({ "mount-point": mountPoint["mount-point"].v, reformat: mountPoint["mount-point"].v === "/" });

Expand All @@ -80,10 +80,10 @@ const getInitialRequests = (requests, requiredMountPoints) => {

const extraRequests = requests.filter(r => (
r["mount-point"] &&
!requiredMountPoints.find(m => m["mount-point"].v === r["mount-point"])
!mountPointConstraints.find(m => m["mount-point"].v === r["mount-point"])
)) || [];

return [...requiredRequests, ...extraRequests];
return [...constrainedRequests, ...extraRequests];
};

/* Check validity of the requests array
Expand Down Expand Up @@ -179,22 +179,22 @@ const updatePartitioningRequests = ({ requests, newRequests, partitioning }) =>
});
};

const isDeviceMountPointInvalid = (deviceData, requiredMountPoints, request) => {
const isDeviceMountPointInvalid = (deviceData, mountPointConstraints, request) => {
const device = request["device-spec"];
const requiredMountPointData = requiredMountPoints.find(val => val["mount-point"].v === request["mount-point"]);
const constrainedMountPointData = mountPointConstraints.find(val => val["mount-point"].v === request["mount-point"]);

if (!device || !request["mount-point"] || !requiredMountPointData) {
if (!device || !request["mount-point"] || !constrainedMountPointData) {
return [false, ""];
}

// we have constraints for filesystem type for required mount points from the backend) {
if (requiredMountPointData && requiredMountPointData["required-filesystem-type"].v !== "" &&
deviceData[device].formatData.type.v !== requiredMountPointData["required-filesystem-type"].v) {
// we have constraints for filesystem type for required and recommended mount points from the backend) {
if (constrainedMountPointData && constrainedMountPointData["required-filesystem-type"].v !== "" &&
deviceData[device].formatData.type.v !== constrainedMountPointData["required-filesystem-type"].v) {
return [true,
cockpit.format(_("'$0' must be on a device formatted to '$1'"),
request["mount-point"], requiredMountPointData["required-filesystem-type"].v)];
request["mount-point"], constrainedMountPointData["required-filesystem-type"].v)];
}
if (requiredMountPointData && !requiredMountPointData["encryption-allowed"].v &&
if (constrainedMountPointData && !constrainedMountPointData["encryption-allowed"].v &&
deviceData[device].type.v === "luks/dm-crypt") {
return [true,
cockpit.format(_("'$0' filesystem cannot be on an ecnrypted block device"),
Expand All @@ -204,7 +204,7 @@ const isDeviceMountPointInvalid = (deviceData, requiredMountPoints, request) =>
return [false, ""];
};

const MountPointColumn = ({ handleRequestChange, idPrefix, isRequiredMountPoint, request, requests, requestIndex }) => {
const MountPointColumn = ({ handleRequestChange, idPrefix, isRequiredMountPoint, isRecommendedMountPoint, request, requests, requestIndex }) => {
const mountpoint = request["mount-point"] || "";

const [mountPointText, setMountPointText] = useState(mountpoint);
Expand All @@ -220,7 +220,7 @@ const MountPointColumn = ({ handleRequestChange, idPrefix, isRequiredMountPoint,
return (
<Flex direction={{ default: "column" }} spaceItems={{ default: "spaceItemsNone" }}>
<Flex spaceItems={{ default: "spaceItemsMd" }}>
{(isRequiredMountPoint && !duplicatedMountPoint) || swapMountpoint
{((isRequiredMountPoint || isRecommendedMountPoint) && !duplicatedMountPoint) || swapMountpoint
? (
<FlexItem
className="mount-point-mapping__mountpoint-text"
Expand All @@ -237,7 +237,8 @@ const MountPointColumn = ({ handleRequestChange, idPrefix, isRequiredMountPoint,
value={mountPointText}
/>}
{isRequiredMountPoint && <Label color="gold">{_("Required")}</Label>}
{!isRequiredMountPoint && <Label color="purple">{_("Custom")}</Label>}
{!isRequiredMountPoint && isRecommendedMountPoint && <Label color="gold">{_("Recommended")}</Label>}
{!isRequiredMountPoint && !isRecommendedMountPoint && <Label color="purple">{_("Custom")}</Label>}

</Flex>
{mountpoint && duplicatedMountPoint &&
Expand Down Expand Up @@ -300,10 +301,10 @@ const DeviceColumnSelect = ({ deviceData, devices, idPrefix, isRequiredMountPoin
);
};

const DeviceColumn = ({ deviceData, devices, requiredMountPoints, idPrefix, isRequiredMountPoint, handleRequestChange, lockedLUKSDevices, request, requests, requestIndex }) => {
const DeviceColumn = ({ deviceData, devices, mountPointConstraints, idPrefix, isRequiredMountPoint, handleRequestChange, lockedLUKSDevices, request, requests, requestIndex }) => {
const device = request["device-spec"];
const duplicatedDevice = isDuplicateRequestField(requests, "device-spec", device);
const [deviceInvalid, errorMessage] = isDeviceMountPointInvalid(deviceData, requiredMountPoints, request);
const [deviceInvalid, errorMessage] = isDeviceMountPointInvalid(deviceData, mountPointConstraints, request);

return (
<Flex direction={{ default: "column" }} spaceItems={{ default: "spaceItemsNone" }}>
Expand Down Expand Up @@ -394,10 +395,11 @@ const getRequestRow = ({
request,
requestIndex,
requests,
requiredMountPoints,
mountPointConstraints,
}) => {
const columnClassName = idPrefix + "__column";
const isRequiredMountPoint = !!requiredMountPoints.find(val => val["mount-point"].v === request["mount-point"]);
const isRequiredMountPoint = mountPointConstraints.filter(val => val.required.v && val["mount-point"].v === request["mount-point"]).length > 0;
const isRecommendedMountPoint = mountPointConstraints.filter(val => val.recommended.v && val["mount-point"].v === request["mount-point"]).length > 0;
const duplicatedMountPoint = isDuplicateRequestField(requests, "mount-point", request["mount-point"]);
const rowId = idPrefix + "-row-" + (requestIndex + 1);

Expand All @@ -410,6 +412,7 @@ const getRequestRow = ({
handleRequestChange={handleRequestChange}
idPrefix={rowId + "-mountpoint"}
isRequiredMountPoint={isRequiredMountPoint}
isRecommendedMountPoint={isRecommendedMountPoint}
request={request}
requestIndex={requestIndex}
requests={requests}
Expand All @@ -429,7 +432,7 @@ const getRequestRow = ({
request={request}
requestIndex={requestIndex}
requests={requests}
requiredMountPoints={requiredMountPoints}
mountPointConstraints={mountPointConstraints}
/>
),
props: { className: columnClassName }
Expand All @@ -440,7 +443,6 @@ const getRequestRow = ({
deviceData={deviceData}
handleRequestChange={handleRequestChange}
idPrefix={rowId + "-format"}
isRequiredMountPoint={isRequiredMountPoint}
request={request}
requestIndex={requestIndex}
requests={requests}
Expand Down Expand Up @@ -488,7 +490,7 @@ const RequestsTable = ({
setStepNotification,
partitioningDataPath,
requests,
requiredMountPoints,
mountPointConstraints,
setIsFormValid,
}) => {
const currentPartitioning = useRef();
Expand All @@ -505,11 +507,11 @@ const RequestsTable = ({

currentPartitioning.current = partitioningDataPath;

const initialRequests = getInitialRequests(requests, requiredMountPoints);
const initialRequests = getInitialRequests(requests, mountPointConstraints);
setUnappliedRequests(initialRequests);

setIsFormValid(getRequestsValid(initialRequests, deviceData));
}, [deviceData, setIsFormValid, partitioningDataPath, requests, requiredMountPoints]);
}, [deviceData, setIsFormValid, partitioningDataPath, requests, mountPointConstraints]);

const handleRequestChange = useCallback(({ mountPoint, deviceSpec, requestIndex, reformat, remove }) => {
const newRequests = [...unappliedRequests];
Expand Down Expand Up @@ -569,7 +571,7 @@ const RequestsTable = ({
request,
requestIndex: idx,
requests: unappliedRequests,
requiredMountPoints,
mountPointConstraints,
})
))} />
<div>
Expand Down Expand Up @@ -608,7 +610,7 @@ export const MountPointMapping = ({
dispatch,
idPrefix,
partitioningData,
requiredMountPoints,
mountPointConstraints,
reusePartitioning,
setIsFormValid,
setReusePartitioning,
Expand Down Expand Up @@ -654,7 +656,7 @@ export const MountPointMapping = ({
/>
)}
{!showLuksUnlock && (
(isLoadingNewPartitioning || requiredMountPoints === null || !partitioningData?.requests)
(isLoadingNewPartitioning || mountPointConstraints === null || !partitioningData?.requests)
? (
<EmptyStatePanel loading />
)
Expand All @@ -666,7 +668,7 @@ export const MountPointMapping = ({
setStepNotification={setStepNotification}
partitioningDataPath={partitioningData?.path}
requests={partitioningData?.requests}
requiredMountPoints={requiredMountPoints}
mountPointConstraints={mountPointConstraints}
setIsFormValid={setIsFormValid}
/>
))}
Expand Down
Loading
Loading