mirror of
https://github.com/TECHNOFAB11/disko.git
synced 2025-12-11 23:50:05 +01:00
_mount: take an attrset
This commit is contained in:
parent
30642cadbc
commit
7b59532520
1 changed files with 35 additions and 35 deletions
70
types.nix
70
types.nix
|
|
@ -162,12 +162,12 @@ rec {
|
||||||
mount :: types.devices -> str
|
mount :: types.devices -> str
|
||||||
*/
|
*/
|
||||||
mount = devices: let
|
mount = devices: let
|
||||||
fsMounts = diskoLib.deepMergeMap (dev: dev._mount.fs or {}) (flatten (map attrValues (attrValues devices)));
|
fsMounts = diskoLib.deepMergeMap (dev: (dev._mount {}).fs or {}) (flatten (map attrValues (attrValues devices)));
|
||||||
sortedDeviceList = diskoLib.sortDevicesByDependencies ((diskoLib.meta devices).deviceDependencies or {}) devices;
|
sortedDeviceList = diskoLib.sortDevicesByDependencies ((diskoLib.meta devices).deviceDependencies or {}) devices;
|
||||||
in ''
|
in ''
|
||||||
set -efux
|
set -efux
|
||||||
# first create the necessary devices
|
# first create the necessary devices
|
||||||
${concatMapStrings (dev: attrByPath (dev ++ [ "_mount" "dev" ]) "" devices) sortedDeviceList}
|
${concatMapStrings (dev: ((attrByPath (dev ++ [ "_mount" ]) "" devices) {}).dev ) sortedDeviceList}
|
||||||
|
|
||||||
# and then mount the filesystems in alphabetical order
|
# and then mount the filesystems in alphabetical order
|
||||||
# attrValues returns values sorted by name. This is important, because it
|
# attrValues returns values sorted by name. This is important, because it
|
||||||
|
|
@ -314,8 +314,8 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = {
|
default = {}: {
|
||||||
fs.${config.mountpoint} = ''
|
fs.${config.mountpoint} = ''
|
||||||
if ! findmnt ${config.fsType} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
if ! findmnt ${config.fsType} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
||||||
mount -t ${config.fsType} ${config.device} "/mnt${config.mountpoint}" \
|
mount -t ${config.fsType} ${config.device} "/mnt${config.mountpoint}" \
|
||||||
|
|
@ -397,9 +397,9 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
let
|
let
|
||||||
subvolMounts = diskoLib.deepMergeMap (subvol: subvol._mount dev config.mountpoint) (attrValues config.subvolumes);
|
subvolMounts = diskoLib.deepMergeMap (subvol: subvol._mount {inherit dev; parent = config.mountpoint;}) (attrValues config.subvolumes);
|
||||||
in {
|
in {
|
||||||
fs = subvolMounts.fs // optionalAttrs (!isNull config.mountpoint) {
|
fs = subvolMounts.fs // optionalAttrs (!isNull config.mountpoint) {
|
||||||
${config.mountpoint} = ''
|
${config.mountpoint} = ''
|
||||||
|
|
@ -492,8 +492,8 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo (types.functionTo diskoLib.jsonType);
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev: parent: let
|
default = {dev, parent}: let
|
||||||
mountpoint = if (!isNull config.mountpoint) then config.mountpoint
|
mountpoint = if (!isNull config.mountpoint) then config.mountpoint
|
||||||
else if (isNull parent) then config.name
|
else if (isNull parent) then config.name
|
||||||
else null;
|
else null;
|
||||||
|
|
@ -582,7 +582,7 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev: {
|
default = {dev}: {
|
||||||
fs.${config.mountpoint} = ''
|
fs.${config.mountpoint} = ''
|
||||||
if ! findmnt ${dev} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
if ! findmnt ${dev} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
||||||
mount ${dev} "/mnt${config.mountpoint}" \
|
mount ${dev} "/mnt${config.mountpoint}" \
|
||||||
|
|
@ -666,9 +666,9 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
let
|
let
|
||||||
partMounts = diskoLib.deepMergeMap (partition: partition._mount dev) config.partitions;
|
partMounts = diskoLib.deepMergeMap (partition: partition._mount {inherit dev;}) config.partitions;
|
||||||
in {
|
in {
|
||||||
dev = ''
|
dev = ''
|
||||||
${concatMapStrings (x: x.dev or "") (attrValues partMounts)}
|
${concatMapStrings (x: x.dev or "") (attrValues partMounts)}
|
||||||
|
|
@ -780,8 +780,8 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
optionalAttrs (!isNull config.content) (config.content._mount (diskoLib.deviceNumbering dev config.index));
|
optionalAttrs (!isNull config.content) (config.content._mount {dev = (diskoLib.deviceNumbering dev config.index);});
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
_config = mkOption {
|
_config = mkOption {
|
||||||
|
|
@ -834,7 +834,7 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev: {
|
default = {dev}: {
|
||||||
fs.${dev} = ''
|
fs.${dev} = ''
|
||||||
if ! swapon --show | grep -q '^${dev} '; then
|
if ! swapon --show | grep -q '^${dev} '; then
|
||||||
swapon ${dev}
|
swapon ${dev}
|
||||||
|
|
@ -898,7 +898,7 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
{};
|
{};
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
|
|
@ -956,9 +956,9 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = let
|
default = {}: let
|
||||||
lvMounts = diskoLib.deepMergeMap (lv: lv._mount config.name) (attrValues config.lvs);
|
lvMounts = diskoLib.deepMergeMap (lv: lv._mount {vg = config.name;}) (attrValues config.lvs);
|
||||||
in {
|
in {
|
||||||
dev = ''
|
dev = ''
|
||||||
vgchange -a y
|
vgchange -a y
|
||||||
|
|
@ -1041,8 +1041,8 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = vg:
|
default = {vg}:
|
||||||
optionalAttrs (!isNull config.content) (config.content._mount "/dev/${vg}/${config.name}");
|
optionalAttrs (!isNull config.content) (config.content._mount {dev = "/dev/${vg}/${config.name}";});
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
_config = mkOption {
|
_config = mkOption {
|
||||||
|
|
@ -1100,7 +1100,7 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
{};
|
{};
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
|
|
@ -1188,9 +1188,9 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = let
|
default = {}: let
|
||||||
datasetMounts = diskoLib.deepMergeMap (dataset: dataset._mount config.name) (attrValues config.datasets);
|
datasetMounts = diskoLib.deepMergeMap (dataset: dataset._mount {zpool = config.name;}) (attrValues config.datasets);
|
||||||
in {
|
in {
|
||||||
dev = ''
|
dev = ''
|
||||||
zpool list '${config.name}' >/dev/null 2>/dev/null || zpool import '${config.name}'
|
zpool list '${config.name}' >/dev/null 2>/dev/null || zpool import '${config.name}'
|
||||||
|
|
@ -1305,8 +1305,8 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = zpool:
|
default = {zpool}:
|
||||||
optionalAttrs (config.zfs_type == "volume" && !isNull config.content) (config.content._mount "/dev/zvol/${zpool}/${config.name}") //
|
optionalAttrs (config.zfs_type == "volume" && !isNull config.content) (config.content._mount {dev = "/dev/zvol/${zpool}/${config.name}";}) //
|
||||||
optionalAttrs (config.zfs_type == "filesystem" && config.options.mountpoint or "" != "none") { fs.${config.mountpoint} = ''
|
optionalAttrs (config.zfs_type == "filesystem" && config.options.mountpoint or "" != "none") { fs.${config.mountpoint} = ''
|
||||||
if ! findmnt ${zpool}/${config.name} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
if ! findmnt ${zpool}/${config.name} "/mnt${config.mountpoint}" > /dev/null 2>&1; then
|
||||||
mount ${zpool}/${config.name} "/mnt${config.mountpoint}" \
|
mount ${zpool}/${config.name} "/mnt${config.mountpoint}" \
|
||||||
|
|
@ -1394,9 +1394,9 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default =
|
default = {}:
|
||||||
optionalAttrs (!isNull config.content) (config.content._mount "/dev/md/${config.name}");
|
optionalAttrs (!isNull config.content) (config.content._mount {dev = "/dev/md/${config.name}";});
|
||||||
# TODO we probably need to assemble the mdadm somehow
|
# TODO we probably need to assemble the mdadm somehow
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
|
|
@ -1452,7 +1452,7 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
{};
|
{};
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
|
|
@ -1517,9 +1517,9 @@ rec {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = types.functionTo diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default = dev:
|
default = {dev}:
|
||||||
let
|
let
|
||||||
contentMount = config.content._mount "/dev/mapper/${config.name}";
|
contentMount = config.content._mount {dev = "/dev/mapper/${config.name}";};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
dev = ''
|
dev = ''
|
||||||
|
|
@ -1587,9 +1587,9 @@ rec {
|
||||||
_mount = mkOption {
|
_mount = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = diskoLib.jsonType;
|
type = types.functionTo diskoLib.jsonType;
|
||||||
default =
|
default = {}:
|
||||||
optionalAttrs (!isNull config.content) (config.content._mount config.device);
|
optionalAttrs (!isNull config.content) (config.content._mount {dev = config.device;});
|
||||||
description = "Mount script";
|
description = "Mount script";
|
||||||
};
|
};
|
||||||
_config = mkOption {
|
_config = mkOption {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue